diff -r 6686ca1826a9 -r b520b86113e3 web/test/unittest_facet.py --- a/web/test/unittest_facet.py Fri Sep 24 18:20:16 2010 +0200 +++ b/web/test/unittest_facet.py Fri Sep 24 18:20:45 2010 +0200 @@ -14,7 +14,7 @@ self.assertEquals(rqlst.as_string(), 'DISTINCT Any WHERE X is CWUser') return req, rset, rqlst, mainvar - def test_relation(self): + def test_relation_simple(self): req, rset, rqlst, mainvar = self.prepare_rqlst() f = facet.RelationFacet(req, rset=rset, rqlst=rqlst.children[0], @@ -40,6 +40,39 @@ self.assertEquals(f.rqlst.as_string(), 'DISTINCT Any WHERE X is CWUser, X in_group D, D eid %s' % guests) + def test_relation_optional_rel(self): + req = self.request() + rset = self.execute('Any X,GROUP_CONCAT(GN) GROUPBY X ' + 'WHERE X in_group G?, G name GN, NOT G name "users"') + rqlst = rset.syntax_tree().copy() + req.vreg.rqlhelper.annotate(rqlst) + mainvar, baserql = facet.prepare_facets_rqlst(rqlst, rset.args) + + f = facet.RelationFacet(req, rset=rset, + rqlst=rqlst.children[0], + filtered_variable=mainvar) + f.rtype = 'in_group' + f.role = 'subject' + f.target_attr = 'name' + guests, managers = [eid for eid, in self.execute('CWGroup G ORDERBY GN ' + 'WHERE G name GN, G name IN ("guests", "managers")')] + self.assertEquals(f.vocabulary(), + [(u'guests', guests), (u'managers', managers)]) + # ensure rqlst is left unmodified + self.assertEquals(rqlst.as_string(), 'DISTINCT Any GROUPBY X WHERE X in_group G?, G name GN, NOT G name "users"') + #rqlst = rset.syntax_tree() + self.assertEquals(sorted(f.possible_values()), + [str(guests), str(managers)]) + # ensure rqlst is left unmodified + self.assertEquals(rqlst.as_string(), 'DISTINCT Any GROUPBY X WHERE X in_group G?, G name GN, NOT G name "users"') + req.form[f.__regid__] = str(guests) + f.add_rql_restrictions() + # selection is cluttered because rqlst has been prepared for facet (it + # is not in real life) + self.assertEquals(f.rqlst.as_string(), + 'DISTINCT Any GROUPBY X WHERE X in_group G?, G name GN, NOT G name "users", X in_group D, D eid %s' % guests) + + def test_relationattribute(self): req, rset, rqlst, mainvar = self.prepare_rqlst() f = facet.RelationAttributeFacet(req, rset=rset,