api: order desks by identifier (#48065)

This commit is contained in:
Emmanuel Cazenave 2020-10-27 15:10:19 +01:00
parent 88ae9d52ef
commit 3617c3ff05
2 changed files with 95 additions and 1 deletions

View File

@ -136,7 +136,7 @@ def get_all_slots(base_agenda, meeting_type, resources=None, unique=False):
)
for time_period_desk, time_period_exceptions in itertools.groupby(
TimePeriodException.objects.filter(desk__agenda__in=agendas).order_by(
'desk', 'start_datetime', 'end_datetime'
'desk_id', 'start_datetime', 'end_datetime'
),
key=lambda time_period: time_period.desk,
)

View File

@ -3586,6 +3586,100 @@ def test_virtual_agendas_meetings_datetimes_api(app, virtual_meetings_agenda):
assert len(resp.json['data']) == 3
def test_virtual_agendas_meetings_datetimes_api_with_similar_desk(app):
agenda_foo = Agenda.objects.create(
label=u'Agenda Foo', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=3
)
meeting_type_foo = MeetingType.objects.create(agenda=agenda_foo, label='Meeting Type', duration=30)
test_1st_weekday = (now()).weekday() + 1 % 7
test_2nd_weekday = localtime(now()).weekday() + 2 % 7
test_3rd_weekday = (now()).weekday() + 3 % 7
desk_foo = Desk.objects.create(agenda=agenda_foo, label='Desk 1')
TimePeriod.objects.create(
weekday=test_1st_weekday,
start_time=datetime.time(10, 0),
end_time=datetime.time(12, 0),
desk=desk_foo,
)
TimePeriod.objects.create(
weekday=test_2nd_weekday,
start_time=datetime.time(10, 0),
end_time=datetime.time(12, 0),
desk=desk_foo,
)
TimePeriod.objects.create(
weekday=test_3rd_weekday,
start_time=datetime.time(10, 0),
end_time=datetime.time(12, 0),
desk=desk_foo,
)
agenda_bar = Agenda.objects.create(
label=u'Agenda Bar', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=3
)
meeting_type_bar = MeetingType.objects.create(agenda=agenda_bar, label='Meeting Type', duration=30)
desk_bar = Desk.objects.create(agenda=agenda_bar, label='Desk 1')
TimePeriod.objects.create(
weekday=test_1st_weekday,
start_time=datetime.time(10, 0),
end_time=datetime.time(12, 0),
desk=desk_bar,
)
TimePeriod.objects.create(
weekday=test_2nd_weekday,
start_time=datetime.time(10, 0),
end_time=datetime.time(12, 0),
desk=desk_bar,
)
TimePeriod.objects.create(
weekday=test_3rd_weekday,
start_time=datetime.time(10, 0),
end_time=datetime.time(12, 0),
desk=desk_bar,
)
virtual_agenda = Agenda.objects.create(
label=u'Agenda Virtual', kind='virtual', minimal_booking_delay=1, maximal_booking_delay=3
)
VirtualMember.objects.create(virtual_agenda=virtual_agenda, real_agenda=agenda_foo)
VirtualMember.objects.create(virtual_agenda=virtual_agenda, real_agenda=agenda_bar)
# 4 slots each day * 3 days
foo_api_url = '/api/agenda/%s/meetings/%s/datetimes/' % (agenda_foo.slug, meeting_type_bar.slug)
resp = app.get(foo_api_url)
assert len(resp.json['data']) == 12
# same thing bar agenda
bar_api_url = '/api/agenda/%s/meetings/%s/datetimes/' % (agenda_foo.slug, meeting_type_bar.slug)
resp = app.get(bar_api_url)
assert len(resp.json['data']) == 12
# same thing on the virtual agenda
virtual_api_url = '/api/agenda/%s/meetings/%s/datetimes/' % (virtual_agenda.slug, meeting_type_bar.slug)
resp = app.get(virtual_api_url)
assert len(resp.json['data']) == 12
# exclude first day
start = (now() + datetime.timedelta(days=1)).replace(hour=0, minute=0, second=0, microsecond=0)
end = (now() + datetime.timedelta(days=1)).replace(hour=23, minute=59, second=59, microsecond=0)
TimePeriodException.objects.create(start_datetime=start, end_datetime=end, desk=desk_foo)
TimePeriodException.objects.create(start_datetime=start, end_datetime=end, desk=desk_bar)
# exclude second day
start = (now() + datetime.timedelta(days=2)).replace(hour=0, minute=0, second=0, microsecond=0)
end = (now() + datetime.timedelta(days=2)).replace(hour=23, minute=59, second=59, microsecond=0)
TimePeriodException.objects.create(start_datetime=start, end_datetime=end, desk=desk_foo)
TimePeriodException.objects.create(start_datetime=start, end_datetime=end, desk=desk_bar)
# 4 slots each day * 1 day
resp = app.get(foo_api_url)
assert len(resp.json['data']) == 4
# same thing bar agenda
resp = app.get(bar_api_url)
assert len(resp.json['data']) == 4
# same thing on the virtual agenda
resp = app.get(virtual_api_url)
assert len(resp.json['data']) == 4
def test_virtual_agendas_meetings_datetimes_delays_api(app, mock_now):
foo_agenda = Agenda.objects.create(label='Foo Meeting', kind='meetings', maximal_booking_delay=7)
MeetingType.objects.create(agenda=foo_agenda, label='Meeting Type', duration=30)