Skip to content
This repository has been archived by the owner on Nov 19, 2023. It is now read-only.

Commit

Permalink
example of failing test on related_field
Browse files Browse the repository at this point in the history
  • Loading branch information
Darragh Duffy committed Nov 23, 2022
1 parent 1929ad3 commit 0fc4214
Show file tree
Hide file tree
Showing 6 changed files with 86 additions and 65 deletions.
89 changes: 25 additions & 64 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,12 @@ prance = "*"
pyYAML = "*"
drf-spectacular = { version = "*", optional = true }
drf-yasg = { version = "*", optional = true }
djangorestframework-jsonapi = { version = "*", optional = true }

[tool.poetry.extras]
drf-yasg = ["drf-yasg"]
drf-spectacular = ["drf-spectacular"]
djangorestframework-jsonapi = ["djangorestframework-jsonapi"]

[tool.poetry.dev-dependencies]
coverage = { extras = ["toml"], version = "^6" }
Expand Down
6 changes: 6 additions & 0 deletions test_project/api/views/teams.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from rest_framework_json_api.views import RelationshipView
from rest_framework.views import Response

class TeamMembersRelationshipView(RelationshipView):
def post(self, request, *args, **kwargs):
return Response({}, 200)
8 changes: 7 additions & 1 deletion test_project/urls.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.conf.urls.i18n import i18n_patterns
from django.urls import include, path
from django.urls import include, path, re_path
from drf_yasg import openapi
from drf_yasg.views import get_schema_view
from rest_framework import permissions, routers
Expand All @@ -13,6 +13,7 @@
from test_project.api.views.names import EmptyNameViewSet, NamesRetrieveView, NameViewSet
from test_project.api.views.products import Products
from test_project.api.views.snake_cased_response import SnakeCasedResponse
from test_project.api.views.teams import TeamMembersRelationshipView
from test_project.api.views.trucks import BadTrucks, GoodTrucks
from test_project.api.views.vehicles import Vehicles

Expand All @@ -34,6 +35,11 @@
path("api/<str:version>/snake-case/", SnakeCasedResponse.as_view()),
# ^trailing slash is here on purpose
path("api/<str:version>/router_generated/", include(router.urls)),
re_path(
r"api/(?P<version>v\d+)/team/(?P<pk>\d+)/relationships/(?P<related_field>[-\w]+)",
TeamMembersRelationshipView.as_view(),
name="team-members-relation",
),
]

internationalised_urlpatterns = i18n_patterns(
Expand Down
14 changes: 14 additions & 0 deletions tests/schemas/manual_reference_schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -263,3 +263,17 @@ paths:
responses:
'200':
description: ''
/api/v1/teams/{pk}/relationships/members:
post:
operationId: addTeamMembers
description: ''
parameters:
- in: path
name: pk
schema:
type: integer
description: A unique value identifying this team.
required: true
responses:
'200':
description: ''
32 changes: 32 additions & 0 deletions tests/test_django_framework.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from openapi_tester import SchemaTester
from django.urls import reverse
from rest_framework.test import APITestCase
from rest_framework.response import Response
from tests.utils import TEST_ROOT

schema_tester = SchemaTester(schema_file_path=str(TEST_ROOT) + "/schemas/manual_reference_schema.yaml")

class BaseAPITestCase(APITestCase):
"""Base test class for api views including schema validation"""

@staticmethod
def assertResponse(response: Response, **kwargs) -> None:
"""helper to run validate_response and pass kwargs to it"""
schema_tester.validate_response(response=response, **kwargs)

# @override_settings(USE_X_FORWARDED_HOST=True)
class TeamsAPITests(BaseAPITestCase):
def test_schema_using_assert_response(self):
response = self.client.post(
reverse(
"team-members-relation",
kwargs={
"version": "v1",
"pk": 1,
"related_field": "members",
},
),
content_type="application/vnd.api+json",
)
self.assertEqual(response.status_code, 200)
self.assertResponse(response)

0 comments on commit 0fc4214

Please sign in to comment.