986 |
986 |
assert resp.json['err_desc'] == 'no more desk available'
|
987 |
987 |
|
988 |
988 |
|
|
989 |
@pytest.mark.freeze_time('2021-02-25')
|
|
990 |
def test_datetimes_api_meetings_agenda_exclude_slots(app):
|
|
991 |
tomorrow = now() + datetime.timedelta(days=1)
|
|
992 |
agenda = Agenda.objects.create(
|
|
993 |
label='Agenda', kind='meetings', minimal_booking_delay=0, maximal_booking_delay=10
|
|
994 |
)
|
|
995 |
desk = Desk.objects.create(agenda=agenda, slug='desk')
|
|
996 |
meeting_type = MeetingType.objects.create(agenda=agenda, slug='foo-bar')
|
|
997 |
TimePeriod.objects.create(
|
|
998 |
weekday=tomorrow.date().weekday(),
|
|
999 |
start_time=datetime.time(9, 0),
|
|
1000 |
end_time=datetime.time(17, 00),
|
|
1001 |
desk=desk,
|
|
1002 |
)
|
|
1003 |
desk.duplicate()
|
|
1004 |
event = Event.objects.create(
|
|
1005 |
agenda=agenda,
|
|
1006 |
meeting_type=meeting_type,
|
|
1007 |
places=1,
|
|
1008 |
start_datetime=localtime(tomorrow).replace(hour=9, minute=0),
|
|
1009 |
desk=desk,
|
|
1010 |
)
|
|
1011 |
Booking.objects.create(event=event, user_external_id='42')
|
|
1012 |
event2 = Event.objects.create(
|
|
1013 |
agenda=agenda,
|
|
1014 |
meeting_type=meeting_type,
|
|
1015 |
places=1,
|
|
1016 |
start_datetime=localtime(tomorrow).replace(hour=10, minute=0),
|
|
1017 |
desk=desk,
|
|
1018 |
)
|
|
1019 |
cancelled = Booking.objects.create(event=event2, user_external_id='35')
|
|
1020 |
cancelled.cancel()
|
|
1021 |
|
|
1022 |
resp = app.get('/api/agenda/%s/meetings/%s/datetimes/' % (agenda.slug, meeting_type.slug))
|
|
1023 |
assert resp.json['data'][0]['id'] == 'foo-bar:2021-02-26-0900'
|
|
1024 |
assert resp.json['data'][0]['disabled'] is False
|
|
1025 |
assert resp.json['data'][2]['id'] == 'foo-bar:2021-02-26-1000'
|
|
1026 |
assert resp.json['data'][2]['disabled'] is False
|
|
1027 |
|
|
1028 |
resp = app.get(
|
|
1029 |
'/api/agenda/%s/meetings/%s/datetimes/' % (agenda.slug, meeting_type.slug),
|
|
1030 |
params={'exclude_user_external_id': '35'},
|
|
1031 |
)
|
|
1032 |
assert resp.json['data'][0]['id'] == 'foo-bar:2021-02-26-0900'
|
|
1033 |
assert resp.json['data'][0]['disabled'] is False
|
|
1034 |
assert resp.json['data'][2]['id'] == 'foo-bar:2021-02-26-1000'
|
|
1035 |
assert resp.json['data'][2]['disabled'] is False
|
|
1036 |
|
|
1037 |
with CaptureQueriesContext(connection) as ctx:
|
|
1038 |
resp = app.get(
|
|
1039 |
'/api/agenda/%s/meetings/%s/datetimes/' % (agenda.slug, meeting_type.slug),
|
|
1040 |
params={'exclude_user_external_id': '42'},
|
|
1041 |
)
|
|
1042 |
assert len(ctx.captured_queries) == 9
|
|
1043 |
assert resp.json['data'][0]['id'] == 'foo-bar:2021-02-26-0900'
|
|
1044 |
assert resp.json['data'][0]['disabled'] is True
|
|
1045 |
assert resp.json['data'][2]['id'] == 'foo-bar:2021-02-26-1000'
|
|
1046 |
assert resp.json['data'][2]['disabled'] is False
|
|
1047 |
|
|
1048 |
|
989 |
1049 |
def test_booking_api(app, some_data, user):
|
990 |
1050 |
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
991 |
1051 |
event = [x for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()][0]
|
... | ... | |
4540 |
4600 |
assert len(resp.json['data']) == 20
|
4541 |
4601 |
|
4542 |
4602 |
|
|
4603 |
@pytest.mark.freeze_time('2021-02-25')
|
|
4604 |
def test_virtual_agendas_meetings_datetimes_exclude_slots(app):
|
|
4605 |
tomorrow = now() + datetime.timedelta(days=1)
|
|
4606 |
agenda = Agenda.objects.create(
|
|
4607 |
label='Agenda', kind='meetings', minimal_booking_delay=0, maximal_booking_delay=10
|
|
4608 |
)
|
|
4609 |
desk = Desk.objects.create(agenda=agenda, slug='desk')
|
|
4610 |
meeting_type = MeetingType.objects.create(agenda=agenda, slug='foo-bar')
|
|
4611 |
TimePeriod.objects.create(
|
|
4612 |
weekday=tomorrow.date().weekday(),
|
|
4613 |
start_time=datetime.time(9, 0),
|
|
4614 |
end_time=datetime.time(17, 00),
|
|
4615 |
desk=desk,
|
|
4616 |
)
|
|
4617 |
agenda2 = agenda.duplicate()
|
|
4618 |
virt_agenda = Agenda.objects.create(
|
|
4619 |
label='Virtual Agenda', kind='virtual', minimal_booking_delay=1, maximal_booking_delay=10
|
|
4620 |
)
|
|
4621 |
VirtualMember.objects.create(virtual_agenda=virt_agenda, real_agenda=agenda)
|
|
4622 |
VirtualMember.objects.create(virtual_agenda=virt_agenda, real_agenda=agenda2)
|
|
4623 |
|
|
4624 |
event = Event.objects.create(
|
|
4625 |
agenda=agenda,
|
|
4626 |
meeting_type=meeting_type,
|
|
4627 |
places=1,
|
|
4628 |
start_datetime=localtime(tomorrow).replace(hour=9, minute=0),
|
|
4629 |
desk=desk,
|
|
4630 |
)
|
|
4631 |
Booking.objects.create(event=event, user_external_id='42')
|
|
4632 |
event2 = Event.objects.create(
|
|
4633 |
agenda=agenda,
|
|
4634 |
meeting_type=meeting_type,
|
|
4635 |
places=1,
|
|
4636 |
start_datetime=localtime(tomorrow).replace(hour=10, minute=0),
|
|
4637 |
desk=desk,
|
|
4638 |
)
|
|
4639 |
cancelled = Booking.objects.create(event=event2, user_external_id='35')
|
|
4640 |
cancelled.cancel()
|
|
4641 |
|
|
4642 |
resp = app.get('/api/agenda/%s/meetings/%s/datetimes/' % (virt_agenda.slug, meeting_type.slug))
|
|
4643 |
assert resp.json['data'][0]['id'] == 'foo-bar:2021-02-26-0900'
|
|
4644 |
assert resp.json['data'][0]['disabled'] is False
|
|
4645 |
assert resp.json['data'][2]['id'] == 'foo-bar:2021-02-26-1000'
|
|
4646 |
assert resp.json['data'][2]['disabled'] is False
|
|
4647 |
|
|
4648 |
resp = app.get(
|
|
4649 |
'/api/agenda/%s/meetings/%s/datetimes/' % (virt_agenda.slug, meeting_type.slug),
|
|
4650 |
params={'exclude_user_external_id': '35'},
|
|
4651 |
)
|
|
4652 |
assert resp.json['data'][0]['id'] == 'foo-bar:2021-02-26-0900'
|
|
4653 |
assert resp.json['data'][0]['disabled'] is False
|
|
4654 |
assert resp.json['data'][2]['id'] == 'foo-bar:2021-02-26-1000'
|
|
4655 |
assert resp.json['data'][2]['disabled'] is False
|
|
4656 |
|
|
4657 |
with CaptureQueriesContext(connection) as ctx:
|
|
4658 |
resp = app.get(
|
|
4659 |
'/api/agenda/%s/meetings/%s/datetimes/' % (virt_agenda.slug, meeting_type.slug),
|
|
4660 |
params={'exclude_user_external_id': '42'},
|
|
4661 |
)
|
|
4662 |
assert len(ctx.captured_queries) == 13
|
|
4663 |
assert resp.json['data'][0]['id'] == 'foo-bar:2021-02-26-0900'
|
|
4664 |
assert resp.json['data'][0]['disabled'] is True
|
|
4665 |
assert resp.json['data'][2]['id'] == 'foo-bar:2021-02-26-1000'
|
|
4666 |
assert resp.json['data'][2]['disabled'] is False
|
|
4667 |
|
|
4668 |
virt_agenda.minimal_booking_delay = None
|
|
4669 |
virt_agenda.maximal_booking_delay = None
|
|
4670 |
virt_agenda.save()
|
|
4671 |
resp = app.get(
|
|
4672 |
'/api/agenda/%s/meetings/%s/datetimes/' % (virt_agenda.slug, meeting_type.slug),
|
|
4673 |
params={'exclude_user_external_id': '42'},
|
|
4674 |
)
|
|
4675 |
assert resp.json['data'][0]['id'] == 'foo-bar:2021-02-26-0900'
|
|
4676 |
assert resp.json['data'][0]['disabled'] is True
|
|
4677 |
assert resp.json['data'][2]['id'] == 'foo-bar:2021-02-26-1000'
|
|
4678 |
assert resp.json['data'][2]['disabled'] is False
|
|
4679 |
|
|
4680 |
|
4543 |
4681 |
def test_virtual_agendas_meetings_booking(app, mock_now, user):
|
4544 |
4682 |
foo_agenda = Agenda.objects.create(
|
4545 |
4683 |
label='Foo Meeting', kind='meetings', minimal_booking_delay=1, maximal_booking_delay=5
|
4546 |
|
-
|