test/unittest_rset.py
changeset 6931 0af44a38fe41
parent 6915 99eb71b311e4
child 7298 a448e470c150
equal deleted inserted replaced
6884:6fa712e9dfa5 6931:0af44a38fe41
    47             'Any C,P where C is Company, C employs P' : [(1, 'employs', 'subject')],
    47             'Any C,P where C is Company, C employs P' : [(1, 'employs', 'subject')],
    48             'Any C,P where C is Company, P employed_by P' : [],
    48             'Any C,P where C is Company, P employed_by P' : [],
    49             'Any C where C is Company, C employs P' : [],
    49             'Any C where C is Company, C employs P' : [],
    50             }
    50             }
    51         for rql, relations in queries.items():
    51         for rql, relations in queries.items():
    52             result = list(attr_desc_iterator(parse(rql).children[0]))
    52             result = list(attr_desc_iterator(parse(rql).children[0], 0, 0))
    53             self.assertEqual((rql, result), (rql, relations))
    53             self.assertEqual((rql, result), (rql, relations))
    54 
    54 
    55     def test_relations_description_indexed(self):
    55     def test_relations_description_indexed(self):
    56         """tests relations_description() function"""
    56         """tests relations_description() function"""
    57         queries = {
    57         queries = {
    58             'Any C,U,P,L,M where C is Company, C employs P, U is CWUser, U login L, U mail M' :
    58             'Any C,U,P,L,M where C is Company, C employs P, U is CWUser, U login L, U mail M' :
    59             {0: [(2,'employs', 'subject')], 1: [(3,'login', 'subject'), (4,'mail', 'subject')]},
    59             {0: [(2,'employs', 'subject')], 1: [(3,'login', 'subject'), (4,'mail', 'subject')]},
    60             }
    60             }
    61         for rql, results in queries.items():
    61         for rql, results in queries.items():
    62             for var_index, relations in results.items():
    62             for idx, relations in results.items():
    63                 result = list(attr_desc_iterator(parse(rql).children[0], var_index))
    63                 result = list(attr_desc_iterator(parse(rql).children[0], idx, idx))
    64                 self.assertEqual(result, relations)
    64                 self.assertEqual(result, relations)
    65 
    65 
    66 
    66 
    67 
    67 
    68 class ResultSetTC(CubicWebTC):
    68 class ResultSetTC(CubicWebTC):
   326         rset = self.execute('Any B,U,L WHERE B bookmarked_by U?, U login L')
   326         rset = self.execute('Any B,U,L WHERE B bookmarked_by U?, U login L')
   327         entity, rtype = rset.related_entity(0, 2)
   327         entity, rtype = rset.related_entity(0, 2)
   328         self.assertEqual(entity, None)
   328         self.assertEqual(entity, None)
   329         self.assertEqual(rtype, None)
   329         self.assertEqual(rtype, None)
   330 
   330 
   331     def test_related_entity_union_subquery(self):
   331     def test_related_entity_union_subquery_1(self):
   332         e = self.request().create_entity('Bookmark', title=u'aaaa', path=u'path')
   332         e = self.request().create_entity('Bookmark', title=u'aaaa', path=u'path')
   333         rset = self.execute('Any X,N ORDERBY N WITH X,N BEING '
   333         rset = self.execute('Any X,N ORDERBY N WITH X,N BEING '
   334                             '((Any X,N WHERE X is CWGroup, X name N)'
   334                             '((Any X,N WHERE X is CWGroup, X name N)'
   335                             ' UNION '
   335                             ' UNION '
   336                             ' (Any X,N WHERE X is Bookmark, X title N))')
   336                             ' (Any X,N WHERE X is Bookmark, X title N))')
   337         entity, rtype = rset.related_entity(0, 1)
   337         entity, rtype = rset.related_entity(0, 1)
   338         self.assertEqual(entity.eid, e.eid)
   338         self.assertEqual(entity.eid, e.eid)
   339         self.assertEqual(rtype, 'title')
   339         self.assertEqual(rtype, 'title')
       
   340         self.assertEqual(entity.title, 'aaaa')
   340         entity, rtype = rset.related_entity(1, 1)
   341         entity, rtype = rset.related_entity(1, 1)
   341         self.assertEqual(entity.__regid__, 'CWGroup')
   342         self.assertEqual(entity.__regid__, 'CWGroup')
   342         self.assertEqual(rtype, 'name')
   343         self.assertEqual(rtype, 'name')
   343         #
   344         self.assertEqual(entity.name, 'guests')
       
   345 
       
   346     def test_related_entity_union_subquery_2(self):
       
   347         e = self.request().create_entity('Bookmark', title=u'aaaa', path=u'path')
   344         rset = self.execute('Any X,N ORDERBY N WHERE X is Bookmark WITH X,N BEING '
   348         rset = self.execute('Any X,N ORDERBY N WHERE X is Bookmark WITH X,N BEING '
   345                             '((Any X,N WHERE X is CWGroup, X name N)'
   349                             '((Any X,N WHERE X is CWGroup, X name N)'
   346                             ' UNION '
   350                             ' UNION '
   347                             ' (Any X,N WHERE X is Bookmark, X title N))')
   351                             ' (Any X,N WHERE X is Bookmark, X title N))')
   348         entity, rtype = rset.related_entity(0, 1)
   352         entity, rtype = rset.related_entity(0, 1)
   349         self.assertEqual(entity.eid, e.eid)
   353         self.assertEqual(entity.eid, e.eid)
   350         self.assertEqual(rtype, 'title')
   354         self.assertEqual(rtype, 'title')
   351         #
   355         self.assertEqual(entity.title, 'aaaa')
       
   356 
       
   357     def test_related_entity_union_subquery_3(self):
       
   358         e = self.request().create_entity('Bookmark', title=u'aaaa', path=u'path')
   352         rset = self.execute('Any X,N ORDERBY N WITH N,X BEING '
   359         rset = self.execute('Any X,N ORDERBY N WITH N,X BEING '
   353                             '((Any N,X WHERE X is CWGroup, X name N)'
   360                             '((Any N,X WHERE X is CWGroup, X name N)'
   354                             ' UNION '
   361                             ' UNION '
   355                             ' (Any N,X WHERE X is Bookmark, X title N))')
   362                             ' (Any N,X WHERE X is Bookmark, X title N))')
   356         entity, rtype = rset.related_entity(0, 1)
   363         entity, rtype = rset.related_entity(0, 1)
   357         self.assertEqual(entity.eid, e.eid)
   364         self.assertEqual(entity.eid, e.eid)
   358         self.assertEqual(rtype, 'title')
   365         self.assertEqual(rtype, 'title')
       
   366         self.assertEqual(entity.title, 'aaaa')
       
   367 
       
   368     def test_related_entity_union_subquery_4(self):
       
   369         e = self.request().create_entity('Bookmark', title=u'aaaa', path=u'path')
       
   370         rset = self.execute('Any X,X, N ORDERBY N WITH X,N BEING '
       
   371                             '((Any X,N WHERE X is CWGroup, X name N)'
       
   372                             ' UNION '
       
   373                             ' (Any X,N WHERE X is Bookmark, X title N))')
       
   374         entity, rtype = rset.related_entity(0, 2)
       
   375         self.assertEqual(entity.eid, e.eid)
       
   376         self.assertEqual(rtype, 'title')
       
   377         self.assertEqual(entity.title, 'aaaa')
   359 
   378 
   360     def test_related_entity_trap_subquery(self):
   379     def test_related_entity_trap_subquery(self):
   361         req = self.request()
   380         req = self.request()
   362         req.create_entity('Bookmark', title=u'test bookmark', path=u'')
   381         req.create_entity('Bookmark', title=u'test bookmark', path=u'')
   363         self.execute('SET B bookmarked_by U WHERE U login "admin"')
   382         self.execute('SET B bookmarked_by U WHERE U login "admin"')