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