diff --git a/src/pwa/_compat.py b/src/pwa/_compat.py new file mode 100644 index 0000000..977c39a --- /dev/null +++ b/src/pwa/_compat.py @@ -0,0 +1,13 @@ +import django + +if django.VERSION >= (5, 1): + from django.contrib.auth.decorators import login_not_required +else: + + def login_not_required(view_func): + return view_func + + +__all__ = [ + "login_not_required", +] diff --git a/src/pwa/views.py b/src/pwa/views.py index 3a0c274..7cfff51 100644 --- a/src/pwa/views.py +++ b/src/pwa/views.py @@ -2,8 +2,10 @@ from django.shortcuts import render from . import app_settings +from ._compat import login_not_required +@login_not_required def service_worker(request): # noqa: ARG001 with open(app_settings.PWA_SERVICE_WORKER_PATH) as serviceworker_file: return HttpResponse( @@ -12,6 +14,7 @@ def service_worker(request): # noqa: ARG001 ) +@login_not_required def manifest(request): return render( request, @@ -25,5 +28,6 @@ def manifest(request): ) +@login_not_required def offline(request): return render(request, "offline.html") diff --git a/tests/test_view.py b/tests/test_view.py index a1b1803..6471751 100644 --- a/tests/test_view.py +++ b/tests/test_view.py @@ -1,5 +1,8 @@ from http import HTTPStatus +import django +import pytest +from django.test import modify_settings from django.urls import reverse from pytest_django.asserts import assertContains, assertTemplateUsed @@ -10,6 +13,18 @@ def test_service_worker_get(client): assert response.status_code == HTTPStatus.OK +@pytest.mark.skipif(django.VERSION < (5, 1), reason="LoginRequiredMiddleware was introduced on Django 5.1") +def test_service_worker_get_unauthenticated(client): + with modify_settings( + MIDDLEWARE={ + "append": "django.contrib.auth.middleware.LoginRequiredMiddleware", + } + ): + response = client.get(reverse("pwa:serviceworker")) + + assert response.status_code == HTTPStatus.OK + + def test_manifest_get(client): response = client.get(reverse("pwa:manifest"), format="json") @@ -37,7 +52,27 @@ def test_manifest_get(client): assertContains(response, expected) +@pytest.mark.skipif(django.VERSION < (5, 1), reason="LoginRequiredMiddleware was introduced on Django 5.1") +def test_manifest_get_unauthenticated(client): + response = client.get(reverse("pwa:manifest"), format="json") + + assert response.status_code == HTTPStatus.OK + assert response["content-type"] == "application/json" + + def test_offline_get(client): response = client.get(reverse("pwa:offline"), format="json") assert response.status_code == HTTPStatus.OK + + +@pytest.mark.skipif(django.VERSION < (5, 1), reason="LoginRequiredMiddleware was introduced on Django 5.1") +def test_offline_get_unauthenticated(client): + with modify_settings( + MIDDLEWARE={ + "append": "django.contrib.auth.middleware.LoginRequiredMiddleware", + } + ): + response = client.get(reverse("pwa:offline"), format="json") + + assert response.status_code == HTTPStatus.OK