fix next day but less than 24h delta booking (#18495)
This commit is contained in:
parent
63e4035f89
commit
b721160128
|
@ -38,6 +38,10 @@ from ..agendas.models import (Agenda, Event, Booking, MeetingType,
|
|||
def get_open_slots(agenda, meeting_type):
|
||||
min_datetime = now() + datetime.timedelta(days=agenda.minimal_booking_delay)
|
||||
max_datetime = now() + datetime.timedelta(days=agenda.maximal_booking_delay)
|
||||
min_datetime = min_datetime.replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
max_datetime = max_datetime.replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
max_datetime = max_datetime + datetime.timedelta(days=1)
|
||||
|
||||
time_period_filters = {
|
||||
'min_datetime': min_datetime,
|
||||
'max_datetime': max_datetime,
|
||||
|
|
|
@ -778,3 +778,86 @@ def test_agenda_meeting_api_multiple_desk(app, meetings_agenda, user):
|
|||
with CaptureQueriesContext(connection) as ctx:
|
||||
app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id)
|
||||
assert queries_count_datetime1 == len(ctx.captured_queries)
|
||||
|
||||
|
||||
def test_agenda_meeting_same_day(app, meetings_agenda, mock_now, user):
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
agenda = Agenda(label='Foo', kind='meetings')
|
||||
agenda.minimal_booking_delay = 0
|
||||
agenda.maximal_booking_delay = 15
|
||||
agenda.save()
|
||||
meeting_type = MeetingType.objects.create(agenda=agenda, label='Blah', duration=30)
|
||||
datetime_url = '/api/agenda/meetings/%s/datetimes/' % meeting_type.id
|
||||
desk1 = Desk.objects.create(label='foo', agenda=agenda)
|
||||
desk2 = Desk.objects.create(label='bar', agenda=agenda)
|
||||
for weekday in range(7):
|
||||
TimePeriod.objects.create(
|
||||
weekday=weekday, start_time=datetime.time(11, 0), end_time=datetime.time(12, 30),
|
||||
desk=desk1)
|
||||
TimePeriod.objects.create(
|
||||
weekday=weekday, start_time=datetime.time(11, 0), end_time=datetime.time(12, 30),
|
||||
desk=desk2)
|
||||
resp = app.get(datetime_url)
|
||||
event_data = resp.json['data'][0]
|
||||
# check first proposed date is on the same day unless we're past the last
|
||||
# open timeperiod.
|
||||
event_datetime = datetime.datetime.strptime(event_data['datetime'], '%Y-%m-%d %H:%M:%S').timetuple()
|
||||
assert (event_datetime[:3] == mock_now.timetuple()[:3] and
|
||||
event_datetime[3:5] >= mock_now.timetuple()[3:5]) or (
|
||||
event_datetime[:3] > mock_now.timetuple()[:3] and
|
||||
event_datetime[3:5] < mock_now.timetuple()[3:5])
|
||||
|
||||
# check booking works
|
||||
first_booking_url = resp.json['data'][0]['api']['fillslot_url']
|
||||
assert app.post(first_booking_url).json['err'] == 0
|
||||
assert app.post(first_booking_url).json['err'] == 0
|
||||
assert app.post(first_booking_url).json['err'] == 1
|
||||
|
||||
last_booking_url = resp.json['data'][-1]['api']['fillslot_url']
|
||||
assert app.post(last_booking_url).json['err'] == 0
|
||||
assert app.post(last_booking_url).json['err'] == 0
|
||||
assert app.post(last_booking_url).json['err'] == 1
|
||||
|
||||
# check full datetimes are marked as disabled
|
||||
resp = app.get(datetime_url)
|
||||
assert resp.json['data'][0]['disabled']
|
||||
assert not resp.json['data'][1]['disabled']
|
||||
assert resp.json['data'][-1]['disabled']
|
||||
assert not resp.json['data'][-2]['disabled']
|
||||
|
||||
|
||||
def test_agenda_meeting_next_day(app, meetings_agenda, mock_now, user):
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
agenda = Agenda(label='Foo', kind='meetings')
|
||||
agenda.minimal_booking_delay = 1
|
||||
agenda.maximal_booking_delay = 15
|
||||
agenda.save()
|
||||
meeting_type = MeetingType.objects.create(agenda=agenda, label='Blah', duration=30)
|
||||
datetime_url = '/api/agenda/meetings/%s/datetimes/' % meeting_type.id
|
||||
desk = Desk.objects.create(label='foo', agenda=agenda)
|
||||
for weekday in range(7):
|
||||
time_period = TimePeriod.objects.create(
|
||||
weekday=weekday, start_time=datetime.time(11, 0), end_time=datetime.time(12, 30),
|
||||
desk=desk)
|
||||
resp = app.get(datetime_url)
|
||||
event_data = resp.json['data'][0]
|
||||
# check all proposed dates are on the next day
|
||||
tomorrow = mock_now + datetime.timedelta(days=1)
|
||||
event_datetime = datetime.datetime.strptime(event_data['datetime'], '%Y-%m-%d %H:%M:%S').timetuple()
|
||||
assert event_datetime[:3] == tomorrow.timetuple()[:3]
|
||||
|
||||
# check booking works
|
||||
first_booking_url = resp.json['data'][0]['api']['fillslot_url']
|
||||
assert app.post(first_booking_url).json['err'] == 0
|
||||
assert app.post(first_booking_url).json['err'] == 1
|
||||
|
||||
last_booking_url = resp.json['data'][-1]['api']['fillslot_url']
|
||||
assert app.post(last_booking_url).json['err'] == 0
|
||||
assert app.post(last_booking_url).json['err'] == 1
|
||||
|
||||
# check full datetimes are marked as disabled
|
||||
resp = app.get(datetime_url)
|
||||
assert resp.json['data'][0]['disabled']
|
||||
assert not resp.json['data'][1]['disabled']
|
||||
assert resp.json['data'][-1]['disabled']
|
||||
assert not resp.json['data'][-2]['disabled']
|
||||
|
|
Loading…
Reference in New Issue