@@ -23,6 +23,14 @@ def post(self, request, *args, **kwargs):
23
23
return self .list (request , * args , ** kwargs )
24
24
25
25
26
+ class DatatablesPageNumberPaginationCustomMax (DatatablesPageNumberPagination ):
27
+ max_page_size = 15
28
+
29
+
30
+ class DatatablesLimitOffsetPaginationCustomMax (DatatablesLimitOffsetPagination ):
31
+ max_limit = 15
32
+
33
+
26
34
class TestApiTestCase (TestCase ):
27
35
fixtures = ['test_data' ]
28
36
@@ -82,10 +90,36 @@ def test_pagenumber_pagination_show_all(self):
82
90
result = response .json ()
83
91
self .assertEquals ((result ['recordsFiltered' ], result ['recordsTotal' ], len (result ['data' ]), result ['data' ][0 ]['artist_name' ]), expected )
84
92
85
- def test_pagenumber_pagination_invalid_page (self ):
93
+ def test_pagenumber_pagination_invalid_page1 (self ):
86
94
response = self .client .get ('/api/albums/?format=datatables&length=10&start=20&columns[0][data]=name&columns[1][data]=artist_name&draw=1' )
87
95
self .assertEquals (response .status_code , 404 )
88
96
97
+ def test_pagenumber_pagination_invalid_page2 (self ):
98
+ response = self .client .get ('/api/albums/?format=datatables&length=10&start=abc&columns[0][data]=name&columns[1][data]=artist_name&draw=1' )
99
+ self .assertEquals (response .status_code , 404 )
100
+
101
+ def test_pagenumber_pagination_invalid_page_size1 (self ):
102
+ response = self .client .get ('/api/albums/?format=datatables&length=abc&start=10&columns[0][data]=name&columns[1][data]=artist_name&draw=1' )
103
+ expected = (15 , 15 , 5 , 'Elvis Presley' )
104
+ result = response .json ()
105
+ self .assertEquals ((result ['recordsFiltered' ], result ['recordsTotal' ], len (result ['data' ]), result ['data' ][0 ]['artist_name' ]), expected )
106
+
107
+ def test_pagenumber_pagination_invalid_page_size2 (self ):
108
+ response = self .client .get ('/api/albums/?format=datatables&length=-999&start=10&columns[0][data]=name&columns[1][data]=artist_name&draw=1' )
109
+ expected = (15 , 15 , 5 , 'Elvis Presley' )
110
+ result = response .json ()
111
+ self .assertEquals ((result ['recordsFiltered' ], result ['recordsTotal' ], len (result ['data' ]), result ['data' ][0 ]['artist_name' ]), expected )
112
+
113
+ @override_settings (REST_FRAMEWORK = {
114
+ 'DEFAULT_PAGINATION_CLASS' : __name__ + '.DatatablesPageNumberPaginationCustomMax' ,
115
+ })
116
+ def test_pagenumber_pagination_invalid_max (self ):
117
+ AlbumViewSet .pagination_class = DatatablesPageNumberPaginationCustomMax
118
+ response = self .client .get ('/api/albums/?format=datatables&length=20&start=10&columns[0][data]=name&columns[1][data]=artist_name&draw=1' )
119
+ expected = (15 , 15 , 15 , 'The Beatles' )
120
+ result = response .json ()
121
+ self .assertEquals ((result ['recordsFiltered' ], result ['recordsTotal' ], len (result ['data' ]), result ['data' ][0 ]['artist_name' ]), expected )
122
+
89
123
@override_settings (REST_FRAMEWORK = {
90
124
'DEFAULT_PAGINATION_CLASS' : 'rest_framework_datatables.pagination.DatatablesLimitOffsetPagination' ,
91
125
})
@@ -108,6 +142,66 @@ def test_limitoffset_pagination_no_length(self):
108
142
result = response .json ()
109
143
self .assertEquals ((result ['recordsFiltered' ], result ['recordsTotal' ], result ['data' ][0 ]['artist_name' ]), expected )
110
144
145
+ @override_settings (REST_FRAMEWORK = {
146
+ 'DEFAULT_PAGINATION_CLASS' : 'rest_framework_datatables.pagination.DatatablesLimitOffsetPagination' ,
147
+ })
148
+ def test_limitoffset_pagination_invalid_length1 (self ):
149
+ AlbumViewSet .pagination_class = DatatablesLimitOffsetPagination
150
+ client = APIClient ()
151
+ response = client .get (
152
+ '/api/albums/?format=datatables&length=abc&start=10&columns[0][data]=name&columns[1][data]=artist_name&draw=1' )
153
+ expected = (15 , 15 , 'Elvis Presley' )
154
+ result = response .json ()
155
+ self .assertEquals ((result ['recordsFiltered' ], result ['recordsTotal' ], result ['data' ][0 ]['artist_name' ]), expected )
156
+
157
+ @override_settings (REST_FRAMEWORK = {
158
+ 'DEFAULT_PAGINATION_CLASS' : 'rest_framework_datatables.pagination.DatatablesLimitOffsetPagination' ,
159
+ })
160
+ def test_limitoffset_pagination_invalid_length2 (self ):
161
+ AlbumViewSet .pagination_class = DatatablesLimitOffsetPagination
162
+ client = APIClient ()
163
+ response = client .get (
164
+ '/api/albums/?format=datatables&length=-999&start=10&columns[0][data]=name&columns[1][data]=artist_name&draw=1' )
165
+ expected = (15 , 15 , 'Elvis Presley' )
166
+ result = response .json ()
167
+ self .assertEquals ((result ['recordsFiltered' ], result ['recordsTotal' ], result ['data' ][0 ]['artist_name' ]), expected )
168
+
169
+ @override_settings (REST_FRAMEWORK = {
170
+ 'DEFAULT_PAGINATION_CLASS' : 'rest_framework_datatables.pagination.DatatablesLimitOffsetPagination' ,
171
+ })
172
+ def test_limitoffset_pagination_invalid_start1 (self ):
173
+ AlbumViewSet .pagination_class = DatatablesLimitOffsetPagination
174
+ client = APIClient ()
175
+ response = client .get (
176
+ '/api/albums/?format=datatables&length=10&start=abc&columns[0][data]=name&columns[1][data]=artist_name&draw=1' )
177
+ expected = (15 , 15 , 'The Beatles' )
178
+ result = response .json ()
179
+ self .assertEquals ((result ['recordsFiltered' ], result ['recordsTotal' ], result ['data' ][0 ]['artist_name' ]), expected )
180
+
181
+ @override_settings (REST_FRAMEWORK = {
182
+ 'DEFAULT_PAGINATION_CLASS' : 'rest_framework_datatables.pagination.DatatablesLimitOffsetPagination' ,
183
+ })
184
+ def test_limitoffset_pagination_invalid_start2 (self ):
185
+ AlbumViewSet .pagination_class = DatatablesLimitOffsetPagination
186
+ client = APIClient ()
187
+ response = client .get (
188
+ '/api/albums/?format=datatables&length=10&start=-999&columns[0][data]=name&columns[1][data]=artist_name&draw=1' )
189
+ expected = (15 , 15 , 'The Beatles' )
190
+ result = response .json ()
191
+ self .assertEquals ((result ['recordsFiltered' ], result ['recordsTotal' ], result ['data' ][0 ]['artist_name' ]), expected )
192
+
193
+ @override_settings (REST_FRAMEWORK = {
194
+ 'DEFAULT_PAGINATION_CLASS' : __name__ + '.DatatablesLimitOffsetPaginationCustomMax' ,
195
+ })
196
+ def test_limitoffset_pagination_invalid_max (self ):
197
+ AlbumViewSet .pagination_class = DatatablesLimitOffsetPaginationCustomMax
198
+ client = APIClient ()
199
+ response = client .get (
200
+ '/api/albums/?format=datatables&length=20&start=10&columns[0][data]=name&columns[1][data]=artist_name&draw=1' )
201
+ expected = (15 , 15 , 'Elvis Presley' )
202
+ result = response .json ()
203
+ self .assertEquals ((result ['recordsFiltered' ], result ['recordsTotal' ], result ['data' ][0 ]['artist_name' ]), expected )
204
+
111
205
@override_settings (REST_FRAMEWORK = {
112
206
'DEFAULT_PAGINATION_CLASS' : 'rest_framework_datatables.pagination.DatatablesLimitOffsetPagination' ,
113
207
})
0 commit comments