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], |