Skip to content

Commit db139e0

Browse files
author
Boris Pleshakov
committed
+ tests for relations strategy
1 parent 5a9f1e5 commit db139e0

File tree

2 files changed

+123
-2
lines changed

2 files changed

+123
-2
lines changed

example/serializers.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,10 @@ def get_first_entry(self, obj):
261261
class CommentWithNestedFieldsSerializer(serializers.ModelSerializer):
262262
entry = EntryDRFSerializers()
263263

264+
included_serializers = {
265+
'entry': 'example.serializers.EntryDRFSerializers'
266+
}
267+
264268
class Meta:
265269
model = Comment
266270
exclude = ('created_at', 'modified_at', 'author')
@@ -270,6 +274,10 @@ class Meta:
270274
class AuthorWithNestedFieldsSerializer(serializers.ModelSerializer):
271275
comments = CommentWithNestedFieldsSerializer(many=True)
272276

277+
included_serializers = {
278+
'comments': 'example.serializers.CommentWithNestedFieldsSerializer'
279+
}
280+
273281
class Meta:
274282
model = Author
275283
fields = ('name', 'email', 'comments')

example/tests/test_rendering_strategies.py

Lines changed: 115 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
from django.utils import timezone
55
from rest_framework.reverse import reverse
66

7-
from rest_framework_json_api.settings import JSONAPISettings
7+
from rest_framework_json_api.settings import JSONAPISettings, \
8+
ATTRIBUTE_RENDERING_STRATEGY, RELATIONS_RENDERING_STRATEGY
89
from . import TestBase
910
from example.models import Author, Blog, Comment, Entry
1011
from django.test import override_settings
@@ -39,7 +40,7 @@ def setUp(self):
3940
)
4041

4142
def test_attribute_rendering_strategy(self):
42-
with override_settings(JSON_API_NESTED_SERIALIZERS_RENDERING_STRATEGY='ATTRIBUTE'):
43+
with override_settings(JSON_API_NESTED_SERIALIZERS_RENDERING_STRATEGY=ATTRIBUTE_RENDERING_STRATEGY):
4344
response = self.client.get(self.list_url)
4445

4546
expected = {
@@ -79,6 +80,118 @@ def test_attribute_rendering_strategy(self):
7980
}
8081
assert expected == response.json()
8182

83+
def test_relations_rendering_strategy(self):
84+
with override_settings(JSON_API_NESTED_SERIALIZERS_RENDERING_STRATEGY=RELATIONS_RENDERING_STRATEGY):
85+
response = self.client.get(self.list_url)
86+
87+
expected = {
88+
"links": {
89+
"first": "http://testserver/authors-nested?page%5Bnumber%5D=1",
90+
"last": "http://testserver/authors-nested?page%5Bnumber%5D=5",
91+
"next": "http://testserver/authors-nested?page%5Bnumber%5D=2",
92+
"prev": None
93+
},
94+
"data": [
95+
{
96+
"type": "authors",
97+
"id": "1",
98+
"attributes": {
99+
"name": "some_author1",
100+
"email": "[email protected]"
101+
},
102+
"relationships": {
103+
"comments": {
104+
"data": [
105+
{
106+
"type": "comments",
107+
"id": "1"
108+
}
109+
]
110+
}
111+
}
112+
}
113+
],
114+
"meta": {
115+
"pagination": {
116+
"page": 1,
117+
"pages": 5,
118+
"count": 5
119+
}
120+
}
121+
}
122+
assert expected == response.json()
123+
124+
def test_relations_rendering_strategy_included(self):
125+
with override_settings(JSON_API_NESTED_SERIALIZERS_RENDERING_STRATEGY=RELATIONS_RENDERING_STRATEGY):
126+
response = self.client.get(self.list_url, data={'include': 'comments,comments.entry'})
127+
128+
expected = {
129+
"links": {
130+
"first": "http://testserver/authors-nested?include=comments%2Ccomments.entry&page%5Bnumber%5D=1",
131+
"last": "http://testserver/authors-nested?include=comments%2Ccomments.entry&page%5Bnumber%5D=5",
132+
"next": "http://testserver/authors-nested?include=comments%2Ccomments.entry&page%5Bnumber%5D=2",
133+
"prev": None
134+
},
135+
"data": [
136+
{
137+
"type": "authors",
138+
"id": "1",
139+
"attributes": {
140+
"name": "some_author1",
141+
"email": "[email protected]"
142+
},
143+
"relationships": {
144+
"comments": {
145+
"data": [
146+
{
147+
"type": "comments",
148+
"id": "1"
149+
}
150+
]
151+
}
152+
}
153+
}
154+
],
155+
"included": [
156+
{
157+
"type": "comments",
158+
"id": "1",
159+
"attributes": {
160+
"body": "testing one two three"
161+
},
162+
"relationships": {
163+
"entry": {
164+
"data": {
165+
"type": "entries",
166+
"id": "1"
167+
}
168+
}
169+
}
170+
},
171+
{
172+
"type": "entries",
173+
"id": "1",
174+
"attributes": {},
175+
"relationships": {
176+
"tags": {
177+
"data": []
178+
}
179+
},
180+
"links": {
181+
"self": "http://testserver/drf-blogs/1"
182+
}
183+
}
184+
],
185+
"meta": {
186+
"pagination": {
187+
"page": 1,
188+
"pages": 5,
189+
"count": 5
190+
}
191+
}
192+
}
193+
assert expected == response.json()
194+
82195

83196
class TestRenderingStrategySettings(TestBase):
84197

0 commit comments

Comments
 (0)