comparison test/test_liveserver.py @ 8216:03020f08a685

fix(web) issue2551382 - fix more integer param test cases fix bad unicode in second test. Also be smarter about validating the value I was missing correct handling of other string variants with # or & embedded in them. E.G. 123#dfg - should return 200 as Roundup sees value 123.
author John Rouillard <rouilj@ieee.org>
date Mon, 16 Dec 2024 21:24:59 -0500
parents 1b15f635ada1
children cd76d5d59c37
comparison
equal deleted inserted replaced
8215:1b15f635ada1 8216:03020f08a685
210 class FuzzGetUrls(WsgiSetup, ClientSetup): 210 class FuzzGetUrls(WsgiSetup, ClientSetup):
211 211
212 _max_examples = 100 212 _max_examples = 100
213 213
214 @given(sampled_from(['@verbose', '@page_size', '@page_index']), 214 @given(sampled_from(['@verbose', '@page_size', '@page_index']),
215 one_of(characters(),text(min_size=1))) 215 text(min_size=1))
216 @example("@verbose", "1#") 216 @example("@verbose", "1#")
217 @example("@verbose", "#1stuff")
217 @settings(max_examples=_max_examples, 218 @settings(max_examples=_max_examples,
218 deadline=10000) # 10000ms 219 deadline=10000) # 10000ms
219 def test_class_url_param_accepting_integer_values(self, param, value): 220 def test_class_url_param_accepting_integer_values(self, param, value):
220 """Tests all integer args for rest url. @page_* is the 221 """Tests all integer args for rest url. @page_* is the
221 same code for all *. 222 same code for all *.
223 session, _response = self.create_login_session() 224 session, _response = self.create_login_session()
224 url = '%s/rest/data/status' % (self.url_base()) 225 url = '%s/rest/data/status' % (self.url_base())
225 query = '%s=%s' % (param, value) 226 query = '%s=%s' % (param, value)
226 f = session.get(url, params=query) 227 f = session.get(url, params=query)
227 try: 228 try:
228 # test case '0#' 229 # test case '0#' '12345#stuff' '12345&stuff'
229 if len(value) > 1 and value[-1] in ('#', '&'): 230 match = re.match('(^[0-9]*)[#&]', value)
230 value = value[:-1] 231 if match is not None:
231 if int(value) >= 0: 232 value = match[1]
233 elif int(value) >= 0:
232 self.assertEqual(f.status_code, 200) 234 self.assertEqual(f.status_code, 200)
233 except ValueError: 235 except ValueError:
234 if value in ('#', '&'): 236 # test case '#' '#0', '&', '&anything here really'
237 if value[0] in ('#', '&'):
235 self.assertEqual(f.status_code, 200) 238 self.assertEqual(f.status_code, 200)
236 else: 239 else:
237 # invalid value for param 240 # invalid value for param
238 self.assertEqual(f.status_code, 400) 241 self.assertEqual(f.status_code, 400)
239 242
240 @given(sampled_from(['@verbose']), text(min_size=1)) 243 @given(sampled_from(['@verbose']), text(min_size=1))
241 @example("@verbose", "1#") 244 @example("@verbose", "10#")
245 @example("@verbose", u'Ø\U000dd990')
242 @settings(max_examples=_max_examples, 246 @settings(max_examples=_max_examples,
243 deadline=10000) # 10000ms 247 deadline=10000) # 10000ms
244 def test_element_url_param_accepting_integer_values(self, param, value): 248 def test_element_url_param_accepting_integer_values(self, param, value):
245 """Tests all integer args for rest url. @page_* is the 249 """Tests args accepting int for rest url.
246 same code for all *.
247 """ 250 """
248 session, _response = self.create_login_session() 251 session, _response = self.create_login_session()
249 url = '%s/rest/data/status/1' % (self.url_base()) 252 url = '%s/rest/data/status/1' % (self.url_base())
250 query = '%s=%s' % (param, value) 253 query = '%s=%s' % (param, value)
251 f = session.get(url, params=query) 254 f = session.get(url, params=query)
252 try: 255 try:
253 # test case '0#' 256 # test case '0#' '12345#stuff' '12345&stuff'
254 if len(value) > 1 and value[-1] in ('#', '&'): 257 match = re.match('(^[0-9]*)[#&]', value)
255 value = value[:-1] 258 if match is not None:
256 if int(value) >= 0: 259 value = match[1]
260 elif int(value) >= 0:
257 self.assertEqual(f.status_code, 200) 261 self.assertEqual(f.status_code, 200)
258 except ValueError: 262 except ValueError:
259 if value in ['#', '&']: 263 # test case '#' '#0', '&', '&anything here really'
264 if value[0] in ('#', '&'):
260 self.assertEqual(f.status_code, 200) 265 self.assertEqual(f.status_code, 200)
261 else: 266 else:
262 # invalid value for param 267 # invalid value for param
263 self.assertEqual(f.status_code, 400) 268 self.assertEqual(f.status_code, 400)
264 269

Roundup Issue Tracker: http://roundup-tracker.org/