[repo test] fix test broken by recent changes on EmailAddress read permissions
fromlogilab.common.dateimportdatetime2ticksfromcubicweb.devtools.testlibimportCubicWebTCfromcubicweb.webimportfacetclassBaseFacetTC(CubicWebTC):defprepare_rqlst(self,rql='CWUser X',mainvar='X',expected_baserql='Any X WHERE X is CWUser',expected_preparedrql='DISTINCT Any WHERE X is CWUser'):req=self.request()rset=self.execute(rql)rqlst=rset.syntax_tree().copy()filtered_variable,baserql=facet.init_facets(rset,rqlst.children[0],mainvar=mainvar)self.assertEqual(filtered_variable.name,mainvar)self.assertEqual(baserql,expected_baserql)self.assertEqual(rqlst.as_string(),expected_preparedrql)returnreq,rset,rqlst,filtered_variabledef_in_group_facet(self,cls=facet.RelationFacet,no_relation=False):req,rset,rqlst,filtered_variable=self.prepare_rqlst()cls.no_relation=no_relationf=cls(req,rset=rset,select=rqlst.children[0],filtered_variable=filtered_variable)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.select.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.select.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.select.as_string(),'DISTINCT Any WHERE X is CWUser, X in_group D, D eid %s'%guests)deftest_relation_multiple_and(self):f,(guests,managers)=self._in_group_facet()f._cw.form[f.__regid__]=[str(guests),str(managers)]f._cw.form[f.__regid__+'_andor']='AND'f.add_rql_restrictions()self.assertEqual(f.select.as_string(),'DISTINCT Any WHERE X is CWUser, X in_group A, B eid %s, X in_group B, A eid %s'%(guests,managers))deftest_relation_multiple_or(self):f,(guests,managers)=self._in_group_facet()f._cw.form[f.__regid__]=[str(guests),str(managers)]f._cw.form[f.__regid__+'_andor']='OR'f.add_rql_restrictions()self.assertEqual(f.select.as_string(),'DISTINCT Any WHERE X is CWUser, X in_group A, A eid IN(%s, %s)'%(guests,managers))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()select=rqlst.children[0]filtered_variable,baserql=facet.init_facets(rset,select)f=facet.RelationFacet(req,rset=rset,select=select,filtered_variable=filtered_variable)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 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 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.select.as_string(),'DISTINCT Any 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.select.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.select.save_state()f.add_rql_restrictions()self.assertEqual(f.select.as_string(),'DISTINCT Any WHERE X is CWUser, (NOT X in_group B) OR (X in_group A, A eid %s)'%guests)f.select.recover()self.assertEqual(f.select.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.select.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.select.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.select.as_string(),"DISTINCT Any WHERE X is CWUser, X in_group E, E name 'guests'")deftest_daterange(self):req,rset,rqlst,filtered_variable=self.prepare_rqlst()f=facet.DateRangeFacet(req,rset=rset,select=rqlst.children[0],filtered_variable=filtered_variable)f.rtype='creation_date'mind,maxd=self.execute('Any MIN(CD), MAX(CD) WHERE X is CWUser, X creation_date CD')[0]self.assertEqual(f.vocabulary(),[(str(mind),mind),(str(maxd),maxd)])# ensure rqlst is left unmodifiedself.assertEqual(rqlst.as_string(),'DISTINCT Any WHERE X is CWUser')#rqlst = rset.syntax_tree()self.assertEqual(f.possible_values(),[str(mind),str(maxd)])# ensure rqlst is left unmodifiedself.assertEqual(rqlst.as_string(),'DISTINCT Any WHERE X is CWUser')req.form['%s_inf'%f.__regid__]=str(datetime2ticks(mind))req.form['%s_sup'%f.__regid__]=str(datetime2ticks(mind))f.add_rql_restrictions()# selection is cluttered because rqlst has been prepared for facet (it# is not in real life)self.assertEqual(f.select.as_string(),'DISTINCT Any WHERE X is CWUser, X creation_date >= "%s", ''X creation_date <= "%s"'%(mind.strftime('%Y/%m/%d'),mind.strftime('%Y/%m/%d')))deftest_attribute(self):req,rset,rqlst,filtered_variable=self.prepare_rqlst()f=facet.AttributeFacet(req,rset=rset,select=rqlst.children[0],filtered_variable=filtered_variable)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.select.as_string(),"DISTINCT Any WHERE X is CWUser, X login 'admin'")deftest_bitfield(self):req,rset,rqlst,filtered_variable=self.prepare_rqlst('CWAttribute X WHERE X ordernum XO',expected_baserql='Any X WHERE X ordernum XO, X is CWAttribute',expected_preparedrql='DISTINCT Any WHERE X ordernum XO, X is CWAttribute')f=facet.BitFieldFacet(req,rset=rset,select=rqlst.children[0],filtered_variable=filtered_variable)f.choices=[('un',1,),('deux',2,)]f.rtype='ordernum'self.assertEqual(f.vocabulary(),[(u'deux',2),(u'un',1)])# ensure rqlst is left unmodifiedself.assertEqual(rqlst.as_string(),'DISTINCT Any WHERE X ordernum XO, X is CWAttribute')#rqlst = rset.syntax_tree()self.assertEqual(f.possible_values(),['2','1'])# ensure rqlst is left unmodifiedself.assertEqual(rqlst.as_string(),'DISTINCT Any WHERE X ordernum XO, X is CWAttribute')req.form[f.__regid__]='3'f.add_rql_restrictions()# selection is cluttered because rqlst has been prepared for facet (it# is not in real life)self.assertEqual(f.select.as_string(),"DISTINCT Any WHERE X ordernum XO, X is CWAttribute, X ordernum C HAVING 3 = (C & 3)")deftest_rql_path_eid(self):req,rset,rqlst,filtered_variable=self.prepare_rqlst()classRPF(facet.RQLPathFacet):path=[('X created_by U'),('U owned_by O'),('O login OL')]filter_variable='O'label_variable='OL'f=RPF(req,rset=rset,select=rqlst.children[0],filtered_variable=filtered_variable)self.assertEqual(f.vocabulary(),[(u'admin',self.user().eid),])# ensure rqlst is left unmodifiedself.assertEqual(rqlst.as_string(),'DISTINCT Any WHERE X is CWUser')#rqlst = rset.syntax_tree()self.assertEqual(f.possible_values(),[str(self.user().eid),])# ensure rqlst is left unmodifiedself.assertEqual(rqlst.as_string(),'DISTINCT Any WHERE X is CWUser')req.form[f.__regid__]='1'f.add_rql_restrictions()# selection is cluttered because rqlst has been prepared for facet (it# is not in real life)self.assertEqual(f.select.as_string(),"DISTINCT Any WHERE X is CWUser, X created_by F, F owned_by G, G eid 1")deftest_rql_path_eid_no_label(self):req,rset,rqlst,filtered_variable=self.prepare_rqlst()classRPF(facet.RQLPathFacet):path=[('X created_by U'),('U owned_by O'),('O login OL')]filter_variable='O'f=RPF(req,rset=rset,select=rqlst.children[0],filtered_variable=filtered_variable)self.assertEqual(f.vocabulary(),[(str(self.user().eid),self.user().eid),])deftest_rql_path_attr(self):req,rset,rqlst,filtered_variable=self.prepare_rqlst()classRPF(facet.RQLPathFacet):path=[('X created_by U'),('U owned_by O'),('O login OL')]filter_variable='OL'f=RPF(req,rset=rset,select=rqlst.children[0],filtered_variable=filtered_variable)self.assertEqual(f.vocabulary(),[(u'admin','admin'),])# ensure rqlst is left unmodifiedself.assertEqual(rqlst.as_string(),'DISTINCT Any WHERE X is CWUser')self.assertEqual(f.possible_values(),['admin',])# 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.select.as_string(),"DISTINCT Any WHERE X is CWUser, X created_by G, G owned_by H, H login 'admin'")deftest_rql_path_check_filter_label_variable(self):req,rset,rqlst,filtered_variable=self.prepareg_aggregat_rqlst()classRPF(facet.RQLPathFacet):path=[('X created_by U'),('U owned_by O'),('O login OL')]filter_variable='OL'label_variable='OL'self.assertRaises(AssertionError,RPF,req,rset=rset,select=rqlst.children[0],filtered_variable=filtered_variable)defprepareg_aggregat_rqlst(self):returnself.prepare_rqlst('Any 1, COUNT(X) WHERE X is CWUser, X creation_date XD, ''X modification_date XM, Y creation_date YD, Y is CWGroup ''HAVING DAY(XD)>=DAY(YD) AND DAY(XM)<=DAY(YD)','X',expected_baserql='Any 1,COUNT(X) WHERE X is CWUser, X creation_date XD, ''X modification_date XM, Y creation_date YD, Y is CWGroup ''HAVING DAY(XD) >= DAY(YD), DAY(XM) <= DAY(YD)',expected_preparedrql='DISTINCT Any WHERE X is CWUser, X creation_date XD, ''X modification_date XM, Y creation_date YD, Y is CWGroup ''HAVING DAY(XD) >= DAY(YD), DAY(XM) <= DAY(YD)')deftest_aggregat_query_cleanup_select(self):req,rset,rqlst,filtered_variable=self.prepareg_aggregat_rqlst()select=rqlst.children[0]facet.cleanup_select(select,filtered_variable=filtered_variable)self.assertEqual(select.as_string(),'DISTINCT Any WHERE X is CWUser, X creation_date XD, ''X modification_date XM, Y creation_date YD, Y is CWGroup ''HAVING DAY(XD) >= DAY(YD), DAY(XM) <= DAY(YD)')deftest_aggregat_query_rql_path(self):req,rset,rqlst,filtered_variable=self.prepareg_aggregat_rqlst()classRPF(facet.RQLPathFacet):path=[('X created_by U'),('U owned_by O'),('O login OL')]filter_variable='OL'f=RPF(req,rset=rset,select=rqlst.children[0],filtered_variable=filtered_variable)self.assertEqual(f.vocabulary(),[(u'admin',u'admin')])self.assertEqual(f.possible_values(),['admin'])req.form[f.__regid__]='admin'f.add_rql_restrictions()self.assertEqual(f.select.as_string(),"DISTINCT Any WHERE X is CWUser, X creation_date XD, ""X modification_date XM, Y creation_date YD, Y is CWGroup, ""X created_by G, G owned_by H, H login 'admin' ""HAVING DAY(XD) >= DAY(YD), DAY(XM) <= DAY(YD)")deftest_aggregat_query_attribute(self):req,rset,rqlst,filtered_variable=self.prepareg_aggregat_rqlst()f=facet.AttributeFacet(req,rset=rset,select=rqlst.children[0],filtered_variable=filtered_variable)f.rtype='login'self.assertEqual(f.vocabulary(),[(u'admin',u'admin'),(u'anon',u'anon')])self.assertEqual(f.possible_values(),['admin','anon'])req.form[f.__regid__]='admin'f.add_rql_restrictions()self.assertEqual(f.select.as_string(),"DISTINCT Any WHERE X is CWUser, X creation_date XD, ""X modification_date XM, Y creation_date YD, Y is CWGroup, X login 'admin' ""HAVING DAY(XD) >= DAY(YD), DAY(XM) <= DAY(YD)")if__name__=='__main__':fromlogilab.common.testlibimportunittest_mainunittest_main()