📄 query.py
字号:
self.assertEqual(['new', 'assigned', 'reopened'], args) tickets = query.execute(self.req) def test_constrained_by_owner_containing(self): query = Query.from_string(self.env, 'owner~=someone', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql,"""SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_valueFROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority)WHERE COALESCE(t.owner,'') LIKE %s ESCAPE '/'ORDER BY COALESCE(t.id,0)=0,t.id""") self.assertEqual(['%someone%'], args) tickets = query.execute(self.req) def test_constrained_by_owner_not_containing(self): query = Query.from_string(self.env, 'owner!~=someone', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql,"""SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_valueFROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority)WHERE COALESCE(t.owner,'') NOT LIKE %s ESCAPE '/'ORDER BY COALESCE(t.id,0)=0,t.id""") self.assertEqual(['%someone%'], args) tickets = query.execute(self.req) def test_constrained_by_owner_beginswith(self): query = Query.from_string(self.env, 'owner^=someone', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql,"""SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_valueFROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority)WHERE COALESCE(t.owner,'') LIKE %s ESCAPE '/'ORDER BY COALESCE(t.id,0)=0,t.id""") self.assertEqual(['someone%'], args) tickets = query.execute(self.req) def test_constrained_by_owner_endswith(self): query = Query.from_string(self.env, 'owner$=someone', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql,"""SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_valueFROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority)WHERE COALESCE(t.owner,'') LIKE %s ESCAPE '/'ORDER BY COALESCE(t.id,0)=0,t.id""") self.assertEqual(['%someone'], args) tickets = query.execute(self.req) def test_constrained_by_custom_field(self): self.env.config.set('ticket-custom', 'foo', 'text') query = Query.from_string(self.env, 'foo=something', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql,"""SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_value,foo.value AS fooFROM ticket AS t LEFT OUTER JOIN ticket_custom AS foo ON (id=foo.ticket AND foo.name='foo') LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority)WHERE COALESCE(foo.value,'')=%sORDER BY COALESCE(t.id,0)=0,t.id""") self.assertEqual(['something'], args) tickets = query.execute(self.req) def test_grouped_by_custom_field(self): self.env.config.set('ticket-custom', 'foo', 'text') query = Query(self.env, group='foo', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql,"""SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_value,foo.value AS fooFROM ticket AS t LEFT OUTER JOIN ticket_custom AS foo ON (id=foo.ticket AND foo.name='foo') LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority)ORDER BY COALESCE(foo.value,'')='',foo.value,COALESCE(t.id,0)=0,t.id""") self.assertEqual([], args) tickets = query.execute(self.req) def test_constrained_by_multiple_owners(self): query = Query.from_string(self.env, 'owner=someone|someone_else', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql,"""SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_valueFROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority)WHERE COALESCE(t.owner,'') IN (%s,%s)ORDER BY COALESCE(t.id,0)=0,t.id""") self.assertEqual(['someone', 'someone_else'], args) tickets = query.execute(self.req) def test_constrained_by_multiple_owners_not(self): query = Query.from_string(self.env, 'owner!=someone|someone_else', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql,"""SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_valueFROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority)WHERE COALESCE(t.owner,'') NOT IN (%s,%s)ORDER BY COALESCE(t.id,0)=0,t.id""") self.assertEqual(['someone', 'someone_else'], args) tickets = query.execute(self.req) def test_constrained_by_multiple_owners_contain(self): query = Query.from_string(self.env, 'owner~=someone|someone_else', order='id') sql, args = query.get_sql() self.assertEqual(['%someone%', '%someone/_else%'], args) self.assertEqualSQL(sql,"""SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_valueFROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority)WHERE (COALESCE(t.owner,'') LIKE %s ESCAPE '/' OR COALESCE(t.owner,'') LIKE %s ESCAPE '/')ORDER BY COALESCE(t.id,0)=0,t.id""") tickets = query.execute(self.req) def test_constrained_by_empty_value_contains(self): query = Query.from_string(self.env, 'owner~=|', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql,"""SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_valueFROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority)ORDER BY COALESCE(t.id,0)=0,t.id""") self.assertEqual([], args) tickets = query.execute(self.req) def test_constrained_by_empty_value_startswith(self): query = Query.from_string(self.env, 'owner^=|', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql,"""SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_valueFROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority)ORDER BY COALESCE(t.id,0)=0,t.id""") self.assertEqual([], args) tickets = query.execute(self.req) def test_constrained_by_empty_value_endswith(self): query = Query.from_string(self.env, 'owner$=|', order='id') sql, args = query.get_sql() self.assertEqualSQL(sql,"""SELECT t.id AS id,t.summary AS summary,t.owner AS owner,t.type AS type,t.status AS status,t.priority AS priority,t.milestone AS milestone,t.time AS time,t.changetime AS changetime,priority.value AS priority_valueFROM ticket AS t LEFT OUTER JOIN enum AS priority ON (priority.type='priority' AND priority.name=priority)ORDER BY COALESCE(t.id,0)=0,t.id""") self.assertEqual([], args) tickets = query.execute(self.req) def test_csv_escape(self): query = Mock(get_columns=lambda: ['col1'], execute=lambda r,c: [{'id': 1, 'col1': 'value, needs escaped'}]) content, mimetype = QueryModule(self.env).export_csv( Mock(href=self.env.href, perm=MockPerm()), query) self.assertEqual('col1\r\n"value, needs escaped"\r\n', content)class QueryLinksTestCase(unittest.TestCase): def setUp(self): self.env = EnvironmentStub(default_data=True) self.query_module = QueryModule(self.env) req = Mock(perm=MockPerm(), args={}, href=Href('/')) self.formatter = LinkFormatter(self.env, Context.from_request(req)) def _format_link(self, query, label): return str(self.query_module._format_link(self.formatter, 'query', query, label)) def test_empty_query(self): self.assertEqual(self._format_link('', 'label'), '<em class="error">[Error: Query filter requires ' 'field and constraints separated by a "="]</em>')def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(QueryTestCase, 'test')) suite.addTest(unittest.makeSuite(QueryLinksTestCase, 'test')) return suiteif __name__ == '__main__': unittest.main()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -