api: update meeting types API to be based on slugs (#13792)

This commit is contained in:
Frédéric Péters 2016-10-28 19:36:29 +02:00
parent 6e1fb0aa94
commit c33754433f
4 changed files with 24 additions and 7 deletions

View File

@ -25,8 +25,10 @@ urlpatterns = patterns('',
url(r'agenda/(?P<agenda_identifier>[\w-]+)/fillslot/(?P<event_pk>[\w:-]+)/$', views.fillslot),
url(r'agenda/(?P<agenda_identifier>[\w-]+)/status/(?P<event_pk>\w+)/$', views.slot_status),
url(r'agenda/meetings/(?P<pk>\w+)/datetimes/$', views.meeting_datetimes,
name='api-agenda-meeting-datetimes'),
url(r'agenda/meetings/(?P<meeting_identifier>[\w-]+)/datetimes/$',
views.meeting_datetimes, name='api-agenda-meeting-datetimes-legacy'),
url(r'agenda/(?P<agenda_identifier>[\w-]+)/meetings/(?P<meeting_identifier>[\w-]+)/datetimes/$',
views.meeting_datetimes, name='api-agenda-meeting-datetimes'),
url(r'booking/(?P<booking_pk>\w+)/$', views.booking),
url(r'booking/(?P<booking_pk>\w+)/cancel/$', views.cancel_booking),

View File

@ -76,8 +76,17 @@ datetimes = Datetimes.as_view()
class MeetingDatetimes(GenericAPIView):
def get(self, request, pk=None, format=None):
meeting_type = MeetingType.objects.get(id=pk)
def get(self, request, agenda_identifier=None, meeting_identifier=None, format=None):
try:
if agenda_identifier is None:
# legacy access by meeting id
meeting_type = MeetingType.objects.get(id=meeting_identifier)
else:
meeting_type = MeetingType.objects.get(slug=meeting_identifier,
agenda__slug=agenda_identifier)
except MeetingType.DoesNotExist:
raise Http404()
agenda = meeting_type.agenda
if agenda.kind != 'meetings':
raise APIException('not a meetings agenda')

View File

@ -87,7 +87,7 @@
{% for meeting_type in object.meetingtype_set.all %}
<li><a href="{% if user_can_manage %}{% url 'chrono-manager-meeting-type-edit' pk=meeting_type.id %}{% else %}#{% endif %}">
{{meeting_type.label}}
<span class="identifier">[{% trans "identifier:" %} {{meeting_type.id}}]</span></h2>
<span class="identifier">[{% trans "identifier:" %} {{meeting_type.slug}}]</span></h2>
</a>
</li>
{% endfor %}

View File

@ -91,7 +91,7 @@ def test_datetimes_api(app, some_data):
assert 'data' in resp.json
assert len(resp.json['data']) == 3
check_bookability(resp.json['data'])
assert app.get('/api/agenda/%s/datetimes/' % agenda.id).json == resp.json
assert app.get('/api/agenda/%s/datetimes/' % agenda.id).json == resp.json
agenda.minimal_booking_delay = 5
agenda.save()
@ -136,8 +136,14 @@ def test_datetime_api_label(app, some_data):
def test_datetimes_api_meetings_agenda(app, meetings_agenda):
meeting_type = MeetingType.objects.get(agenda=meetings_agenda)
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id)
api_url = '/api/agenda/%s/meetings/%s/datetimes/' % (
meeting_type.agenda.slug, meeting_type.slug)
resp = app.get('/api/agenda/%s/meetings/xxx/datetimes/' % meeting_type.agenda.slug, status=404)
resp = app.get(api_url)
assert len(resp.json['data']) == 144
assert resp.json == app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id).json
meetings_agenda.minimal_booking_delay = 7
meetings_agenda.maximal_booking_delay = 28