api: hide disabled slots if requested (#51160)
This commit is contained in:
parent
07f2af930b
commit
bf10ddf860
|
@ -628,6 +628,9 @@ class Datetimes(APIView):
|
|||
excluded_user_external_id=user_external_id,
|
||||
)
|
||||
|
||||
if request.GET.get('hide_disabled'):
|
||||
entries = [e for e in entries if not is_event_disabled(e, min_places)]
|
||||
|
||||
response = {
|
||||
'data': [get_event_detail(request, x, agenda=agenda, min_places=min_places) for x in entries],
|
||||
'meta': get_events_meta_detail(request, entries, agenda=agenda, min_places=min_places),
|
||||
|
@ -711,6 +714,9 @@ class MeetingDatetimes(APIView):
|
|||
first_bookable_slot = None
|
||||
data = []
|
||||
for slot in generator_of_unique_slots:
|
||||
if request.GET.get('hide_disabled') and slot.full:
|
||||
continue
|
||||
|
||||
# Make virtual id for a slot, combining meeting_type.id and
|
||||
# iso-format of date and time.
|
||||
# (SharedTimePeriod.get_time_slots() generate datetime in fixed local timezone,
|
||||
|
|
|
@ -585,6 +585,26 @@ def test_datetimes_api_exclude_slots(app):
|
|||
assert resp.json['data'][0]['disabled'] is True
|
||||
|
||||
|
||||
def test_datetimes_api_hide_disabled(app):
|
||||
agenda = Agenda.objects.create(
|
||||
label='Foo bar', kind='events', minimal_booking_delay=0, maximal_booking_delay=7
|
||||
)
|
||||
event = Event.objects.create(
|
||||
slug='event-slug',
|
||||
start_datetime=now() + datetime.timedelta(days=3),
|
||||
places=1,
|
||||
agenda=agenda,
|
||||
)
|
||||
Booking.objects.create(event=event)
|
||||
|
||||
resp = app.get('/api/agenda/%s/datetimes/' % agenda.slug)
|
||||
assert resp.json['data'][0]['id'] == 'event-slug'
|
||||
assert resp.json['data'][0]['disabled'] is True
|
||||
|
||||
resp = app.get('/api/agenda/%s/datetimes/' % agenda.slug, params={'hide_disabled': True})
|
||||
assert resp.json['data'] == []
|
||||
|
||||
|
||||
def test_datetimes_api_meetings_agenda(app, meetings_agenda):
|
||||
meeting_type = MeetingType.objects.get(agenda=meetings_agenda)
|
||||
api_url = '/api/agenda/%s/meetings/%s/datetimes/' % (meeting_type.agenda.slug, meeting_type.slug)
|
||||
|
@ -969,7 +989,6 @@ def test_datetimes_api_meetings_agenda_short_time_periods(app, meetings_agenda,
|
|||
|
||||
default_desk, _ = Desk.objects.get_or_create(agenda=meetings_agenda, slug='desk-1')
|
||||
meeting_type = MeetingType.objects.get(agenda=meetings_agenda)
|
||||
api_url = '/api/agenda/%s/meetings/%s/datetimes/' % (meeting_type.agenda.slug, meeting_type.slug)
|
||||
|
||||
# test with short time periods
|
||||
TimePeriod.objects.filter(desk=default_desk).delete()
|
||||
|
@ -1068,6 +1087,40 @@ def test_datetimes_api_meetings_agenda_exclude_slots(app):
|
|||
assert resp.json['meta']['first_bookable_slot']['id'] == 'foo-bar:2021-02-26-0930'
|
||||
|
||||
|
||||
@pytest.mark.freeze_time('2021-03-15')
|
||||
def test_datetimes_api_meetings_agenda_hide_disabled(app):
|
||||
agenda = Agenda.objects.create(
|
||||
label='Agenda', kind='meetings', minimal_booking_delay=0, maximal_booking_delay=10
|
||||
)
|
||||
desk = Desk.objects.create(agenda=agenda, slug='desk')
|
||||
meeting_type = MeetingType.objects.create(agenda=agenda, slug='foo-bar', duration=60)
|
||||
start_date = now() + datetime.timedelta(days=3)
|
||||
TimePeriod.objects.create(
|
||||
weekday=start_date.weekday(),
|
||||
start_time=datetime.time(9, 0),
|
||||
end_time=datetime.time(10, 00),
|
||||
desk=desk,
|
||||
)
|
||||
event = Event.objects.create(
|
||||
agenda=agenda,
|
||||
meeting_type=meeting_type,
|
||||
places=1,
|
||||
start_datetime=localtime(start_date).replace(hour=9, minute=0),
|
||||
desk=desk,
|
||||
)
|
||||
Booking.objects.create(event=event)
|
||||
|
||||
resp = app.get('/api/agenda/%s/meetings/%s/datetimes/' % (agenda.slug, meeting_type.slug))
|
||||
assert resp.json['data'][0]['id'] == 'foo-bar:2021-03-18-0900'
|
||||
assert resp.json['data'][0]['disabled'] is True
|
||||
|
||||
resp = app.get(
|
||||
'/api/agenda/%s/meetings/%s/datetimes/' % (agenda.slug, meeting_type.slug),
|
||||
params={'hide_disabled': True},
|
||||
)
|
||||
assert resp.json['data'] == []
|
||||
|
||||
|
||||
def test_booking_api(app, some_data, user):
|
||||
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
||||
event = [x for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()][0]
|
||||
|
|
Loading…
Reference in New Issue