Mercurial > p > roundup > code
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 |
