api: format dates in fillslot response (#33151)

This commit is contained in:
Frédéric Péters 2019-05-16 12:56:22 +02:00
parent 055181005f
commit c3373ae379
2 changed files with 31 additions and 27 deletions

View File

@ -33,6 +33,10 @@ from ..agendas.models import (Agenda, Event, Booking, MeetingType,
from ..interval import Intervals
def format_response_datetime(dt):
return localtime(dt).strftime('%Y-%m-%d %H:%M:%S')
def get_exceptions_by_desk(agenda):
exceptions_by_desk = {}
for desk in Desk.objects.filter(agenda=agenda).prefetch_related('timeperiodexception_set'):
@ -181,7 +185,7 @@ class Datetimes(APIView):
response = {'data': [{'id': x.id,
'text': force_text(x),
'datetime': localtime(x.start_datetime).strftime('%Y-%m-%d %H:%M:%S'),
'datetime': format_response_datetime(x.start_datetime),
'disabled': bool(x.full),
'api': {
'fillslot_url': request.build_absolute_uri(
@ -243,7 +247,7 @@ class MeetingDatetimes(APIView):
}))
response = {'data': [{'id': x.id,
'datetime': localtime(x.start_datetime).strftime('%Y-%m-%d %H:%M:%S'),
'datetime': format_response_datetime(x.start_datetime),
'text': force_text(x),
'disabled': bool(x.full),
'api': {
@ -464,7 +468,7 @@ class Fillslots(APIView):
'err': 0,
'in_waiting_list': in_waiting_list,
'booking_id': primary_booking.id,
'datetime': localtime(events[0].start_datetime),
'datetime': format_response_datetime(events[0].start_datetime),
'api': {
'cancel_url': request.build_absolute_uri(
reverse('api-cancel-booking', kwargs={'booking_pk': primary_booking.id})),
@ -476,7 +480,7 @@ class Fillslots(APIView):
response['api']['accept_url'] = request.build_absolute_uri(
reverse('api-accept-booking', kwargs={'booking_pk': primary_booking.id}))
if agenda.kind == 'meetings':
response['end_datetime'] = localtime(events[-1].end_datetime)
response['end_datetime'] = format_response_datetime(events[-1].end_datetime)
response['duration'] = (events[-1].end_datetime - events[-1].start_datetime).seconds // 60
if available_desk:
response['desk'] = {

View File

@ -330,7 +330,7 @@ def test_booking_api(app, some_data, user):
app.authorization = ('Basic', ('john.doe', 'password'))
resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda.slug, event.id))
Booking.objects.get(id=resp.json['booking_id'])
assert resp.json['datetime'] == localtime(event.start_datetime).isoformat()
assert resp.json['datetime'] == localtime(event.start_datetime).strftime('%Y-%m-%d %H:%M:%S')
assert 'accept_url' not in resp.json['api']
assert 'cancel_url' in resp.json['api']
assert 'ics_url' in resp.json['api']
@ -476,7 +476,7 @@ def test_booking_api_fillslots(app, some_data, user):
resp = app.post('/api/agenda/%s/fillslots/' % agenda.slug, params={'slots': events_ids})
primary_booking_id = resp.json['booking_id']
Booking.objects.get(id=primary_booking_id)
assert resp.json['datetime'] == localtime(event.start_datetime).isoformat()
assert resp.json['datetime'] == localtime(event.start_datetime).strftime('%Y-%m-%d %H:%M:%S')
assert 'accept_url' not in resp.json['api']
assert 'cancel_url' in resp.json['api']
assert urlparse.urlparse(resp.json['api']['cancel_url']).netloc
@ -563,10 +563,10 @@ def test_booking_api_meeting(app, meetings_agenda, user):
app.authorization = ('Basic', ('john.doe', 'password'))
resp_booking = app.post('/api/agenda/%s/fillslot/%s/' % (agenda_id, event_id))
assert Booking.objects.count() == 1
assert resp_booking.json['datetime'][:16] == localtime(Booking.objects.all()[0].event.start_datetime
).isoformat()[:16]
assert resp_booking.json['end_datetime'][:16] == localtime(Booking.objects.all()[0].event.end_datetime
).isoformat()[:16]
assert resp_booking.json['datetime'] == localtime(Booking.objects.all()[0].event.start_datetime
).strftime('%Y-%m-%d %H:%M:%S')
assert resp_booking.json['end_datetime'] == localtime(Booking.objects.all()[0].event.end_datetime
).strftime('%Y-%m-%d %H:%M:%S')
assert resp_booking.json['duration'] == 30
resp2 = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id)
@ -594,10 +594,10 @@ def test_booking_api_meeting_fillslots(app, meetings_agenda, user):
assert Booking.objects.count() == 2
primary_booking = Booking.objects.filter(primary_booking__isnull=True).first()
secondary_booking = Booking.objects.filter(primary_booking=primary_booking.id).first()
assert resp_booking.json['datetime'][:16] == localtime(primary_booking.event.start_datetime
).isoformat()[:16]
assert resp_booking.json['end_datetime'][:16] == localtime(secondary_booking.event.end_datetime
).isoformat()[:16]
assert resp_booking.json['datetime'] == localtime(primary_booking.event.start_datetime
).strftime('%Y-%m-%d %H:%M:%S')
assert resp_booking.json['end_datetime'] == localtime(secondary_booking.event.end_datetime
).strftime('%Y-%m-%d %H:%M:%S')
resp2 = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id)
assert len(resp.json['data']) == len([x for x in resp2.json['data'] if not x.get('disabled')]) + 2
@ -651,8 +651,8 @@ def test_booking_api_meeting_across_daylight_saving_time(app, meetings_agenda, u
app.authorization = ('Basic', ('john.doe', 'password'))
resp_booking = app.post('/api/agenda/%s/fillslot/%s/' % (agenda_id, event_id))
assert Booking.objects.count() == 1
assert resp_booking.json['datetime'][:16] == localtime(Booking.objects.all()[0].event.start_datetime
).isoformat()[:16]
assert resp_booking.json['datetime'] == localtime(Booking.objects.all()[0].event.start_datetime
).strftime('%Y-%m-%d %H:%M:%S')
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id)
assert resp.json['data'][event_index]['disabled']
@ -948,7 +948,7 @@ def test_multiple_booking_api(app, some_data, user):
resp = app.post('/api/agenda/%s/fillslot/%s/?count=3' % (agenda.slug, event.id))
Booking.objects.get(id=resp.json['booking_id'])
assert resp.json['datetime'] == localtime(event.start_datetime).isoformat()
assert resp.json['datetime'] == localtime(event.start_datetime).strftime('%Y-%m-%d %H:%M:%S')
assert 'accept_url' not in resp.json['api']
assert 'cancel_url' in resp.json['api']
assert Event.objects.get(id=event.id).booked_places == 3
@ -1030,7 +1030,7 @@ def test_multiple_booking_api_fillslots(app, some_data, user):
booking = Booking.objects.get(id=resp.json['booking_id'])
cancel_url = resp.json['api']['cancel_url']
assert Booking.objects.filter(primary_booking=booking).count() == 5
assert resp.json['datetime'] == localtime(events[0].start_datetime).isoformat()
assert resp.json['datetime'] == localtime(events[0].start_datetime).strftime('%Y-%m-%d %H:%M:%S')
assert 'accept_url' not in resp.json['api']
assert 'cancel_url' in resp.json['api']
assert 'ics_url' in resp.json['api']
@ -1198,8 +1198,8 @@ def test_agenda_meeting_api_multiple_desk(app, meetings_agenda, user):
event_id = resp.json['data'][1]['id']
resp_booking = app.post('/api/agenda/%s/fillslot/%s/' % (agenda_id, event_id))
assert Booking.objects.count() == 2
assert resp_booking.json['datetime'][:16] == localtime(Booking.objects.last().event.start_datetime
).isoformat()[:16]
assert resp_booking.json['datetime'] == localtime(Booking.objects.last().event.start_datetime
).strftime('%Y-%m-%d %H:%M:%S')
resp2 = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id)
assert len(resp.json['data']) == len([x for x in resp2.json['data'] if not x['disabled']]) + 1
@ -1223,8 +1223,8 @@ def test_agenda_meeting_api_multiple_desk(app, meetings_agenda, user):
resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda_id, event_id))
queries_count_fillslot1 = len(ctx.captured_queries)
assert resp_booking.json['datetime'][:16] == localtime(Booking.objects.last().event.start_datetime
).isoformat()[:16]
assert resp_booking.json['datetime'] == localtime(Booking.objects.last().event.start_datetime
).strftime('%Y-%m-%d %H:%M:%S')
cancel_url = resp.json['api']['cancel_url']
resp3 = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id)
@ -1239,8 +1239,8 @@ def test_agenda_meeting_api_multiple_desk(app, meetings_agenda, user):
resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda_id, event_id))
assert Booking.objects.count() == 4
assert Booking.objects.exclude(cancellation_datetime__isnull=True).count() == 2
assert resp_booking.json['datetime'][:16] == localtime(Booking.objects.last().event.start_datetime
).isoformat()[:16]
assert resp_booking.json['datetime'] == localtime(Booking.objects.last().event.start_datetime
).strftime('%Y-%m-%d %H:%M:%S')
# try booking the same timeslot again and fail
resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda_id, event_id))
@ -1562,20 +1562,20 @@ def test_agenda_meeting_gcd_durations(app, meetings_agenda, user):
assert len([x for x in resp.json['data'] if not x.get('disabled')]) == 55
event_id = [x for x in resp.json['data'] if not x.get('disabled')][0]['id']
resp = app.post('/api/agenda/%s/fillslot/%s/' % (meetings_agenda.id, event_id))
assert resp.json['datetime'].startswith('2017-05-22T10:30:00')
assert resp.json['datetime'] == '2017-05-22 10:30:00'
assert Booking.objects.count() == 2
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type_30.id)
event_id = [x for x in resp.json['data'] if not x.get('disabled')][0]['id']
resp = app.post('/api/agenda/%s/fillslot/%s/' % (meetings_agenda.id, event_id))
assert resp.json['datetime'].startswith('2017-05-22T10:50:00')
assert resp.json['datetime'] == '2017-05-22 10:50:00'
assert Booking.objects.count() == 3
# create a gap
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type_30.id)
event_id = [x for x in resp.json['data'] if not x.get('disabled')][1]['id']
resp = app.post('/api/agenda/%s/fillslot/%s/' % (meetings_agenda.id, event_id))
assert resp.json['datetime'].startswith('2017-05-22T11:30:00')
assert resp.json['datetime'] == '2017-05-22 11:30:00'
assert Booking.objects.count() == 4
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type_20.id)