Mercurial > p > roundup > code
diff test/db_test_base.py @ 6403:9957d8d10783
Tests and bug-fix for issue2551119
.. and some other failing tests I came up with when trying to reproduce
the problem of the issue.
| author | Ralf Schlatterbeck <rsc@runtux.com> |
|---|---|
| date | Mon, 10 May 2021 16:19:37 +0200 |
| parents | 619807d9a2df |
| children | 66ccddb034f2 |
line wrap: on
line diff
--- a/test/db_test_base.py Sat May 08 18:13:20 2021 +0200 +++ b/test/db_test_base.py Mon May 10 16:19:37 2021 +0200 @@ -93,7 +93,7 @@ def setupSchema(db, create, module): mls = module.Class(db, "mls", name=String()) mls.setkey("name") - keyword = module.Class(db, "keyword", name=String()) + keyword = module.Class(db, "keyword", name=String(), order=Number()) keyword.setkey("name") status = module.Class(db, "status", name=String(), mls=Multilink("mls")) status.setkey("name") @@ -118,7 +118,7 @@ files=Multilink("file"), assignedto=Link('user', quiet=True, rev_multilink='issues'), priority=Link('priority'), spam=Multilink('msg'), feedback=Link('msg'), - keywords=Multilink('keyword')) + keywords=Multilink('keyword'), keywords2=Multilink('keyword')) stuff = module.Class(db, "stuff", stuff=String()) session = module.Class(db, 'session', title=String()) msg = module.FileClass(db, "msg", date=Date(), @@ -1542,8 +1542,8 @@ # import an issue title = 'Bzzt' nodeid = self.db.issue.import_list(['title', 'messages', 'files', - 'spam', 'nosy', 'superseder', 'keywords'], [repr(title), '[]', - '[]', '[]', '[]', '[]', '[]']) + 'spam', 'nosy', 'superseder', 'keywords', 'keywords2'], + [repr(title), '[]', '[]', '[]', '[]', '[]', '[]', '[]']) self.db.commit() # Content of title attribute is indexed @@ -2060,6 +2060,37 @@ ae(filt(None, {kw: ['4', '-1', '-3', '3', '-1', '-4', '-4']}), ['1', '2', '3']) + def testFilteringTwoMultilinksExpression(self): + ae, iiter = self.filteringSetup() + kw1 = self.db.keyword.create(name='Key1', order=10) + kw2 = self.db.keyword.create(name='Key2', order=20) + kw3 = self.db.keyword.create(name='Key3', order=30) + kw4 = self.db.keyword.create(name='Key4', order=40) + self.db.issue.set('1', keywords=[kw1, kw2]) + self.db.issue.set('2', keywords=[kw1, kw3]) + self.db.issue.set('3', keywords=[kw2, kw3, kw4]) + self.db.issue.set('4', keywords=[]) + self.db.issue.set('1', keywords2=[kw3, kw4]) + self.db.issue.set('2', keywords2=[kw2, kw3]) + self.db.issue.set('3', keywords2=[kw1, kw3, kw4]) + self.db.issue.set('4', keywords2=[]) + self.db.commit() + kw = 'keywords' + kw2 = 'keywords2' + for filt in iiter(): + # kw: '1' and '3' kw2: '2' and '3' + ae(filt(None, {kw: ['1', '3', '-3'], kw2: ['2', '3', '-3']}), ['2']) + # kw: empty kw2: empty + ae(filt(None, {kw: ['-1'], kw2: ['-1']}), ['4']) + # kw: empty kw2: empty + ae(filt(None, {kw: [], kw2: []}), ['4']) + # look for both keyword name and order + ae(filt(None, {'keywords.name': 'y4', 'keywords.order': 40}), ['3']) + # look for both keyword and order non-matching + ae(filt(None, {kw: '3', 'keywords.order': 40}), []) + # look for both keyword and order non-matching with kw and kw2 + ae(filt(None, {kw: '3', 'keywords2.order': 40}), ['3']) + def testFilteringRevMultilink(self): ae, iiter = self.filteringSetupTransitiveSearch('user') ni = 'nosy_issues' @@ -2102,6 +2133,35 @@ self.assertEqual(ls(self.db.user.get('4', ni)), ['1']) self.assertEqual(ls(self.db.user.get('5', ni)), ['7']) + def testFilteringRevMultilinkQ2(self): + ae, iiter = self.filteringSetupTransitiveSearch('user') + ni = 'nosy_issues' + nis = 'nosy_issues.status' + self.db.issue.set('6', nosy=['3', '4', '5']) + self.db.issue.set('7', nosy=['5']) + self.db.commit() + # After this setup we have the following values for nosy: + # The issues '1', '3', '5', '7' have status '2' + # issue nosy + # 1: 4 + # 2: 5 + # 3: + # 4: + # 5: + # 6: 3, 4, 5 + # 7: 5 + # 8: + for filt in iiter(): + # status of issue is '2' + ae(filt(None, {nis: ['2']}), + ['4', '5']) + # Issue non-empty and status of issue is '2' + ae(filt(None, {nis: ['2'], ni:['-1', '-2']}), + ['4', '5']) + # empty and status '2' + # This is the test-case for issue2551119 + ae(filt(None, {nis: ['2'], ni:['-1']}), []) + def testFilteringRevMultilinkExpression(self): ae, iiter = self.filteringSetupTransitiveSearch('user') ni = 'nosy_issues' @@ -2911,6 +2971,7 @@ 'feedback: <roundup.hyperdb.Link to "msg">\n', 'files: <roundup.hyperdb.Multilink to "file">\n', 'foo: <roundup.hyperdb.Interval>\n', + 'keywords2: <roundup.hyperdb.Multilink to "keyword">\n', 'keywords: <roundup.hyperdb.Multilink to "keyword">\n', 'messages: <roundup.hyperdb.Multilink to "msg">\n', 'nosy: <roundup.hyperdb.Multilink to "user">\n', @@ -3018,8 +3079,8 @@ keys = sorted(props.keys()) self.assertEqual(keys, ['activity', 'actor', 'assignedto', 'creation', 'creator', 'deadline', 'feedback', 'files', 'fixer', 'foo', - 'id', 'keywords', 'messages', 'nosy', 'priority', 'spam', - 'status', 'superseder', 'title']) + 'id', 'keywords', 'keywords2', 'messages', 'nosy', 'priority', + 'spam', 'status', 'superseder', 'title']) self.assertEqual(self.db.issue.get('1', "fixer"), None) def testRemoveProperty(self): @@ -3032,8 +3093,8 @@ keys = sorted(props.keys()) self.assertEqual(keys, ['activity', 'actor', 'assignedto', 'creation', 'creator', 'deadline', 'feedback', 'files', 'foo', 'id', - 'keywords', 'messages', 'nosy', 'priority', 'spam', 'status', - 'superseder']) + 'keywords', 'keywords2', 'messages', 'nosy', 'priority', 'spam', + 'status', 'superseder']) self.assertEqual(self.db.issue.list(), ['1']) def testAddRemoveProperty(self): @@ -3047,8 +3108,8 @@ keys = sorted(props.keys()) self.assertEqual(keys, ['activity', 'actor', 'assignedto', 'creation', 'creator', 'deadline', 'feedback', 'files', 'fixer', 'foo', 'id', - 'keywords', 'messages', 'nosy', 'priority', 'spam', 'status', - 'superseder']) + 'keywords', 'keywords2', 'messages', 'nosy', 'priority', 'spam', + 'status', 'superseder']) self.assertEqual(self.db.issue.list(), ['1']) def testNosyMail(self) :
