diff -r 68783684ec2f -r a8814ff6824e web/test/unittest_views_searchrestriction.py --- 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__':