web/test/unittest_facet.py
changeset 7624 ce020f90fb8e
parent 7618 5395007c415c
child 7629 58f11f7dad68
equal deleted inserted replaced
7623:5cc7acc7a238 7624:ce020f90fb8e
     2 from cubicweb.devtools.testlib import CubicWebTC
     2 from cubicweb.devtools.testlib import CubicWebTC
     3 from cubicweb.web import facet
     3 from cubicweb.web import facet
     4 
     4 
     5 class BaseFacetTC(CubicWebTC):
     5 class BaseFacetTC(CubicWebTC):
     6 
     6 
     7     def prepare_rqlst(self):
     7     def prepare_rqlst(self, rql='CWUser X', baserql='Any X WHERE X is CWUser',
       
     8                       preparedrql='DISTINCT Any  WHERE X is CWUser',
       
     9                       mainvar='X'):
     8         req = self.request()
    10         req = self.request()
     9         rset = self.execute('CWUser X')
    11         rset = self.execute(rql)
    10         rqlst = rset.syntax_tree().copy()
    12         rqlst = rset.syntax_tree().copy()
    11         filtered_variable, baserql = facet.init_facets(rset, rqlst.children[0])
    13         filtered_variable, baserql = facet.init_facets(rset, rqlst.children[0],
    12         self.assertEqual(filtered_variable.name, 'X')
    14                                                        mainvar=mainvar)
    13         self.assertEqual(baserql, 'Any X WHERE X is CWUser')
    15         self.assertEqual(filtered_variable.name, mainvar)
    14         self.assertEqual(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    16         self.assertEqual(baserql, baserql)
       
    17         self.assertEqual(rqlst.as_string(), preparedrql)
    15         return req, rset, rqlst, filtered_variable
    18         return req, rset, rqlst, filtered_variable
    16 
    19 
    17     def _in_group_facet(self, cls=facet.RelationFacet, no_relation=False):
    20     def _in_group_facet(self, cls=facet.RelationFacet, no_relation=False):
    18         req, rset, rqlst, filtered_variable = self.prepare_rqlst()
    21         req, rset, rqlst, filtered_variable = self.prepare_rqlst()
    19         cls.no_relation = no_relation
    22         cls.no_relation = no_relation
   220         # selection is cluttered because rqlst has been prepared for facet (it
   223         # selection is cluttered because rqlst has been prepared for facet (it
   221         # is not in real life)
   224         # is not in real life)
   222         self.assertEqual(f.select.as_string(),
   225         self.assertEqual(f.select.as_string(),
   223                          "DISTINCT Any  WHERE X is CWUser, X created_by G, G owned_by H, H login 'admin'")
   226                          "DISTINCT Any  WHERE X is CWUser, X created_by G, G owned_by H, H login 'admin'")
   224 
   227 
       
   228     def prepareg_aggregat_rqlst(self):
       
   229         return self.prepare_rqlst(
       
   230             'Any 1, COUNT(X) WHERE X is CWUser, X creation_date XD, '
       
   231             'X modification_date XM, Y creation_date YD, Y is CWGroup '
       
   232             'HAVING DAY(XD)>=DAY(YD) AND DAY(XM)<=DAY(YD)', mainvar='X',
       
   233             baserql='DISTINCT Any  WHERE X is CWUser, X creation_date XD, '
       
   234             'X modification_date XM, Y creation_date YD, Y is CWGroup '
       
   235             'HAVING DAY(XD) >= DAY(YD), DAY(XM) <= DAY(YD)',
       
   236             preparedrql='DISTINCT Any  WHERE X is CWUser, X creation_date XD, '
       
   237             'X modification_date XM, Y creation_date YD, Y is CWGroup '
       
   238             'HAVING DAY(XD) >= DAY(YD), DAY(XM) <= DAY(YD)')
       
   239 
       
   240 
       
   241     def test_aggregat_query_cleanup_select(self):
       
   242         req, rset, rqlst, filtered_variable = self.prepareg_aggregat_rqlst()
       
   243         select = rqlst.children[0]
       
   244         facet.cleanup_select(select, filtered_variable=filtered_variable)
       
   245         self.assertEqual(select.as_string(),
       
   246                          'DISTINCT Any  WHERE X is CWUser, X creation_date XD, '
       
   247                          'X modification_date XM, Y creation_date YD, Y is CWGroup '
       
   248                          'HAVING DAY(XD) >= DAY(YD), DAY(XM) <= DAY(YD)')
       
   249 
       
   250     def test_aggregat_query_rql_path(self):
       
   251         req, rset, rqlst, filtered_variable = self.prepareg_aggregat_rqlst()
       
   252         facet.RQLPathFacet.path = [('X created_by U'), ('U owned_by O'), ('O login OL')]
       
   253         f = facet.RQLPathFacet(req, rset=rset,
       
   254                                select=rqlst.children[0],
       
   255                                filtered_variable=filtered_variable)
       
   256         f.filter_variable = 'OL'
       
   257         self.assertEqual(f.vocabulary(), [(u'admin', u'admin')])
       
   258         self.assertEqual(f.possible_values(), ['admin'])
       
   259         req.form[f.__regid__] = 'admin'
       
   260         f.add_rql_restrictions()
       
   261         self.assertEqual(f.select.as_string(),
       
   262                          "DISTINCT Any  WHERE X is CWUser, X creation_date XD, "
       
   263                          "X modification_date XM, Y creation_date YD, Y is CWGroup, "
       
   264                          "X created_by G, G owned_by H, H login 'admin' "
       
   265                          "HAVING DAY(XD) >= DAY(YD), DAY(XM) <= DAY(YD)")
       
   266 
       
   267     def test_aggregat_query_attribute(self):
       
   268         req, rset, rqlst, filtered_variable = self.prepareg_aggregat_rqlst()
       
   269         f = facet.AttributeFacet(req, rset=rset,
       
   270                                  select=rqlst.children[0],
       
   271                                  filtered_variable=filtered_variable)
       
   272         f.rtype = 'login'
       
   273         self.assertEqual(f.vocabulary(),
       
   274                           [(u'admin', u'admin'), (u'anon', u'anon')])
       
   275         self.assertEqual(f.possible_values(),
       
   276                           ['admin', 'anon'])
       
   277         req.form[f.__regid__] = 'admin'
       
   278         f.add_rql_restrictions()
       
   279         self.assertEqual(f.select.as_string(),
       
   280                           "DISTINCT Any  WHERE X is CWUser, X creation_date XD, "
       
   281                           "X modification_date XM, Y creation_date YD, Y is CWGroup, X login 'admin' "
       
   282                           "HAVING DAY(XD) >= DAY(YD), DAY(XM) <= DAY(YD)")
   225 
   283 
   226 if __name__ == '__main__':
   284 if __name__ == '__main__':
   227     from logilab.common.testlib import unittest_main
   285     from logilab.common.testlib import unittest_main
   228     unittest_main()
   286     unittest_main()