def test_dynamic_schema_refreshed_on_modify_schema_policy(self): portal_type = u"testtype" fti = DexterityFTI(portal_type) class INew(Interface): title = zope.schema.TextLine(title=u"title") class IBlank(Interface): pass class TestSchemaPolicy(DexteritySchemaPolicy): def bases(self, schemaName, tree): return (INew,) gsm = getGlobalSiteManager() policy = TestSchemaPolicy() gsm.registerUtility( policy, plone.supermodel.interfaces.ISchemaPolicy, name=u"test" ) site_dummy = self.create_dummy( getPhysicalPath=lambda: ('', 'siteid') ) self.mock_utility(site_dummy, ISiteRoot) # Set source interface schemaName = utils.portalTypeToSchemaName(fti.getId()) setattr(plone.dexterity.schema.generated, schemaName, IBlank) original = getattr(plone.dexterity.schema.generated, schemaName) self.assertNotIn(INew, original.__bases__) self.assertNotIn('title', original) # Set new schema_policy fti.schema_policy = "test" # Sync this with schema ftiModified( fti, ObjectModifiedEvent( fti, DexterityFTIModificationDescription('schema_policy', '') ) ) updated = getattr(plone.dexterity.schema.generated, schemaName) self.assertIn('title', updated) self.assertIn(INew, updated.__bases__)
def test_dynamic_schema_refreshed_on_modify_schema_policy(self): portal_type = u"testtype" fti = DexterityFTI(portal_type) class INew(Interface): title = zope.schema.TextLine(title=u"title") class IBlank3(Interface): pass class TestSchemaPolicy(DexteritySchemaPolicy): def bases(self, schemaName, tree): return (INew,) gsm = getGlobalSiteManager() policy = TestSchemaPolicy() gsm.registerUtility( policy, plone.supermodel.interfaces.ISchemaPolicy, name=u"test" ) site_dummy = self.create_dummy( getPhysicalPath=lambda: ('', 'siteid') ) self.mock_utility(site_dummy, ISiteRoot) # Set source interface schemaName = portalTypeToSchemaName(fti.getId()) setattr(plone.dexterity.schema.generated, schemaName, IBlank3) original = getattr(plone.dexterity.schema.generated, schemaName) self.assertNotIn(INew, original.__bases__) self.assertNotIn('title', original) # Set new schema_policy fti.schema_policy = "test" # Sync this with schema ftiModified( fti, ObjectModifiedEvent( fti, DexterityFTIModificationDescription('schema_policy', '') ) ) updated = getattr(plone.dexterity.schema.generated, schemaName) self.assertIn('title', updated) self.assertIn(INew, updated.__bases__)
def test_lookupModel_with_schema_policy(self): class TestSchemaPolicy(DexteritySchemaPolicy): def bases(self, schemaName, tree): return (ITestInterface,) gsm = getGlobalSiteManager() policy = TestSchemaPolicy() gsm.registerUtility(policy, plone.supermodel.interfaces.ISchemaPolicy, name=u"test") fti = DexterityFTI(u"testtype") fti.schema = None fti.model_source = '<model xmlns="http://namespaces.plone.org/supermodel/schema"><schema/></model>' fti.model_file = None fti.schema_policy = u"test" model = fti.lookupModel() self.assertEquals(True, ITestInterface in model.schemata[""].__bases__)
def test_lookupModel_with_schema_policy(self): class TestSchemaPolicy(DexteritySchemaPolicy): def bases(self, schemaName, tree): return (ITestInterface, ) gsm = getGlobalSiteManager() policy = TestSchemaPolicy() gsm.registerUtility(policy, plone.supermodel.interfaces.ISchemaPolicy, name=u"test") fti = DexterityFTI(u"testtype") fti.schema = None fti.model_source = '<model xmlns="http://namespaces.plone.org/supermodel/schema"><schema/></model>' fti.model_file = None fti.schema_policy = u"test" model = fti.lookupModel() self.assertEqual(True, ITestInterface in model.schemata[''].__bases__)