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)
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()))
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')
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(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)
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)
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')