Skip to content

Commit ab9a1ae

Browse files
author
Boris Pleshakov
committed
f tests
f json_api settings f pytest.ini
1 parent 9071b4f commit ab9a1ae

File tree

9 files changed

+108
-272
lines changed

9 files changed

+108
-272
lines changed

example/serializers.py

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -258,31 +258,6 @@ def get_first_entry(self, obj):
258258
return obj.entries.first()
259259

260260

261-
class CommentWithNestedFieldsSerializer(serializers.ModelSerializer):
262-
entry = EntryDRFSerializers()
263-
264-
included_serializers = {
265-
'entry': 'example.serializers.EntryDRFSerializers'
266-
}
267-
268-
class Meta:
269-
model = Comment
270-
exclude = ('created_at', 'modified_at', 'author')
271-
# fields = ('entry', 'body', 'author',)
272-
273-
274-
class AuthorWithNestedFieldsSerializer(serializers.ModelSerializer):
275-
comments = CommentWithNestedFieldsSerializer(many=True)
276-
277-
included_serializers = {
278-
'comments': 'example.serializers.CommentWithNestedFieldsSerializer'
279-
}
280-
281-
class Meta:
282-
model = Author
283-
fields = ('name', 'email', 'comments')
284-
285-
286261
class WriterSerializer(serializers.ModelSerializer):
287262
included_serializers = {
288263
'bio': AuthorBioSerializer

example/tests/test_rendering_strategies.py

Lines changed: 0 additions & 209 deletions
This file was deleted.

example/tests/unit/test_renderers.py

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import json
22

33
import pytest
4+
from django.test import override_settings
5+
from django.utils import timezone
46

7+
from example.tests import TestBase
58
from rest_framework_json_api import serializers, views
69
from rest_framework_json_api.renderers import JSONRenderer
710

8-
from example.models import Author, Comment, Entry
11+
from example.models import Author, Comment, Entry, Blog
912

1013

1114
# serializers
@@ -38,6 +41,31 @@ class JSONAPIMeta:
3841
included_resources = ('related_models',)
3942

4043

44+
class EntryDRFSerializers(serializers.ModelSerializer):
45+
46+
class Meta:
47+
model = Entry
48+
fields = ('headline', 'body_text')
49+
read_only_fields = ('tags',)
50+
51+
52+
class CommentWithNestedFieldsSerializer(serializers.ModelSerializer):
53+
entry = EntryDRFSerializers()
54+
55+
class Meta:
56+
model = Comment
57+
exclude = ('created_at', 'modified_at', 'author')
58+
# fields = ('entry', 'body', 'author',)
59+
60+
61+
class AuthorWithNestedFieldsSerializer(serializers.ModelSerializer):
62+
comments = CommentWithNestedFieldsSerializer(many=True)
63+
64+
class Meta:
65+
model = Author
66+
fields = ('name', 'email', 'comments')
67+
68+
4169
# views
4270
class DummyTestViewSet(views.ModelViewSet):
4371
queryset = Entry.objects.all()
@@ -49,6 +77,12 @@ class ReadOnlyDummyTestViewSet(views.ReadOnlyModelViewSet):
4977
serializer_class = DummyTestSerializer
5078

5179

80+
class AuthorWithNestedFieldsViewSet(views.ModelViewSet):
81+
queryset = Author.objects.all()
82+
serializer_class = AuthorWithNestedFieldsSerializer
83+
resource_name = 'authors'
84+
85+
5286
def render_dummy_test_serialized_view(view_class, instance):
5387
serializer = view_class.serializer_class(instance=instance)
5488
renderer = JSONRenderer()
@@ -138,3 +172,57 @@ def test_extract_relation_instance(comment):
138172
field=serializer.fields['blog'], resource_instance=comment
139173
)
140174
assert got == comment.entry.blog
175+
176+
177+
class TestRenderingStrategy(TestBase):
178+
179+
def setUp(self):
180+
super(TestRenderingStrategy, self).setUp()
181+
self.blog = Blog.objects.create(name='Some Blog', tagline="It's a blog")
182+
self.entry = Entry.objects.create(
183+
blog=self.blog,
184+
headline='headline',
185+
body_text='body_text',
186+
pub_date=timezone.now(),
187+
mod_date=timezone.now(),
188+
n_comments=0,
189+
n_pingbacks=0,
190+
rating=3
191+
)
192+
193+
self.author = Author.objects.create(name='some_author', email='[email protected]')
194+
self.entry.authors.add(self.author)
195+
196+
self.comment = Comment.objects.create(
197+
entry=self.entry,
198+
body='testing one two three',
199+
author=Author.objects.first()
200+
)
201+
202+
def test_attribute_rendering_strategy(self):
203+
with override_settings(
204+
JSON_API_SERIALIZE_NESTED_SERIALIZERS_AS_ATTRIBUTE=True):
205+
rendered = render_dummy_test_serialized_view(AuthorWithNestedFieldsViewSet, self.author)
206+
result = json.loads(rendered.decode())
207+
208+
expected = {
209+
"data": {
210+
"type": "authors",
211+
"id": "1",
212+
"attributes": {
213+
"name": "some_author",
214+
"email": "[email protected]",
215+
"comments": [
216+
{
217+
"id": 1,
218+
"entry": {
219+
'headline': 'headline',
220+
'body_text': 'body_text',
221+
},
222+
"body": "testing one two three"
223+
}
224+
]
225+
}
226+
}
227+
}
228+
self.assertDictEqual(expected, result)

example/urls_test.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@
1818
NoFiltersetEntryViewSet,
1919
NonPaginatedEntryViewSet,
2020
ProjectTypeViewset,
21-
ProjectViewset,
22-
AuthorWithNestedFieldsViewSet
21+
ProjectViewset
2322
)
2423

2524
router = routers.DefaultRouter(trailing_slash=False)
@@ -33,7 +32,6 @@
3332
router.register(r'filterset-entries', FiltersetEntryViewSet, 'filterset-entry')
3433
router.register(r'nofilterset-entries', NoFiltersetEntryViewSet, 'nofilterset-entry')
3534
router.register(r'authors', AuthorViewSet)
36-
router.register(r'authors-nested', AuthorWithNestedFieldsViewSet, 'authors-nested')
3735
router.register(r'comments', CommentViewSet)
3836
router.register(r'companies', CompanyViewset)
3937
router.register(r'projects', ProjectViewset)

0 commit comments

Comments
 (0)