tests: add test on user_external_id exclusion between agendas of different kind or timeperiod (#75587)

This commit is contained in:
Benjamin Dauvergne 2023-03-20 11:02:27 +01:00
parent be3eedc3fe
commit 07f996ea76
1 changed files with 67 additions and 0 deletions

View File

@ -2550,3 +2550,70 @@ def test_fillslot_recurring_event_booking_forbidden(app, user):
resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda.slug, event.slug))
assert resp.json['err'] == 1
assert resp.json['err_class'] == 'event is recurrent'
# monday 15th march at 12:00 CEST
@pytest.mark.freeze_time('2021-03-15T12:00:00+01:00')
def test_user_external_id(app, user):
user_external_id = 'foobar'
meeting_agenda_1 = Agenda.objects.create(
label='Meeting agenda', slug='mt1', kind='meetings', minimal_booking_delay=0
)
desk = Desk.objects.create(agenda=meeting_agenda_1, slug='desk')
meeting_type = MeetingType.objects.create(agenda=meeting_agenda_1, slug='mtt')
TimePeriod.objects.create(
weekday=0, start_time=datetime.time(9, 0), end_time=datetime.time(17, 00), desk=desk
)
meeting_agenda_2 = meeting_agenda_1.duplicate()
meeting_agenda_2.maximal_booking_delay = 20
meeting_agenda_2.save()
meeting_agenda_3 = meeting_agenda_1.duplicate()
meeting_agenda_3.maximal_booking_delay = 30
meeting_agenda_3.save()
virtual_agenda = Agenda.objects.create(label='Virtual Agenda', kind='virtual')
virtual_agenda.real_agendas.add(meeting_agenda_1, meeting_agenda_2, meeting_agenda_3)
meeting_agenda_1_datetimes_url = f'/api/agenda/{meeting_agenda_1.slug}/meetings/{meeting_type.slug}/datetimes/?user_external_id={user_external_id}'
meeting_agenda_2_datetimes_url = f'/api/agenda/{meeting_agenda_2.slug}/meetings/{meeting_type.slug}/datetimes/?user_external_id={user_external_id}'
meeting_agenda_3_datetimes_url = f'/api/agenda/{meeting_agenda_3.slug}/meetings/{meeting_type.slug}/datetimes/?user_external_id={user_external_id}'
virtual_agenda_datetimes_url = f'/api/agenda/{virtual_agenda.slug}/meetings/{meeting_type.slug}/datetimes/?user_external_id={user_external_id}'
today_at_15 = localtime(now()).replace(hour=15, minute=0)
# check all slots are free
resp = app.get(virtual_agenda_datetimes_url)
assert not any(x['disabled'] for x in resp.json['data'])
resp = app.get(meeting_agenda_1_datetimes_url)
assert not any(x['disabled'] for x in resp.json['data'])
resp = app.get(meeting_agenda_2_datetimes_url)
assert not any(x['disabled'] for x in resp.json['data'])
resp = app.get(meeting_agenda_3_datetimes_url)
assert not any(x['disabled'] for x in resp.json['data'])
for agenda in virtual_agenda.get_real_agendas():
meeting_event = Event.objects.create(
label='Event',
slug='meeting1',
start_datetime=today_at_15,
agenda=agenda,
places=1,
meeting_type=agenda.meetingtype_set.all()[0],
desk=agenda.desk_set.all()[0],
)
Booking.objects.create(event=meeting_event, user_external_id=user_external_id)
# now some slots are disabled
resp = app.get(virtual_agenda_datetimes_url)
assert any(x['disabled'] for x in resp.json['data'])
agenda_datetimes_url = f'/api/agenda/{agenda.slug}/meetings/{meeting_type.slug}/datetimes/?user_external_id={user_external_id}'
resp = app.get(agenda_datetimes_url)
assert any(x['disabled'] for x in resp.json['data'])
for other_agenda in virtual_agenda.get_real_agendas():
if other_agenda == agenda:
continue
other_agenda_datetimes_url = f'/api/agenda/{other_agenda.slug}/meetings/{meeting_type.slug}/datetimes/?user_external_id={user_external_id}'
resp = app.get(other_agenda_datetimes_url)
assert not any(x['disabled'] for x in resp.json['data'])
meeting_event.delete()