comparison test/db_test_base.py @ 6402:619807d9a2df

Make rev multilink for Link work Fix searching of retired items. Fix implementation for anydbm.
author Ralf Schlatterbeck <rsc@runtux.com>
date Sat, 08 May 2021 18:13:20 +0200
parents 8bc5faeb7677
children 9957d8d10783
comparison
equal deleted inserted replaced
6401:8bc5faeb7677 6402:619807d9a2df
1896 ae(filt(None, {'issues': '-1'}), ['1', '2', '3', '4', '5', '7']) 1896 ae(filt(None, {'issues': '-1'}), ['1', '2', '3', '4', '5', '7'])
1897 self.assertEqual(ls(self.db.user.get('6', 'issues')), ['1']) 1897 self.assertEqual(ls(self.db.user.get('6', 'issues')), ['1'])
1898 self.assertEqual(ls(self.db.user.get('7', 'issues')), []) 1898 self.assertEqual(ls(self.db.user.get('7', 'issues')), [])
1899 self.assertEqual(ls(self.db.user.get('10', 'issues')), ['7', '8']) 1899 self.assertEqual(ls(self.db.user.get('10', 'issues')), ['7', '8'])
1900 1900
1901 def testFilteringRevLinkExpression(self):
1902 ae, iiter = self.filteringSetupTransitiveSearch('user')
1903 # We have
1904 # issue assignedto
1905 # 1: 6
1906 # 2: 6
1907 # 3: 7
1908 # 4: 8
1909 # 5: 9
1910 # 6: 10
1911 # 7: 10
1912 # 8: 10
1913 for filt in iiter():
1914 # Explicit 'or'
1915 ae(filt(None, {'issues': ['3', '4', '-4']}), ['7', '8'])
1916 # Implicit or with '-1'
1917 ae(filt(None, {'issues': ['3', '4', '-1']}),
1918 ['1', '2', '3', '4', '5', '7', '8'])
1919 # Explicit or with '-1': 3 or 4 or empty
1920 ae(filt(None, {'issues': ['3', '4', '-4', '-1', '-4']}),
1921 ['1', '2', '3', '4', '5', '7', '8'])
1922 # '3' and empty
1923 ae(filt(None, {'issues': ['3', '-1', '-3']}), [])
1924 # '6' and '7' and '8'
1925 ae(filt(None, {'issues': ['6', '7', '-3', '8', '-3']}), ['10'])
1926 # '6' and '7' or '1' and '2'
1927 ae(filt(None, {'issues': ['6', '7', '-3', '1', '2', '-3', '-4']}),
1928 ['6', '10'])
1929 # '1' or '4'
1930 ae(filt(None, {'issues': ['1', '4', '-4']}), ['6', '8'])
1931
1932 # Now retire some linked-to issues and retry
1933 self.db.issue.retire('6')
1934 self.db.issue.retire('2')
1935 self.db.issue.retire('3')
1936 self.db.commit()
1937 # We have now
1938 # issue assignedto
1939 # 1: 6
1940 # 4: 8
1941 # 5: 9
1942 # 7: 10
1943 # 8: 10
1944 for filt in iiter():
1945 # Explicit 'or'
1946 ae(filt(None, {'issues': ['3', '4', '-4']}), ['8'])
1947 # Implicit or with '-1'
1948 ae(filt(None, {'issues': ['3', '4', '-1']}),
1949 ['1', '2', '3', '4', '5', '7', '8'])
1950 # Explicit or with '-1': 3 or 4 or empty
1951 ae(filt(None, {'issues': ['3', '4', '-4', '-1', '-4']}),
1952 ['1', '2', '3', '4', '5', '7', '8'])
1953 # '3' and empty
1954 ae(filt(None, {'issues': ['3', '-1', '-3']}), [])
1955 # '6' and '7' and '8'
1956 ae(filt(None, {'issues': ['6', '7', '-3', '8', '-3']}), [])
1957 # '7' and '8'
1958 ae(filt(None, {'issues': ['7', '8', '-3']}), ['10'])
1959 # '6' and '7' or '1' and '2'
1960 ae(filt(None, {'issues': ['6', '7', '-3', '1', '2', '-3', '-4']}),
1961 [])
1962 # '1' or '4'
1963 ae(filt(None, {'issues': ['1', '4', '-4']}), ['6', '8'])
1964
1901 def testFilteringLinkSortSearchMultilink(self): 1965 def testFilteringLinkSortSearchMultilink(self):
1902 ae, iiter = self.filteringSetup() 1966 ae, iiter = self.filteringSetup()
1903 a = 'assignedto' 1967 a = 'assignedto'
1904 grp = (None, None) 1968 grp = (None, None)
1905 for filt in iiter(): 1969 for filt in iiter():
2052 # 5: 2116 # 5:
2053 # 6: 3, 4, 5 2117 # 6: 3, 4, 5
2054 # 7: 5 2118 # 7: 5
2055 # 8: 2119 # 8:
2056 # Retire users '9' and '10' to reduce list 2120 # Retire users '9' and '10' to reduce list
2057 self.db.user.retire ('9') 2121 self.db.user.retire('9')
2058 self.db.user.retire ('10') 2122 self.db.user.retire('10')
2059 self.db.commit () 2123 self.db.commit()
2060 for filt in iiter(): 2124 for filt in iiter():
2125 # not empty
2126 ae(filt(None, {ni: ['-1', '-2']}), ['3', '4', '5'])
2061 # '1' or '2' 2127 # '1' or '2'
2062 ae(filt(None, {ni: ['1', '2', '-4']}), ['4', '5']) 2128 ae(filt(None, {ni: ['1', '2', '-4']}), ['4', '5'])
2063 # '6' or '7' 2129 # '6' or '7'
2064 ae(filt(None, {ni: ['6', '7', '-4']}), ['3', '4', '5']) 2130 ae(filt(None, {ni: ['6', '7', '-4']}), ['3', '4', '5'])
2065 # '6' and '7' 2131 # '6' and '7'
2079 # empty and '2' (should always return empty list) 2145 # empty and '2' (should always return empty list)
2080 ae(filt(None, {ni: ['2', '-1', '-3']}), []) 2146 ae(filt(None, {ni: ['2', '-1', '-3']}), [])
2081 # ('4' and empty) or ('2' or empty) 2147 # ('4' and empty) or ('2' or empty)
2082 ae(filt(None, {ni: ['4', '-1', '-3', '2', '-1', '-4', '-4']}), 2148 ae(filt(None, {ni: ['4', '-1', '-3', '2', '-1', '-4', '-4']}),
2083 ['1', '2', '5', '6', '7', '8']) 2149 ['1', '2', '5', '6', '7', '8'])
2150 # Retire issues 2, 6 and retry
2151 self.db.issue.retire('2')
2152 self.db.issue.retire('6')
2153 self.db.commit()
2154 # After this setup we have the following values for nosy:
2155 # issue nosy
2156 # 1: 4
2157 # 3:
2158 # 4:
2159 # 5:
2160 # 7: 5
2161 # 8:
2162 for filt in iiter():
2163 # not empty
2164 ae(filt(None, {ni: ['-1', '-2']}), ['4', '5'])
2165 # '1' or '2' (implicit)
2166 ae(filt(None, {ni: ['1', '2']}), ['4'])
2167 # '1' or '2'
2168 ae(filt(None, {ni: ['1', '2', '-4']}), ['4'])
2169 # '6' or '7'
2170 ae(filt(None, {ni: ['6', '7', '-4']}), ['5'])
2171 # '6' and '7'
2172 ae(filt(None, {ni: ['6', '7', '-3']}), [])
2173 # '6' and not '1'
2174 ae(filt(None, {ni: ['6', '1', '-2', '-3']}), [])
2175 # not '1'
2176 ae(filt(None, {ni: ['1', '-2']}),
2177 ['1', '2', '3', '5', '6', '7', '8'])
2178 # '2' or empty (implicit or)
2179 ae(filt(None, {ni: ['-1', '2']}), ['1', '2', '3', '6', '7', '8'])
2180 # '2' or empty (explicit or)
2181 ae(filt(None, {ni: ['-1', '2', '-4']}),
2182 ['1', '2', '3', '6', '7', '8'])
2183 # empty or '2' (explicit or)
2184 ae(filt(None, {ni: ['2', '-1', '-4']}),
2185 ['1', '2', '3', '6', '7', '8'])
2186 # '2' and empty (should always return empty list)
2187 ae(filt(None, {ni: ['-1', '2', '-3']}), [])
2188 # empty and '2' (should always return empty list)
2189 ae(filt(None, {ni: ['2', '-1', '-3']}), [])
2190 # ('4' and empty) or ('2' or empty)
2191 ae(filt(None, {ni: ['4', '-1', '-3', '2', '-1', '-4', '-4']}),
2192 ['1', '2', '3', '6', '7', '8'])
2084 2193
2085 def testFilteringMany(self): 2194 def testFilteringMany(self):
2086 ae, iiter = self.filteringSetup() 2195 ae, iiter = self.filteringSetup()
2087 for f in iiter(): 2196 for f in iiter():
2088 ae(f(None, {'nosy': '2', 'status': '1'}, ('+','id'), (None,None)), 2197 ae(f(None, {'nosy': '2', 'status': '1'}, ('+','id'), (None,None)),

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