api: sort events by start time in recurring events list (#60461)
This commit is contained in:
parent
39f78e0cc2
commit
4c66e5a303
|
@ -1110,6 +1110,7 @@ class RecurringEventsList(APIView):
|
|||
events.sort(
|
||||
key=lambda event: (
|
||||
event.day if data.get('sort') == 'day' else event.start_datetime,
|
||||
event.start_datetime.time(),
|
||||
agenda_querystring_indexes[event.agenda.slug],
|
||||
event.slug,
|
||||
)
|
||||
|
@ -1120,6 +1121,7 @@ class RecurringEventsList(APIView):
|
|||
events.sort(
|
||||
key=lambda event: (
|
||||
event.day if data.get('sort') == 'day' else event.start_datetime,
|
||||
event.start_datetime.time(),
|
||||
category_querystring_indexes[event.agenda.category.slug] if sort_by_category else None,
|
||||
event.agenda.slug,
|
||||
event.slug,
|
||||
|
|
|
@ -1440,10 +1440,37 @@ def test_recurring_events_api_list(app, freezer):
|
|||
assert resp.json['err'] == 1
|
||||
assert resp.json['errors']['sort'][0] == '"invalid" is not a valid choice.'
|
||||
|
||||
Event.objects.create(
|
||||
label='New event one hour before',
|
||||
slug='one-hour-before',
|
||||
start_datetime=now() - datetime.timedelta(hours=1),
|
||||
recurrence_days=[3], # Thursday
|
||||
places=2,
|
||||
agenda=agenda,
|
||||
recurrence_end_date=now() + datetime.timedelta(days=30),
|
||||
)
|
||||
Event.objects.create(
|
||||
label='New event two hours before but one week later',
|
||||
slug='two-hours-before',
|
||||
start_datetime=now() + datetime.timedelta(days=6, hours=22),
|
||||
recurrence_days=[3], # Thursday
|
||||
places=2,
|
||||
agenda=agenda,
|
||||
recurrence_end_date=now() + datetime.timedelta(days=30),
|
||||
)
|
||||
resp = app.get('/api/agendas/recurring-events/?agendas=%s&sort=day' % agenda.slug)
|
||||
assert len(resp.json['data']) == 6
|
||||
assert resp.json['data'][0]['id'] == 'foo-bar@example-event:0'
|
||||
assert resp.json['data'][1]['id'] == 'foo-bar@other:1'
|
||||
assert resp.json['data'][2]['id'] == 'foo-bar@two-hours-before:3'
|
||||
assert resp.json['data'][3]['id'] == 'foo-bar@one-hour-before:3'
|
||||
assert resp.json['data'][4]['id'] == 'foo-bar@example-event:3'
|
||||
assert resp.json['data'][5]['id'] == 'foo-bar@example-event:4'
|
||||
|
||||
event.publication_datetime = now() + datetime.timedelta(days=2)
|
||||
event.save()
|
||||
resp = app.get('/api/agendas/recurring-events/?agendas=%s' % agenda.slug)
|
||||
assert len(resp.json['data']) == 1
|
||||
assert len(resp.json['data']) == 3
|
||||
|
||||
freezer.move_to(event.recurrence_end_date)
|
||||
resp = app.get('/api/agendas/recurring-events/?agendas=%s' % agenda.slug)
|
||||
|
|
Loading…
Reference in New Issue