web/test/unittest_facet.py
changeset 6366 1806148d6ce8
parent 6340 470d8e828fda
child 6380 63d5dbaef999
child 6433 95c40961df21
equal deleted inserted replaced
6333:e3994fcc21c3 6366:1806148d6ce8
     7         req = self.request()
     7         req = self.request()
     8         rset = self.execute('CWUser X')
     8         rset = self.execute('CWUser X')
     9         rqlst = rset.syntax_tree().copy()
     9         rqlst = rset.syntax_tree().copy()
    10         req.vreg.rqlhelper.annotate(rqlst)
    10         req.vreg.rqlhelper.annotate(rqlst)
    11         mainvar, baserql = facet.prepare_facets_rqlst(rqlst, rset.args)
    11         mainvar, baserql = facet.prepare_facets_rqlst(rqlst, rset.args)
    12         self.assertEquals(mainvar.name, 'X')
    12         self.assertEqual(mainvar.name, 'X')
    13         self.assertEquals(baserql, 'Any X WHERE X is CWUser')
    13         self.assertEqual(baserql, 'Any X WHERE X is CWUser')
    14         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    14         self.assertEqual(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'
    23         f.role = 'subject'
    23         f.role = 'subject'
    24         f.target_attr = 'name'
    24         f.target_attr = 'name'
    25         guests, managers = [eid for eid, in self.execute('CWGroup G ORDERBY GN '
    25         guests, managers = [eid for eid, in self.execute('CWGroup G ORDERBY GN '
    26                                                          'WHERE G name GN, G name IN ("guests", "managers")')]
    26                                                          'WHERE G name GN, G name IN ("guests", "managers")')]
    27         self.assertEquals(f.vocabulary(),
    27         self.assertEqual(f.vocabulary(),
    28                           [(u'guests', guests), (u'managers', managers)])
    28                           [(u'guests', guests), (u'managers', managers)])
    29         # ensure rqlst is left unmodified
    29         # ensure rqlst is left unmodified
    30         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    30         self.assertEqual(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    31         #rqlst = rset.syntax_tree()
    31         #rqlst = rset.syntax_tree()
    32         self.assertEquals(f.possible_values(),
    32         self.assertEqual(f.possible_values(),
    33                           [str(guests), str(managers)])
    33                           [str(guests), str(managers)])
    34         # ensure rqlst is left unmodified
    34         # ensure rqlst is left unmodified
    35         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    35         self.assertEqual(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    36         req.form[f.__regid__] = str(guests)
    36         req.form[f.__regid__] = str(guests)
    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.assertEqual(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.assertEqual(f.vocabulary(),
       
    60                           [(u'guests', guests), (u'managers', managers)])
       
    61         # ensure rqlst is left unmodified
       
    62         self.assertEqual(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.assertEqual(sorted(f.possible_values()),
       
    65                           [str(guests), str(managers)])
       
    66         # ensure rqlst is left unmodified
       
    67         self.assertEqual(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.assertEqual(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],
    47                                          filtered_variable=mainvar)
    80                                          filtered_variable=mainvar)
    48         f.rtype = 'in_group'
    81         f.rtype = 'in_group'
    49         f.role = 'subject'
    82         f.role = 'subject'
    50         f.target_attr = 'name'
    83         f.target_attr = 'name'
    51         self.assertEquals(f.vocabulary(),
    84         self.assertEqual(f.vocabulary(),
    52                           [(u'guests', u'guests'), (u'managers', u'managers')])
    85                           [(u'guests', u'guests'), (u'managers', u'managers')])
    53         # ensure rqlst is left unmodified
    86         # ensure rqlst is left unmodified
    54         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    87         self.assertEqual(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    55         #rqlst = rset.syntax_tree()
    88         #rqlst = rset.syntax_tree()
    56         self.assertEquals(f.possible_values(),
    89         self.assertEqual(f.possible_values(),
    57                           ['guests', 'managers'])
    90                           ['guests', 'managers'])
    58         # ensure rqlst is left unmodified
    91         # ensure rqlst is left unmodified
    59         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    92         self.assertEqual(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    60         req.form[f.__regid__] = 'guests'
    93         req.form[f.__regid__] = 'guests'
    61         f.add_rql_restrictions()
    94         f.add_rql_restrictions()
    62         # selection is cluttered because rqlst has been prepared for facet (it
    95         # selection is cluttered because rqlst has been prepared for facet (it
    63         # is not in real life)
    96         # is not in real life)
    64         self.assertEquals(f.rqlst.as_string(),
    97         self.assertEqual(f.rqlst.as_string(),
    65                           "DISTINCT Any  WHERE X is CWUser, X in_group E, E name 'guests'")
    98                           "DISTINCT Any  WHERE X is CWUser, X in_group E, E name 'guests'")
    66 
    99 
    67 
   100 
    68     def test_attribute(self):
   101     def test_attribute(self):
    69         req, rset, rqlst, mainvar = self.prepare_rqlst()
   102         req, rset, rqlst, mainvar = self.prepare_rqlst()
    70         f = facet.AttributeFacet(req, rset=rset,
   103         f = facet.AttributeFacet(req, rset=rset,
    71                                  rqlst=rqlst.children[0],
   104                                  rqlst=rqlst.children[0],
    72                                  filtered_variable=mainvar)
   105                                  filtered_variable=mainvar)
    73         f.rtype = 'login'
   106         f.rtype = 'login'
    74         self.assertEquals(f.vocabulary(),
   107         self.assertEqual(f.vocabulary(),
    75                           [(u'admin', u'admin'), (u'anon', u'anon')])
   108                           [(u'admin', u'admin'), (u'anon', u'anon')])
    76         # ensure rqlst is left unmodified
   109         # ensure rqlst is left unmodified
    77         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
   110         self.assertEqual(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    78         #rqlst = rset.syntax_tree()
   111         #rqlst = rset.syntax_tree()
    79         self.assertEquals(f.possible_values(),
   112         self.assertEqual(f.possible_values(),
    80                           ['admin', 'anon'])
   113                           ['admin', 'anon'])
    81         # ensure rqlst is left unmodified
   114         # ensure rqlst is left unmodified
    82         self.assertEquals(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
   115         self.assertEqual(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    83         req.form[f.__regid__] = 'admin'
   116         req.form[f.__regid__] = 'admin'
    84         f.add_rql_restrictions()
   117         f.add_rql_restrictions()
    85         # selection is cluttered because rqlst has been prepared for facet (it
   118         # selection is cluttered because rqlst has been prepared for facet (it
    86         # is not in real life)
   119         # is not in real life)
    87         self.assertEquals(f.rqlst.as_string(),
   120         self.assertEqual(f.rqlst.as_string(),
    88                           "DISTINCT Any  WHERE X is CWUser, X login 'admin'")
   121                           "DISTINCT Any  WHERE X is CWUser, X login 'admin'")