99 self.ic1 = self.sexecute('INSERT Card X: X title "C1: An internal card", X wikiid "aaai"')[0][0] |
99 self.ic1 = self.sexecute('INSERT Card X: X title "C1: An internal card", X wikiid "aaai"')[0][0] |
100 self.ic2 = self.sexecute('INSERT Card X: X title "C2: Ze internal card", X wikiid "zzzi"')[0][0] |
100 self.ic2 = self.sexecute('INSERT Card X: X title "C2: Ze internal card", X wikiid "zzzi"')[0][0] |
101 |
101 |
102 def test_eid_comp(self): |
102 def test_eid_comp(self): |
103 rset = self.sexecute('Card X WHERE X eid > 1') |
103 rset = self.sexecute('Card X WHERE X eid > 1') |
104 self.assertEquals(len(rset), 4) |
104 self.assertEqual(len(rset), 4) |
105 rset = self.sexecute('Any X,T WHERE X title T, X eid > 1') |
105 rset = self.sexecute('Any X,T WHERE X title T, X eid > 1') |
106 self.assertEquals(len(rset), 4) |
106 self.assertEqual(len(rset), 4) |
107 |
107 |
108 def test_metainformation(self): |
108 def test_metainformation(self): |
109 rset = self.sexecute('Card X ORDERBY T WHERE X title T') |
109 rset = self.sexecute('Card X ORDERBY T WHERE X title T') |
110 # 2 added to the system source, 2 added to the external source |
110 # 2 added to the system source, 2 added to the external source |
111 self.assertEquals(len(rset), 4) |
111 self.assertEqual(len(rset), 4) |
112 # since they are orderd by eid, we know the 3 first one is coming from the system source |
112 # since they are orderd by eid, we know the 3 first one is coming from the system source |
113 # and the others from external source |
113 # and the others from external source |
114 self.assertEquals(rset.get_entity(0, 0).cw_metainformation(), |
114 self.assertEqual(rset.get_entity(0, 0).cw_metainformation(), |
115 {'source': {'adapter': 'native', 'uri': 'system'}, |
115 {'source': {'adapter': 'native', 'uri': 'system'}, |
116 'type': u'Card', 'extid': None}) |
116 'type': u'Card', 'extid': None}) |
117 externent = rset.get_entity(3, 0) |
117 externent = rset.get_entity(3, 0) |
118 metainf = externent.cw_metainformation() |
118 metainf = externent.cw_metainformation() |
119 self.assertEquals(metainf['source'], {'adapter': 'pyrorql', 'base-url': 'http://extern.org/', 'uri': 'extern'}) |
119 self.assertEqual(metainf['source'], {'adapter': 'pyrorql', 'base-url': 'http://extern.org/', 'uri': 'extern'}) |
120 self.assertEquals(metainf['type'], 'Card') |
120 self.assertEqual(metainf['type'], 'Card') |
121 self.assert_(metainf['extid']) |
121 self.assert_(metainf['extid']) |
122 etype = self.sexecute('Any ETN WHERE X is ET, ET name ETN, X eid %(x)s', |
122 etype = self.sexecute('Any ETN WHERE X is ET, ET name ETN, X eid %(x)s', |
123 {'x': externent.eid})[0][0] |
123 {'x': externent.eid})[0][0] |
124 self.assertEquals(etype, 'Card') |
124 self.assertEqual(etype, 'Card') |
125 |
125 |
126 def test_order_limit_offset(self): |
126 def test_order_limit_offset(self): |
127 rsetbase = self.sexecute('Any W,X ORDERBY W,X WHERE X wikiid W') |
127 rsetbase = self.sexecute('Any W,X ORDERBY W,X WHERE X wikiid W') |
128 self.assertEquals(len(rsetbase), 4) |
128 self.assertEqual(len(rsetbase), 4) |
129 self.assertEquals(sorted(rsetbase.rows), rsetbase.rows) |
129 self.assertEqual(sorted(rsetbase.rows), rsetbase.rows) |
130 rset = self.sexecute('Any W,X ORDERBY W,X LIMIT 2 OFFSET 2 WHERE X wikiid W') |
130 rset = self.sexecute('Any W,X ORDERBY W,X LIMIT 2 OFFSET 2 WHERE X wikiid W') |
131 self.assertEquals(rset.rows, rsetbase.rows[2:4]) |
131 self.assertEqual(rset.rows, rsetbase.rows[2:4]) |
132 |
132 |
133 def test_has_text(self): |
133 def test_has_text(self): |
134 self.repo.sources_by_uri['extern'].synchronize(MTIME) # in case fti_update has been run before |
134 self.repo.sources_by_uri['extern'].synchronize(MTIME) # in case fti_update has been run before |
135 self.failUnless(self.sexecute('Any X WHERE X has_text "affref"')) |
135 self.failUnless(self.sexecute('Any X WHERE X has_text "affref"')) |
136 self.failUnless(self.sexecute('Affaire X WHERE X has_text "affref"')) |
136 self.failUnless(self.sexecute('Affaire X WHERE X has_text "affref"')) |
176 |
176 |
177 def test_simplifiable_var(self): |
177 def test_simplifiable_var(self): |
178 affeid = self.sexecute('Affaire X WHERE X ref "AFFREF"')[0][0] |
178 affeid = self.sexecute('Affaire X WHERE X ref "AFFREF"')[0][0] |
179 rset = self.sexecute('Any X,AA,AB WHERE E eid %(x)s, E in_state X, X name AA, X modification_date AB', |
179 rset = self.sexecute('Any X,AA,AB WHERE E eid %(x)s, E in_state X, X name AA, X modification_date AB', |
180 {'x': affeid}) |
180 {'x': affeid}) |
181 self.assertEquals(len(rset), 1) |
181 self.assertEqual(len(rset), 1) |
182 self.assertEquals(rset[0][1], "pitetre") |
182 self.assertEqual(rset[0][1], "pitetre") |
183 |
183 |
184 def test_simplifiable_var_2(self): |
184 def test_simplifiable_var_2(self): |
185 affeid = self.sexecute('Affaire X WHERE X ref "AFFREF"')[0][0] |
185 affeid = self.sexecute('Affaire X WHERE X ref "AFFREF"')[0][0] |
186 rset = self.sexecute('Any E WHERE E eid %(x)s, E in_state S, NOT S name "moved"', |
186 rset = self.sexecute('Any E WHERE E eid %(x)s, E in_state S, NOT S name "moved"', |
187 {'x': affeid, 'u': self.session.user.eid}) |
187 {'x': affeid, 'u': self.session.user.eid}) |
188 self.assertEquals(len(rset), 1) |
188 self.assertEqual(len(rset), 1) |
189 |
189 |
190 def test_sort_func(self): |
190 def test_sort_func(self): |
191 self.sexecute('Affaire X ORDERBY DUMB_SORT(RF) WHERE X ref RF') |
191 self.sexecute('Affaire X ORDERBY DUMB_SORT(RF) WHERE X ref RF') |
192 |
192 |
193 def test_sort_func_ambigous(self): |
193 def test_sort_func_ambigous(self): |
195 |
195 |
196 def test_in_eid(self): |
196 def test_in_eid(self): |
197 iec1 = self.repo.extid2eid(self.repo.sources_by_uri['extern'], str(self.ec1), |
197 iec1 = self.repo.extid2eid(self.repo.sources_by_uri['extern'], str(self.ec1), |
198 'Card', self.session) |
198 'Card', self.session) |
199 rset = self.sexecute('Any X WHERE X eid IN (%s, %s)' % (iec1, self.ic1)) |
199 rset = self.sexecute('Any X WHERE X eid IN (%s, %s)' % (iec1, self.ic1)) |
200 self.assertEquals(sorted(r[0] for r in rset.rows), sorted([iec1, self.ic1])) |
200 self.assertEqual(sorted(r[0] for r in rset.rows), sorted([iec1, self.ic1])) |
201 |
201 |
202 def test_greater_eid(self): |
202 def test_greater_eid(self): |
203 rset = self.sexecute('Any X WHERE X eid > %s' % (self.ic1 - 1)) |
203 rset = self.sexecute('Any X WHERE X eid > %s' % (self.ic1 - 1)) |
204 self.assertEquals(len(rset.rows), 2) # self.ic1 and self.ic2 |
204 self.assertEqual(len(rset.rows), 2) # self.ic1 and self.ic2 |
205 cu = cnx2.cursor() |
205 cu = cnx2.cursor() |
206 ec2 = cu.execute('INSERT Card X: X title "glup"')[0][0] |
206 ec2 = cu.execute('INSERT Card X: X title "glup"')[0][0] |
207 cnx2.commit() |
207 cnx2.commit() |
208 # 'X eid > something' should not trigger discovery |
208 # 'X eid > something' should not trigger discovery |
209 rset = self.sexecute('Any X WHERE X eid > %s' % (self.ic1 - 1)) |
209 rset = self.sexecute('Any X WHERE X eid > %s' % (self.ic1 - 1)) |
210 self.assertEquals(len(rset.rows), 2) |
210 self.assertEqual(len(rset.rows), 2) |
211 # trigger discovery using another query |
211 # trigger discovery using another query |
212 crset = self.sexecute('Card X WHERE X title "glup"') |
212 crset = self.sexecute('Card X WHERE X title "glup"') |
213 self.assertEquals(len(crset.rows), 1) |
213 self.assertEqual(len(crset.rows), 1) |
214 rset = self.sexecute('Any X WHERE X eid > %s' % (self.ic1 - 1)) |
214 rset = self.sexecute('Any X WHERE X eid > %s' % (self.ic1 - 1)) |
215 self.assertEquals(len(rset.rows), 3) |
215 self.assertEqual(len(rset.rows), 3) |
216 rset = self.sexecute('Any MAX(X)') |
216 rset = self.sexecute('Any MAX(X)') |
217 self.assertEquals(len(rset.rows), 1) |
217 self.assertEqual(len(rset.rows), 1) |
218 self.assertEquals(rset.rows[0][0], crset[0][0]) |
218 self.assertEqual(rset.rows[0][0], crset[0][0]) |
219 |
219 |
220 def test_attr_unification_1(self): |
220 def test_attr_unification_1(self): |
221 n1 = self.sexecute('INSERT Note X: X type "AFFREF"')[0][0] |
221 n1 = self.sexecute('INSERT Note X: X type "AFFREF"')[0][0] |
222 n2 = self.sexecute('INSERT Note X: X type "AFFREU"')[0][0] |
222 n2 = self.sexecute('INSERT Note X: X type "AFFREU"')[0][0] |
223 rset = self.sexecute('Any X,Y WHERE X is Note, Y is Affaire, X type T, Y ref T') |
223 rset = self.sexecute('Any X,Y WHERE X is Note, Y is Affaire, X type T, Y ref T') |
224 self.assertEquals(len(rset), 1, rset.rows) |
224 self.assertEqual(len(rset), 1, rset.rows) |
225 |
225 |
226 def test_attr_unification_2(self): |
226 def test_attr_unification_2(self): |
227 cu = cnx2.cursor() |
227 cu = cnx2.cursor() |
228 ec2 = cu.execute('INSERT Card X: X title "AFFREF"')[0][0] |
228 ec2 = cu.execute('INSERT Card X: X title "AFFREF"')[0][0] |
229 cnx2.commit() |
229 cnx2.commit() |
230 try: |
230 try: |
231 c1 = self.sexecute('INSERT Card C: C title "AFFREF"')[0][0] |
231 c1 = self.sexecute('INSERT Card C: C title "AFFREF"')[0][0] |
232 rset = self.sexecute('Any X,Y WHERE X is Card, Y is Affaire, X title T, Y ref T') |
232 rset = self.sexecute('Any X,Y WHERE X is Card, Y is Affaire, X title T, Y ref T') |
233 self.assertEquals(len(rset), 2, rset.rows) |
233 self.assertEqual(len(rset), 2, rset.rows) |
234 finally: |
234 finally: |
235 cu.execute('DELETE Card X WHERE X eid %(x)s', {'x': ec2}) |
235 cu.execute('DELETE Card X WHERE X eid %(x)s', {'x': ec2}) |
236 cnx2.commit() |
236 cnx2.commit() |
237 |
237 |
238 def test_attr_unification_neq_1(self): |
238 def test_attr_unification_neq_1(self): |
245 |
245 |
246 def test_union(self): |
246 def test_union(self): |
247 afeids = self.sexecute('Affaire X') |
247 afeids = self.sexecute('Affaire X') |
248 ueids = self.sexecute('CWUser X') |
248 ueids = self.sexecute('CWUser X') |
249 rset = self.sexecute('(Any X WHERE X is Affaire) UNION (Any X WHERE X is CWUser)') |
249 rset = self.sexecute('(Any X WHERE X is Affaire) UNION (Any X WHERE X is CWUser)') |
250 self.assertEquals(sorted(r[0] for r in rset.rows), |
250 self.assertEqual(sorted(r[0] for r in rset.rows), |
251 sorted(r[0] for r in afeids + ueids)) |
251 sorted(r[0] for r in afeids + ueids)) |
252 |
252 |
253 def test_subquery1(self): |
253 def test_subquery1(self): |
254 rsetbase = self.sexecute('Any W,X WITH W,X BEING (Any W,X ORDERBY W,X WHERE X wikiid W)') |
254 rsetbase = self.sexecute('Any W,X WITH W,X BEING (Any W,X ORDERBY W,X WHERE X wikiid W)') |
255 self.assertEquals(len(rsetbase), 4) |
255 self.assertEqual(len(rsetbase), 4) |
256 self.assertEquals(sorted(rsetbase.rows), rsetbase.rows) |
256 self.assertEqual(sorted(rsetbase.rows), rsetbase.rows) |
257 rset = self.sexecute('Any W,X LIMIT 2 OFFSET 2 WITH W,X BEING (Any W,X ORDERBY W,X WHERE X wikiid W)') |
257 rset = self.sexecute('Any W,X LIMIT 2 OFFSET 2 WITH W,X BEING (Any W,X ORDERBY W,X WHERE X wikiid W)') |
258 self.assertEquals(rset.rows, rsetbase.rows[2:4]) |
258 self.assertEqual(rset.rows, rsetbase.rows[2:4]) |
259 rset = self.sexecute('Any W,X ORDERBY W,X LIMIT 2 OFFSET 2 WITH W,X BEING (Any W,X WHERE X wikiid W)') |
259 rset = self.sexecute('Any W,X ORDERBY W,X LIMIT 2 OFFSET 2 WITH W,X BEING (Any W,X WHERE X wikiid W)') |
260 self.assertEquals(rset.rows, rsetbase.rows[2:4]) |
260 self.assertEqual(rset.rows, rsetbase.rows[2:4]) |
261 rset = self.sexecute('Any W,X WITH W,X BEING (Any W,X ORDERBY W,X LIMIT 2 OFFSET 2 WHERE X wikiid W)') |
261 rset = self.sexecute('Any W,X WITH W,X BEING (Any W,X ORDERBY W,X LIMIT 2 OFFSET 2 WHERE X wikiid W)') |
262 self.assertEquals(rset.rows, rsetbase.rows[2:4]) |
262 self.assertEqual(rset.rows, rsetbase.rows[2:4]) |
263 |
263 |
264 def test_subquery2(self): |
264 def test_subquery2(self): |
265 affeid = self.sexecute('Affaire X WHERE X ref "AFFREF"')[0][0] |
265 affeid = self.sexecute('Affaire X WHERE X ref "AFFREF"')[0][0] |
266 rset = self.sexecute('Any X,AA,AB WITH X,AA,AB BEING (Any X,AA,AB WHERE E eid %(x)s, E in_state X, X name AA, X modification_date AB)', |
266 rset = self.sexecute('Any X,AA,AB WITH X,AA,AB BEING (Any X,AA,AB WHERE E eid %(x)s, E in_state X, X name AA, X modification_date AB)', |
267 {'x': affeid}) |
267 {'x': affeid}) |
268 self.assertEquals(len(rset), 1) |
268 self.assertEqual(len(rset), 1) |
269 self.assertEquals(rset[0][1], "pitetre") |
269 self.assertEqual(rset[0][1], "pitetre") |
270 |
270 |
271 def test_not_relation(self): |
271 def test_not_relation(self): |
272 states = set(tuple(x) for x in self.sexecute('Any S,SN WHERE S is State, S name SN')) |
272 states = set(tuple(x) for x in self.sexecute('Any S,SN WHERE S is State, S name SN')) |
273 self.session.user.clear_all_caches() |
273 self.session.user.clear_all_caches() |
274 userstate = self.session.user.in_state[0] |
274 userstate = self.session.user.in_state[0] |
275 states.remove((userstate.eid, userstate.name)) |
275 states.remove((userstate.eid, userstate.name)) |
276 notstates = set(tuple(x) for x in self.sexecute('Any S,SN WHERE S is State, S name SN, NOT X in_state S, X eid %(x)s', |
276 notstates = set(tuple(x) for x in self.sexecute('Any S,SN WHERE S is State, S name SN, NOT X in_state S, X eid %(x)s', |
277 {'x': self.session.user.eid})) |
277 {'x': self.session.user.eid})) |
278 self.assertSetEquals(notstates, states) |
278 self.assertSetEqual(notstates, states) |
279 aff1 = self.sexecute('Any X WHERE X is Affaire, X ref "AFFREF"')[0][0] |
279 aff1 = self.sexecute('Any X WHERE X is Affaire, X ref "AFFREF"')[0][0] |
280 aff1stateeid, aff1statename = self.sexecute('Any S,SN WHERE X eid %(x)s, X in_state S, S name SN', {'x': aff1})[0] |
280 aff1stateeid, aff1statename = self.sexecute('Any S,SN WHERE X eid %(x)s, X in_state S, S name SN', {'x': aff1})[0] |
281 self.assertEquals(aff1statename, 'pitetre') |
281 self.assertEqual(aff1statename, 'pitetre') |
282 states.add((userstate.eid, userstate.name)) |
282 states.add((userstate.eid, userstate.name)) |
283 states.remove((aff1stateeid, aff1statename)) |
283 states.remove((aff1stateeid, aff1statename)) |
284 notstates = set(tuple(x) for x in self.sexecute('Any S,SN WHERE S is State, S name SN, NOT X in_state S, X eid %(x)s', |
284 notstates = set(tuple(x) for x in self.sexecute('Any S,SN WHERE S is State, S name SN, NOT X in_state S, X eid %(x)s', |
285 {'x': aff1})) |
285 {'x': aff1})) |
286 self.assertSetEquals(notstates, states) |
286 self.assertSetEqual(notstates, states) |
287 |
287 |
288 def test_absolute_url_base_url(self): |
288 def test_absolute_url_base_url(self): |
289 cu = cnx2.cursor() |
289 cu = cnx2.cursor() |
290 ceid = cu.execute('INSERT Card X: X title "without wikiid to get eid based url"')[0][0] |
290 ceid = cu.execute('INSERT Card X: X title "without wikiid to get eid based url"')[0][0] |
291 cnx2.commit() |
291 cnx2.commit() |
292 lc = self.sexecute('Card X WHERE X title "without wikiid to get eid based url"').get_entity(0, 0) |
292 lc = self.sexecute('Card X WHERE X title "without wikiid to get eid based url"').get_entity(0, 0) |
293 self.assertEquals(lc.absolute_url(), 'http://extern.org/card/eid/%s' % ceid) |
293 self.assertEqual(lc.absolute_url(), 'http://extern.org/card/eid/%s' % ceid) |
294 cu.execute('DELETE Card X WHERE X eid %(x)s', {'x':ceid}) |
294 cu.execute('DELETE Card X WHERE X eid %(x)s', {'x':ceid}) |
295 cnx2.commit() |
295 cnx2.commit() |
296 |
296 |
297 def test_absolute_url_no_base_url(self): |
297 def test_absolute_url_no_base_url(self): |
298 cu = cnx3.cursor() |
298 cu = cnx3.cursor() |
299 ceid = cu.execute('INSERT Card X: X title "without wikiid to get eid based url"')[0][0] |
299 ceid = cu.execute('INSERT Card X: X title "without wikiid to get eid based url"')[0][0] |
300 cnx3.commit() |
300 cnx3.commit() |
301 lc = self.sexecute('Card X WHERE X title "without wikiid to get eid based url"').get_entity(0, 0) |
301 lc = self.sexecute('Card X WHERE X title "without wikiid to get eid based url"').get_entity(0, 0) |
302 self.assertEquals(lc.absolute_url(), 'http://testing.fr/cubicweb/card/eid/%s' % lc.eid) |
302 self.assertEqual(lc.absolute_url(), 'http://testing.fr/cubicweb/card/eid/%s' % lc.eid) |
303 cu.execute('DELETE Card X WHERE X eid %(x)s', {'x':ceid}) |
303 cu.execute('DELETE Card X WHERE X eid %(x)s', {'x':ceid}) |
304 cnx3.commit() |
304 cnx3.commit() |
305 |
305 |
306 def test_nonregr1(self): |
306 def test_nonregr1(self): |
307 ueid = self.session.user.eid |
307 ueid = self.session.user.eid |