web/test/unittest_facet.py
branchstable
changeset 6119 b217635d3b28
child 6338 b520b86113e3
equal deleted inserted replaced
6118:45eccda89480 6119:b217635d3b28
       
     1 from cubicweb.devtools.testlib import CubicWebTC
       
     2 from cubicweb.web import facet
       
     3 
       
     4 class BaseFacetTC(CubicWebTC):
       
     5 
       
     6     def prepare_rqlst(self):
       
     7         req = self.request()
       
     8         rset = self.execute('CWUser X')
       
     9         rqlst = rset.syntax_tree().copy()
       
    10         req.vreg.rqlhelper.annotate(rqlst)
       
    11         mainvar, baserql = facet.prepare_facets_rqlst(rqlst, rset.args)
       
    12         self.assertEquals(mainvar.name, 'X')
       
    13         self.assertEquals(baserql, 'Any X WHERE X is CWUser')
       
    14         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
       
    15         return req, rset, rqlst, mainvar
       
    16 
       
    17     def test_relation(self):
       
    18         req, rset, rqlst, mainvar = self.prepare_rqlst()
       
    19         f = facet.RelationFacet(req, rset=rset,
       
    20                                 rqlst=rqlst.children[0],
       
    21                                 filtered_variable=mainvar)
       
    22         f.rtype = 'in_group'
       
    23         f.role = 'subject'
       
    24         f.target_attr = 'name'
       
    25         guests, managers = [eid for eid, in self.execute('CWGroup G ORDERBY GN '
       
    26                                                          'WHERE G name GN, G name IN ("guests", "managers")')]
       
    27         self.assertEquals(f.vocabulary(),
       
    28                           [(u'guests', guests), (u'managers', managers)])
       
    29         # ensure rqlst is left unmodified
       
    30         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
       
    31         #rqlst = rset.syntax_tree()
       
    32         self.assertEquals(f.possible_values(),
       
    33                           [str(guests), str(managers)])
       
    34         # ensure rqlst is left unmodified
       
    35         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
       
    36         req.form[f.__regid__] = str(guests)
       
    37         f.add_rql_restrictions()
       
    38         # selection is cluttered because rqlst has been prepared for facet (it
       
    39         # is not in real life)
       
    40         self.assertEquals(f.rqlst.as_string(),
       
    41                           'DISTINCT Any  WHERE X is CWUser, X in_group D, D eid %s' % guests)
       
    42 
       
    43     def test_relationattribute(self):
       
    44         req, rset, rqlst, mainvar = self.prepare_rqlst()
       
    45         f = facet.RelationAttributeFacet(req, rset=rset,
       
    46                                          rqlst=rqlst.children[0],
       
    47                                          filtered_variable=mainvar)
       
    48         f.rtype = 'in_group'
       
    49         f.role = 'subject'
       
    50         f.target_attr = 'name'
       
    51         self.assertEquals(f.vocabulary(),
       
    52                           [(u'guests', u'guests'), (u'managers', u'managers')])
       
    53         # ensure rqlst is left unmodified
       
    54         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
       
    55         #rqlst = rset.syntax_tree()
       
    56         self.assertEquals(f.possible_values(),
       
    57                           ['guests', 'managers'])
       
    58         # ensure rqlst is left unmodified
       
    59         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
       
    60         req.form[f.__regid__] = 'guests'
       
    61         f.add_rql_restrictions()
       
    62         # selection is cluttered because rqlst has been prepared for facet (it
       
    63         # is not in real life)
       
    64         self.assertEquals(f.rqlst.as_string(),
       
    65                           "DISTINCT Any  WHERE X is CWUser, X in_group E, E name 'guests'")
       
    66 
       
    67 
       
    68     def test_attribute(self):
       
    69         req, rset, rqlst, mainvar = self.prepare_rqlst()
       
    70         f = facet.AttributeFacet(req, rset=rset,
       
    71                                  rqlst=rqlst.children[0],
       
    72                                  filtered_variable=mainvar)
       
    73         f.rtype = 'login'
       
    74         self.assertEquals(f.vocabulary(),
       
    75                           [(u'admin', u'admin'), (u'anon', u'anon')])
       
    76         # ensure rqlst is left unmodified
       
    77         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
       
    78         #rqlst = rset.syntax_tree()
       
    79         self.assertEquals(f.possible_values(),
       
    80                           ['admin', 'anon'])
       
    81         # ensure rqlst is left unmodified
       
    82         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
       
    83         req.form[f.__regid__] = 'admin'
       
    84         f.add_rql_restrictions()
       
    85         # selection is cluttered because rqlst has been prepared for facet (it
       
    86         # is not in real life)
       
    87         self.assertEquals(f.rqlst.as_string(),
       
    88                           "DISTINCT Any  WHERE X is CWUser, X login 'admin'")