Mercurial > p > roundup > code
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)), |
