API: Add filters to questions view

This commit is contained in:
Raphael Michel
2018-04-24 18:33:57 +02:00
parent d25407e3b4
commit bee7314dd7
3 changed files with 41 additions and 1 deletions

View File

@@ -59,6 +59,11 @@ options list of objects In case of ques
Endpoints
---------
.. versionchanged:: 1.15
The questions endpoint has been extended by the filter queries ``ask_during_checkin``, ``requred``, and
``identifier``.
.. http:get:: /api/v1/organizers/(organizer)/events/(event)/questions/
Returns a list of all questions within a given event.
@@ -120,6 +125,9 @@ Endpoints
:query integer page: The page number in case of a multi-page result set, default is 1
:query string ordering: Manually set the ordering of results. Valid fields to be used are ``id`` and ``position``.
Default: ``position``
:query string identifier: Only return questions with the given identifier string
:query boolean ask_during_checkin: Only return questions that are or are not to be asked during check-in
:query boolean required: Only return questions that are or are not required to fill in
:param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch
:statuscode 200: no error

View File

@@ -251,10 +251,17 @@ class ItemCategoryViewSet(viewsets.ModelViewSet):
super().perform_destroy(instance)
class QuestionFilter(FilterSet):
class Meta:
model = Question
fields = ['ask_during_checkin', 'required', 'identifier']
class QuestionViewSet(viewsets.ModelViewSet):
serializer_class = QuestionSerializer
queryset = Question.objects.none()
filter_backends = (OrderingFilter,)
filter_backends = (DjangoFilterBackend, OrderingFilter)
filter_class = QuestionFilter
ordering_fields = ('id', 'position')
ordering = ('position', 'id')
permission = 'can_change_items'

View File

@@ -1296,6 +1296,31 @@ def test_question_list(token_client, organizer, event, question, item):
assert resp.status_code == 200
assert [res] == resp.data['results']
resp = token_client.get('/api/v1/organizers/{}/events/{}/questions/?required=false'.format(
organizer.slug, event.slug
))
assert [res] == resp.data['results']
resp = token_client.get('/api/v1/organizers/{}/events/{}/questions/?ask_during_checkin=false'.format(
organizer.slug, event.slug
))
assert [res] == resp.data['results']
resp = token_client.get('/api/v1/organizers/{}/events/{}/questions/?identifier=ABC'.format(
organizer.slug, event.slug
))
assert [res] == resp.data['results']
resp = token_client.get('/api/v1/organizers/{}/events/{}/questions/?required=true'.format(
organizer.slug, event.slug
))
assert [] == resp.data['results']
resp = token_client.get('/api/v1/organizers/{}/events/{}/questions/?ask_during_checkin=true'.format(
organizer.slug, event.slug
))
assert [] == resp.data['results']
resp = token_client.get('/api/v1/organizers/{}/events/{}/questions/?identifier=DEF'.format(
organizer.slug, event.slug
))
assert [] == resp.data['results']
@pytest.mark.django_db
def test_question_detail(token_client, organizer, event, question, item):