fix next day but less than 24h delta booking (#18495)

This commit is contained in:
Frédéric Péters 2017-09-06 19:24:15 +02:00
parent 63e4035f89
commit b721160128
2 changed files with 87 additions and 0 deletions

View File

@ -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,

View File

@ -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']