def test_concrete_schema_not_refreshed_on_modify_schema(self): portal_type = u"testtype" fti = DexterityFTI(portal_type) class IBlank(Interface): pass class INew(Interface): title = zope.schema.TextLine(title=u"title") model_dummy = Model({u"": INew}) fti.lookupModel = Mock(return_value=model_dummy) site_dummy = self.create_dummy(getPhysicalPath=lambda: ('', 'siteid')) self.mock_utility(site_dummy, ISiteRoot) # Set schema to something so that hasDynamicSchema is false fti.schema = IBlank.__identifier__ assert not fti.hasDynamicSchema # Set source for dynamic FTI - should not be used schemaName = utils.portalTypeToSchemaName(fti.getId()) setattr(plone.dexterity.schema.generated, schemaName, IBlank) # Sync should not happen now ftiModified( fti, ObjectModifiedEvent( fti, DexterityFTIModificationDescription('schema', ''))) self.assertFalse('title' in IBlank)
def test_dynamic_schema_refreshed_on_modify_model_source(self): portal_type = u"testtype" fti = DexterityFTI(portal_type) class INew(Interface): title = zope.schema.TextLine(title=u"title") model_dummy = Model({u"": INew}) fti.lookupModel = Mock(return_value=model_dummy) self.create_dummy() site_dummy = self.create_dummy(getPhysicalPath=lambda: ('', 'siteid')) self.mock_utility(site_dummy, ISiteRoot) class IBlank(Interface): pass # Set source interface schemaName = utils.portalTypeToSchemaName(fti.getId()) setattr(plone.dexterity.schema.generated, schemaName, IBlank) # Sync this with schema ftiModified( fti, ObjectModifiedEvent( fti, DexterityFTIModificationDescription('model_source', ''))) self.assertTrue('title' in IBlank) self.assertTrue(IBlank['title'].title == u"title")
def test_dynamic_schema_refreshed_on_modify_model_source(self): portal_type = u"testtype" fti = DexterityFTI(portal_type) class INew(Interface): title = zope.schema.TextLine(title=u"title") model_dummy = Model({u"": INew}) fti.lookupModel = Mock(return_value=model_dummy) self.create_dummy() site_dummy = self.create_dummy( getPhysicalPath=lambda: ('', 'siteid') ) self.mock_utility(site_dummy, ISiteRoot) class IBlank(Interface): pass # Set source interface schemaName = utils.portalTypeToSchemaName(fti.getId()) setattr(plone.dexterity.schema.generated, schemaName, IBlank) # Sync this with schema ftiModified( fti, ObjectModifiedEvent( fti, DexterityFTIModificationDescription('model_source', '') ) ) self.assertTrue('title' in IBlank) self.assertTrue(IBlank['title'].title == u"title")
def test_lookupModel_with_schema_only(self): fti = DexterityFTI(u"testtype") fti.schema = u"plone.dexterity.tests.schemata.ITestSchema" fti.model_source = None fti.model_file = None model = fti.lookupModel() self.assertEqual(1, len(model.schemata)) self.assertEqual(ITestSchema, model.schema)
def test_lookupModel_with_schema_only(self): fti = DexterityFTI('testtype') fti.schema = 'plone.dexterity.tests.schemata.ITestSchema' fti.model_source = None fti.model_file = None model = fti.lookupModel() self.assertEqual(1, len(model.schemata)) self.assertEqual(ITestSchema, model.schema)
def test_lookupModel_without_schema_policy(self): gsm = getGlobalSiteManager() gsm.registerUtility(DexteritySchemaPolicy(), plone.supermodel.interfaces.ISchemaPolicy, name=u"dexterity") fti = DexterityFTI(u"testtype") fti.schema = None fti.model_source = '<model xmlns="http://namespaces.plone.org/supermodel/schema"><schema/></model>' fti.model_file = None model = fti.lookupModel() self.assertEquals(False, ITestInterface in model.schemata[""].__bases__)
def test_lookupModel_without_schema_policy(self): gsm = getGlobalSiteManager() gsm.registerUtility(DexteritySchemaPolicy(), plone.supermodel.interfaces.ISchemaPolicy, name=u"dexterity") fti = DexterityFTI(u"testtype") fti.schema = None fti.model_source = '<model xmlns="http://namespaces.plone.org/supermodel/schema"><schema/></model>' fti.model_file = None model = fti.lookupModel() self.assertEqual(False, ITestInterface in model.schemata[''].__bases__)
def test_lookupModel_from_string(self): fti = DexterityFTI(u"testtype") fti.schema = None fti.model_source = "<model />" fti.model_file = None model_dummy = Model() from plone.supermodel import loadString self.patch_global(loadString, return_value=model_dummy) model = fti.lookupModel() self.assertIs(model_dummy, model)
def test_lookupModel_from_string(self): fti = DexterityFTI(u"testtype") fti.schema = None fti.model_source = "<model />" fti.model_file = None model_dummy = Model() from plone.supermodel import loadString self.patch_global(loadString, return_value=model_dummy) model = fti.lookupModel() self.assertIs(model_dummy, model)
def test_lookupModel_from_string(self): fti = DexterityFTI(u"testtype") fti.schema = None fti.model_source = "<model />" fti.model_file = None model_dummy = Model() loadString_mock = self.mocker.replace("plone.supermodel.loadString") self.expect(loadString_mock(fti.model_source, policy=u"dexterity")).result(model_dummy) self.replay() model = fti.lookupModel() self.assertIs(model_dummy, model)
def test_lookupModel_from_string(self): fti = DexterityFTI('testtype') fti.schema = None fti.model_source = '<model />' fti.model_file = None model_dummy = Model() loadString_mock = self.mocker.replace('plone.supermodel.loadString') self.expect(loadString_mock(fti.model_source, policy='dexterity')).result(model_dummy) self.replay() model = fti.lookupModel() self.assertIs(model_dummy, model)
def test_lookupModel_from_string_with_schema(self): fti = DexterityFTI(u"testtype") fti.schema = u"plone.dexterity.tests.schemata.ITestSchema" # effectively ignored fti.model_source = "<model />" fti.model_file = None model_dummy = Model() loadString_mock = self.mocker.replace("plone.supermodel.loadString") self.expect(loadString_mock(fti.model_source, policy=u"dexterity")).result(model_dummy) self.replay() model = fti.lookupModel() self.assertIs(model_dummy, model) self.assertIs(ITestSchema, fti.lookupSchema())
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_from_string_with_schema(self): fti = DexterityFTI(u"testtype") fti.schema = u"plone.dexterity.tests.schemata.ITestSchema" # effectively ignored fti.model_source = "<model />" fti.model_file = None model_dummy = Model() loadString_mock = self.mocker.replace("plone.supermodel.loadString") self.expect(loadString_mock(fti.model_source, policy=u"dexterity")).result(model_dummy) self.replay() model = fti.lookupModel() self.assertIs(model_dummy, model) self.assertIs(ITestSchema, fti.lookupSchema())
def test_lookupModel_from_string_with_schema(self): fti = DexterityFTI(u"testtype") # effectively ignored: fti.schema = u"plone.dexterity.tests.schemata.ITestSchema" fti.model_source = "<model />" fti.model_file = None model_dummy = Model() from plone.supermodel import loadString loadString_mock = self.patch_global( loadString, return_value=model_dummy) model = fti.lookupModel() self.assertIs(model_dummy, model) self.assertIs(ITestSchema, fti.lookupSchema()) loadString_mock.assert_called_once_with( fti.model_source, policy=u'dexterity')
def test_lookupModel_from_string_with_schema(self): fti = DexterityFTI(u"testtype") # effectively ignored: fti.schema = u"plone.dexterity.tests.schemata.ITestSchema" fti.model_source = "<model />" fti.model_file = None model_dummy = Model() from plone.supermodel import loadString loadString_mock = self.patch_global(loadString, return_value=model_dummy) model = fti.lookupModel() self.assertIs(model_dummy, model) self.assertIs(ITestSchema, fti.lookupSchema()) loadString_mock.assert_called_once_with(fti.model_source, policy=u'dexterity')
def test_lookupModel_from_string_with_schema(self): fti = DexterityFTI('testtype') # effectively ignored: fti.schema = 'plone.dexterity.tests.schemata.ITestSchema' fti.model_source = '<model />' fti.model_file = None model_dummy = Model() loadString_mock = self.mocker.replace('plone.supermodel.loadString') self.expect(loadString_mock(fti.model_source, policy='dexterity')).result(model_dummy) self.replay() model = fti.lookupModel() self.assertIs(model_dummy, model) self.assertIs(ITestSchema, fti.lookupSchema())
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__)
def test_lookupModel_from_file_with_absolute_path(self): import plone.dexterity.tests abs_file = os.path.join(os.path.split(plone.dexterity.tests.__file__)[0], "test.xml") fti = DexterityFTI(u"testtype") fti.schema = None fti.model_source = None fti.model_file = abs_file model_dummy = Model() loadFile_mock = self.mocker.replace("plone.supermodel.loadFile") self.expect(loadFile_mock(abs_file, reload=True, policy=u"dexterity")).result(model_dummy) self.replay() model = fti.lookupModel() self.assertIs(model_dummy, model)
def test_lookupModel_from_string_with_schema(self): fti = DexterityFTI('testtype') # effectively ignored: fti.schema = 'plone.dexterity.tests.schemata.ITestSchema' fti.model_source = '<model />' fti.model_file = None model_dummy = Model() loadString_mock = self.mocker.replace('plone.supermodel.loadString') self.expect( loadString_mock(fti.model_source, policy='dexterity') ).result(model_dummy) self.replay() model = fti.lookupModel() self.assertIs(model_dummy, model) self.assertIs(ITestSchema, fti.lookupSchema())
def test_lookupModel_from_file_with_win32_absolute_path(self): fti = DexterityFTI(u"testtype") fti.schema = None fti.model_source = None fti.model_file = r"C:\models\testmodel.xml" model_dummy = Model() from os.path import isabs, isfile self.patch_global(isabs, return_value=True) self.patch_global(isfile, return_value=True) from plone.supermodel import loadFile loadFile_mock = self.patch_global(loadFile, return_value=model_dummy) model = fti.lookupModel() self.assertIs(model_dummy, model) loadFile_mock.assert_called_once_with( fti.model_file, reload=True, policy=u"dexterity")
def test_lookupModel_from_file_with_win32_absolute_path(self): fti = DexterityFTI(u"testtype") fti.schema = None fti.model_source = None fti.model_file = r"C:\models\testmodel.xml" model_dummy = Model() from os.path import isabs, isfile self.patch_global(isabs, return_value=True) self.patch_global(isfile, return_value=True) from plone.supermodel import loadFile loadFile_mock = self.patch_global(loadFile, return_value=model_dummy) model = fti.lookupModel() self.assertIs(model_dummy, model) loadFile_mock.assert_called_once_with( fti.model_file, reload=True, policy=u"dexterity")
def test_lookupModel_from_file_with_absolute_path(self): import plone.dexterity.tests abs_file = os.path.join( os.path.split(plone.dexterity.tests.__file__)[0], "test.xml") fti = DexterityFTI(u"testtype") fti.schema = None fti.model_source = None fti.model_file = abs_file model_dummy = Model() from plone.supermodel import loadFile loadFile_mock = self.patch_global(loadFile, return_value=model_dummy) model = fti.lookupModel() self.assertIs(model_dummy, model) loadFile_mock.assert_called_once_with(abs_file, reload=True, policy=u"dexterity")
def test_lookupModel_from_file_with_absolute_path(self): import plone.dexterity.tests abs_file = os.path.join( os.path.split(plone.dexterity.tests.__file__)[0], 'test.xml') fti = DexterityFTI('testtype') fti.schema = None fti.model_source = None fti.model_file = abs_file model_dummy = Model() loadFile_mock = self.mocker.replace('plone.supermodel.loadFile') self.expect(loadFile_mock(abs_file, reload=True, policy='dexterity')).result(model_dummy) self.replay() model = fti.lookupModel() self.assertIs(model_dummy, model)
def test_lookupModel_from_file_with_package(self): fti = DexterityFTI(u"testtype") fti.schema = None fti.model_source = None fti.model_file = u"plone.dexterity.tests:test.xml" model_dummy = Model() import plone.dexterity.tests abs_file = os.path.join( os.path.split(plone.dexterity.tests.__file__)[0], "test.xml") loadFile_mock = self.mocker.replace("plone.supermodel.loadFile") self.expect(loadFile_mock(abs_file, reload=True, policy=u"dexterity")).result(model_dummy) self.replay() model = fti.lookupModel() self.assertIs(model_dummy, model)
def test_lookupModel_from_file_with_absolute_path(self): import plone.dexterity.tests abs_file = os.path.join( os.path.split(plone.dexterity.tests.__file__)[0], "test.xml" ) fti = DexterityFTI(u"testtype") fti.schema = None fti.model_source = None fti.model_file = abs_file model_dummy = Model() from plone.supermodel import loadFile loadFile_mock = self.patch_global(loadFile, return_value=model_dummy) model = fti.lookupModel() self.assertIs(model_dummy, model) loadFile_mock.assert_called_once_with( abs_file, reload=True, policy=u"dexterity")
def test_lookupModel_from_file_with_win32_absolute_path(self): fti = DexterityFTI(u"testtype") fti.schema = None fti.model_source = None fti.model_file = r"C:\models\testmodel.xml" model_dummy = Model() isabs_mock = self.mocker.replace("os.path.isabs") self.expect(isabs_mock(fti.model_file)).result(True) isfile_mock = self.mocker.replace("os.path.isfile") self.expect(isfile_mock(fti.model_file)).result(True) loadFile_mock = self.mocker.replace("plone.supermodel.loadFile") self.expect(loadFile_mock(fti.model_file, reload=True, policy=u"dexterity")).result(model_dummy) self.replay() model = fti.lookupModel() self.assertIs(model_dummy, model)
def test_dynamic_schema_refreshed_on_modify_model_source(self): portal_type = u"testtype" fti = DexterityFTI(portal_type) class INew(Interface): title = zope.schema.TextLine(title=u"title") model_dummy = Model({u"": INew}) fti.lookupModel = Mock(return_value=model_dummy) self.create_dummy() site_dummy = self.create_dummy( getPhysicalPath=lambda: ('', 'siteid') ) self.mock_utility(site_dummy, ISiteRoot) # b/c of zope.interface does not support hashing of the same class multiple times # we need to postfix with a unique number # see https://github.com/zopefoundation/zope.interface/issues/216#issuecomment-701332380 class IBlank2(Interface): pass # Set source interface schemaName = portalTypeToSchemaName(fti.getId()) setattr(plone.dexterity.schema.generated, schemaName, IBlank2) # Sync this with schema ftiModified( fti, ObjectModifiedEvent( fti, DexterityFTIModificationDescription('model_source', '') ) ) self.assertTrue('title' in IBlank2) self.assertTrue(IBlank2['title'].title == u"title")
def test_concrete_schema_not_refreshed_on_modify_schema(self): portal_type = u"testtype" fti = DexterityFTI(portal_type) class IBlank(Interface): pass class INew(Interface): title = zope.schema.TextLine(title=u"title") model_dummy = Model({u"": INew}) fti.lookupModel = Mock(return_value=model_dummy) site_dummy = self.create_dummy( getPhysicalPath=lambda: ('', 'siteid') ) self.mock_utility(site_dummy, ISiteRoot) # Set schema to something so that hasDynamicSchema is false fti.schema = IBlank.__identifier__ assert not fti.hasDynamicSchema # Set source for dynamic FTI - should not be used schemaName = utils.portalTypeToSchemaName(fti.getId()) setattr(plone.dexterity.schema.generated, schemaName, IBlank) # Sync should not happen now ftiModified( fti, ObjectModifiedEvent( fti, DexterityFTIModificationDescription('schema', '') ) ) self.assertFalse('title' in IBlank)
def test_lookupModel_from_file_with_win32_absolute_path(self): fti = DexterityFTI('testtype') fti.schema = None fti.model_source = None fti.model_file = r'C:\models\testmodel.xml' model_dummy = Model() isabs_mock = self.mocker.replace('os.path.isabs') self.expect(isabs_mock(fti.model_file)).result(True) isfile_mock = self.mocker.replace('os.path.isfile') self.expect(isfile_mock(fti.model_file)).result(True) loadFile_mock = self.mocker.replace('plone.supermodel.loadFile') self.expect( loadFile_mock(fti.model_file, reload=True, policy='dexterity')).result(model_dummy) self.replay() model = fti.lookupModel() self.assertIs(model_dummy, model)
def test_lookupModel_from_file_with_package(self): fti = DexterityFTI('testtype') fti.schema = None fti.model_source = None fti.model_file = 'plone.dexterity.tests:test.xml' model_dummy = Model() import plone.dexterity.tests abs_file = os.path.join( os.path.split(plone.dexterity.tests.__file__)[0], 'test.xml' ) loadFile_mock = self.mocker.replace('plone.supermodel.loadFile') self.expect( loadFile_mock(abs_file, reload=True, policy='dexterity') ).result(model_dummy) self.replay() model = fti.lookupModel() self.assertIs(model_dummy, model)