--- a/web/test/unittest_views_searchrestriction.py Wed Jan 14 14:29:56 2009 +0100
+++ b/web/test/unittest_views_searchrestriction.py Wed Jan 14 14:30:45 2009 +0100
@@ -1,40 +1,20 @@
from cubicweb.devtools.apptest import EnvBasedTC
-from cubicweb.web.views.searchrestriction import insert_attr_select_relation
-
-class ExtractFilterFieldsTC(EnvBasedTC):
- def test_relations_cleanup(self):
- self.skip('test needs to be updated (facet API changed)')
- # removing relation should be done in the table filter form but not
- # from the facets box
- rset = self.execute('Any X, S WHERE X in_state S')
- afielddefs, baserql, groupby, orderby = extract_filter_fields(rset, 0)
- afielddefs = [(getattr(r, 'r_type', r), role, type) for r, role, type, values in afielddefs]
- self.assertEquals(afielddefs, [('has_text', 'subject', 'rstring'),
- ('in_state', 'subject', 'eid')])
- self.assertEquals(baserql, 'DISTINCT Any X,S')
- self.assertEquals(groupby, '')
- self.assertEquals(orderby, '')
- # test rql st state
- self.assertEquals(rset.syntax_tree().as_string(), 'Any X,S WHERE X in_state S')
- afielddefs, baserql, groupby, orderby = extract_filter_fields(rset, 0, removerels=False)
- afielddefs = [(getattr(r, 'r_type', r), role, type) for r, role, type, values in afielddefs]
- self.assertEquals(afielddefs, [('has_text', 'subject', 'rstring'),
- ('in_state', 'subject', 'eid')])
- self.assertEquals(baserql, 'DISTINCT Any X,S WHERE X in_state S')
+from cubicweb.web.facet import insert_attr_select_relation, prepare_facets_rqlst
class InsertAttrRelationTC(EnvBasedTC):
- def setUp(self):
- self.skip('test needs to be updated (facet API changed)')
def parse(self, query):
rqlst = self.vreg.parse(self.session, query)
select = rqlst.children[0]
+ # XXX done in real life?
select.remove_groups()
- return select
+ return rqlst
- def _generate(self, select, rel, var, attr):
- return insert_attr_select_relation(select, select.defined_vars[var], 'subject', rel, attr)
+ def _generate(self, rqlst, rel, role, attr):
+ mainvar = prepare_facets_rqlst(rqlst)[0]
+ insert_attr_select_relation(rqlst.children[0], mainvar, rel, role, attr)
+ return rqlst.as_string()
@property
def select(self):
@@ -46,26 +26,34 @@
'B in_group P, P name "managers"')
def test_1(self):
- self.assertEquals(self._generate(self.select, 'in_state', 'S', 'name'),
- "DISTINCT Any S,A ORDERBY A WHERE B in_state S, B in_group P, "
- "P name 'managers', S name A, B is EUser")
+ self.assertEquals(self._generate(self.select, 'in_state', 'subject', 'name'),
+ "DISTINCT Any A,C ORDERBY C WHERE B in_group P, P name 'managers', "
+ "B in_state A, A name C, B is EUser")
def test_2(self):
- self.assertEquals(self._generate(self.select, 'tags', 'T', 'name'),
- "DISTINCT Any T,TN ORDERBY TN WHERE T tags B, T name TN, "
- "B in_group P, P name 'managers', B is EUser")
+ self.assertEquals(self._generate(self.select, 'tags', 'object', 'name'),
+ "DISTINCT Any A,C ORDERBY C WHERE B in_group P, P name 'managers', "
+ "A tags B, A name C, B is EUser")
def test_3(self):
- self.assertEquals(self._generate(self.select, 'created_by', 'U', 'login'),
- "DISTINCT Any U,A ORDERBY A WHERE B created_by U, B in_group P, "
- "P name 'managers', U login A, B is EUser")
+ self.assertEquals(self._generate(self.select, 'created_by', 'subject', 'login'),
+ "DISTINCT Any A,C ORDERBY C WHERE B in_group P, P name 'managers', "
+ "B created_by A, A login C, B is EUser")
+
+ def test_4(self):
+ self.assertEquals(self._generate(self.parse('Any X WHERE X is EUser'), 'created_by', 'subject', 'login'),
+ "DISTINCT Any A,B ORDERBY B WHERE X is EUser, X created_by A, A login B")
+
+ def test_5(self):
+ self.assertEquals(self._generate(self.parse('Any X,L WHERE X is EUser, X login L'), 'created_by', 'subject', 'login'),
+ "DISTINCT Any A,B ORDERBY B WHERE X is EUser, X created_by A, A login B")
def test_nonregr1(self):
select = self.parse('Any T,V WHERE T bookmarked_by V?, '
'V in_state VS, VS name "published", T created_by U')
- self.assertEquals(self._generate(select, 'created_by', 'U', 'login'),
- 'DISTINCT Any U,A ORDERBY A WHERE T created_by U, U login A, '
- 'T is Bookmark')
+ self.assertEquals(self._generate(select, 'created_by', 'subject', 'login'),
+ "DISTINCT Any A,B ORDERBY B WHERE T created_by U, "
+ "T created_by A, A login B, T is Bookmark")
def test_nonregr2(self):
#'DISTINCT Any X,TMP,N WHERE P name TMP, X version_of P, P is Project, X is Version, not X in_state S,S name "published", X num N ORDERBY TMP,N'
@@ -75,8 +63,10 @@
for s, o in rschema.iter_rdefs():
rschema.set_rproperty(s, o, 'cardinality', '++')
try:
- self.assertEquals(self._generate(select, 'in_state', 'VS', 'name'),
- "DISTINCT Any VS,A ORDERBY A WHERE V is EUser, NOT V in_state VS, VS name 'published', VS name A")
+ self.assertEquals(self._generate(select, 'in_state', 'subject', 'name'),
+ "DISTINCT Any A,B ORDERBY B WHERE V is EUser, "
+ "NOT V in_state VS, VS name 'published', "
+ "V in_state A, A name B")
finally:
for s, o in rschema.iter_rdefs():
rschema.set_rproperty(s, o, 'cardinality', '**')
@@ -84,8 +74,8 @@
def test_nonregr3(self):
#'DISTINCT Any X,TMP,N WHERE P name TMP, X version_of P, P is Project, X is Version, not X in_state S,S name "published", X num N ORDERBY TMP,N'
select = self.parse('DISTINCT Any X, MAX(Y) GROUPBY X WHERE X is EUser, Y is Bookmark, X in_group A')
- self.assertEquals(self._generate(select, 'in_group', 'A', 'name'),
- "DISTINCT Any A,B ORDERBY B WHERE X is EUser, X in_group A, A name B")
+ self.assertEquals(self._generate(select, 'in_group', 'subject', 'name'),
+ "DISTINCT Any B,C ORDERBY C WHERE X is EUser, X in_group B, B name C")
if __name__ == '__main__':