Skip to content

Commit fec8a04

Browse files
committed
added view precedence test
1 parent 736837f commit fec8a04

File tree

1 file changed

+49
-7
lines changed

1 file changed

+49
-7
lines changed

example/tests/integration/test_model_resource_name.py

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from example.tests.utils import load_json
55

66
from rest_framework.test import APITestCase
7-
from example import models, serializers
7+
from example import models, serializers, views
88
pytestmark = pytest.mark.django_db
99

1010

@@ -13,17 +13,58 @@ class JSONAPIMeta:
1313
resource_name = "resource_name_from_JSONAPIMeta"
1414

1515

16-
def test_match_model_resource_name_on_list(single_entry, client):
17-
models.Comment.__bases__ += (_PatchedModel,)
18-
response = client.get(reverse("comment-list"))
19-
data = load_json(response.content)['data']
20-
# name should be super-author instead of model name RenamedAuthor
21-
assert [x.get('type') for x in data] == ['resource_name_from_JSONAPIMeta'], 'List included types are incorrect'
16+
@pytest.mark.usefixtures("single_entry")
17+
class ModelResourceNameTests(APITestCase):
18+
def test_model_resource_name_on_list(self):
19+
models.Comment.__bases__ += (_PatchedModel,)
20+
response = self.client.get(reverse("comment-list"))
21+
data = load_json(response.content)['data'][0]
22+
# name should be super-author instead of model name RenamedAuthor
23+
assert (data.get('type') == 'resource_name_from_JSONAPIMeta'), (
24+
'resource_name from model incorrect on list')
25+
26+
# Precedence tests
27+
def test_resource_name_precendence(self):
28+
# default
29+
response = self.client.get(reverse("comment-list"))
30+
data = load_json(response.content)['data'][0]
31+
assert (data.get('type') == 'comments'), (
32+
'resource_name from model incorrect on list')
33+
34+
# model > default
35+
models.Comment.__bases__ += (_PatchedModel,)
36+
response = self.client.get(reverse("comment-list"))
37+
data = load_json(response.content)['data'][0]
38+
assert (data.get('type') == 'resource_name_from_JSONAPIMeta'), (
39+
'resource_name from model incorrect on list')
40+
41+
# serializer > model
42+
serializers.CommentSerializer.Meta.resource_name = "resource_name_from_serializer"
43+
response = self.client.get(reverse("comment-list"))
44+
data = load_json(response.content)['data'][0]
45+
assert (data.get('type') == 'resource_name_from_serializer'), (
46+
'resource_name from serializer incorrect on list')
47+
48+
# view > serializer > model
49+
views.CommentViewSet.resource_name = 'resource_name_from_view'
50+
response = self.client.get(reverse("comment-list"))
51+
data = load_json(response.content)['data'][0]
52+
assert (data.get('type') == 'resource_name_from_view'), (
53+
'resource_name from model incorrect on list')
54+
55+
def tearDown(self):
56+
models.Comment.__bases__ = (models.Comment.__bases__[0],)
57+
try:
58+
delattr(serializers.CommentSerializer.Meta, "resource_name")
59+
delattr(views.CommentViewSet, "resource_name")
60+
except AttributeError:
61+
pass
2262

2363

2464
@pytest.mark.usefixtures("single_entry")
2565
class ResourceNameConsistencyTest(APITestCase):
2666

67+
# Included rename tests
2768
def test_type_match_on_included_and_inline_base(self):
2869
self._check_relationship_and_included_comment_type_are_the_same(reverse("entry-list"))
2970

@@ -43,6 +84,7 @@ def test_type_match_on_included_and_inline_with_serializer_resource_name_and_JSO
4384

4485
self._check_relationship_and_included_comment_type_are_the_same(reverse("entry-list"))
4586

87+
# Relation rename tests
4688
def test_resource_and_relationship_type_match(self):
4789
self._check_resource_and_relationship_comment_type_match()
4890

0 commit comments

Comments
 (0)