Skip to content

Commit ce945f2

Browse files
committed
Merge pull request #164 from django-json-api/feature/utils_overrides
Make the renderer subclassable
2 parents 0ceeddd + 7e4b239 commit ce945f2

File tree

4 files changed

+362
-355
lines changed

4 files changed

+362
-355
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import pytest
2+
from django.contrib.auth import get_user_model
3+
4+
from rest_framework_json_api import serializers
5+
from rest_framework_json_api.renderers import JSONRenderer
6+
7+
pytestmark = pytest.mark.django_db
8+
9+
class ResourceSerializer(serializers.ModelSerializer):
10+
class Meta:
11+
fields = ('username',)
12+
model = get_user_model()
13+
14+
15+
def test_build_json_resource_obj():
16+
resource = {
17+
'pk': 1,
18+
'username': 'Alice',
19+
}
20+
21+
serializer = ResourceSerializer(data={'username': 'Alice'})
22+
serializer.is_valid()
23+
resource_instance = serializer.save()
24+
25+
output = {
26+
'type': 'user',
27+
'id': '1',
28+
'attributes': {
29+
'username': 'Alice'
30+
},
31+
}
32+
33+
assert JSONRenderer.build_json_resource_obj(
34+
serializer.fields, resource, resource_instance, 'user') == output
35+
36+
37+
def test_extract_attributes():
38+
fields = {
39+
'id': serializers.Field(),
40+
'username': serializers.Field(),
41+
'deleted': serializers.ReadOnlyField(),
42+
}
43+
resource = {'id': 1, 'deleted': None, 'username': 'jerel'}
44+
expected = {
45+
'username': 'jerel',
46+
'deleted': None
47+
}
48+
assert sorted(JSONRenderer.extract_attributes(fields, resource)) == sorted(expected), 'Regular fields should be extracted'
49+
assert sorted(JSONRenderer.extract_attributes(fields, {})) == sorted(
50+
{'username': ''}), 'Should not extract read_only fields on empty serializer'

example/tests/unit/test_utils.py

+1-39
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717

1818
class ResourceSerializer(serializers.ModelSerializer):
19-
class Meta():
19+
class Meta:
2020
fields = ('username',)
2121
model = get_user_model()
2222

@@ -86,44 +86,6 @@ def test_format_relation_name():
8686
assert utils.format_relation_name('first_name', 'camelize') == 'firstNames'
8787

8888

89-
def test_build_json_resource_obj():
90-
resource = {
91-
'pk': 1,
92-
'username': 'Alice',
93-
}
94-
95-
serializer = ResourceSerializer(data={'username': 'Alice'})
96-
serializer.is_valid()
97-
resource_instance = serializer.save()
98-
99-
output = {
100-
'type': 'user',
101-
'id': '1',
102-
'attributes': {
103-
'username': 'Alice'
104-
},
105-
}
106-
107-
assert utils.build_json_resource_obj(
108-
serializer.fields, resource, resource_instance, 'user') == output
109-
110-
111-
def test_extract_attributes():
112-
fields = {
113-
'id': serializers.Field(),
114-
'username': serializers.Field(),
115-
'deleted': serializers.ReadOnlyField(),
116-
}
117-
resource = {'id': 1, 'deleted': None, 'username': 'jerel'}
118-
expected = {
119-
'username': 'jerel',
120-
'deleted': None
121-
}
122-
assert sorted(utils.extract_attributes(fields, resource)) == sorted(expected), 'Regular fields should be extracted'
123-
assert sorted(utils.extract_attributes(fields, {})) == sorted(
124-
{'username': ''}), 'Should not extract read_only fields on empty serializer'
125-
126-
12789
class SerializerWithIncludedSerializers(EntrySerializer):
12890
included_serializers = {
12991
'blog': BlogSerializer,

0 commit comments

Comments
 (0)