[web/test] Fix reset of loaded JS/CSS files
Name changed in commit ede740bd7077.
Related to #5533303.
# copyright 2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr## This file is part of CubicWeb.## CubicWeb is free software: you can redistribute it and/or modify it under the# terms of the GNU Lesser General Public License as published by the Free# Software Foundation, either version 2.1 of the License, or (at your option)# any later version.## CubicWeb is distributed in the hope that it will be useful, but WITHOUT# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more# details.## You should have received a copy of the GNU Lesser General Public License along# with CubicWeb. If not, see <http://www.gnu.org/licenses/>."""unit tests for computed attributes/relations hooks"""fromunittestimportTestCasefromyams.buildobjsimportEntityType,String,Int,SubjectRelationfromcubicweb.devtools.testlibimportCubicWebTCfromcubicweb.schemaimportbuild_schema_from_namespaceclassFormulaDependenciesMatrixTC(TestCase):defsimple_schema(self):THISYEAR=2014classPerson(EntityType):name=String()salary=Int()birth_year=Int(required=True)works_for=SubjectRelation('Company')age=Int(formula='Any %d - D WHERE X birth_year D'%THISYEAR)classCompany(EntityType):name=String()total_salary=Int(formula='Any SUM(SA) GROUPBY X WHERE P works_for X, P salary SA')schema=build_schema_from_namespace(vars().items())returnschemadefsetUp(self):fromcubicweb.hooks.synccomputedimport_FormulaDependenciesMatrixself.schema=self.simple_schema()self.dependencies=_FormulaDependenciesMatrix(self.schema)deftest_computed_attributes_by_etype(self):comp_by_etype=self.dependencies.computed_attribute_by_etypeself.assertEqual(len(comp_by_etype),2)values=comp_by_etype['Person']self.assertEqual(len(values),1)self.assertEqual(values[0].rtype,'age')values=comp_by_etype['Company']self.assertEqual(len(values),1)self.assertEqual(values[0].rtype,'total_salary')deftest_computed_attribute_by_relation(self):comp_by_rdef=self.dependencies.computed_attribute_by_relationself.assertEqual(len(comp_by_rdef),1)key,values=iter(comp_by_rdef.iteritems()).next()self.assertEqual(key.rtype,'works_for')self.assertEqual(len(values),1)self.assertEqual(values[0].rtype,'total_salary')deftest_computed_attribute_by_etype_attrs(self):comp_by_attr=self.dependencies.computed_attribute_by_etype_attrsself.assertEqual(len(comp_by_attr),1)values=comp_by_attr['Person']self.assertEqual(len(values),2)values=set((rdef.formula,tuple(v))forrdef,vinvalues.iteritems())self.assertEquals(values,set((('Any 2014 - D WHERE X birth_year D',tuple(('birth_year',))),('Any SUM(SA) GROUPBY X WHERE P works_for X, P salary SA',tuple(('salary',))))))classComputedAttributeTC(CubicWebTC):appid='data-computed'defsetup_entities(self,req):self.societe=req.create_entity('Societe',nom=u'Foo')req.create_entity('Person',name=u'Titi',salaire=1000,travaille=self.societe,birth_year=2001)self.tata=req.create_entity('Person',name=u'Tata',salaire=2000,travaille=self.societe,birth_year=1990)deftest_update_on_add_remove_relation(self):"""check the rewriting of a computed attribute"""withself.admin_access.web_request()asreq:self.setup_entities(req)req.cnx.commit()rset=req.execute('Any S WHERE X salaire_total S, X nom "Foo"')self.assertEqual(rset[0][0],3000)# Add relation.toto=req.create_entity('Person',name=u'Toto',salaire=1500,travaille=self.societe,birth_year=1988)req.cnx.commit()rset=req.execute('Any S WHERE X salaire_total S, X nom "Foo"')self.assertEqual(rset[0][0],4500)# Delete relation.toto.cw_set(travaille=None)req.cnx.commit()rset=req.execute('Any S WHERE X salaire_total S, X nom "Foo"')self.assertEqual(rset[0][0],3000)deftest_recompute_on_attribute_update(self):"""check the modification of an attribute triggers the update of the computed attributes that depend on it"""withself.admin_access.web_request()asreq:self.setup_entities(req)req.cnx.commit()rset=req.execute('Any S WHERE X salaire_total S, X nom "Foo"')self.assertEqual(rset[0][0],3000)# Update attribute.self.tata.cw_set(salaire=1000)req.cnx.commit()rset=req.execute('Any S WHERE X salaire_total S, X nom "Foo"')self.assertEqual(rset[0][0],2000)deftest_init_on_entity_creation(self):"""check the computed attribute is initialized on entity creation"""withself.admin_access.web_request()asreq:p=req.create_entity('Person',name=u'Tata',salaire=2000,birth_year=1990)req.cnx.commit()rset=req.execute('Any A, X WHERE X age A, X name "Tata"')self.assertEqual(rset[0][0],2014-1990)deftest_recompute_on_ambiguous_relation(self):# check we don't end up with TypeResolverException as in #4901163withself.admin_access.client_cnx()ascnx:societe=cnx.create_entity('Societe',nom=u'Foo')cnx.create_entity('MirrorEntity',mirror_of=societe,extid=u'1')cnx.commit()if__name__=='__main__':fromlogilab.common.testlibimportunittest_mainunittest_main()