Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9d200f2

Browse files
slivercmblayman
authored andcommitted
Allow json api renderer to be used as test request renderer class (#396)
* Allow json api renderer to be used as test request renderer class * Convert non paginated response test to use APIClient
1 parent f0641bf commit 9d200f2

19 files changed

+112
-196
lines changed

‎example/settings/dev.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,8 @@
8888
'rest_framework.renderers.BrowsableAPIRenderer',
8989
),
9090
'DEFAULT_METADATA_CLASS': 'rest_framework_json_api.metadata.JSONAPIMetadata',
91+
'TEST_REQUEST_RENDERER_CLASSES': (
92+
'rest_framework_json_api.renderers.JSONRenderer',
93+
),
94+
'TEST_REQUEST_DEFAULT_FORMAT': 'vnd.api+json'
9195
}

‎example/tests/conftest.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import pytest
22
from pytest_factoryboy import register
3+
from rest_framework.test import APIClient
34

45
from example.factories import (
56
ArtProjectFactory,
@@ -56,3 +57,8 @@ def single_company(art_project_factory, research_project_factory, company_factor
5657
@pytest.fixture
5758
def single_art_project(art_project_factory):
5859
return art_project_factory()
60+
61+
62+
@pytest.fixture
63+
def client():
64+
return APIClient()

‎example/tests/integration/test_includes.py

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import pytest
22
from django.core.urlresolvers import reverse
33

4-
from example.tests.utils import load_json
5-
64
pytestmark = pytest.mark.django_db
75

86

@@ -14,9 +12,9 @@ def test_default_included_data_on_list(multiple_entries, client):
1412

1513
def test_included_data_on_list(multiple_entries, client, query='?include=comments&page_size=5'):
1614
response = client.get(reverse("entry-list") + query)
17-
included = load_json(response.content).get('included')
15+
included = response.json().get('included')
1816

19-
assert len(load_json(response.content)['data']) == len(multiple_entries), (
17+
assert len(response.json()['data']) == len(multiple_entries), (
2018
'Incorrect entry count'
2119
)
2220
assert [x.get('type') for x in included] == ['comments', 'comments'], (
@@ -34,7 +32,7 @@ def test_default_included_data_on_detail(single_entry, client):
3432

3533
def test_included_data_on_detail(single_entry, client, query='?include=comments'):
3634
response = client.get(reverse("entry-detail", kwargs={'pk': single_entry.pk}) + query)
37-
included = load_json(response.content).get('included')
35+
included = response.json().get('included')
3836

3937
assert [x.get('type') for x in included] == ['comments'], 'Detail included types are incorrect'
4038

@@ -48,7 +46,7 @@ def test_dynamic_related_data_is_included(single_entry, entry_factory, client):
4846
response = client.get(
4947
reverse("entry-detail", kwargs={'pk': single_entry.pk}) + '?include=featured'
5048
)
51-
included = load_json(response.content).get('included')
49+
included = response.json().get('included')
5250

5351
assert [x.get('type') for x in included] == ['entries'], 'Dynamic included types are incorrect'
5452
assert len(included) == 1, 'The dynamically included blog entries are of an incorrect count'
@@ -59,7 +57,7 @@ def test_dynamic_many_related_data_is_included(single_entry, entry_factory, clie
5957
response = client.get(
6058
reverse("entry-detail", kwargs={'pk': single_entry.pk}) + '?include=suggested'
6159
)
62-
included = load_json(response.content).get('included')
60+
included = response.json().get('included')
6361

6462
assert included
6563
assert [x.get('type') for x in included] == ['entries'], 'Dynamic included types are incorrect'
@@ -69,12 +67,11 @@ def test_missing_field_not_included(author_bio_factory, author_factory, client):
6967
# First author does not have a bio
7068
author = author_factory(bio=None)
7169
response = client.get(reverse('author-detail', args=[author.pk]) + '?include=bio')
72-
data = load_json(response.content)
73-
assert 'included' not in data
70+
assert 'included' not in response.json()
7471
# Second author does
7572
author = author_factory()
7673
response = client.get(reverse('author-detail', args=[author.pk]) + '?include=bio')
77-
data = load_json(response.content)
74+
data = response.json()
7875
assert 'included' in data
7976
assert len(data['included']) == 1
8077
assert data['included'][0]['attributes']['body'] == author.bio.body
@@ -83,9 +80,9 @@ def test_missing_field_not_included(author_bio_factory, author_factory, client):
8380
def test_deep_included_data_on_list(multiple_entries, client):
8481
response = client.get(reverse("entry-list") + '?include=comments,comments.author,'
8582
'comments.author.bio,comments.writer&page_size=5')
86-
included = load_json(response.content).get('included')
83+
included = response.json().get('included')
8784

88-
assert len(load_json(response.content)['data']) == len(multiple_entries), (
85+
assert len(response.json()['data']) == len(multiple_entries), (
8986
'Incorrect entry count'
9087
)
9188
assert [x.get('type') for x in included] == [
@@ -117,9 +114,9 @@ def test_deep_included_data_on_list(multiple_entries, client):
117114
# Also include entry authors
118115
response = client.get(reverse("entry-list") + '?include=authors,comments,comments.author,'
119116
'comments.author.bio&page_size=5')
120-
included = load_json(response.content).get('included')
117+
included = response.json().get('included')
121118

122-
assert len(load_json(response.content)['data']) == len(multiple_entries), (
119+
assert len(response.json()['data']) == len(multiple_entries), (
123120
'Incorrect entry count'
124121
)
125122
assert [x.get('type') for x in included] == [
@@ -138,7 +135,7 @@ def test_deep_included_data_on_detail(single_entry, client):
138135
# are returned along with the leaf nodes
139136
response = client.get(reverse("entry-detail", kwargs={'pk': single_entry.pk}) +
140137
'?include=comments,comments.author.bio')
141-
included = load_json(response.content).get('included')
138+
included = response.json().get('included')
142139

143140
assert [x.get('type') for x in included] == ['authorBios', 'authors', 'comments'], \
144141
'Detail included types are incorrect'

‎example/tests/integration/test_meta.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import pytest
44
from django.core.urlresolvers import reverse
55

6-
from example.tests.utils import load_json
7-
86
pytestmark = pytest.mark.django_db
97

108

@@ -42,9 +40,8 @@ def test_top_level_meta_for_list_view(blog, client):
4240
}
4341

4442
response = client.get(reverse("blog-list"))
45-
parsed_content = load_json(response.content)
4643

47-
assert expected == parsed_content
44+
assert expected == response.json()
4845

4946

5047
def test_top_level_meta_for_detail_view(blog, client):
@@ -74,6 +71,5 @@ def test_top_level_meta_for_detail_view(blog, client):
7471
}
7572

7673
response = client.get(reverse("blog-detail", kwargs={'pk': blog.pk}))
77-
parsed_content = load_json(response.content)
7874

79-
assert expected == parsed_content
75+
assert expected == response.json()

‎example/tests/integration/test_model_resource_name.py

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from rest_framework import status
66

77
from example import models, serializers, views
8-
from example.tests.utils import dump_json, load_json
98

109
pytestmark = pytest.mark.django_db
1110

@@ -19,8 +18,8 @@ def _check_resource_and_relationship_comment_type_match(django_client):
1918
entry_response = django_client.get(reverse("entry-list"))
2019
comment_response = django_client.get(reverse("comment-list"))
2120

22-
comment_resource_type = load_json(comment_response.content).get('data')[0].get('type')
23-
comment_relationship_type = load_json(entry_response.content).get(
21+
comment_resource_type = comment_response.json().get('data')[0].get('type')
22+
comment_relationship_type = entry_response.json().get(
2423
'data')[0].get('relationships').get('comments').get('data')[0].get('type')
2524

2625
assert comment_resource_type == comment_relationship_type, (
@@ -30,8 +29,8 @@ def _check_resource_and_relationship_comment_type_match(django_client):
3029

3130
def _check_relationship_and_included_comment_type_are_the_same(django_client, url):
3231
response = django_client.get(url + "?include=comments")
33-
data = load_json(response.content).get('data')[0]
34-
comment = load_json(response.content).get('included')[0]
32+
data = response.json().get('data')[0]
33+
comment = response.json().get('included')[0]
3534

3635
comment_relationship_type = data.get('relationships').get('comments').get('data')[0].get('type')
3736
comment_included_type = comment.get('type')
@@ -65,7 +64,7 @@ class TestModelResourceName:
6564
def test_model_resource_name_on_list(self, client):
6665
models.Comment.__bases__ += (_PatchedModel,)
6766
response = client.get(reverse("comment-list"))
68-
data = load_json(response.content)['data'][0]
67+
data = response.json()['data'][0]
6968
# name should be super-author instead of model name RenamedAuthor
7069
assert (data.get('type') == 'resource_name_from_JSONAPIMeta'), (
7170
'resource_name from model incorrect on list')
@@ -74,14 +73,14 @@ def test_model_resource_name_on_list(self, client):
7473
def test_resource_name_precendence(self, client, monkeypatch):
7574
# default
7675
response = client.get(reverse("comment-list"))
77-
data = load_json(response.content)['data'][0]
76+
data = response.json()['data'][0]
7877
assert (data.get('type') == 'comments'), (
7978
'resource_name from model incorrect on list')
8079

8180
# model > default
8281
models.Comment.__bases__ += (_PatchedModel,)
8382
response = client.get(reverse("comment-list"))
84-
data = load_json(response.content)['data'][0]
83+
data = response.json()['data'][0]
8584
assert (data.get('type') == 'resource_name_from_JSONAPIMeta'), (
8685
'resource_name from model incorrect on list')
8786

@@ -93,23 +92,21 @@ def test_resource_name_precendence(self, client, monkeypatch):
9392
False
9493
)
9594
response = client.get(reverse("comment-list"))
96-
data = load_json(response.content)['data'][0]
95+
data = response.json()['data'][0]
9796
assert (data.get('type') == 'resource_name_from_serializer'), (
9897
'resource_name from serializer incorrect on list')
9998

10099
# view > serializer > model
101100
monkeypatch.setattr(views.CommentViewSet, 'resource_name', 'resource_name_from_view', False)
102101
response = client.get(reverse("comment-list"))
103-
data = load_json(response.content)['data'][0]
102+
data = response.json()['data'][0]
104103
assert (data.get('type') == 'resource_name_from_view'), (
105104
'resource_name from view incorrect on list')
106105

107106
def test_model_resource_name_create(self, client):
108107
models.Comment.__bases__ += (_PatchedModel,)
109108
models.Entry.__bases__ += (_PatchedModel,)
110-
response = client.post(reverse("comment-list"),
111-
dump_json(self.create_data),
112-
content_type='application/vnd.api+json')
109+
response = client.post(reverse("comment-list"), self.create_data)
113110

114111
assert response.status_code == status.HTTP_201_CREATED
115112

@@ -130,9 +127,7 @@ def test_serializer_resource_name_create(self, client, monkeypatch):
130127
create_data['data']['type'] = 'renamed_comments'
131128
create_data['data']['relationships']['entry']['data']['type'] = 'renamed_entries'
132129

133-
response = client.post(reverse("comment-list"),
134-
dump_json(create_data),
135-
content_type='application/vnd.api+json')
130+
response = client.post(reverse("comment-list"), create_data)
136131

137132
assert response.status_code == status.HTTP_201_CREATED
138133

‎example/tests/integration/test_non_paginated_responses.py

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
import pytest
22
from django.core.urlresolvers import reverse
33

4-
from rest_framework_json_api.pagination import PageNumberPagination
5-
6-
from example.tests.utils import load_json
7-
from example.views import EntryViewSet
8-
94
try:
105
from unittest import mock
116
except ImportError:
@@ -14,12 +9,11 @@
149
pytestmark = pytest.mark.django_db
1510

1611

17-
# rf == request_factory
1812
@mock.patch(
1913
'rest_framework_json_api.utils'
2014
'.get_default_included_resources_from_serializer',
2115
new=lambda s: [])
22-
def test_multiple_entries_no_pagination(multiple_entries, rf):
16+
def test_multiple_entries_no_pagination(multiple_entries, client):
2317

2418
expected = {
2519
"data": [
@@ -102,18 +96,6 @@ def test_multiple_entries_no_pagination(multiple_entries, rf):
10296
]
10397
}
10498

105-
class NoPagination(PageNumberPagination):
106-
page_size = None
107-
108-
class NonPaginatedEntryViewSet(EntryViewSet):
109-
pagination_class = NoPagination
110-
111-
request = rf.get(
112-
reverse("entry-list"))
113-
view = NonPaginatedEntryViewSet.as_view({'get': 'list'})
114-
response = view(request)
115-
response.render()
116-
117-
parsed_content = load_json(response.content)
99+
response = client.get(reverse("nopage-entry-list"))
118100

119-
assert expected == parsed_content
101+
assert expected == response.json()

‎example/tests/integration/test_pagination.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import pytest
22
from django.core.urlresolvers import reverse
33

4-
from example.tests.utils import load_json
5-
64
try:
75
from unittest import mock
86
except ImportError:
@@ -81,6 +79,5 @@ def test_pagination_with_single_entry(single_entry, client):
8179
}
8280

8381
response = client.get(reverse("entry-list"))
84-
parsed_content = load_json(response.content)
8582

86-
assert expected == parsed_content
83+
assert expected == response.json()

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /