File tree Expand file tree Collapse file tree 4 files changed +55
-2
lines changed
Expand file tree Collapse file tree 4 files changed +55
-2
lines changed Original file line number Diff line number Diff line change 11from django .contrib import admin
22from 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+ ]
Original file line number Diff line number Diff line change 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!" })
Original file line number Diff line number Diff 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" ,
Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments