web/test/unittest_facet.py
changeset 6380 63d5dbaef999
parent 6340 470d8e828fda
child 6417 d2361abe8505
equal deleted inserted replaced
6379:3f67f7ea5632 6380:63d5dbaef999
    12         self.assertEqual(mainvar.name, 'X')
    12         self.assertEqual(mainvar.name, 'X')
    13         self.assertEqual(baserql, 'Any X WHERE X is CWUser')
    13         self.assertEqual(baserql, 'Any X WHERE X is CWUser')
    14         self.assertEqual(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_simple(self):
    17     def _in_group_facet(self, cls=facet.RelationFacet, no_relation=False):
    18         req, rset, rqlst, mainvar = self.prepare_rqlst()
    18         req, rset, rqlst, mainvar = self.prepare_rqlst()
    19         f = facet.RelationFacet(req, rset=rset,
    19         cls.no_relation = no_relation
    20                                 rqlst=rqlst.children[0],
    20         f = cls(req, rset=rset, rqlst=rqlst.children[0],
    21                                 filtered_variable=mainvar)
    21                 filtered_variable=mainvar)
       
    22         f.__regid__ = 'in_group'
    22         f.rtype = 'in_group'
    23         f.rtype = 'in_group'
    23         f.role = 'subject'
    24         f.role = 'subject'
    24         f.target_attr = 'name'
    25         f.target_attr = 'name'
    25         guests, managers = [eid for eid, in self.execute('CWGroup G ORDERBY GN '
    26         guests, managers = [eid for eid, in self.execute('CWGroup G ORDERBY GN '
    26                                                          'WHERE G name GN, G name IN ("guests", "managers")')]
    27                                                          'WHERE G name GN, G name IN ("guests", "managers")')]
       
    28         groups = [eid for eid, in self.execute('CWGroup G ORDERBY GN '
       
    29                                                'WHERE G name GN, G name IN ("guests", "managers")')]
       
    30         return f, groups
       
    31 
       
    32     def test_relation_simple(self):
       
    33         f, (guests, managers) = self._in_group_facet()
    27         self.assertEqual(f.vocabulary(),
    34         self.assertEqual(f.vocabulary(),
    28                           [(u'guests', guests), (u'managers', managers)])
    35                       [(u'guests', guests), (u'managers', managers)])
    29         # ensure rqlst is left unmodified
    36         # ensure rqlst is left unmodified
    30         self.assertEqual(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    37         self.assertEqual(f.rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    31         #rqlst = rset.syntax_tree()
    38         #rqlst = rset.syntax_tree()
    32         self.assertEqual(f.possible_values(),
    39         self.assertEqual(f.possible_values(),
    33                           [str(guests), str(managers)])
    40                           [str(guests), str(managers)])
    34         # ensure rqlst is left unmodified
    41         # ensure rqlst is left unmodified
    35         self.assertEqual(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    42         self.assertEqual(f.rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    36         req.form[f.__regid__] = str(guests)
    43         f._cw.form[f.__regid__] = str(guests)
    37         f.add_rql_restrictions()
    44         f.add_rql_restrictions()
    38         # selection is cluttered because rqlst has been prepared for facet (it
    45         # selection is cluttered because rqlst has been prepared for facet (it
    39         # is not in real life)
    46         # is not in real life)
    40         self.assertEqual(f.rqlst.as_string(),
    47         self.assertEqual(f.rqlst.as_string(),
    41                           'DISTINCT Any  WHERE X is CWUser, X in_group D, D eid %s' % guests)
    48                           'DISTINCT Any  WHERE X is CWUser, X in_group D, D eid %s' % guests)
    70         # selection is cluttered because rqlst has been prepared for facet (it
    77         # selection is cluttered because rqlst has been prepared for facet (it
    71         # is not in real life)
    78         # is not in real life)
    72         self.assertEqual(f.rqlst.as_string(),
    79         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)
    80                           '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 
    81 
       
    82     def test_relation_no_relation_1(self):
       
    83         f, (guests, managers) = self._in_group_facet(no_relation=True)
       
    84         self.assertEqual(f.vocabulary(),
       
    85                           [(u'guests', guests), (u'managers', managers)])
       
    86         self.assertEqual(f.possible_values(),
       
    87                           [str(guests), str(managers)])
       
    88         f._cw.create_entity('CWUser', login=u'hop', upassword='toto')
       
    89         self.assertEqual(f.vocabulary(),
       
    90                           [(u'no relation', ''), (u'guests', guests), (u'managers', managers)])
       
    91         self.assertEqual(f.possible_values(),
       
    92                           [str(guests), str(managers)])
       
    93         f._cw.form[f.__regid__] = ''
       
    94         f.add_rql_restrictions()
       
    95         self.assertEqual(f.rqlst.as_string(),
       
    96                           'DISTINCT Any  WHERE X is CWUser, NOT X in_group G')
       
    97 
       
    98     def test_relation_no_relation_2(self):
       
    99         f, (guests, managers) = self._in_group_facet(no_relation=True)
       
   100         f._cw.form[f.__regid__] = ['', guests]
       
   101         f.rqlst.save_state()
       
   102         f.add_rql_restrictions()
       
   103         self.assertEqual(f.rqlst.as_string(),
       
   104                           'DISTINCT Any  WHERE X is CWUser, (NOT X in_group B) OR (X in_group A, A eid %s)' % guests)
       
   105         f.rqlst.recover()
       
   106         self.assertEqual(f.rqlst.as_string(),
       
   107                           'DISTINCT Any  WHERE X is CWUser')
       
   108 
       
   109 
    75 
   110 
    76     def test_relationattribute(self):
   111     def test_relationattribute(self):
    77         req, rset, rqlst, mainvar = self.prepare_rqlst()
   112         f, (guests, managers) = self._in_group_facet(cls=facet.RelationAttributeFacet)
    78         f = facet.RelationAttributeFacet(req, rset=rset,
       
    79                                          rqlst=rqlst.children[0],
       
    80                                          filtered_variable=mainvar)
       
    81         f.rtype = 'in_group'
       
    82         f.role = 'subject'
       
    83         f.target_attr = 'name'
       
    84         self.assertEqual(f.vocabulary(),
   113         self.assertEqual(f.vocabulary(),
    85                           [(u'guests', u'guests'), (u'managers', u'managers')])
   114                           [(u'guests', u'guests'), (u'managers', u'managers')])
    86         # ensure rqlst is left unmodified
   115         # ensure rqlst is left unmodified
    87         self.assertEqual(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
   116         self.assertEqual(f.rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    88         #rqlst = rset.syntax_tree()
   117         #rqlst = rset.syntax_tree()
    89         self.assertEqual(f.possible_values(),
   118         self.assertEqual(f.possible_values(),
    90                           ['guests', 'managers'])
   119                           ['guests', 'managers'])
    91         # ensure rqlst is left unmodified
   120         # ensure rqlst is left unmodified
    92         self.assertEqual(rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
   121         self.assertEqual(f.rqlst.as_string(), 'DISTINCT Any  WHERE X is CWUser')
    93         req.form[f.__regid__] = 'guests'
   122         f._cw.form[f.__regid__] = 'guests'
    94         f.add_rql_restrictions()
   123         f.add_rql_restrictions()
    95         # selection is cluttered because rqlst has been prepared for facet (it
   124         # selection is cluttered because rqlst has been prepared for facet (it
    96         # is not in real life)
   125         # is not in real life)
    97         self.assertEqual(f.rqlst.as_string(),
   126         self.assertEqual(f.rqlst.as_string(),
    98                           "DISTINCT Any  WHERE X is CWUser, X in_group E, E name 'guests'")
   127                           "DISTINCT Any  WHERE X is CWUser, X in_group E, E name 'guests'")