Skip to content

Commit fd77738

Browse files
slivercn2ygk
authored andcommitted
Avoid deprecation warnings during tests (django-json-api#527)
Steps: * Change to non deprecation pagination class per default * filterwarnings per test level where a warning is actually tested * Add some global filterwarnings for warnings which happen during import time. (those can be removed when tests are being restructured) All in all when running tests it should bloat the output with unrelated warning messages anymore.
1 parent e5bea80 commit fd77738

16 files changed

+60
-55
lines changed

example/api/resources/identity.py

+1-12
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,9 @@
1111

1212

1313
class Identity(mixins.MultipleIDMixin, viewsets.ModelViewSet):
14-
queryset = auth_models.User.objects.all()
14+
queryset = auth_models.User.objects.all().order_by('pk')
1515
serializer_class = IdentitySerializer
1616

17-
@list_route()
18-
def empty_list(self, request):
19-
"""
20-
This is a hack/workaround to return an empty result on a list
21-
endpoint because the delete operation in the test_empty_pluralization
22-
test doesn't prevent the /identities endpoint from still returning
23-
records when called in the same test. Suggestions welcome.
24-
"""
25-
self.queryset = self.queryset.filter(pk=None)
26-
return super(Identity, self).list(request)
27-
2817
# demonstrate sideloading data for use at app boot time
2918
@list_route()
3019
def posts(self, request):

example/settings/dev.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
'PAGE_SIZE': 5,
7373
'EXCEPTION_HANDLER': 'rest_framework_json_api.exceptions.exception_handler',
7474
'DEFAULT_PAGINATION_CLASS':
75-
'rest_framework_json_api.pagination.PageNumberPagination',
75+
'rest_framework_json_api.pagination.JsonApiPageNumberPagination',
7676
'DEFAULT_PARSER_CLASSES': (
7777
'rest_framework_json_api.parsers.JSONParser',
7878
'rest_framework.parsers.FormParser',

example/tests/integration/test_includes.py

+4-10
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,8 @@
44
pytestmark = pytest.mark.django_db
55

66

7-
def test_default_included_data_on_list(multiple_entries, client):
8-
return test_included_data_on_list(
9-
multiple_entries=multiple_entries, client=client, query='?page_size=5'
10-
)
11-
12-
13-
def test_included_data_on_list(multiple_entries, client, query='?include=comments&page_size=5'):
14-
response = client.get(reverse("entry-list") + query)
7+
def test_included_data_on_list(multiple_entries, client):
8+
response = client.get(reverse("entry-list"), data={'include': 'comments', 'page[size]': 5})
159
included = response.json().get('included')
1610

1711
assert len(response.json()['data']) == len(multiple_entries), (
@@ -79,7 +73,7 @@ def test_missing_field_not_included(author_bio_factory, author_factory, client):
7973

8074
def test_deep_included_data_on_list(multiple_entries, client):
8175
response = client.get(reverse("entry-list") + '?include=comments,comments.author,'
82-
'comments.author.bio,comments.writer&page_size=5')
76+
'comments.author.bio,comments.writer&page[size]=5')
8377
included = response.json().get('included')
8478

8579
assert len(response.json()['data']) == len(multiple_entries), (
@@ -113,7 +107,7 @@ def test_deep_included_data_on_list(multiple_entries, client):
113107

114108
# Also include entry authors
115109
response = client.get(reverse("entry-list") + '?include=authors,comments,comments.author,'
116-
'comments.author.bio&page_size=5')
110+
'comments.author.bio&page[size]=5')
117111
included = response.json().get('included')
118112

119113
assert len(response.json()['data']) == len(multiple_entries), (

example/tests/integration/test_meta.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ def test_top_level_meta_for_list_view(blog, client):
2828
},
2929
}],
3030
'links': {
31-
'first': 'http://testserver/blogs?page=1',
32-
'last': 'http://testserver/blogs?page=1',
31+
'first': 'http://testserver/blogs?page%5Bnumber%5D=1',
32+
'last': 'http://testserver/blogs?page%5Bnumber%5D=1',
3333
'next': None,
3434
'prev': None
3535
},

example/tests/integration/test_pagination.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ def test_pagination_with_single_entry(single_entry, client):
8787
}
8888
}],
8989
"links": {
90-
"first": "http://testserver/entries?page=1",
91-
"last": "http://testserver/entries?page=1",
90+
'first': 'http://testserver/entries?page%5Bnumber%5D=1',
91+
'last': 'http://testserver/entries?page%5Bnumber%5D=1',
9292
"next": None,
9393
"prev": None,
9494
},

example/tests/integration/test_polymorphism.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ def test_polymorphism_on_polymorphic_model_w_included_serializers(client):
105105
def test_polymorphic_model_without_any_instance(client):
106106
expected = {
107107
"links": {
108-
"first": "http://testserver/projects?page=1",
109-
"last": "http://testserver/projects?page=1",
108+
'first': 'http://testserver/projects?page%5Bnumber%5D=1',
109+
'last': 'http://testserver/projects?page%5Bnumber%5D=1',
110110
"next": None,
111111
"prev": None
112112
},

example/tests/test_format_keys.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ def test_camelization(self):
3636
}
3737
],
3838
'links': {
39-
'first': 'http://testserver/identities?page=1',
40-
'last': 'http://testserver/identities?page=2',
41-
'next': 'http://testserver/identities?page=2',
39+
'first': 'http://testserver/identities?page%5Bnumber%5D=1',
40+
'last': 'http://testserver/identities?page%5Bnumber%5D=2',
41+
'next': 'http://testserver/identities?page%5Bnumber%5D=2',
4242
'prev': None
4343
},
4444
'meta': {

example/tests/test_model_viewsets.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ def test_key_in_list_result(self):
4343
}
4444
],
4545
'links': {
46-
'first': 'http://testserver/identities?page=1',
47-
'last': 'http://testserver/identities?page=2',
48-
'next': 'http://testserver/identities?page=2',
46+
'first': 'http://testserver/identities?page%5Bnumber%5D=1',
47+
'last': 'http://testserver/identities?page%5Bnumber%5D=2',
48+
'next': 'http://testserver/identities?page%5Bnumber%5D=2',
4949
'prev': None
5050
},
5151
'meta': {
@@ -63,7 +63,7 @@ def test_page_two_in_list_result(self):
6363
"""
6464
Ensure that the second page is reachable and is the correct data.
6565
"""
66-
response = self.client.get(self.list_url, {'page': 2})
66+
response = self.client.get(self.list_url, {'page[number]': 2})
6767
self.assertEqual(response.status_code, 200)
6868

6969
user = get_user_model().objects.all()[1]
@@ -80,10 +80,10 @@ def test_page_two_in_list_result(self):
8080
}
8181
],
8282
'links': {
83-
'first': 'http://testserver/identities?page=1',
84-
'last': 'http://testserver/identities?page=2',
83+
'first': 'http://testserver/identities?page%5Bnumber%5D=1',
84+
'last': 'http://testserver/identities?page%5Bnumber%5D=2',
8585
'next': None,
86-
'prev': 'http://testserver/identities?page=1',
86+
'prev': 'http://testserver/identities?page%5Bnumber%5D=1'
8787
},
8888
'meta': {
8989
'pagination': {
@@ -102,7 +102,7 @@ def test_page_range_in_list_result(self):
102102
tests pluralization as two objects means it converts ``user`` to
103103
``users``.
104104
"""
105-
response = self.client.get(self.list_url, {'page_size': 2})
105+
response = self.client.get(self.list_url, {'page[size]': 2})
106106
self.assertEqual(response.status_code, 200)
107107

108108
users = get_user_model().objects.all()
@@ -128,8 +128,8 @@ def test_page_range_in_list_result(self):
128128
}
129129
],
130130
'links': {
131-
'first': 'http://testserver/identities?page=1&page_size=2',
132-
'last': 'http://testserver/identities?page=1&page_size=2',
131+
'first': 'http://testserver/identities?page%5Bnumber%5D=1&page%5Bsize%5D=2',
132+
'last': 'http://testserver/identities?page%5Bnumber%5D=1&page%5Bsize%5D=2',
133133
'next': None,
134134
'prev': None
135135
},

example/tests/test_multiple_id_mixin.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ def test_single_id_in_query_params(self):
3939
links = json_content.get("links")
4040
meta = json_content.get("meta").get('pagination')
4141

42-
self.assertEquals(expected.get('user'), json_content.get('user'))
43-
self.assertEquals(meta.get('count', 0), 1)
44-
self.assertEquals(links.get("next"), None)
42+
self.assertEqual(expected.get('user'), json_content.get('user'))
43+
self.assertEqual(meta.get('count', 0), 1)
44+
self.assertEqual(links.get("next"), None)
4545
self.assertEqual(meta.get("page"), 1)
4646

4747
def test_multiple_ids_in_query_params(self):
@@ -69,11 +69,11 @@ def test_multiple_ids_in_query_params(self):
6969
links = json_content.get("links")
7070
meta = json_content.get("meta").get('pagination')
7171

72-
self.assertEquals(expected.get('user'), json_content.get('user'))
73-
self.assertEquals(meta.get('count', 0), 2)
72+
self.assertEqual(expected.get('user'), json_content.get('user'))
73+
self.assertEqual(meta.get('count', 0), 2)
7474
self.assertEqual(
7575
sorted(
76-
'http://testserver/identities?ids%5B%5D=2&ids%5B%5D=1&page=2'
76+
'http://testserver/identities?ids%5B%5D=2&ids%5B%5D=1&page%5Bnumber%5D=2'
7777
.split('?')[1].split('&')
7878
),
7979
sorted(

example/tests/test_parsers.py

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import json
22
from io import BytesIO
33

4+
import pytest
45
from django.test import TestCase, override_settings
56
from rest_framework.exceptions import ParseError
67

@@ -34,6 +35,7 @@ def __init__(self):
3435

3536
self.string = json.dumps(data)
3637

38+
@pytest.mark.filterwarnings("ignore:`format_keys` function and `JSON_API_FORMAT_KEYS`")
3739
@override_settings(JSON_API_FORMAT_KEYS='camelize')
3840
def test_parse_include_metadata_format_keys(self):
3941
parser = JSONParser()

example/tests/test_performance.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def test_query_count_no_includes(self):
4141
2. The SELECT query for the set
4242
"""
4343
with self.assertNumQueries(2):
44-
response = self.client.get('/comments?page_size=25')
44+
response = self.client.get('/comments?page[size]=25')
4545
self.assertEqual(len(response.data['results']), 25)
4646

4747
def test_query_count_include_author(self):
@@ -54,5 +54,5 @@ def test_query_count_include_author(self):
5454
5. Entries prefetched
5555
"""
5656
with self.assertNumQueries(5):
57-
response = self.client.get('/comments?include=author&page_size=25')
57+
response = self.client.get('/comments?include=author&page[size]=25')
5858
self.assertEqual(len(response.data['results']), 25)

example/tests/unit/test_default_drf_serializers.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ def test_render_format_field_names(settings):
6868
assert result['data']['attributes']['json-field'] == {'JsonKey': 'JsonValue'}
6969

7070

71+
@pytest.mark.filterwarnings("ignore:`format_keys` function and `JSON_API_FORMAT_KEYS`")
7172
def test_render_format_keys(settings):
7273
"""Test that json field value keys are formated."""
7374
delattr(settings, 'JSON_API_FORMAT_FILED_NAMES')
@@ -195,8 +196,8 @@ def test_get_entry_list_with_blogs(client, entry):
195196

196197
expected = {
197198
'links': {
198-
'first': 'http://testserver/drf-entries/1/suggested/?page=1',
199-
'last': 'http://testserver/drf-entries/1/suggested/?page=1',
199+
'first': 'http://testserver/drf-entries/1/suggested/?page%5Bnumber%5D=1',
200+
'last': 'http://testserver/drf-entries/1/suggested/?page%5Bnumber%5D=1',
200201
'next': None,
201202
'prev': None
202203
},

example/tests/unit/test_renderers.py

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import json
22

3+
import pytest
4+
35
from rest_framework_json_api import serializers, views
46
from rest_framework_json_api.renderers import JSONRenderer
57

@@ -79,6 +81,7 @@ def test_render_format_field_names(settings):
7981
assert result['data']['attributes']['json-field'] == {'JsonKey': 'JsonValue'}
8082

8183

84+
@pytest.mark.filterwarnings("ignore:`format_keys` function and `JSON_API_FORMAT_KEYS`")
8285
def test_render_format_keys(settings):
8386
"""Test that json field value keys are formated."""
8487
delattr(settings, 'JSON_API_FORMAT_FILED_NAMES')

example/tests/unit/test_utils.py

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ def test_get_resource_name():
6262
assert 'users' == utils.get_resource_name(context), 'derived from non-model serializer'
6363

6464

65+
@pytest.mark.filterwarnings("ignore:`format_keys` function and `JSON_API_FORMAT_KEYS`")
6566
def test_format_keys():
6667
underscored = {
6768
'first_name': 'a',

example/views.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import rest_framework_json_api.renderers
1111
from rest_framework_json_api.django_filters import DjangoFilterBackend
1212
from rest_framework_json_api.filters import OrderingFilter, QueryParameterValidationFilter
13-
from rest_framework_json_api.pagination import PageNumberPagination
13+
from rest_framework_json_api.pagination import JsonApiPageNumberPagination
1414
from rest_framework_json_api.utils import format_drf_errors
1515
from rest_framework_json_api.views import ModelViewSet, RelationshipView
1616

@@ -119,7 +119,7 @@ def get_object(self):
119119
return super(DRFEntryViewSet, self).get_object()
120120

121121

122-
class NoPagination(PageNumberPagination):
122+
class NoPagination(JsonApiPageNumberPagination):
123123
page_size = None
124124

125125

@@ -203,7 +203,7 @@ class CompanyViewset(ModelViewSet):
203203

204204

205205
class ProjectViewset(ModelViewSet):
206-
queryset = Project.objects.all()
206+
queryset = Project.objects.all().order_by('pk')
207207
serializer_class = ProjectSerializer
208208

209209

pytest.ini

+15
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,17 @@
11
[pytest]
22
DJANGO_SETTINGS_MODULE=example.settings.test
3+
filterwarnings =
4+
error::DeprecationWarning
5+
error::PendingDeprecationWarning
6+
# TODO: restructure tests so this can be ignored on a test level
7+
ignore:MarkInfo objects are deprecated as they contain merged marks which are hard to deal with correctly.
8+
ignore:use of getfuncargvalue is deprecated, use getfixturevalue
9+
ignore:`list_route`
10+
ignore:`detail_route`
11+
ignore:`FiltersetEntryViewSet.filter_fields` attribute should be renamed
12+
ignore:`NoFiltersetEntryViewSet.filter_fields` attribute should be renamed
13+
ignore:`NoFiltersetEntryViewSet.filter_class` attribute should be renamed `filterset_class`
14+
ignore:MultipleIDMixin is deprecated
15+
# can be removed once following DRF PR is released
16+
# https://github.com/encode/django-rest-framework/pull/6268
17+
ignore:Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated

0 commit comments

Comments
 (0)