[utils] Drop now-unused SizeConstrainedList
It's last usage in CubicWeb got removed from changeset '[views] remove
breadcrumbs usage to retrieve last visited page'
Related to #5456850.
# copyright 2003-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/>."""cubicweb.server.hooks.syncschema unit and functional tests"""fromlogilab.common.testlibimportunittest_mainfromyams.constraintsimportBoundaryConstraintfromcubicwebimportValidationError,Binaryfromcubicweb.schemaimportMETA_RTYPESfromcubicweb.devtoolsimportstartpgcluster,stoppgcluster,PostgresApptestConfigurationfromcubicweb.devtools.testlibimportCubicWebTCfromcubicweb.server.sqlutilsimportSQL_PREFIXfromcubicweb.devtools.repotestimportschema_eids_idxdefsetUpModule():startpgcluster(__file__)deftearDownModule(*args):stoppgcluster(__file__)delSchemaModificationHooksTC.schema_eidsclassSchemaModificationHooksTC(CubicWebTC):configcls=PostgresApptestConfigurationdefsetUp(self):super(SchemaModificationHooksTC,self).setUp()self.repo.set_schema(self.repo.deserialize_schema(),resetvreg=False)self.__class__.schema_eids=schema_eids_idx(self.repo.schema)defindex_exists(self,cnx,etype,attr,unique=False):dbhelper=self.repo.system_source.dbhelpersqlcursor=cnx.cnxset.cureturndbhelper.index_exists(sqlcursor,SQL_PREFIX+etype,SQL_PREFIX+attr,unique=unique)def_set_perms(self,cnx,eid):cnx.execute('SET X read_permission G WHERE X eid %(x)s, G is CWGroup',{'x':eid})cnx.execute('SET X add_permission G WHERE X eid %(x)s, G is CWGroup, ''G name "managers"',{'x':eid})cnx.execute('SET X delete_permission G WHERE X eid %(x)s, G is CWGroup, ''G name "owners"',{'x':eid})def_set_attr_perms(self,cnx,eid):cnx.execute('SET X read_permission G WHERE X eid %(x)s, G is CWGroup',{'x':eid})cnx.execute('SET X update_permission G WHERE X eid %(x)s, G is CWGroup, G name "managers"',{'x':eid})deftest_base(self):withself.admin_access.repo_cnx()ascnx:schema=self.repo.schemaself.assertFalse(schema.has_entity('Societe2'))self.assertFalse(schema.has_entity('concerne2'))# schema should be update on insertion (after commit)eeid=cnx.execute('INSERT CWEType X: X name "Societe2", ''X description "", X final FALSE')[0][0]self._set_perms(cnx,eeid)cnx.execute('INSERT CWRType X: X name "concerne2", X description "", ''X final FALSE, X symmetric FALSE')self.assertFalse(schema.has_entity('Societe2'))self.assertFalse(schema.has_entity('concerne2'))# have to commit before adding definition relationscnx.commit()self.assertTrue(schema.has_entity('Societe2'))self.assertTrue(schema.has_relation('concerne2'))attreid=cnx.execute('INSERT CWAttribute X: X cardinality "11", ''X defaultval %(default)s, X indexed TRUE, ''X relation_type RT, X from_entity E, X to_entity F ''WHERE RT name "name", E name "Societe2", ''F name "String"',{'default':Binary.zpickle('noname')})[0][0]self._set_attr_perms(cnx,attreid)concerne2_rdef_eid=cnx.execute('INSERT CWRelation X: X cardinality "**", X relation_type RT, ''X from_entity E, X to_entity E ''WHERE RT name "concerne2", E name "Societe2"')[0][0]self._set_perms(cnx,concerne2_rdef_eid)self.assertNotIn('name',schema['Societe2'].subject_relations())self.assertNotIn('concerne2',schema['Societe2'].subject_relations())self.assertFalse(self.index_exists(cnx,'Societe2','name'))cnx.commit()self.assertIn('name',schema['Societe2'].subject_relations())self.assertIn('concerne2',schema['Societe2'].subject_relations())self.assertTrue(self.index_exists(cnx,'Societe2','name'))# now we should be able to insert and query Societe2s2eid=cnx.execute('INSERT Societe2 X: X name "logilab"')[0][0]cnx.execute('Societe2 X WHERE X name "logilab"')cnx.execute('SET X concerne2 X WHERE X name "logilab"')rset=cnx.execute('Any X WHERE X concerne2 Y')self.assertEqual(rset.rows,[[s2eid]])# check that when a relation definition is deleted, existing relations are deletedrdefeid=cnx.execute('INSERT CWRelation X: X cardinality "**", X relation_type RT, '' X from_entity E, X to_entity E ''WHERE RT name "concerne2", E name "CWUser"')[0][0]self._set_perms(cnx,rdefeid)cnx.commit()cnx.execute('DELETE CWRelation X WHERE X eid %(x)s',{'x':concerne2_rdef_eid})cnx.commit()self.assertIn('concerne2',schema['CWUser'].subject_relations())self.assertNotIn('concerne2',schema['Societe2'].subject_relations())self.assertFalse(cnx.execute('Any X WHERE X concerne2 Y'))# schema should be cleaned on delete (after commit)cnx.execute('DELETE CWEType X WHERE X name "Societe2"')cnx.execute('DELETE CWRType X WHERE X name "concerne2"')self.assertTrue(self.index_exists(cnx,'Societe2','name'))self.assertTrue(schema.has_entity('Societe2'))self.assertTrue(schema.has_relation('concerne2'))cnx.commit()self.assertFalse(self.index_exists(cnx,'Societe2','name'))self.assertFalse(schema.has_entity('Societe2'))self.assertFalse(schema.has_entity('concerne2'))self.assertNotIn('concerne2',schema['CWUser'].subject_relations())deftest_metartype_with_nordefs(self):withself.admin_access.repo_cnx()ascnx:META_RTYPES.add('custom_meta')cnx.execute('INSERT CWRType X: X name "custom_meta", X description "", ''X final FALSE, X symmetric FALSE')cnx.commit()eeid=cnx.execute('INSERT CWEType X: X name "NEWEtype", ''X description "", X final FALSE')[0][0]self._set_perms(cnx,eeid)cnx.commit()META_RTYPES.remove('custom_meta')deftest_metartype_with_somerdefs(self):withself.admin_access.repo_cnx()ascnx:META_RTYPES.add('custom_meta')cnx.execute('INSERT CWRType X: X name "custom_meta", X description "", ''X final FALSE, X symmetric FALSE')cnx.commit()rdefeid=cnx.execute('INSERT CWRelation X: X cardinality "**", X relation_type RT, '' X from_entity E, X to_entity E ''WHERE RT name "custom_meta", E name "CWUser"')[0][0]self._set_perms(cnx,rdefeid)cnx.commit()eeid=cnx.execute('INSERT CWEType X: X name "NEWEtype", ''X description "", X final FALSE')[0][0]self._set_perms(cnx,eeid)cnx.commit()META_RTYPES.remove('custom_meta')deftest_is_instance_of_insertions(self):withself.admin_access.repo_cnx()ascnx:seid=cnx.execute('INSERT Transition T: T name "subdiv"')[0][0]is_etypes=[etypeforetype,incnx.execute('Any ETN WHERE X eid %s, ''X is ET, ET name ETN'%seid)]self.assertEqual(is_etypes,['Transition'])instanceof_etypes=[etypeforetype,incnx.execute('Any ETN WHERE X eid %s, ''X is_instance_of ET, ET name ETN'%seid)]self.assertEqual(sorted(instanceof_etypes),['BaseTransition','Transition'])snames=[nameforname,incnx.execute('Any N WHERE S is BaseTransition, S name N')]self.assertNotIn('subdiv',snames)snames=[nameforname,incnx.execute('Any N WHERE S is_instance_of BaseTransition, ''S name N')]self.assertIn('subdiv',snames)deftest_perms_synchronization_1(self):withself.admin_access.repo_cnx()ascnx:schema=self.repo.schemaself.assertEqual(schema['CWUser'].get_groups('read'),set(('managers','users')))self.assertTrue(cnx.execute('Any X, Y WHERE X is CWEType, X name "CWUser", ''Y is CWGroup, Y name "users"')[0])cnx.execute('DELETE X read_permission Y WHERE X is CWEType, X name "CWUser", Y name "users"')self.assertEqual(schema['CWUser'].get_groups('read'),set(('managers','users',)))cnx.commit()self.assertEqual(schema['CWUser'].get_groups('read'),set(('managers',)))cnx.execute('SET X read_permission Y WHERE X is CWEType, ''X name "CWUser", Y name "users"')cnx.commit()self.assertEqual(schema['CWUser'].get_groups('read'),set(('managers','users',)))deftest_perms_synchronization_2(self):withself.admin_access.repo_cnx()ascnx:schema=self.repo.schema['in_group'].rdefs[('CWUser','CWGroup')]self.assertEqual(schema.get_groups('read'),set(('managers','users','guests')))cnx.execute('DELETE X read_permission Y WHERE X relation_type RT, ''RT name "in_group", Y name "guests"')self.assertEqual(schema.get_groups('read'),set(('managers','users','guests')))cnx.commit()self.assertEqual(schema.get_groups('read'),set(('managers','users')))cnx.execute('SET X read_permission Y WHERE X relation_type RT, ''RT name "in_group", Y name "guests"')self.assertEqual(schema.get_groups('read'),set(('managers','users')))cnx.commit()self.assertEqual(schema.get_groups('read'),set(('managers','users','guests')))deftest_nonregr_user_edit_itself(self):withself.admin_access.repo_cnx()ascnx:ueid=cnx.user.eidgroupeids=[eidforeid,incnx.execute('CWGroup G WHERE G name ''in ("managers", "users")')]cnx.execute('DELETE X in_group Y WHERE X eid %s'%ueid)cnx.execute('SET X surname "toto" WHERE X eid %s'%ueid)cnx.execute('SET X in_group Y WHERE X eid %s, Y name "managers"'%ueid)cnx.commit()eeid=cnx.execute('Any X WHERE X is CWEType, X name "CWEType"')[0][0]cnx.execute('DELETE X read_permission Y WHERE X eid %s'%eeid)cnx.execute('SET X final FALSE WHERE X eid %s'%eeid)cnx.execute('SET X read_permission Y WHERE X eid %s, Y eid in (%s, %s)'%(eeid,groupeids[0],groupeids[1]))cnx.commit()cnx.execute('Any X WHERE X is CWEType, X name "CWEType"')# schema modification hooks tests #########################################deftest_uninline_relation(self):withself.admin_access.repo_cnx()ascnx:try:self.assertTrue(self.schema['state_of'].inlined)cnx.execute('SET X inlined FALSE WHERE X name "state_of"')self.assertTrue(self.schema['state_of'].inlined)cnx.commit()self.assertFalse(self.schema['state_of'].inlined)self.assertFalse(self.index_exists(cnx,'State','state_of'))rset=cnx.execute('Any X, Y WHERE X state_of Y')self.assertEqual(len(rset),2)# user statesfinally:cnx.execute('SET X inlined TRUE WHERE X name "state_of"')self.assertFalse(self.schema['state_of'].inlined)cnx.commit()self.assertTrue(self.schema['state_of'].inlined)self.assertTrue(self.index_exists(cnx,'State','state_of'))rset=cnx.execute('Any X, Y WHERE X state_of Y')self.assertEqual(len(rset),2)deftest_indexed_change(self):withself.admin_access.repo_cnx()ascnx:try:cnx.execute('SET X indexed FALSE WHERE X relation_type R, R name "name"')self.assertTrue(self.schema['name'].rdef('Workflow','String').indexed)self.assertTrue(self.index_exists(cnx,'Workflow','name'))cnx.commit()self.assertFalse(self.schema['name'].rdef('Workflow','String').indexed)self.assertFalse(self.index_exists(cnx,'Workflow','name'))finally:cnx.execute('SET X indexed TRUE WHERE X relation_type R, R name "name"')self.assertFalse(self.schema['name'].rdef('Workflow','String').indexed)self.assertFalse(self.index_exists(cnx,'Workflow','name'))cnx.commit()self.assertTrue(self.schema['name'].rdef('Workflow','String').indexed)self.assertTrue(self.index_exists(cnx,'Workflow','name'))deftest_unique_change(self):withself.admin_access.repo_cnx()ascnx:try:eid=cnx.execute('INSERT CWConstraint X: X cstrtype CT, DEF constrained_by X ''WHERE CT name "UniqueConstraint", DEF relation_type RT, ''DEF from_entity E, RT name "name", ''E name "Workflow"').rows[0][0]self.assertFalse(self.schema['Workflow'].has_unique_values('name'))self.assertFalse(self.index_exists(cnx,'Workflow','name',unique=True))cnx.commit()self.assertTrue(self.schema['Workflow'].has_unique_values('name'))self.assertTrue(self.index_exists(cnx,'Workflow','name',unique=True))finally:cnx.execute('DELETE CWConstraint C WHERE C eid %(eid)s',{'eid':eid})cnx.commit()self.assertFalse(self.schema['Workflow'].has_unique_values('name'))self.assertFalse(self.index_exists(cnx,'Workflow','name',unique=True))deftest_required_change_1(self):withself.admin_access.repo_cnx()ascnx:cnx.execute('SET DEF cardinality "?1" ''WHERE DEF relation_type RT, DEF from_entity E,''RT name "title", E name "Bookmark"')cnx.commit()# should now be able to add bookmark without titlecnx.execute('INSERT Bookmark X: X path "/view"')cnx.commit()deftest_required_change_2(self):withself.admin_access.repo_cnx()ascnx:cnx.execute('SET DEF cardinality "11" ''WHERE DEF relation_type RT, DEF from_entity E,''RT name "surname", E name "CWUser"')cnx.execute('SET U surname "Doe" WHERE U surname NULL')cnx.commit()# should not be able anymore to add cwuser without surnameself.assertRaises(ValidationError,self.create_user,cnx,"toto")cnx.rollback()cnx.execute('SET DEF cardinality "?1" ''WHERE DEF relation_type RT, DEF from_entity E,''RT name "surname", E name "CWUser"')cnx.commit()deftest_add_attribute_to_base_class(self):withself.admin_access.repo_cnx()ascnx:attreid=cnx.execute('INSERT CWAttribute X: X cardinality "11", X defaultval %(default)s, ''X indexed TRUE, X relation_type RT, X from_entity E, X to_entity F ''WHERE RT name "messageid", E name "BaseTransition", F name "String"',{'default':Binary.zpickle('noname')})[0][0]assertcnx.execute('SET X read_permission Y WHERE X eid %(x)s, Y name "managers"',{'x':attreid})cnx.commit()self.schema.rebuild_infered_relations()self.assertIn('Transition',self.schema['messageid'].subjects())self.assertIn('WorkflowTransition',self.schema['messageid'].subjects())cnx.execute('Any X WHERE X is_instance_of BaseTransition, X messageid "hop"')deftest_change_fulltextindexed(self):withself.admin_access.repo_cnx()ascnx:target=cnx.create_entity(u'Email',messageid=u'1234',subject=u'rick.roll@dance.com')cnx.commit()rset=cnx.execute('Any X WHERE X has_text "rick.roll"')self.assertIn(target.eid,[item[0]foriteminrset])assertcnx.execute('SET A fulltextindexed FALSE ''WHERE E is CWEType, E name "Email", A is CWAttribute,''A from_entity E, A relation_type R, R name "subject"')cnx.commit()rset=cnx.execute('Any X WHERE X has_text "rick.roll"')self.assertFalse(rset)assertcnx.execute('SET A fulltextindexed TRUE ''WHERE A from_entity E, A relation_type R, ''E name "Email", R name "subject"')cnx.commit()rset=cnx.execute('Any X WHERE X has_text "rick.roll"')self.assertIn(target.eid,[item[0]foriteminrset])deftest_change_fulltext_container(self):withself.admin_access.repo_cnx()ascnx:target=cnx.create_entity(u'EmailAddress',address=u'rick.roll@dance.com')target.cw_set(reverse_use_email=cnx.user)cnx.commit()rset=cnx.execute('Any X WHERE X has_text "rick.roll"')self.assertIn(cnx.user.eid,[item[0]foriteminrset])assertcnx.execute('SET R fulltext_container NULL ''WHERE R name "use_email"')cnx.commit()rset=cnx.execute('Any X WHERE X has_text "rick.roll"')self.assertIn(target.eid,[item[0]foriteminrset])assertcnx.execute('SET R fulltext_container "subject" ''WHERE R name "use_email"')cnx.commit()rset=cnx.execute('Any X WHERE X has_text "rick.roll"')self.assertIn(cnx.user.eid,[item[0]foriteminrset])deftest_update_constraint(self):withself.admin_access.repo_cnx()ascnx:rdef=self.schema['Transition'].rdef('type')cstr=rdef.constraint_by_type('StaticVocabularyConstraint')ifnotgetattr(cstr,'eid',None):# bug in schema reloading, constraint's eid not restoredself.skipTest('start me alone')cnx.execute('SET X value %(v)s WHERE X eid %(x)s',{'x':cstr.eid,'v':u"u'normal', u'auto', u'new'"})cnx.execute('INSERT CWConstraint X: X value %(value)s, X cstrtype CT, ''EDEF constrained_by X WHERE CT name %(ct)s, EDEF eid %(x)s',{'ct':'SizeConstraint','value':u'max=10','x':rdef.eid})cnx.commit()cstr=rdef.constraint_by_type('StaticVocabularyConstraint')self.assertEqual(cstr.values,(u'normal',u'auto',u'new'))cnx.execute('INSERT Transition T: T name "hop", T type "new"')deftest_add_constraint(self):withself.admin_access.repo_cnx()ascnx:rdef=self.schema['EmailPart'].rdef('ordernum')cstr=BoundaryConstraint('>=',0)cnx.execute('INSERT CWConstraint X: X value %(v)s, X cstrtype CT, ''EDEF constrained_by X WHERE CT name %(ct)s, EDEF eid %(x)s',{'ct':cstr.__class__.__name__,'v':cstr.serialize(),'x':rdef.eid})cnx.commit()cstr2=rdef.constraint_by_type('BoundaryConstraint')self.assertEqual(cstr,cstr2)cstr3=BoundaryConstraint('<=',1000)cnx.execute('INSERT CWConstraint X: X value %(v)s, X cstrtype CT, ''EDEF constrained_by X WHERE CT name %(ct)s, EDEF eid %(x)s',{'ct':cstr3.__class__.__name__,'v':cstr3.serialize(),'x':rdef.eid})cnx.commit()self.assertCountEqual(rdef.constraints,[cstr,cstr3])if__name__=='__main__':unittest_main()