changeset 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
files test/test_liveserver.py
diffstat 1 files changed, 19 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/test/test_liveserver.py	Mon Dec 16 19:19:07 2024 -0500
+++ b/test/test_liveserver.py	Mon Dec 16 21:24:59 2024 -0500
@@ -212,8 +212,9 @@
     _max_examples = 100
 
     @given(sampled_from(['@verbose', '@page_size', '@page_index']),
-           one_of(characters(),text(min_size=1)))
+           text(min_size=1))
     @example("@verbose", "1#")
+    @example("@verbose", "#1stuff")
     @settings(max_examples=_max_examples,
               deadline=10000) # 10000ms
     def test_class_url_param_accepting_integer_values(self, param, value):
@@ -225,38 +226,42 @@
         query = '%s=%s'  % (param, value)
         f = session.get(url, params=query)
         try:
-            # test case '0#'
-            if len(value) > 1 and value[-1] in ('#', '&'):
-                value = value[:-1]
-            if int(value) >= 0:
+            # test case '0#' '12345#stuff' '12345&stuff'
+            match = re.match('(^[0-9]*)[#&]', value)
+            if match is not None:
+                value = match[1]
+            elif int(value) >= 0:
                 self.assertEqual(f.status_code, 200)
         except ValueError:
-            if value in ('#', '&'):
+            # test case '#' '#0', '&', '&anything here really'
+            if value[0] in ('#', '&'):
                 self.assertEqual(f.status_code, 200)
             else:
                 # invalid value for param
                 self.assertEqual(f.status_code, 400)
 
     @given(sampled_from(['@verbose']), text(min_size=1))
-    @example("@verbose", "1#")
+    @example("@verbose", "10#")
+    @example("@verbose", u'Ø\U000dd990')
     @settings(max_examples=_max_examples,
               deadline=10000) # 10000ms
     def test_element_url_param_accepting_integer_values(self, param, value):
-        """Tests all integer args for rest url. @page_* is the
-           same code for all *.
+        """Tests args accepting int for rest url.
         """
         session, _response = self.create_login_session()
         url = '%s/rest/data/status/1' % (self.url_base())
         query = '%s=%s'  % (param, value)
         f = session.get(url, params=query)
         try:
-            # test case '0#'
-            if len(value) > 1 and value[-1] in ('#', '&'):
-                value = value[:-1]
-            if int(value) >= 0:
+            # test case '0#' '12345#stuff' '12345&stuff'
+            match = re.match('(^[0-9]*)[#&]', value)
+            if match is not None:
+                value = match[1]
+            elif int(value) >= 0:
                 self.assertEqual(f.status_code, 200)
         except ValueError:
-            if value in ['#', '&']:
+            # test case '#' '#0', '&', '&anything here really'
+            if value[0] in ('#', '&'):
                 self.assertEqual(f.status_code, 200)
             else:
                 # invalid value for param

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