diff --git a/doc/api/resources/webhooks.rst b/doc/api/resources/webhooks.rst index a9abe52c0..c7be77326 100644 --- a/doc/api/resources/webhooks.rst +++ b/doc/api/resources/webhooks.rst @@ -116,6 +116,7 @@ Endpoints } :query integer page: The page number in case of a multi-page result set, default is 1 + :query boolean enabled: Only show webhooks that are or are not enabled :param organizer: The ``slug`` field of the organizer to fetch :statuscode 200: no error :statuscode 401: Authentication failure diff --git a/src/pretix/api/views/webhooks.py b/src/pretix/api/views/webhooks.py index 3877059c6..b2d18971e 100644 --- a/src/pretix/api/views/webhooks.py +++ b/src/pretix/api/views/webhooks.py @@ -19,6 +19,8 @@ # You should have received a copy of the GNU Affero General Public License along with this program. If not, see # . # +import django_filters +from django_filters.rest_framework import DjangoFilterBackend, FilterSet from rest_framework import viewsets from pretix.api.models import WebHook @@ -26,11 +28,17 @@ from pretix.api.serializers.webhooks import WebHookSerializer from pretix.helpers.dicts import merge_dicts +class WebhookFilter(FilterSet): + enabled = django_filters.rest_framework.BooleanFilter() + + class WebHookViewSet(viewsets.ModelViewSet): serializer_class = WebHookSerializer queryset = WebHook.objects.none() permission = 'can_change_organizer_settings' write_permission = 'can_change_organizer_settings' + filter_backends = (DjangoFilterBackend,) + filterset_class = WebhookFilter def get_queryset(self): return self.request.organizer.webhooks.prefetch_related('listeners') diff --git a/src/tests/api/test_webhooks.py b/src/tests/api/test_webhooks.py index 01a0a087c..c13e34015 100644 --- a/src/tests/api/test_webhooks.py +++ b/src/tests/api/test_webhooks.py @@ -60,6 +60,11 @@ def test_hook_list(token_client, organizer, event, webhook): assert resp.status_code == 200 assert [res] == resp.data['results'] + resp = token_client.get('/api/v1/organizers/{}/webhooks/?enabled=true'.format(organizer.slug)) + assert [res] == resp.data['results'] + resp = token_client.get('/api/v1/organizers/{}/webhooks/?enabled=false'.format(organizer.slug)) + assert [] == resp.data['results'] + @pytest.mark.django_db def test_hook_detail(token_client, organizer, event, webhook):