diff --git a/pysnc/query.py b/pysnc/query.py index 1dd595d..e4e8ad3 100644 --- a/pysnc/query.py +++ b/pysnc/query.py @@ -86,6 +86,9 @@ def generate_query(self, encoded_query=None, order_by=None) -> str: query = '^'.join(filter(None, (query, encoded_query))) if order_by: query = '^'.join((query, order_by)) + # dont start with ^ + if query.startswith('^'): + query = query[1:] return query diff --git a/pysnc/record.py b/pysnc/record.py index 23a092a..5bd4116 100644 --- a/pysnc/record.py +++ b/pysnc/record.py @@ -259,7 +259,7 @@ def __init__(self, client: 'ServiceNowClient', table: str, batch_size=500): self.__total: Optional[int] = None self.__limit: Optional[int] = None self.__page: int = -1 - self.__order: Optional[str] = None + self.__order: str = "ORDERBYsys_id" # we *need* a default order in the event we page, see issue#96 self.__is_new_record: bool = False self.__display_value: Union[bool, str] = 'all' @@ -427,7 +427,7 @@ def order_by(self, column: str): if column: self.__order = "ORDERBY%s" % column else: - self.__order = None + self.__order = "ORDERBYsys_id" def order_by_desc(self, column: str): """ @@ -438,7 +438,7 @@ def order_by_desc(self, column: str): if column: self.__order = "ORDERBYDESC%s" % column else: - self.__order = None + self.__order = 'ORDERBYDESCsys_id' def pop_record(self) -> 'GlideRecord': """ diff --git a/test/test_snc_api.py b/test/test_snc_api.py index 592e281..ae41f57 100644 --- a/test/test_snc_api.py +++ b/test/test_snc_api.py @@ -44,7 +44,7 @@ def test_link_list(self): gr.add_query("name","CONTAINS","a") link = gr.get_link_list() print(link) - self.assertTrue(link.endswith('sys_user_list.do?sysparm_query=active%3Dtrue%5EnameCONTAINSa')) + self.assertTrue(link.endswith('sys_user_list.do?sysparm_query=active%3Dtrue%5EnameCONTAINSa%5EORDERBYsys_id')) client.session.close() diff --git a/test/test_snc_api_query.py b/test/test_snc_api_query.py index bc7bc71..f7f06bc 100644 --- a/test/test_snc_api_query.py +++ b/test/test_snc_api_query.py @@ -45,7 +45,7 @@ def test_get_query(self): o = gr.add_query('name', 'alm_asset') o.add_or_condition('name', 'bsm_chart') enc_query = gr.get_encoded_query() - self.assertEqual(enc_query, 'name=alm_asset^ORname=bsm_chart') + self.assertEqual(enc_query, 'name=alm_asset^ORname=bsm_chart^ORDERBYsys_id') client.session.close() def test_get_query_two(self): @@ -53,7 +53,7 @@ def test_get_query_two(self): gr = client.GlideRecord('sys_user') gr.get('6816f79cc0a8016401c5a33be04be441') enc_query = gr.get_encoded_query() - self.assertEqual(enc_query, '') + self.assertEqual(enc_query, 'ORDERBYsys_id') # always have default orderby client.session.close() def test_null_query(self): @@ -102,14 +102,14 @@ def test_double_query(self): gr.add_encoded_query('test=what') query = gr.get_encoded_query() - self.assertEqual(query, "active=true^test=what") + self.assertEqual(query, "active=true^test=what^ORDERBYsys_id") gr = client.GlideRecord('sys_user') gr.add_encoded_query('test=what') gr.add_query('active','true') query = gr.get_encoded_query() - self.assertEqual(query, "active=true^test=what") + self.assertEqual(query, "active=true^test=what^ORDERBYsys_id") client.session.close() def test_get_true(self): @@ -176,12 +176,12 @@ def test_code_query_one(self): q.add_query('sys_id', '6816f79cc0a8016401c5a33be04be441') q.add_query('second', 'asdf') self.assertEqual(q.generate_query(), 'sys_id=6816f79cc0a8016401c5a33be04be441^second=asdf') - self.assertEqual(gr.get_encoded_query(), '') + self.assertEqual(gr.get_encoded_query(), 'ORDERBYsys_id') gr.query(q) self.assertEqual(len(gr), 1) - self.assertEqual(gr.get_encoded_query(), '') + self.assertEqual(gr.get_encoded_query(), 'ORDERBYsys_id') gr.add_encoded_query(q.generate_query()) - self.assertEqual(gr.get_encoded_query(), 'sys_id=6816f79cc0a8016401c5a33be04be441^second=asdf') + self.assertEqual(gr.get_encoded_query(), 'sys_id=6816f79cc0a8016401c5a33be04be441^second=asdf^ORDERBYsys_id') gr.query() self.assertEqual(len(gr), 1) diff --git a/test/test_snc_batching.py b/test/test_snc_batching.py index 996c75b..b02b260 100644 --- a/test/test_snc_batching.py +++ b/test/test_snc_batching.py @@ -58,4 +58,14 @@ def test_default_limit(self): self.assertEqual(params['sysparm_limit'], 100, "batch size still 100 if we have a limit over batch size") client.session.close() + def test_default_order(self): + client = ServiceNowClient(self.c.server, self.c.credentials) + gr = client.GlideRecord('problem') + self.assertEqual(gr._parameters()['sysparm_query'], 'ORDERBYsys_id') + gr.order_by('number') + self.assertEqual(gr._parameters()['sysparm_query'], 'ORDERBYnumber') + + gr.order_by(None) + self.assertEqual(gr._parameters()['sysparm_query'], 'ORDERBYsys_id') + client.session.close()