Skip to content

Commit 6f76d19

Browse files
Add routes to test_project (#212)
* Add routes to test_project * Add tests * Format
1 parent 313684d commit 6f76d19

File tree

4 files changed

+55
-2
lines changed

4 files changed

+55
-2
lines changed

test_project/project/urls.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11
from django.contrib import admin
22
from django.urls import path
33

4-
urlpatterns = [path("admin/", admin.site.urls)]
4+
from . import views
5+
6+
urlpatterns = [
7+
path("admin/", admin.site.urls),
8+
path("api/public/", views.PublicAPIView.as_view()),
9+
path("api/protected/", views.ProtectedAPIView.as_view()),
10+
path("api/protected/object/", views.ProtectedObjectAPIView.as_view()),
11+
]

test_project/project/views.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from rest_framework.request import Request
2+
from rest_framework.response import Response
3+
from rest_framework.views import APIView
4+
from test_project.heroes.permissions import HasHeroAPIKey
5+
6+
7+
class PublicAPIView(APIView):
8+
def get(self, request: Request) -> Response:
9+
return Response({"message": "Hello, world!"})
10+
11+
12+
class ProtectedAPIView(APIView):
13+
permission_classes = [HasHeroAPIKey]
14+
15+
def get(self, request: Request) -> Response:
16+
return Response({"message": "Hello, world!"})
17+
18+
19+
class ProtectedObjectAPIView(APIView):
20+
permission_classes = [HasHeroAPIKey]
21+
22+
def get(self, request: Request) -> Response:
23+
self.check_object_permissions(request, object())
24+
return Response({"message": "Hello, world!"})

tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ def pytest_configure() -> None:
3939
],
4040
"MIDDLEWARE": [
4141
# Admin
42-
"django.contrib.messages.middleware.MessageMiddleware",
4342
"django.contrib.sessions.middleware.SessionMiddleware",
43+
"django.contrib.messages.middleware.MessageMiddleware",
4444
"django.contrib.auth.middleware.AuthenticationMiddleware",
4545
],
4646
"ROOT_URLCONF": "test_project.project.urls",

tests/test_test_project.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import pytest
2+
from rest_framework.test import APIClient
3+
from test_project.heroes.models import Hero
4+
from test_project.heroes.permissions import HeroAPIKey
5+
6+
7+
@pytest.mark.django_db
8+
def test_test_project_routes() -> None:
9+
batman = Hero.objects.create(name="Batman")
10+
_, key = HeroAPIKey.objects.create_key(name="test", hero=batman)
11+
headers = {"HTTP_AUTHORIZATION": f"Api-Key {key}"}
12+
13+
client = APIClient()
14+
15+
response = client.get("/api/public/", format="json")
16+
assert response.status_code == 200
17+
18+
response = client.get("/api/protected/", format="json", **headers)
19+
assert response.status_code == 200
20+
21+
response = client.get("/api/protected/object/", format="json", **headers)
22+
assert response.status_code == 200

0 commit comments

Comments
 (0)