api: add category parameter on add agenda endpoint (#57670)
This commit is contained in:
parent
0660f76ee7
commit
5d1390223e
|
@ -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':
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue