api: add agenda patch endpoint (#77852)
gitea/chrono/pipeline/head Build queued... Details

This commit is contained in:
Valentin Deniaud 2023-05-25 14:51:45 +02:00
parent 80b2b70654
commit 2d2052f91c
2 changed files with 46 additions and 0 deletions

View File

@ -823,6 +823,7 @@ agendas = Agendas.as_view()
class AgendaAPI(APIView):
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
serializer_class = serializers.AgendaSerializer
def get(self, request, agenda_identifier):
agenda = get_object_or_404(Agenda, slug=agenda_identifier)
@ -841,6 +842,19 @@ class AgendaAPI(APIView):
agenda.delete()
return Response({'err': 0})
def patch(self, request, agenda_identifier):
agenda = get_object_or_404(Agenda, slug=agenda_identifier)
serializer = self.serializer_class(agenda, data=request.data, partial=True)
if not serializer.is_valid():
raise APIErrorBadRequest(N_('invalid payload'), errors=serializer.errors)
if 'kind' in serializer.validated_data and serializer.validated_data['kind'] != agenda.kind:
raise APIErrorBadRequest(N_('it is not possible to change kind value'))
serializer.save()
return self.get(request, agenda_identifier)
agenda = AgendaAPI.as_view()

View File

@ -626,3 +626,35 @@ def test_add_agenda(app, user, settings):
resp = app.get('/api/agendas/datetimes/?agendas=%s' % agenda.slug)
assert 'data' in resp.json
@pytest.mark.freeze_time('2021-07-09T08:00:00.0+02:00')
def test_patch_agenda(app, user):
Category.objects.create(label='Category A')
agenda = Agenda.objects.create(label='Foo bar', kind='events')
app.authorization = ('Basic', ('john.doe', 'password'))
resp = app.patch_json('/api/agenda/%s/' % agenda.slug)
assert resp.json['data']['id'] == 'foo-bar'
assert resp.json['data']['text'] == 'Foo bar'
assert resp.json['data']['kind'] == 'events'
assert resp.json['data']['category'] is None
resp = app.patch_json('/api/agenda/%s/' % agenda.slug, params={'label': 'Test', 'kind': 'events'})
assert resp.json['data']['id'] == 'foo-bar'
assert resp.json['data']['text'] == 'Test'
assert resp.json['data']['kind'] == 'events'
resp = app.patch_json('/api/agenda/%s/' % agenda.slug, params={'category': 'category-a'})
assert resp.json['data']['id'] == 'foo-bar'
assert resp.json['data']['category'] == 'category-a'
# changing kind is forbidden
resp = app.patch_json('/api/agenda/%s/' % agenda.slug, params={'kind': 'meetings'}, status=400)
assert resp.json['err'] == 1
assert resp.json['err_desc'] == 'it is not possible to change kind value'
# unkwown category
resp = app.patch_json('/api/agenda/%s/' % agenda.slug, params={'category': 'xxx'}, status=400)
assert resp.json['err'] == 1