[testlib] simplify code by using a class attribute
fromcubicweb.devtools.testlibimportCubicWebTCfromcubicweb.webimportfacetclassBaseFacetTC(CubicWebTC):defprepare_rqlst(self):req=self.request()rset=self.execute('CWUser X')rqlst=rset.syntax_tree().copy()req.vreg.rqlhelper.annotate(rqlst)mainvar,baserql=facet.prepare_facets_rqlst(rqlst,rset.args)self.assertEqual(mainvar.name,'X')self.assertEqual(baserql,'Any X WHERE X is CWUser')self.assertEqual(rqlst.as_string(),'DISTINCT Any WHERE X is CWUser')returnreq,rset,rqlst,mainvardef_in_group_facet(self,cls=facet.RelationFacet,no_relation=False):req,rset,rqlst,mainvar=self.prepare_rqlst()cls.no_relation=no_relationf=cls(req,rset=rset,rqlst=rqlst.children[0],filtered_variable=mainvar)f.__regid__='in_group'f.rtype='in_group'f.role='subject'f.target_attr='name'guests,managers=[eidforeid,inself.execute('CWGroup G ORDERBY GN ''WHERE G name GN, G name IN ("guests", "managers")')]groups=[eidforeid,inself.execute('CWGroup G ORDERBY GN ''WHERE G name GN, G name IN ("guests", "managers")')]returnf,groupsdeftest_relation_simple(self):f,(guests,managers)=self._in_group_facet()self.assertEqual(f.vocabulary(),[(u'guests',guests),(u'managers',managers)])# ensure rqlst is left unmodifiedself.assertEqual(f.rqlst.as_string(),'DISTINCT Any WHERE X is CWUser')#rqlst = rset.syntax_tree()self.assertEqual(f.possible_values(),[str(guests),str(managers)])# ensure rqlst is left unmodifiedself.assertEqual(f.rqlst.as_string(),'DISTINCT Any WHERE X is CWUser')f._cw.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.assertEqual(f.rqlst.as_string(),'DISTINCT Any WHERE X is CWUser, X in_group D, D eid %s'%guests)deftest_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=[eidforeid,inself.execute('CWGroup G ORDERBY GN ''WHERE G name GN, G name IN ("guests", "managers")')]self.assertEqual(f.vocabulary(),[(u'guests',guests),(u'managers',managers)])# ensure rqlst is left unmodifiedself.assertEqual(rqlst.as_string(),'DISTINCT Any GROUPBY X WHERE X in_group G?, G name GN, NOT G name "users"')#rqlst = rset.syntax_tree()self.assertEqual(sorted(f.possible_values()),[str(guests),str(managers)])# ensure rqlst is left unmodifiedself.assertEqual(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.assertEqual(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)deftest_relation_no_relation_1(self):f,(guests,managers)=self._in_group_facet(no_relation=True)self.assertEqual(f.vocabulary(),[(u'guests',guests),(u'managers',managers)])self.assertEqual(f.possible_values(),[str(guests),str(managers)])f._cw.create_entity('CWUser',login=u'hop',upassword='toto')self.assertEqual(f.vocabulary(),[(u'<no relation>',''),(u'guests',guests),(u'managers',managers)])self.assertEqual(f.possible_values(),[str(guests),str(managers),''])f._cw.form[f.__regid__]=''f.add_rql_restrictions()self.assertEqual(f.rqlst.as_string(),'DISTINCT Any WHERE X is CWUser, NOT X in_group G')deftest_relation_no_relation_2(self):f,(guests,managers)=self._in_group_facet(no_relation=True)f._cw.form[f.__regid__]=['',guests]f.rqlst.save_state()f.add_rql_restrictions()self.assertEqual(f.rqlst.as_string(),'DISTINCT Any WHERE X is CWUser, (NOT X in_group B) OR (X in_group A, A eid %s)'%guests)f.rqlst.recover()self.assertEqual(f.rqlst.as_string(),'DISTINCT Any WHERE X is CWUser')deftest_relationattribute(self):f,(guests,managers)=self._in_group_facet(cls=facet.RelationAttributeFacet)self.assertEqual(f.vocabulary(),[(u'guests',u'guests'),(u'managers',u'managers')])# ensure rqlst is left unmodifiedself.assertEqual(f.rqlst.as_string(),'DISTINCT Any WHERE X is CWUser')#rqlst = rset.syntax_tree()self.assertEqual(f.possible_values(),['guests','managers'])# ensure rqlst is left unmodifiedself.assertEqual(f.rqlst.as_string(),'DISTINCT Any WHERE X is CWUser')f._cw.form[f.__regid__]='guests'f.add_rql_restrictions()# selection is cluttered because rqlst has been prepared for facet (it# is not in real life)self.assertEqual(f.rqlst.as_string(),"DISTINCT Any WHERE X is CWUser, X in_group E, E name 'guests'")deftest_attribute(self):req,rset,rqlst,mainvar=self.prepare_rqlst()f=facet.AttributeFacet(req,rset=rset,rqlst=rqlst.children[0],filtered_variable=mainvar)f.rtype='login'self.assertEqual(f.vocabulary(),[(u'admin',u'admin'),(u'anon',u'anon')])# ensure rqlst is left unmodifiedself.assertEqual(rqlst.as_string(),'DISTINCT Any WHERE X is CWUser')#rqlst = rset.syntax_tree()self.assertEqual(f.possible_values(),['admin','anon'])# ensure rqlst is left unmodifiedself.assertEqual(rqlst.as_string(),'DISTINCT Any WHERE X is CWUser')req.form[f.__regid__]='admin'f.add_rql_restrictions()# selection is cluttered because rqlst has been prepared for facet (it# is not in real life)self.assertEqual(f.rqlst.as_string(),"DISTINCT Any WHERE X is CWUser, X login 'admin'")if__name__=='__main__':fromlogilab.common.testlibimportunittest_mainunittest_main()