@@ -251,13 +251,13 @@ def test_filter_invalid_association_name(self):
251251 def test_filter_empty_association_name (self ):
252252 """
253253 test for filter with missing association name
254+ error texts are different depending on whether QueryParameterValidationFilter is in use.
254255 """
255256 response = self .client .get (self .url , data = {'filter[]' : 'foobar' })
256257 self .assertEqual (response .status_code , 400 ,
257258 msg = response .content .decode ("utf-8" ))
258259 dja_response = response .json ()
259- self .assertEqual (dja_response ['errors' ][0 ]['detail' ],
260- "invalid filter: filter[]" )
260+ self .assertEqual (dja_response ['errors' ][0 ]['detail' ], "invalid query parameter: filter[]" )
261261
262262 def test_filter_no_brackets (self ):
263263 """
@@ -268,7 +268,17 @@ def test_filter_no_brackets(self):
268268 msg = response .content .decode ("utf-8" ))
269269 dja_response = response .json ()
270270 self .assertEqual (dja_response ['errors' ][0 ]['detail' ],
271- "invalid filter: filter" )
271+ "invalid query parameter: filter" )
272+
273+ def test_filter_missing_right_bracket (self ):
274+ """
275+ test for filter missing right bracket
276+ """
277+ response = self .client .get (self .url , data = {'filter[headline' : 'foobar' })
278+ self .assertEqual (response .status_code , 400 , msg = response .content .decode ("utf-8" ))
279+ dja_response = response .json ()
280+ self .assertEqual (dja_response ['errors' ][0 ]['detail' ],
281+ "invalid query parameter: filter[headline" )
272282
273283 def test_filter_no_brackets_rvalue (self ):
274284 """
@@ -279,7 +289,7 @@ def test_filter_no_brackets_rvalue(self):
279289 msg = response .content .decode ("utf-8" ))
280290 dja_response = response .json ()
281291 self .assertEqual (dja_response ['errors' ][0 ]['detail' ],
282- "invalid filter : filter" )
292+ "invalid query parameter : filter" )
283293
284294 def test_filter_no_brackets_equal (self ):
285295 """
@@ -290,7 +300,7 @@ def test_filter_no_brackets_equal(self):
290300 msg = response .content .decode ("utf-8" ))
291301 dja_response = response .json ()
292302 self .assertEqual (dja_response ['errors' ][0 ]['detail' ],
293- "invalid filter : filter" )
303+ "invalid query parameter : filter" )
294304
295305 def test_filter_malformed_left_bracket (self ):
296306 """
@@ -300,19 +310,7 @@ def test_filter_malformed_left_bracket(self):
300310 self .assertEqual (response .status_code , 400 ,
301311 msg = response .content .decode ("utf-8" ))
302312 dja_response = response .json ()
303- self .assertEqual (dja_response ['errors' ][0 ]['detail' ],
304- "invalid filter: filter[" )
305-
306- def test_filter_missing_right_bracket (self ):
307- """
308- test for filter missing right bracket
309- """
310- response = self .client .get (self .url , data = {'filter[headline' : 'foobar' })
311- self .assertEqual (response .status_code , 400 ,
312- msg = response .content .decode ("utf-8" ))
313- dja_response = response .json ()
314- self .assertEqual (dja_response ['errors' ][0 ]['detail' ],
315- "invalid filter: filter[headline" )
313+ self .assertEqual (dja_response ['errors' ][0 ]['detail' ], "invalid query parameter: filter[" )
316314
317315 def test_filter_missing_rvalue (self ):
318316 """
@@ -331,7 +329,7 @@ def test_filter_missing_rvalue_equal(self):
331329 """
332330 test for filter with missing value to test against
333331 this should probably be an error rather than ignoring the filter:
334- """
332+ """
335333 response = self .client .get (self .url + '?filter[headline]' )
336334 self .assertEqual (response .status_code , 400 ,
337335 msg = response .content .decode ("utf-8" ))
@@ -478,3 +476,30 @@ def test_search_multiple_keywords(self):
478476 self .assertEqual (len (dja_response ['data' ]), expected_len )
479477 returned_ids = set ([k ['id' ] for k in dja_response ['data' ]])
480478 self .assertEqual (returned_ids , expected_ids )
479+
480+ def test_param_invalid (self ):
481+ """
482+ Test a "wrong" query parameter
483+ """
484+ response = self .client .get (self .url , data = {'garbage' : 'foo' })
485+ self .assertEqual (response .status_code , 400 ,
486+ msg = response .content .decode ("utf-8" ))
487+ dja_response = response .json ()
488+ self .assertEqual (dja_response ['errors' ][0 ]['detail' ],
489+ "invalid query parameter: garbage" )
490+
491+ def test_param_duplicate (self ):
492+ """
493+ Test a duplicated query parameter:
494+ `?sort=headline&page[size]=3&sort=bodyText` is not allowed.
495+ This is not so obvious when using a data dict....
496+ """
497+ response = self .client .get (self .url ,
498+ data = {'sort' : ['headline' , 'bodyText' ],
499+ 'page[size]' : 3 }
500+ )
501+ self .assertEqual (response .status_code , 400 ,
502+ msg = response .content .decode ("utf-8" ))
503+ dja_response = response .json ()
504+ self .assertEqual (dja_response ['errors' ][0 ]['detail' ],
505+ "repeated query parameter not allowed: sort" )
0 commit comments