server/test/unittest_multisources.py
branchstable
changeset 6340 470d8e828fda
parent 6197 d8f0dce0b86d
child 6427 c8a5ac2d1eaa
equal deleted inserted replaced
6339:bdc3dc94d744 6340:470d8e828fda
    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"'))
   146         self.commit()
   146         self.commit()
   147         cnx = self.login('anon')
   147         cnx = self.login('anon')
   148         cu = cnx.cursor()
   148         cu = cnx.cursor()
   149         rset = cu.execute('Any X WHERE X has_text "card"')
   149         rset = cu.execute('Any X WHERE X has_text "card"')
   150         # 5: 4 card + 1 readable affaire
   150         # 5: 4 card + 1 readable affaire
   151         self.assertEquals(len(rset), 5, zip(rset.rows, rset.description))
   151         self.assertEqual(len(rset), 5, zip(rset.rows, rset.description))
   152         rset = cu.execute('Any X ORDERBY FTIRANK(X) WHERE X has_text "card"')
   152         rset = cu.execute('Any X ORDERBY FTIRANK(X) WHERE X has_text "card"')
   153         self.assertEquals(len(rset), 5, zip(rset.rows, rset.description))
   153         self.assertEqual(len(rset), 5, zip(rset.rows, rset.description))
   154         Connection_close(cnx.cnx) # cnx is a TestCaseConnectionProxy
   154         Connection_close(cnx.cnx) # cnx is a TestCaseConnectionProxy
   155 
   155 
   156     def test_synchronization(self):
   156     def test_synchronization(self):
   157         cu = cnx2.cursor()
   157         cu = cnx2.cursor()
   158         assert cu.execute('Any X WHERE X eid %(x)s', {'x': self.aff1})
   158         assert cu.execute('Any X WHERE X eid %(x)s', {'x': self.aff1})
   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
   313         iworkflowable = self.session.user.cw_adapt_to('IWorkflowable')
   313         iworkflowable = self.session.user.cw_adapt_to('IWorkflowable')
   314         iworkflowable.fire_transition('deactivate')
   314         iworkflowable.fire_transition('deactivate')
   315         treid = iworkflowable.latest_trinfo().eid
   315         treid = iworkflowable.latest_trinfo().eid
   316         rset = self.sexecute('Any X ORDERBY D DESC WHERE E eid %(x)s, E wf_info_for X, X modification_date D',
   316         rset = self.sexecute('Any X ORDERBY D DESC WHERE E eid %(x)s, E wf_info_for X, X modification_date D',
   317                             {'x': treid})
   317                             {'x': treid})
   318         self.assertEquals(len(rset), 1)
   318         self.assertEqual(len(rset), 1)
   319         self.assertEquals(rset.rows[0], [self.session.user.eid])
   319         self.assertEqual(rset.rows[0], [self.session.user.eid])
   320 
   320 
   321     def test_nonregr3(self):
   321     def test_nonregr3(self):
   322         self.sexecute('DELETE Card X WHERE X eid %(x)s, NOT X multisource_inlined_rel Y', {'x': self.ic1})
   322         self.sexecute('DELETE Card X WHERE X eid %(x)s, NOT X multisource_inlined_rel Y', {'x': self.ic1})
   323 
   323 
   324 if __name__ == '__main__':
   324 if __name__ == '__main__':