Beispiel #1
0
    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)
Beispiel #2
0
    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")
Beispiel #3
0
    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")
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
    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__)
Beispiel #7
0
    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__)
Beispiel #8
0
    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)
Beispiel #9
0
    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)
Beispiel #10
0
    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)
Beispiel #11
0
    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)
Beispiel #12
0
    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())
Beispiel #13
0
    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__)
Beispiel #14
0
    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())
Beispiel #15
0
    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')
Beispiel #16
0
    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')
Beispiel #17
0
    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())
Beispiel #18
0
    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__)
Beispiel #19
0
 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)
Beispiel #20
0
    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())
Beispiel #21
0
    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")
Beispiel #22
0
    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")
Beispiel #23
0
    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")
Beispiel #24
0
    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)
Beispiel #25
0
    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)
Beispiel #26
0
    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")
Beispiel #27
0
    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)
Beispiel #28
0
    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")
Beispiel #29
0
    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)
Beispiel #30
0
    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)
Beispiel #31
0
    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)