api: format dates in fillslot response (#33151)
This commit is contained in:
parent
055181005f
commit
c3373ae379
|
@ -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'] = {
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue