diff --git a/pydis_site/apps/resources/tests/test_views.py b/pydis_site/apps/resources/tests/test_views.py index a2a203ce9..9501f9d0b 100644 --- a/pydis_site/apps/resources/tests/test_views.py +++ b/pydis_site/apps/resources/tests/test_views.py @@ -27,3 +27,15 @@ def test_resources_with_invalid_argument(self): url = reverse("resources:index", kwargs={"resource_type": "urinal-cake"}) response = self.client.get(url) self.assertEqual(response.status_code, 404) + + +class TestResourceFilterView(TestCase): + def test_resource_filter_response(self): + """Check that the filter endpoint returns JSON-formatted filters.""" + url = reverse('resources:filters') + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + content = response.json() + self.assertIn('difficulty', content) + self.assertIsInstance(content['difficulty'], list) + breakpoint() diff --git a/pydis_site/apps/resources/urls.py b/pydis_site/apps/resources/urls.py index cb33a9d70..3a10d1083 100644 --- a/pydis_site/apps/resources/urls.py +++ b/pydis_site/apps/resources/urls.py @@ -1,11 +1,12 @@ from django_distill import distill_path -from pydis_site.apps.resources.views import ResourceView +from pydis_site.apps.resources.views import ResourceView, ResourceFilterView app_name = "resources" urlpatterns = [ # Using `distill_path` instead of `path` allows this to be available # in static preview builds. distill_path("", ResourceView.as_view(), name="index"), + distill_path("filters", ResourceFilterView.as_view(), name="filters"), distill_path("/", ResourceView.as_view(), name="index"), ] diff --git a/pydis_site/apps/resources/views.py b/pydis_site/apps/resources/views.py index 3632b2e29..6683299f4 100644 --- a/pydis_site/apps/resources/views.py +++ b/pydis_site/apps/resources/views.py @@ -2,7 +2,7 @@ from django.apps import apps from django.core.handlers.wsgi import WSGIRequest -from django.http import HttpResponse, HttpResponseNotFound +from django.http import HttpResponse, HttpResponseNotFound, JsonResponse from django.shortcuts import render from django.views import View @@ -38,3 +38,12 @@ def get(self, request: WSGIRequest, resource_type: str | None = None) -> HttpRes "resource_type": resource_type, } ) + + +class ResourceFilterView(View): + """Exposes resource filters for the bot.""" + + def get(self, request: WSGIRequest) -> HttpResponse: + """Return resource filters as JSON.""" + app = apps.get_app_config(APP_NAME) + return JsonResponse(app.valid_filters)