diff test/db_test_base.py @ 6179:a701c9c81597

Fix rev_multilink properties search/retrieval The code now only returns live (non-retired) items. Since for reverse multilinks the Link/Multilink property in the retired item cannot be changed, we now only return non-retired items in search (filter) and retrieve (get).
author Ralf Schlatterbeck <rsc@runtux.com>
date Tue, 19 May 2020 09:25:48 +0200
parents ff059afae50a
children 6834bb5473da
line wrap: on
line diff
--- a/test/db_test_base.py	Tue May 19 01:14:48 2020 -0400
+++ b/test/db_test_base.py	Tue May 19 09:25:48 2020 +0200
@@ -1862,6 +1862,27 @@
             ae(filt(None, {'issues.title': ['ts2']}), ['6'])
             ae(filt(None, {'issues': ['-1']}), ['1', '2', '3', '4', '5'])
             ae(filt(None, {'issues': '-1'}), ['1', '2', '3', '4', '5'])
+        def ls(x):
+            return list(sorted(x))
+        self.assertEqual(ls(self.db.user.get('6', 'issues')), ['1', '2'])
+        self.assertEqual(ls(self.db.user.get('7', 'issues')), ['3'])
+        self.assertEqual(ls(self.db.user.get('10', 'issues')), ['6', '7', '8'])
+        n = self.db.user.getnode('6')
+        self.assertEqual(ls(n.issues), ['1', '2'])
+        # Now retire some linked-to issues and retry
+        self.db.issue.retire('6')
+        self.db.issue.retire('2')
+        self.db.issue.retire('3')
+        self.db.commit()
+        for filt in filter, filter_iter:
+            ae(filt(None, {'issues': ['3', '4']}), ['8'])
+            ae(filt(None, {'issues': ['1', '4', '8']}), ['6', '8', '10'])
+            ae(filt(None, {'issues.title': ['ts2']}), [])
+            ae(filt(None, {'issues': ['-1']}), ['1', '2', '3', '4', '5', '7'])
+            ae(filt(None, {'issues': '-1'}), ['1', '2', '3', '4', '5', '7'])
+        self.assertEqual(ls(self.db.user.get('6', 'issues')), ['1'])
+        self.assertEqual(ls(self.db.user.get('7', 'issues')), [])
+        self.assertEqual(ls(self.db.user.get('10', 'issues')), ['7', '8'])
 
     def testFilteringLinkSortSearchMultilink(self):
         ae, filter, filter_iter = self.filteringSetup()
@@ -1912,8 +1933,29 @@
         for filt in filter, filter_iter:
             ae(filt(None, {ni: ['1', '2']}), ['4', '5'])
             ae(filt(None, {ni: ['6','7']}), ['3', '4', '5'])
+            ae(filt(None, {'nosy_issues.title': ['ts2']}), ['5'])
             ae(filt(None, {ni: ['-1']}), ['1', '2', '6', '7', '8', '9', '10'])
             ae(filt(None, {ni: '-1'}), ['1', '2', '6', '7', '8', '9', '10'])
+        def ls(x):
+            return list(sorted(x))
+        self.assertEqual(ls(self.db.user.get('4', ni)), ['1', '6'])
+        self.assertEqual(ls(self.db.user.get('5', ni)), ['2', '6', '7'])
+        n = self.db.user.getnode('4')
+        self.assertEqual(ls(n.nosy_issues), ['1', '6'])
+        # Now retire some linked-to issues and retry
+        self.db.issue.retire('2')
+        self.db.issue.retire('6')
+        self.db.commit()
+        for filt in filter, filter_iter:
+            ae(filt(None, {ni: ['1', '2']}), ['4'])
+            ae(filt(None, {ni: ['6','7']}), ['5'])
+            ae(filt(None, {'nosy_issues.title': ['ts2']}), [])
+            ae(filt(None, {ni: ['-1']}),
+                ['1', '2', '3', '6', '7', '8', '9', '10'])
+            ae(filt(None, {ni: '-1'}),
+                ['1', '2', '3', '6', '7', '8', '9', '10'])
+        self.assertEqual(ls(self.db.user.get('4', ni)), ['1'])
+        self.assertEqual(ls(self.db.user.get('5', ni)), ['7'])
 
     def testFilteringMany(self):
         ae, filter, filter_iter = self.filteringSetup()

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