api: add event slug filter in user bookings list (#60024)
This commit is contained in:
parent
786b0e03b3
commit
014dc4624e
|
@ -1872,6 +1872,7 @@ subscription = SubscriptionAPI.as_view()
|
|||
|
||||
class BookingFilter(filters.FilterSet):
|
||||
agenda = filters.CharFilter(field_name='event__agenda__slug', lookup_expr='exact')
|
||||
event = filters.CharFilter(method='filter_event')
|
||||
category = filters.CharFilter(field_name='event__agenda__category__slug', lookup_expr='exact')
|
||||
date_start = filters.DateFilter(field_name='event__start_datetime', lookup_expr='gte')
|
||||
date_end = filters.DateFilter(field_name='event__start_datetime', method='filter_date_end')
|
||||
|
@ -1881,6 +1882,10 @@ class BookingFilter(filters.FilterSet):
|
|||
lookup = '__'.join([name, 'lt'])
|
||||
return queryset.filter(**{lookup: value + datetime.timedelta(days=1)})
|
||||
|
||||
def filter_event(self, queryset, name, value):
|
||||
# we want to include bookings of event recurrences
|
||||
return queryset.filter(Q(event__slug=value) | Q(event__primary_event__slug=value))
|
||||
|
||||
class Meta:
|
||||
model = Booking
|
||||
fields = [
|
||||
|
|
|
@ -13,6 +13,7 @@ from chrono.agendas.models import (
|
|||
Agenda,
|
||||
Booking,
|
||||
Category,
|
||||
Desk,
|
||||
Event,
|
||||
MeetingType,
|
||||
)
|
||||
|
@ -367,6 +368,48 @@ def test_bookings_api_filter_in_waiting_list(app, user):
|
|||
assert resp.json['data'][0]['id'] == booking_waiting_list.id
|
||||
|
||||
|
||||
@pytest.mark.freeze_time('2021-05-06 14:00')
|
||||
def test_bookings_api_filter_event(app, user):
|
||||
agenda = Agenda.objects.create(label='Foo bar')
|
||||
Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
|
||||
normal_event = Event.objects.create(slug='normal_event', agenda=agenda, start_datetime=now(), places=10)
|
||||
recurring_event = Event.objects.create(
|
||||
slug='recurring-event',
|
||||
start_datetime=now(),
|
||||
recurrence_days=list(range(7)),
|
||||
places=2,
|
||||
waiting_list_places=1,
|
||||
agenda=agenda,
|
||||
recurrence_end_date=now() + datetime.timedelta(days=30),
|
||||
)
|
||||
recurring_event.create_all_recurrences()
|
||||
|
||||
Booking.objects.create(event=normal_event, user_external_id='42')
|
||||
for recurrence in recurring_event.recurrences.all()[:5]:
|
||||
Booking.objects.create(event=recurrence, user_external_id='42')
|
||||
|
||||
resp = app.get('/api/bookings/', params={'user_external_id': '42'})
|
||||
assert resp.json['err'] == 0
|
||||
assert len(resp.json['data']) == 6
|
||||
|
||||
resp = app.get('/api/bookings/', params={'user_external_id': '42', 'event': normal_event.slug})
|
||||
assert resp.json['err'] == 0
|
||||
assert len(resp.json['data']) == 1
|
||||
assert resp.json['data'][0]['event']['slug'] == normal_event.slug
|
||||
|
||||
resp = app.get('/api/bookings/', params={'user_external_id': '42', 'event': recurring_event.slug})
|
||||
assert resp.json['err'] == 0
|
||||
assert len(resp.json['data']) == 5
|
||||
slugs = [booking['event']['slug'] for booking in resp.json['data']]
|
||||
assert slugs == [
|
||||
'recurring-event--2021-05-06-1600',
|
||||
'recurring-event--2021-05-07-1600',
|
||||
'recurring-event--2021-05-08-1600',
|
||||
'recurring-event--2021-05-09-1600',
|
||||
'recurring-event--2021-05-10-1600',
|
||||
]
|
||||
|
||||
|
||||
@pytest.mark.parametrize('flag', [True, False, None])
|
||||
def test_booking_api_present(app, user, flag):
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='events')
|
||||
|
|
Loading…
Reference in New Issue