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'") |