|
1 from cubicweb.devtools.testlib import CubicWebTC |
|
2 from cubicweb.web import facet |
|
3 |
|
4 class BaseFacetTC(CubicWebTC): |
|
5 |
|
6 def prepare_rqlst(self): |
|
7 req = self.request() |
|
8 rset = self.execute('CWUser X') |
|
9 rqlst = rset.syntax_tree().copy() |
|
10 req.vreg.rqlhelper.annotate(rqlst) |
|
11 mainvar, baserql = facet.prepare_facets_rqlst(rqlst, rset.args) |
|
12 self.assertEquals(mainvar.name, 'X') |
|
13 self.assertEquals(baserql, 'Any X WHERE X is CWUser') |
|
14 self.assertEquals(rqlst.as_string(), 'DISTINCT Any WHERE X is CWUser') |
|
15 return req, rset, rqlst, mainvar |
|
16 |
|
17 def test_relation(self): |
|
18 req, rset, rqlst, mainvar = self.prepare_rqlst() |
|
19 f = facet.RelationFacet(req, rset=rset, |
|
20 rqlst=rqlst.children[0], |
|
21 filtered_variable=mainvar) |
|
22 f.rtype = 'in_group' |
|
23 f.role = 'subject' |
|
24 f.target_attr = 'name' |
|
25 guests, managers = [eid for eid, in self.execute('CWGroup G ORDERBY GN ' |
|
26 'WHERE G name GN, G name IN ("guests", "managers")')] |
|
27 self.assertEquals(f.vocabulary(), |
|
28 [(u'guests', guests), (u'managers', managers)]) |
|
29 # ensure rqlst is left unmodified |
|
30 self.assertEquals(rqlst.as_string(), 'DISTINCT Any WHERE X is CWUser') |
|
31 #rqlst = rset.syntax_tree() |
|
32 self.assertEquals(f.possible_values(), |
|
33 [str(guests), str(managers)]) |
|
34 # ensure rqlst is left unmodified |
|
35 self.assertEquals(rqlst.as_string(), 'DISTINCT Any WHERE X is CWUser') |
|
36 req.form[f.__regid__] = str(guests) |
|
37 f.add_rql_restrictions() |
|
38 # selection is cluttered because rqlst has been prepared for facet (it |
|
39 # is not in real life) |
|
40 self.assertEquals(f.rqlst.as_string(), |
|
41 'DISTINCT Any WHERE X is CWUser, X in_group D, D eid %s' % guests) |
|
42 |
|
43 def test_relationattribute(self): |
|
44 req, rset, rqlst, mainvar = self.prepare_rqlst() |
|
45 f = facet.RelationAttributeFacet(req, rset=rset, |
|
46 rqlst=rqlst.children[0], |
|
47 filtered_variable=mainvar) |
|
48 f.rtype = 'in_group' |
|
49 f.role = 'subject' |
|
50 f.target_attr = 'name' |
|
51 self.assertEquals(f.vocabulary(), |
|
52 [(u'guests', u'guests'), (u'managers', u'managers')]) |
|
53 # ensure rqlst is left unmodified |
|
54 self.assertEquals(rqlst.as_string(), 'DISTINCT Any WHERE X is CWUser') |
|
55 #rqlst = rset.syntax_tree() |
|
56 self.assertEquals(f.possible_values(), |
|
57 ['guests', 'managers']) |
|
58 # ensure rqlst is left unmodified |
|
59 self.assertEquals(rqlst.as_string(), 'DISTINCT Any WHERE X is CWUser') |
|
60 req.form[f.__regid__] = 'guests' |
|
61 f.add_rql_restrictions() |
|
62 # selection is cluttered because rqlst has been prepared for facet (it |
|
63 # is not in real life) |
|
64 self.assertEquals(f.rqlst.as_string(), |
|
65 "DISTINCT Any WHERE X is CWUser, X in_group E, E name 'guests'") |
|
66 |
|
67 |
|
68 def test_attribute(self): |
|
69 req, rset, rqlst, mainvar = self.prepare_rqlst() |
|
70 f = facet.AttributeFacet(req, rset=rset, |
|
71 rqlst=rqlst.children[0], |
|
72 filtered_variable=mainvar) |
|
73 f.rtype = 'login' |
|
74 self.assertEquals(f.vocabulary(), |
|
75 [(u'admin', u'admin'), (u'anon', u'anon')]) |
|
76 # ensure rqlst is left unmodified |
|
77 self.assertEquals(rqlst.as_string(), 'DISTINCT Any WHERE X is CWUser') |
|
78 #rqlst = rset.syntax_tree() |
|
79 self.assertEquals(f.possible_values(), |
|
80 ['admin', 'anon']) |
|
81 # ensure rqlst is left unmodified |
|
82 self.assertEquals(rqlst.as_string(), 'DISTINCT Any WHERE X is CWUser') |
|
83 req.form[f.__regid__] = 'admin' |
|
84 f.add_rql_restrictions() |
|
85 # selection is cluttered because rqlst has been prepared for facet (it |
|
86 # is not in real life) |
|
87 self.assertEquals(f.rqlst.as_string(), |
|
88 "DISTINCT Any WHERE X is CWUser, X login 'admin'") |