Пример #1
0
    def setUpContentTypes(self, portal):
        from plone.dexterity.fti import DexterityFTI
        from plone.dexterity.fti import register
        from plone.app.content.interfaces import INameFromTitle
        from plone.app.dexterity.behaviors.metadata import IOwnership
        from collective.multilingual.interfaces import IMultilingual

        bs = (
            dottedName(IMultilingual),
            dottedName(IOwnership),
            dottedName(INameFromTitle),
            )

        content_types = [
            ("Item", "Item", (), bs),
            ("Container", "Container", ("Item", "Container"), bs),
            ]

        # Set up Dexterity-based content types.
        for portal_type, klass, allowed_content_types, bs in content_types:
            fti = DexterityFTI(portal_type)
            fti.allowed_content_types = allowed_content_types
            fti.behaviors = bs
            fti.klass = "plone.dexterity.content." + klass
            register(fti)

            # There's got to be a better way :-)
            portal.portal_types._setOb(portal_type, fti)
Пример #2
0
    def setUp(self):
        self.portal = self.layer['portal']
        setRoles(self.portal, TEST_USER_ID, ['Reviewer', 'Manager'])

        self.request = self.portal.REQUEST

        # fti
        self.fti_note = DexterityFTI('event_note')
        self.fti_note.schema = dottedname(INoteSchemaPrimary)
        self.portal.portal_types._setObject('event_note', self.fti_note)

        # register
        register(self.fti_note)

        class MockEvent(object):
            # History: [[interface, context], ]
            event_history = []

            def mock_handler(self, event):
                self.event_history.append(event, )

            def last_event(self):
                return self.event_history[-1]

        self.mock_event = MockEvent()
    def test_dexterity_item(self):
        # prepare a fti
        portal_type = 'testtype'
        fti = DexterityFTI(portal_type)
        fti.klass = 'plone.dexterity.content.Item'
        fti.schema = Interface.__identifier__
        self.portal.portal_types._setObject(portal_type, fti)
        register(fti)

        # prepare an item
        item = Item('testitem')
        item.portal_type = portal_type
        self.portal._setObject(item.id, item)
        item = self.portal[item.id]

        john = create(Builder('user').with_roles('Reader', on=item))

        item.reindexObject()

        catalog = getToolByName(self.portal, 'portal_catalog')
        result = catalog(principal_with_local_roles=[john.getId()])

        self.assertEquals(1,
                          len(result),
                          'Expect one entry')
        self.assertEquals(result[0].getPath(),
                          '/'.join(item.getPhysicalPath()))
Пример #4
0
    def setUpContentTypes(self, portal):
        from plone.dexterity.fti import DexterityFTI
        from plone.dexterity.fti import register
        from plone.app.content.interfaces import INameFromTitle
        from plone.app.dexterity.behaviors.metadata import IOwnership
        from collective.multilingual.interfaces import IMultilingual

        bs = (
            dottedName(IMultilingual),
            dottedName(IOwnership),
            dottedName(INameFromTitle),
        )

        content_types = [
            ("Item", "Item", (), bs),
            ("Container", "Container", ("Item", "Container"), bs),
        ]

        # Set up Dexterity-based content types.
        for portal_type, klass, allowed_content_types, bs in content_types:
            fti = DexterityFTI(portal_type)
            fti.allowed_content_types = allowed_content_types
            fti.behaviors = bs
            fti.klass = "plone.dexterity.content." + klass
            register(fti)

            # There's got to be a better way :-)
            portal.portal_types._setOb(portal_type, fti)
Пример #5
0
    def setUpPloneSite(self, portal):
        # Install into Plone site using portal_setup
        setRoles(portal, TEST_USER_ID, ['Member', 'Contributor', 'Manager'])

        # portal workaround
        self.portal = portal

        # test fti generation
        fti = DexterityFTI('TransmogrifyDexterityFTI')
        fti.schema = 'transmogrify.dexterity.testing.ITestSchema'
        fti.klass = 'plone.dexterity.content.Container'
        fti.behaviors = ('plone.app.dexterity.behaviors.metadata.IBasic',)
        self.portal.portal_types._setObject('TransmogrifyDexterityFTI', fti)
        register(fti)

        # create test schema source and provide it
        @implementer(ISection)
        class SchemaSource(SampleSource):
            classProvides(ISectionBlueprint)

            def __init__(self, transmogrifier, name, options, previous):
                super(SchemaSource, self).__init__(transmogrifier, name, options, previous)
                sourcecontent = options.get('source-content', 'full')
                if sourcecontent == 'full':
                    self.sample = (
                        dict(_path='/spam',
                             foo='one value',
                             _type='TransmogrifyDexterityFTI',
                             title='Spam',
                             description='Lorem Ipsum bla bla!',
                             test_file={
                                'data': zptlogo,
                                'filename': 'zptlogo.gif'},
                             test_date='2010-10-12',
                             fieldnotchanged='nochange',
                        ),
                        dict(_path='/two',
                             foo='Bla',
                             _type='TransmogrifyDexterityFTI',
                             title='My Second Object',
                             #description=None, # None is not valid for this field.
                             test_file=zptlogo,
                             _filename="testlogo.gif",
                             test_date=date(2010, 01, 01, ),
                             fieldnotchanged='nochange',
                        ),
                    )
                elif sourcecontent == 'onlytitle':
                    self.sample = (
                        dict(_path='/spam',
                             _type='TransmogrifyDexterityFTI',
                             title='Spammety spam'),
                        dict(_path='/two',
                             _type='TransmogrifyDexterityFTI',
                             title='My Awesome Second Object'),
                    )
        provideUtility(SchemaSource,
            name=u'transmogrify.dexterity.testsource')
Пример #6
0
    def setUp(self):
        super(TestDocumentNumbering, self).setUp()

        fti = DexterityFTI('SimpleDocument')
        fti.klass = 'plone.dexterity.content.Container'
        fti.behaviors = ('opengever.document.behaviors.IBaseDocument', )
        fti.schema = 'opengever.document.document.IDocumentSchema'

        typestool = getToolByName(self.portal, 'portal_types')
        typestool._setObject('SimpleDocument', fti)
        register(fti)
Пример #7
0
    def setUp(self):
        super(TestDocumentNumbering, self).setUp()

        fti = DexterityFTI("SimpleDocument")
        fti.klass = "plone.dexterity.content.Container"
        fti.behaviors = ("opengever.document.behaviors.IBaseDocument",)
        fti.schema = "opengever.document.document.IDocumentSchema"

        typestool = getToolByName(self.portal, "portal_types")
        typestool._setObject("SimpleDocument", fti)
        register(fti)
    def setUp(self):
        super(TestSchemaLevelDefaultsForBehaviors, self).setUp()

        fti = DexterityFTI('SampleItem')
        fti.klass = 'plone.dexterity.content.Item'
        fti.behaviors = ('opengever.base.tests.sample_behavior.sample.ISampleSchema', )
        fti.schema = 'opengever.base.tests.emptyschema.IEmptySchema'

        typestool = getToolByName(self.portal, 'portal_types')
        typestool._setObject('SampleItem', fti)
        register(fti)
Пример #9
0
    def setUp(self):
        super(TestDocumentNumbering, self).setUp()

        fti = DexterityFTI('SimpleDocument')
        fti.klass = 'plone.dexterity.content.Container'
        fti.behaviors = ('opengever.document.behaviors.IBaseDocument', )
        fti.schema = 'opengever.document.document.IDocumentSchema'

        typestool = getToolByName(self.portal, 'portal_types')
        typestool._setObject('SimpleDocument', fti)
        register(fti)
Пример #10
0
    def setUp(self):
        self.portal = self.layer['portal']
        setRoles(self.portal, TEST_USER_ID, ['Reviewer', 'Manager'])

        self.request = self.portal.REQUEST

        # fti
        self.fti_namedfile = DexterityFTI('namedfile')
        self.fti_namedfile.schema = dottedname(INamedFileSchema)
        self.portal.portal_types._setObject('namedfile', self.fti_namedfile)
        register(self.fti_namedfile)

        self.store_have_blobs = ftwdexterity.HAVE_BLOBS
    def setUp(self):
        super(TestSchemaLevelDefaultsForBehaviors, self).setUp()

        fti = DexterityFTI('SampleItem')
        fti.klass = 'plone.dexterity.content.Item'
        fti.behaviors = (
            'opengever.base.tests.sample_behavior.sample.ISampleSchema', )
        fti.schema = 'opengever.base.tests.emptyschema.IEmptySchema'

        typestool = getToolByName(self.portal, 'portal_types')
        typestool._setObject('SampleItem', fti)
        register(fti)

        site_fti = typestool['Plone Site']
        site_fti.allowed_content_types = site_fti.allowed_content_types + (
            'SampleItem', )
    def getFileSetter(self, schema):
        portal_type = 'testtype'
        setRoles(self.portal, TEST_USER_ID, ('Manager',))

        # prepare a fti
        fti = DexterityFTI(portal_type)
        fti.klass = 'plone.dexterity.content.Item'
        fti.schema = schema.__identifier__
        self.portal.portal_types._setObject(portal_type, fti)
        register(fti)

        # prepare an item
        item = Item('testitem')
        item.portal_type = portal_type
        self.portal._setObject(item.id, item)
        item = self.portal[item.id]

        return IQuickUploadFileSetter(item)
    def setUp(self):
        self.portal = self.layer['portal']
        setRoles(self.portal, TEST_USER_ID, ['Reviewer', 'Manager'])

        self.request = self.portal.REQUEST

        # fti
        self.fti_note = DexterityFTI('note')
        self.fti_note.schema = dottedname(INoteSchemaPrimary)
        self.portal.portal_types._setObject('note', self.fti_note)

        self.fti_invi = DexterityFTI('invitation')
        self.fti_invi.schema = dottedname(IInvitationSchemaNonPrimary)
        self.portal.portal_types._setObject('invitation', self.fti_invi)

        # register
        register(self.fti_note)
        register(self.fti_invi)
    def test_create_document_method(self):

        # we need to register any plone.directives.form magic components
        # from the module manually (they are not grokky):
        for factory, name in document.__form_value_adapters__:
            provideAdapter(factory, name=name)

        class MockContext(object):
            def __init__(self, fti, template):
                self.fti = fti
                self.template = template
            def _setObject(self, id, obj):
                self.obj = obj
            def _getOb(self, id):
                return self.obj
            def restrictedTraverse(self, testpath):
                return self.template
            def getTypeInfo(self):
                return self.fti

        # Mock the lookup of the site and the site manager at the site root
        dummy_site = self.create_dummy()
        self.mock_utility(dummy_site, ISiteRoot)

        # fti fake
        fti = DexterityFTI(u'opengever.document.document')
        fti.schema = 'opengever.document.document.IDocumentSchema'
        fti.model_source = None
        fti.model_file = None
        fti.addable_types = ['opengever.document.document']
        fti.isConstructionAllowed = lambda x: True
        fti.allowType = lambda x: True
        register(fti)
        site_manager_mock = self.mocker.proxy(
            PersistentComponents(bases=(getGlobalSiteManager(),)))
        getSiteManager_mock = self.mocker.replace(
            'zope.app.component.hooks.getSiteManager')
        self.expect(
            getSiteManager_mock(
                dummy_site)).result(site_manager_mock).count(0 , None)

        alsoProvides(IDocumentSchema.get('file'), IPrimaryField)

        # Name chooser
        class NameChooser(object):
            implements(INameChooser)
            def __init__(self, context):
                pass
            def chooseName(self, name, object):
                return u"newid"
        self.mock_adapter(NameChooser, INameChooser, (Interface,))

        # template
        namedfile = self.stub()
        template_doc = self.stub()
        self.expect(template_doc.file).result(namedfile)
        self.expect(template_doc.portal_type).result(
            'opengever.document.document')
        self.expect(namedfile.data).result('data data data')
        self.expect(namedfile.filename).result(u'test_filename.doc')

        # context and request
        context = MockContext(fti, template_doc)
        request = self.stub_request()
        testpath = 'testpath'

        # registry
        registry_mock = self.stub()
        self.expect(registry_mock.forInterface(IDocumentSettings)).result(registry_mock)
        self.expect(registry_mock.preserved_as_paper_default).result(False)
        self.mock_utility(registry_mock, IRegistry)

        self.replay()
        view = TemplateDocumentFormView(context, request)
        view.title = u'Test Title'

        view.create_document(testpath)

        self.assertEqual(context.obj.portal_type, u'opengever.document.document')
        self.assertFalse(context.obj.file == namedfile)
        self.assertEquals(context.obj.file.data, namedfile.data)
        self.assertEqual(context.obj.document_date, datetime.now().date())
        self.assertEqual(context.obj.preserved_as_paper, False)
Пример #15
0
    def setUpPloneSite(self, portal):
        # Install into Plone site using portal_setup
        setRoles(portal, TEST_USER_ID, ['Member', 'Contributor', 'Manager'])

        # portal workaround
        self.portal = portal

        # test fti generation
        fti = DexterityFTI('TransmogrifyDexterityFTI')
        fti.schema = 'transmogrify.dexterity.testing.ITestSchema'
        fti.klass = 'plone.dexterity.content.Container'
        fti.behaviors = ('plone.app.dexterity.behaviors.metadata.IBasic', )
        self.portal.portal_types._setObject('TransmogrifyDexterityFTI', fti)
        register(fti)

        # create test schema source and provide it
        @implementer(ISection)
        class SchemaSource(SampleSource):
            classProvides(ISectionBlueprint)

            def __init__(self, transmogrifier, name, options, previous):
                super(SchemaSource, self).__init__(transmogrifier, name,
                                                   options, previous)
                sourcecontent = options.get('source-content', 'full')
                if sourcecontent == 'full':
                    self.sample = (
                        dict(
                            _path='/spam',
                            foo='one value',
                            _type='TransmogrifyDexterityFTI',
                            title='Spam',
                            description='Lorem Ipsum bla bla!',
                            test_file={
                                'data': zptlogo,
                                'filename': 'zptlogo.gif'
                            },
                            test_date='2010-10-12',
                            fieldnotchanged='nochange',
                        ),
                        dict(
                            _path='/two',
                            foo='Bla',
                            _type='TransmogrifyDexterityFTI',
                            title='My Second Object',
                            #description=None, # None is not valid for this field.
                            test_file=zptlogo,
                            _filename="testlogo.gif",
                            test_date=date(
                                2010,
                                01,
                                01,
                            ),
                            fieldnotchanged='nochange',
                        ),
                    )
                elif sourcecontent == 'onlytitle':
                    self.sample = (
                        dict(_path='/spam',
                             _type='TransmogrifyDexterityFTI',
                             title='Spammety spam'),
                        dict(_path='/two',
                             _type='TransmogrifyDexterityFTI',
                             title='My Awesome Second Object'),
                    )

        provideUtility(SchemaSource, name=u'transmogrify.dexterity.testsource')