95 lines
4.4 KiB
Python
95 lines
4.4 KiB
Python
import datetime
|
|
import pytest
|
|
|
|
from django.utils.timezone import make_aware
|
|
|
|
from chrono.agendas.models import Agenda, TimePeriod, MeetingType, Desk
|
|
|
|
pytestmark = pytest.mark.django_db
|
|
|
|
|
|
def test_timeperiod_time_slots():
|
|
agenda = Agenda(label=u'Foo bar', slug='bar')
|
|
agenda.save()
|
|
desk = Desk.objects.create(label='Desk 1', agenda=agenda)
|
|
timeperiod = TimePeriod(desk=desk, weekday=0,
|
|
start_time=datetime.time(9, 0),
|
|
end_time=datetime.time(12, 0))
|
|
events = timeperiod.get_time_slots(
|
|
min_datetime=make_aware(datetime.datetime(2016, 9, 1)),
|
|
max_datetime=make_aware(datetime.datetime(2016, 10, 1)),
|
|
meeting_type=MeetingType(duration=60))
|
|
events = list(sorted(events, key=lambda x: x.start_datetime))
|
|
assert events[0].start_datetime.timetuple()[:5] == (2016, 9, 5, 9, 0)
|
|
assert events[1].start_datetime.timetuple()[:5] == (2016, 9, 5, 10, 0)
|
|
assert events[2].start_datetime.timetuple()[:5] == (2016, 9, 5, 11, 0)
|
|
assert events[3].start_datetime.timetuple()[:5] == (2016, 9, 12, 9, 0)
|
|
assert events[4].start_datetime.timetuple()[:5] == (2016, 9, 12, 10, 0)
|
|
assert events[-1].start_datetime.timetuple()[:5] == (2016, 9, 26, 11, 0)
|
|
assert len(events) == 12
|
|
|
|
# another start before the timeperiod
|
|
timeperiod = TimePeriod(desk=desk, weekday=1,
|
|
start_time=datetime.time(9, 0),
|
|
end_time=datetime.time(12, 0))
|
|
events = timeperiod.get_time_slots(
|
|
min_datetime=make_aware(datetime.datetime(2016, 9, 1)),
|
|
max_datetime=make_aware(datetime.datetime(2016, 10, 1)),
|
|
meeting_type=MeetingType(duration=60))
|
|
events = list(sorted(events, key=lambda x: x.start_datetime))
|
|
assert events[0].start_datetime.timetuple()[:5] == (2016, 9, 6, 9, 0)
|
|
assert events[-1].start_datetime.timetuple()[:5] == (2016, 9, 27, 11, 0)
|
|
assert len(events) == 12
|
|
|
|
# a start on the day of the timeperiod
|
|
timeperiod = TimePeriod(desk=desk, weekday=3,
|
|
start_time=datetime.time(9, 0),
|
|
end_time=datetime.time(12, 0))
|
|
events = timeperiod.get_time_slots(
|
|
min_datetime=make_aware(datetime.datetime(2016, 9, 1)),
|
|
max_datetime=make_aware(datetime.datetime(2016, 10, 1)),
|
|
meeting_type=MeetingType(duration=60))
|
|
events = list(sorted(events, key=lambda x: x.start_datetime))
|
|
assert events[0].start_datetime.timetuple()[:5] == (2016, 9, 1, 9, 0)
|
|
assert events[-1].start_datetime.timetuple()[:5] == (2016, 9, 29, 11, 0)
|
|
assert len(events) == 15
|
|
|
|
# a start after the day of the timeperiod
|
|
timeperiod = TimePeriod(desk=desk, weekday=4,
|
|
start_time=datetime.time(9, 0),
|
|
end_time=datetime.time(12, 0))
|
|
events = timeperiod.get_time_slots(
|
|
min_datetime=make_aware(datetime.datetime(2016, 9, 1)),
|
|
max_datetime=make_aware(datetime.datetime(2016, 10, 1)),
|
|
meeting_type=MeetingType(duration=60))
|
|
events = list(sorted(events, key=lambda x: x.start_datetime))
|
|
assert events[0].start_datetime.timetuple()[:5] == (2016, 9, 2, 9, 0)
|
|
assert events[-1].start_datetime.timetuple()[:5] == (2016, 9, 30, 11, 0)
|
|
assert len(events) == 15
|
|
|
|
# another start after the day of the timeperiod
|
|
timeperiod = TimePeriod(desk=desk, weekday=5,
|
|
start_time=datetime.time(9, 0),
|
|
end_time=datetime.time(12, 0))
|
|
events = timeperiod.get_time_slots(
|
|
min_datetime=make_aware(datetime.datetime(2016, 9, 1)),
|
|
max_datetime=make_aware(datetime.datetime(2016, 10, 1)),
|
|
meeting_type=MeetingType(duration=60))
|
|
events = list(sorted(events, key=lambda x: x.start_datetime))
|
|
assert events[0].start_datetime.timetuple()[:5] == (2016, 9, 3, 9, 0)
|
|
assert events[-1].start_datetime.timetuple()[:5] == (2016, 9, 24, 11, 0)
|
|
assert len(events) == 12
|
|
|
|
# shorter duration -> double the events
|
|
timeperiod = TimePeriod(desk=desk, weekday=5,
|
|
start_time=datetime.time(9, 0),
|
|
end_time=datetime.time(12, 0))
|
|
events = timeperiod.get_time_slots(
|
|
min_datetime=make_aware(datetime.datetime(2016, 9, 1)),
|
|
max_datetime=make_aware(datetime.datetime(2016, 10, 1)),
|
|
meeting_type=MeetingType(duration=30))
|
|
events = list(sorted(events, key=lambda x: x.start_datetime))
|
|
assert events[0].start_datetime.timetuple()[:5] == (2016, 9, 3, 9, 0)
|
|
assert events[-1].start_datetime.timetuple()[:5] == (2016, 9, 24, 11, 30)
|
|
assert len(events) == 24
|