11import pytest
2- from django .core .urlresolvers import reverse
2+ from copy import deepcopy
3+ from example import models , serializers , views
4+ from example .tests .utils import dump_json , load_json
5+ from rest_framework import status
36
4- from example . tests . utils import load_json
7+ from django . core . urlresolvers import reverse
58
6- from example import models , serializers , views
79pytestmark = pytest .mark .django_db
810
911
@@ -37,6 +39,24 @@ def _check_relationship_and_included_comment_type_are_the_same(django_client, ur
3739@pytest .mark .usefixtures ("single_entry" )
3840class TestModelResourceName :
3941
42+ create_data = {
43+ 'data' : {
44+ 'type' : 'resource_name_from_JSONAPIMeta' ,
45+ 'id' : None ,
46+ 'attributes' : {
47+ 'body' : 'example' ,
48+ },
49+ 'relationships' : {
50+ 'entry' : {
51+ 'data' : {
52+ 'type' : 'resource_name_from_JSONAPIMeta' ,
53+ 'id' : 1
54+ }
55+ }
56+ }
57+ }
58+ }
59+
4060 def test_model_resource_name_on_list (self , client ):
4161 models .Comment .__bases__ += (_PatchedModel ,)
4262 response = client .get (reverse ("comment-list" ))
@@ -46,7 +66,7 @@ def test_model_resource_name_on_list(self, client):
4666 'resource_name from model incorrect on list' )
4767
4868 # Precedence tests
49- def test_resource_name_precendence (self , client ):
69+ def test_resource_name_precendence (self , client , monkeypatch ):
5070 # default
5171 response = client .get (reverse ("comment-list" ))
5272 data = load_json (response .content )['data' ][0 ]
@@ -61,29 +81,44 @@ def test_resource_name_precendence(self, client):
6181 'resource_name from model incorrect on list' )
6282
6383 # serializer > model
64- serializers .CommentSerializer .Meta . resource_name = " resource_name_from_serializer"
84+ monkeypatch . setattr ( serializers .CommentSerializer .Meta , ' resource_name' , ' resource_name_from_serializer' , False )
6585 response = client .get (reverse ("comment-list" ))
6686 data = load_json (response .content )['data' ][0 ]
6787 assert (data .get ('type' ) == 'resource_name_from_serializer' ), (
6888 'resource_name from serializer incorrect on list' )
6989
7090 # view > serializer > model
71- views .CommentViewSet . resource_name = 'resource_name_from_view'
91+ monkeypatch . setattr ( views .CommentViewSet , ' resource_name' , 'resource_name_from_view' , False )
7292 response = client .get (reverse ("comment-list" ))
7393 data = load_json (response .content )['data' ][0 ]
7494 assert (data .get ('type' ) == 'resource_name_from_view' ), (
7595 'resource_name from view incorrect on list' )
7696
97+ def test_model_resource_name_create (self , client ):
98+ models .Comment .__bases__ += (_PatchedModel ,)
99+ models .Entry .__bases__ += (_PatchedModel ,)
100+ response = client .post (reverse ("comment-list" ),
101+ dump_json (self .create_data ),
102+ content_type = 'application/vnd.api+json' )
103+
104+ assert response .status_code == status .HTTP_201_CREATED
105+
106+ def test_serializer_resource_name_create (self , client , monkeypatch ):
107+ monkeypatch .setattr (serializers .CommentSerializer .Meta , 'resource_name' , 'renamed_comments' , False )
108+ monkeypatch .setattr (serializers .EntrySerializer .Meta , 'resource_name' , 'renamed_entries' , False )
109+ create_data = deepcopy (self .create_data )
110+ create_data ['data' ]['type' ] = 'renamed_comments'
111+ create_data ['data' ]['relationships' ]['entry' ]['data' ]['type' ] = 'renamed_entries'
112+
113+ response = client .post (reverse ("comment-list" ),
114+ dump_json (create_data ),
115+ content_type = 'application/vnd.api+json' )
116+
117+ assert response .status_code == status .HTTP_201_CREATED
118+
77119 def teardown_method (self , method ):
78120 models .Comment .__bases__ = (models .Comment .__bases__ [0 ],)
79- try :
80- delattr (serializers .CommentSerializer .Meta , "resource_name" )
81- except AttributeError :
82- pass
83- try :
84- delattr (views .CommentViewSet , "resource_name" )
85- except AttributeError :
86- pass
121+ models .Entry .__bases__ = (models .Entry .__bases__ [0 ],)
87122
88123
89124@pytest .mark .usefixtures ("single_entry" )
0 commit comments