api: category filter (#49355)

This commit is contained in:
Lauréline Guérin 2020-12-11 14:49:33 +01:00
parent a8a07d058e
commit f32f64ea54
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 24 additions and 3 deletions

View File

@ -443,6 +443,13 @@ class Agendas(APIView):
return Response({'data': []})
agendas_queryset = agendas_queryset.filter(slug__icontains=request.GET['q'])
if request.GET.get('category'):
cat_slug = request.GET['category']
if cat_slug == '__none__':
agendas_queryset = agendas_queryset.filter(category__isnull=True)
else:
agendas_queryset = agendas_queryset.filter(category__slug=cat_slug)
with_open_events = request.GET.get('with_open_events') in ['1', 'true']
if with_open_events:
# return only events agenda

View File

@ -15,6 +15,7 @@ from django.utils.timezone import now, make_aware, localtime
from chrono.agendas.models import (
Agenda,
Booking,
Category,
Desk,
Event,
MeetingType,
@ -127,9 +128,11 @@ def virtual_meetings_agenda(meetings_agenda):
def test_agendas_api(app):
event_agenda = Agenda.objects.create(label='Foo bar')
event_agenda2 = Agenda.objects.create(label='Foo bar 2')
meetings_agenda1 = Agenda.objects.create(label='Foo bar Meeting', kind='meetings')
category_a = Category.objects.create(label='Category A')
category_b = Category.objects.create(label='Category B')
event_agenda = Agenda.objects.create(label='Foo bar', category=category_a)
Agenda.objects.create(label='Foo bar 2', category=category_a)
meetings_agenda1 = Agenda.objects.create(label='Foo bar Meeting', kind='meetings', category=category_b)
Agenda.objects.create(label='Foo bar Meeting 2', kind='meetings')
resource1 = Resource.objects.create(label='Resource 1', description='Foo bar Resource 1')
resource2 = Resource.objects.create(label='Resource 2', description='Foo bar Resource 2')
@ -229,6 +232,17 @@ def test_agendas_api(app):
resp = app.get('/api/agenda/', params={'with_open_events': '1'})
assert len(resp.json['data']) == 0
resp = app.get('/api/agenda/', params={'category': ''})
assert len(resp.json['data']) == 5
resp = app.get('/api/agenda/', params={'category': '__none__'})
assert len(resp.json['data']) == 2
resp = app.get('/api/agenda/', params={'category': 'category-a'})
assert len(resp.json['data']) == 2
resp = app.get('/api/agenda/', params={'category': 'category-b'})
assert len(resp.json['data']) == 1
resp = app.get('/api/agenda/', params={'category': 'unknown'})
assert len(resp.json['data']) == 0
event1 = Event.objects.create(
start_datetime=(localtime() + datetime.timedelta(days=5)).replace(hour=10, minute=0),
places=20,