web/test/unittest_facet.py
branchstable
changeset 6338 b520b86113e3
parent 6119 b217635d3b28
child 6340 470d8e828fda
equal deleted inserted replaced
6337:6686ca1826a9 6338:b520b86113e3
    12         self.assertEquals(mainvar.name, 'X')
    12         self.assertEquals(mainvar.name, 'X')
    13         self.assertEquals(baserql, 'Any X WHERE X is CWUser')
    13         self.assertEquals(baserql, 'Any X WHERE X is CWUser')
    14         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    14         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    15         return req, rset, rqlst, mainvar
    15         return req, rset, rqlst, mainvar
    16 
    16 
    17     def test_relation(self):
    17     def test_relation_simple(self):
    18         req, rset, rqlst, mainvar = self.prepare_rqlst()
    18         req, rset, rqlst, mainvar = self.prepare_rqlst()
    19         f = facet.RelationFacet(req, rset=rset,
    19         f = facet.RelationFacet(req, rset=rset,
    20                                 rqlst=rqlst.children[0],
    20                                 rqlst=rqlst.children[0],
    21                                 filtered_variable=mainvar)
    21                                 filtered_variable=mainvar)
    22         f.rtype = 'in_group'
    22         f.rtype = 'in_group'
    37         f.add_rql_restrictions()
    37         f.add_rql_restrictions()
    38         # selection is cluttered because rqlst has been prepared for facet (it
    38         # selection is cluttered because rqlst has been prepared for facet (it
    39         # is not in real life)
    39         # is not in real life)
    40         self.assertEquals(f.rqlst.as_string(),
    40         self.assertEquals(f.rqlst.as_string(),
    41                           'DISTINCT Any  WHERE X is CWUser, X in_group D, D eid %s' % guests)
    41                           'DISTINCT Any  WHERE X is CWUser, X in_group D, D eid %s' % guests)
       
    42 
       
    43     def test_relation_optional_rel(self):
       
    44         req = self.request()
       
    45         rset = self.execute('Any X,GROUP_CONCAT(GN) GROUPBY X '
       
    46                             'WHERE X in_group G?, G name GN, NOT G name "users"')
       
    47         rqlst = rset.syntax_tree().copy()
       
    48         req.vreg.rqlhelper.annotate(rqlst)
       
    49         mainvar, baserql = facet.prepare_facets_rqlst(rqlst, rset.args)
       
    50 
       
    51         f = facet.RelationFacet(req, rset=rset,
       
    52                                 rqlst=rqlst.children[0],
       
    53                                 filtered_variable=mainvar)
       
    54         f.rtype = 'in_group'
       
    55         f.role = 'subject'
       
    56         f.target_attr = 'name'
       
    57         guests, managers = [eid for eid, in self.execute('CWGroup G ORDERBY GN '
       
    58                                                          'WHERE G name GN, G name IN ("guests", "managers")')]
       
    59         self.assertEquals(f.vocabulary(),
       
    60                           [(u'guests', guests), (u'managers', managers)])
       
    61         # ensure rqlst is left unmodified
       
    62         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  GROUPBY X WHERE X in_group G?, G name GN, NOT G name "users"')
       
    63         #rqlst = rset.syntax_tree()
       
    64         self.assertEquals(sorted(f.possible_values()),
       
    65                           [str(guests), str(managers)])
       
    66         # ensure rqlst is left unmodified
       
    67         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  GROUPBY X WHERE X in_group G?, G name GN, NOT G name "users"')
       
    68         req.form[f.__regid__] = str(guests)
       
    69         f.add_rql_restrictions()
       
    70         # selection is cluttered because rqlst has been prepared for facet (it
       
    71         # is not in real life)
       
    72         self.assertEquals(f.rqlst.as_string(),
       
    73                           'DISTINCT Any  GROUPBY X WHERE X in_group G?, G name GN, NOT G name "users", X in_group D, D eid %s' % guests)
       
    74 
    42 
    75 
    43     def test_relationattribute(self):
    76     def test_relationattribute(self):
    44         req, rset, rqlst, mainvar = self.prepare_rqlst()
    77         req, rset, rqlst, mainvar = self.prepare_rqlst()
    45         f = facet.RelationAttributeFacet(req, rset=rset,
    78         f = facet.RelationAttributeFacet(req, rset=rset,
    46                                          rqlst=rqlst.children[0],
    79                                          rqlst=rqlst.children[0],