api: add category parameter on add agenda endpoint (#57670)

This commit is contained in:
Nicolas Roche 2021-10-08 09:19:54 +02:00
parent 0660f76ee7
commit 5d1390223e
2 changed files with 16 additions and 1 deletions

View File

@ -3,7 +3,7 @@ from django.utils.translation import ugettext_lazy as _
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
from chrono.agendas.models import AbsenceReason, Agenda, Booking, Event
from chrono.agendas.models import AbsenceReason, Agenda, Booking, Category, Event
class StringOrListField(serializers.ListField):
@ -163,6 +163,7 @@ class EventSerializer(serializers.ModelSerializer):
class AgendaSerializer(serializers.ModelSerializer):
edit_role = serializers.CharField(required=False, max_length=150)
view_role = serializers.CharField(required=False, max_length=150)
category = serializers.SlugField(required=False, max_length=160)
class Meta:
model = Agenda
@ -176,6 +177,7 @@ class AgendaSerializer(serializers.ModelSerializer):
'anonymize_delay',
'edit_role',
'view_role',
'category',
]
def get_role(self, value):
@ -190,6 +192,12 @@ class AgendaSerializer(serializers.ModelSerializer):
def validate_view_role(self, value):
return self.get_role(value)
def validate_category(self, value):
try:
return Category.objects.get(slug=value)
except Category.DoesNotExist:
raise serializers.ValidationError(_('unknown category: %s' % value))
def validate(self, attrs):
super().validate(attrs)
if attrs['minimal_booking_delay_in_working_days'] and attrs.get('kind', 'events') != 'events':

View File

@ -603,6 +603,7 @@ def test_virtual_agendas_meetingtypes_api(app):
@pytest.mark.freeze_time('2021-07-09')
def test_add_agenda(app, user, settings):
category_a = Category.objects.create(label='Category A')
api_url = '/api/agenda/'
# no authentication
@ -631,6 +632,7 @@ def test_add_agenda(app, user, settings):
'anonymize_delay': 'oups',
'edit_role': 'oups',
'view_role': 'plop',
'category': 'oups',
}
resp = app.post(api_url, params=params, status=400)
assert resp.json['err']
@ -641,6 +643,7 @@ def test_add_agenda(app, user, settings):
'anonymize_delay': ['A valid integer is required.'],
'edit_role': ['unknown role: oups'],
'view_role': ['unknown role: plop'],
'category': ['unknown category: oups'],
}
# slug already used
@ -692,6 +695,7 @@ def test_add_agenda(app, user, settings):
'anonymize_delay': 30,
'edit_role': 'Edit',
'view_role': 'View',
'category': 'category-a',
}
resp = app.post(api_url, params=params)
assert not resp.json['err']
@ -700,6 +704,7 @@ def test_add_agenda(app, user, settings):
assert agenda.min_booking_datetime.date() == datetime.date(2021, 7, 10)
assert agenda.edit_role == edit_group
assert agenda.view_role == view_group
assert agenda.category == category_a
# add an events agenda
params = {
@ -712,6 +717,7 @@ def test_add_agenda(app, user, settings):
'anonymize_delay': 30,
'edit_role': 'Edit',
'view_role': 'View',
'category': 'category-a',
}
resp = app.post(api_url, params=params)
assert not resp.json['err']
@ -720,3 +726,4 @@ def test_add_agenda(app, user, settings):
assert agenda.edit_role == edit_group
assert agenda.view_role == view_group
assert agenda.min_booking_datetime.date() == datetime.date(2021, 7, 12)
assert agenda.category == category_a