def setUp(self): super(TestDexterityRelatedItemsViewlet, self).setUp() """ create some sample content to test with """ from Products.CMFPlone.utils import get_installer setRoles(self.portal, TEST_USER_ID, ['Manager']) fti = DexterityFTI('Dexterity Item with relatedItems behavior') self.portal.portal_types._setObject( 'Dexterity Item with relatedItems behavior', fti) fti.klass = 'plone.dexterity.content.Item' test_module = 'plone.app.layout.viewlets.tests.test_content' fti.schema = test_module + '.IMyDexterityItem' fti.behaviors = ('plone.app.relationfield.behavior.IRelatedItems', ) fti = DexterityFTI('Dexterity Item without relatedItems behavior') self.portal.portal_types._setObject( 'Dexterity Item without relatedItems behavior', fti) fti.klass = 'plone.dexterity.content.Item' fti.schema = test_module + '.IMyDexterityItem' self.folder.invokeFactory('Document', 'doc1', title='Document 1') self.folder.invokeFactory('Document', 'doc2', title='Document 2') self.folder.invokeFactory('Dexterity Item with relatedItems behavior', 'dex1') self.folder.invokeFactory('Dexterity Item with relatedItems behavior', 'dex2') self.folder.invokeFactory( 'Dexterity Item without relatedItems behavior', 'dex3') qi = get_installer(self.portal) qi.install_product('plone.app.intid') intids = getUtility(IIntIds) self.folder.dex1.relatedItems = [ RelationValue(intids.getId(self.folder.doc1)), RelationValue(intids.getId(self.folder.doc2)), ]
def afterSetUp(self): """ create some sample content to test with """ if not HAS_DEXTERITY: return self.setRoles(('Manager',)) fti = DexterityFTI('Dexterity Item with relatedItems behavior') self.portal.portal_types._setObject( 'Dexterity Item with relatedItems behavior', fti) fti.klass = 'plone.dexterity.content.Item' test_module = 'plone.app.layout.viewlets.tests.test_content' fti.schema = test_module + '.IMyDexterityItem' fti.behaviors = ('plone.app.relationfield.behavior.IRelatedItems',) fti = DexterityFTI('Dexterity Item without relatedItems behavior') self.portal.portal_types._setObject( 'Dexterity Item without relatedItems behavior', fti) fti.klass = 'plone.dexterity.content.Item' fti.schema = test_module + '.IMyDexterityItem' self.folder.invokeFactory('Document', 'doc1', title='Document 1') self.folder.invokeFactory('Document', 'doc2', title='Document 2') self.folder.invokeFactory( 'Dexterity Item with relatedItems behavior', 'dex1') self.folder.invokeFactory( 'Dexterity Item with relatedItems behavior', 'dex2') self.folder.invokeFactory( 'Dexterity Item without relatedItems behavior', 'dex3') self.portal.portal_quickinstaller.installProduct('plone.app.intid') intids = getUtility(IIntIds) self.folder.dex1.relatedItems = [ RelationValue(intids.getId(self.folder.doc1)), RelationValue(intids.getId(self.folder.doc2)), ]
def afterSetUp(self): """ create some sample content to test with """ if not HAS_DEXTERITY: return self.setRoles(('Manager', )) fti = DexterityFTI('Dexterity Item with relatedItems behavior') self.portal.portal_types._setObject( 'Dexterity Item with relatedItems behavior', fti) fti.klass = 'plone.dexterity.content.Item' test_module = 'plone.app.layout.viewlets.tests.test_content' fti.schema = test_module + '.IMyDexterityItem' fti.behaviors = ('plone.app.relationfield.behavior.IRelatedItems', ) fti = DexterityFTI('Dexterity Item without relatedItems behavior') self.portal.portal_types._setObject( 'Dexterity Item without relatedItems behavior', fti) fti.klass = 'plone.dexterity.content.Item' fti.schema = test_module + '.IMyDexterityItem' self.folder.invokeFactory('Document', 'doc1', title='Document 1') self.folder.invokeFactory('Document', 'doc2', title='Document 2') self.folder.invokeFactory('Dexterity Item with relatedItems behavior', 'dex1') self.folder.invokeFactory('Dexterity Item with relatedItems behavior', 'dex2') self.folder.invokeFactory( 'Dexterity Item without relatedItems behavior', 'dex3') self.portal.portal_quickinstaller.installProduct('plone.app.intid') intids = getUtility(IIntIds) self.folder.dex1.relatedItems = [ RelationValue(intids.getId(self.folder.doc1)), RelationValue(intids.getId(self.folder.doc2)), ]
def afterSetUp(self): """ create some sample content to test with """ # HTTPRequest's 'set' function is set to it's original implementation # at the start of each new test, since otherwise the below monkey # patch will apply to all remaining tests (and break them); see # comment below in 'disableEventCountHelper' HTTPRequest.set = set_orig self.setRoles(('Manager',)) fti = DexterityFTI('My Dexterity Item') self.portal.portal_types._setObject('My Dexterity Item', fti) fti.klass = 'plone.dexterity.content.Item' fti.schema = 'plone.app.linkintegrity.tests.test_dexterity.IMyDexterityItem' fti.behaviors = ('plone.app.referenceablebehavior.referenceable.IReferenceable',) fti = DexterityFTI('Non referenciable Dexterity Item') self.portal.portal_types._setObject('Non referenciable Dexterity Item', fti) fti.klass = 'plone.dexterity.content.Item' fti.schema = 'plone.app.linkintegrity.tests.test_dexterity.IMyDexterityItem' self.portal.invokeFactory('My Dexterity Item', id='dexterity_item1', title='Dexterity Item 1') self.portal.invokeFactory('My Dexterity Item', id='dexterity_item2', title='Dexterity Item 2') self.portal.invokeFactory('Non referenciable Dexterity Item', id='nonreferenciable_dexterity_item1', title='Non referenciable Dexterity Item 1') self.portal.invokeFactory('Non referenciable Dexterity Item', id='nonreferenciable_dexterity_item2', title='Non referenciable Dexterity Item 2')
def setUp(self): super(TestDexterityRelatedItemsViewlet, self).setUp() """ create some sample content to test with """ from Products.CMFPlone.utils import get_installer setRoles(self.portal, TEST_USER_ID, ['Manager']) fti = DexterityFTI('Dexterity Item with relatedItems behavior') self.portal.portal_types._setObject( 'Dexterity Item with relatedItems behavior', fti) fti.klass = 'plone.dexterity.content.Item' test_module = 'plone.app.layout.viewlets.tests.test_content' fti.schema = test_module + '.IMyDexterityItem' fti.behaviors = ('plone.app.relationfield.behavior.IRelatedItems',) fti = DexterityFTI('Dexterity Item without relatedItems behavior') self.portal.portal_types._setObject( 'Dexterity Item without relatedItems behavior', fti) fti.klass = 'plone.dexterity.content.Item' fti.schema = test_module + '.IMyDexterityItem' self.folder.invokeFactory('Document', 'doc1', title='Document 1') self.folder.invokeFactory('Document', 'doc2', title='Document 2') self.folder.invokeFactory( 'Dexterity Item with relatedItems behavior', 'dex1') self.folder.invokeFactory( 'Dexterity Item with relatedItems behavior', 'dex2') self.folder.invokeFactory( 'Dexterity Item without relatedItems behavior', 'dex3') qi = get_installer(self.portal) qi.install_product('plone.app.intid') intids = getUtility(IIntIds) self.folder.dex1.relatedItems = [ RelationValue(intids.getId(self.folder.doc1)), RelationValue(intids.getId(self.folder.doc2)), ]
def afterSetUp(self): """ create some sample content to test with """ if not HAS_DEXTERITY: return self.setRoles(('Manager',)) fti = DexterityFTI('My Dexterity Item') self.portal.portal_types._setObject('My Dexterity Item', fti) fti.klass = 'plone.dexterity.content.Item' fti.schema = 'plone.app.linkintegrity.tests.test_dexterity.IMyDexterityItem' fti.behaviors = ('plone.app.referenceablebehavior.referenceable.IReferenceable',) fti = DexterityFTI('Non referenciable Dexterity Item') self.portal.portal_types._setObject('Non referenciable Dexterity Item', fti) fti.klass = 'plone.dexterity.content.Item' fti.schema = 'plone.app.linkintegrity.tests.test_dexterity.IMyDexterityItem'
def setUp(self): self.portal = self.layer["portal"] self.request = self.layer["request"] fti = DexterityFTI("TaggedDocument") self.portal.portal_types._setObject("TaggedDocument", fti) fti.klass = "plone.dexterity.content.Container" fti.schema = "plone.restapi.tests.test_types.ITaggedValuesSchema"
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_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 setUp(self): self.portal = self.layer['portal'] self.request = self.layer['request'] fti = DexterityFTI('TaggedDocument') self.portal.portal_types._setObject('TaggedDocument', fti) fti.klass = 'plone.dexterity.content.Container' fti.schema = 'plone.restapi.tests.test_types.ITaggedValuesSchema'
def test_lookupModel_failure(self): fti = DexterityFTI('testtype') fti.schema = None fti.model_source = None fti.model_file = None self.assertRaises(ValueError, fti.lookupModel)
def afterSetUp(self): """ create some sample content to test with """ if not HAS_DEXTERITY: return self.setRoles(('Manager', )) fti = DexterityFTI('My Dexterity Item') self.portal.portal_types._setObject('My Dexterity Item', fti) fti.klass = 'plone.dexterity.content.Item' fti.schema = 'plone.app.linkintegrity.tests.test_dexterity.IMyDexterityItem' fti.behaviors = ( 'plone.app.referenceablebehavior.referenceable.IReferenceable', ) fti = DexterityFTI('Non referenciable Dexterity Item') self.portal.portal_types._setObject('Non referenciable Dexterity Item', fti) fti.klass = 'plone.dexterity.content.Item' fti.schema = 'plone.app.linkintegrity.tests.test_dexterity.IMyDexterityItem'
def test_lookupModel_failure(self): fti = DexterityFTI(u"testtype") fti.schema = None fti.model_source = None fti.model_file = None self.assertRaises(ValueError, fti.lookupModel)
def add_mock_fti(portal): # Fake DX Type fti = DexterityFTI('dx_mock') portal.portal_types._setObject('dx_mock', fti) fti.klass = 'plone.dexterity.content.Item' fti.schema = 'plone.app.dexterity.tests.test_permissions.IMockSchema' fti.filter_content_types = False fti.behaviors = ('plone.app.dexterity.behaviors.metadata.IBasic',)
def add_mock_fti(portal): # Fake DX Type fti = DexterityFTI('dx_mock') portal.portal_types._setObject('dx_mock', fti) fti.klass = 'plone.dexterity.content.Item' fti.schema = 'plone.app.widgets.tests.test_dx.IMockSchema' fti.filter_content_types = False fti.behaviors = ('plone.app.dexterity.behaviors.metadata.IBasic',)
def setUp(self): super(TestDexterityItems, self).setUp() portal = self.portal fti = DexterityFTI('dxtest_type') fti.schema = u'collective.syndication.tests.test_syndication.ITestSchema' portal.portal_types._setObject('dxtest_type', fti) self.folder.invokeFactory('dxtest_type', 'dxtest1') self.folder.dxtest1.text = u'<p>Lorem ipsum dolor sit amet.</p>'
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 setUpPloneSite(self, portal): # Install into Plone site using portal_setup # self.applyProfile(portal, 'plone.app.linkintegrity:default') super(LinkintegrityFixture, self).setUpPloneSite(portal) setRoles(portal, TEST_USER_ID, ['Manager']) fti = DexterityFTI('My Dexterity Item') portal.portal_types._setObject('My Dexterity Item', fti) fti.klass = 'plone.dexterity.content.Item' fti.schema = 'collective.cover.tests.test_linkintegrity.IMyDexterityItem' fti.behaviors = ('plone.app.referenceablebehavior.referenceable.IReferenceable',) fti = DexterityFTI('Non referenciable Dexterity Item') portal.portal_types._setObject('Non referenciable Dexterity Item', fti) fti.klass = 'plone.dexterity.content.Item' fti.schema = 'collective.cover.tests.test_linkintegrity.IMyDexterityItem' # Create some dexterity items to test with it portal.invokeFactory( 'My Dexterity Item', id='dexterity_item1', title='Dexterity Item 1') portal.invokeFactory( 'My Dexterity Item', id='dexterity_item2', title='Dexterity Item 2') portal.invokeFactory( 'Non referenciable Dexterity Item', id='nonreferenciable_dexterity_item1', title='Non referenciable Dexterity Item 1' ) portal.invokeFactory( 'Non referenciable Dexterity Item', id='nonreferenciable_dexterity_item2', title='Non referenciable Dexterity Item 2' ) # Create an AT Image image = generate_jpeg(50, 50) portal.invokeFactory( 'Image', id='image1', title='Test Image 1', image=image) portal.invokeFactory('collective.cover.content', 'cover1') # Documents text = '<html> <body> a test page </body> </html>' portal.invokeFactory( 'Document', id='doc1', title='Test Page 1', text=text) text = '<html> <body> another test page </body> </html>' portal.invokeFactory( 'Document', id='doc2', title='Test Page 2', text=text) text = '<html> <body> a test page in a subfolder </body> </html>' portal.invokeFactory('Folder', id='folder1', title='Test Folder 1') portal.folder1.invokeFactory( 'Document', id='doc3', title='Test Page 3', text=text)
def setUp(self): super(TestBaseBehavior, self).setUp() fti = DexterityFTI('OpenGeverBaseFTI') fti.schema = 'opengever.base.tests.emptyschema.IEmptySchema' fti.behaviors = ('opengever.base.behaviors.base.IOpenGeverBase',) self.portal.portal_types._setObject('OpenGeverBaseFTI', fti) fti.lookupSchema() transaction.commit()
def setUp(self): super(TestBaseBehavior, self).setUp() fti = DexterityFTI('OpenGeverBaseFTI') fti.schema = 'opengever.base.tests.emptyschema.IEmptySchema' fti.behaviors = ('opengever.base.behaviors.base.IOpenGeverBase', ) self.portal.portal_types._setObject('OpenGeverBaseFTI', fti) fti.lookupSchema() transaction.commit()
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 setUp(self): super(TestBaseBehavior, self).setUp() self.grant("Contributor") fti = DexterityFTI("OpenGeverBaseFTI") fti.schema = "opengever.base.tests.emptyschema.IEmptySchema" fti.behaviors = ("opengever.base.behaviors.base.IOpenGeverBase",) self.portal.portal_types._setObject("OpenGeverBaseFTI", fti) fti.lookupSchema() transaction.commit()
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 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 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 test_lookupSchema_with_nonexistant_schema(self): ''' Tests the case where a dexterity type is not removed cleanly from the fti, but the code has been removed. ''' fti = DexterityFTI('testtype') fti.schema = 'model.wont.be.imported' portal = self.create_dummy(getPhysicalPath=lambda: ('', 'site')) self.mock_utility(portal, Interface) schemaName = utils.portalTypeToSchemaName(fti.getId()) setattr(plone.dexterity.schema.generated, schemaName, ITestSchema) self.assertEqual(ITestSchema, fti.lookupSchema()) delattr(plone.dexterity.schema.generated, schemaName)
def setUp(self): self.portal = self.layer['portal'] activateAndReindex(self.portal) setRoles(self.portal, TEST_USER_ID, ['Manager']) fti = DexterityFTI('My Dexterity Container') self.portal.portal_types._setObject('My Dexterity Container', fti) fti.klass = 'plone.dexterity.content.Container' fti.schema = 'zope.interface.Interface' fti.behaviors = ('collective.solr.behaviors.ISolrFields',) self.portal.invokeFactory('My Dexterity Container', 'child') self.child = self.portal['child']
def setUp(self): self.portal = self.layer['portal'] activateAndReindex(self.portal) setRoles(self.portal, TEST_USER_ID, ['Manager']) fti = DexterityFTI('My Dexterity Container') self.portal.portal_types._setObject('My Dexterity Container', fti) fti.klass = 'plone.dexterity.content.Container' fti.schema = 'zope.interface.Interface' fti.behaviors = ('collective.solr.behaviors.ISolrFields', ) self.portal.invokeFactory('My Dexterity Container', 'child') self.child = self.portal['child']
def setUp(self): self.portal = self.layer["portal"] activateAndReindex(self.portal) setRoles(self.portal, TEST_USER_ID, ["Manager"]) fti = DexterityFTI("My Dexterity Container") self.portal.portal_types._setObject("My Dexterity Container", fti) fti.klass = "plone.dexterity.content.Container" fti.schema = "zope.interface.Interface" fti.behaviors = ("collective.solr.behaviors.ISolrFields", ) self.portal.invokeFactory("My Dexterity Container", "child") self.child = self.portal["child"]
def test_lookupSchema_with_nonexistant_schema(self): """ Tests the case where a dexterity type is not removed cleanly from the fti, but the code has been removed. """ fti = DexterityFTI(u"testtype") fti.schema = 'model.wont.be.imported' portal = self.create_dummy(getPhysicalPath=lambda: ('', 'site')) self.mock_utility(portal, ISiteRoot) schemaName = utils.portalTypeToSchemaName(fti.getId()) setattr(plone.dexterity.schema.generated, schemaName, ITestSchema) self.assertEqual(ITestSchema, fti.lookupSchema()) delattr(plone.dexterity.schema.generated, schemaName)
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_lookupSchema_with_dynamic_schema(self): fti = DexterityFTI(u"testtype") fti.schema = None # use dynamic schema portal = self.create_dummy(getPhysicalPath=lambda: ('', 'site')) self.mock_utility(portal, ISiteRoot) schemaName = utils.portalTypeToSchemaName(fti.getId()) setattr(plone.dexterity.schema.generated, schemaName, ITestSchema) self.assertEqual(ITestSchema, fti.lookupSchema()) # cleanup delattr(plone.dexterity.schema.generated, schemaName)
def setUpPloneSite(self, portal): # install into the Plone site applyProfile(portal, 'plone.app.dexterity:default') applyProfile(portal, 'plone.app.widgets:default') applyProfile(portal, 'plone.app.standardtiles:default') # ensure plone.app.theming disabled from plone.registry.interfaces import IRegistry from zope.component import getUtility registry = getUtility(IRegistry) key = 'plone.app.theming.interfaces.IThemeSettings.enabled' if key in registry: registry[key] = False # creates some users acl_users = getToolByName(portal, 'acl_users') acl_users.userFolderAddUser( NORMAL_USER_NAME, NORMAL_USER_PASSWORD, ['Member'], [], ) acl_users.userFolderAddUser( EDITOR_USER_NAME, EDITOR_USER_PASSWORD, ['Editor'], [], ) acl_users.userFolderAddUser( MANAGER_USER_NAME, MANAGER_USER_PASSWORD, ['Manager'], [], ) # define the dexterity "junk" type fti = DexterityFTI('DecoTestType1') fti.schema = u'plone.app.standardtiles.testing.ITestType1' fti.behaviors = ( 'plone.app.dexterity.behaviors.metadata.IDublinCore', ) portal.portal_types._setObject('DecoTestType1', fti) # inserts the content of the types defined above login(portal, MANAGER_USER_NAME) content = portal[portal.invokeFactory('DecoTestType1', 'deco-test-type1')] content.title = u"Test content" content.description = u"Just a test content" content.contributors = (u'Jane Doe', u'John Doe') logout()
def setUpPloneSite(self, portal): # install into the Plone site applyProfile(portal, 'plone.app.dexterity:default') applyProfile(portal, 'plone.app.widgets:default') applyProfile(portal, 'plone.app.standardtiles:default') # ensure plone.app.theming disabled if HAS_PLONE_APP_THEMING: from plone.registry.interfaces import IRegistry from zope.component import getUtility registry = getUtility(IRegistry) key = 'plone.app.theming.interfaces.IThemeSettings.enabled' if key in registry: registry[key] = False # creates some users acl_users = getToolByName(portal, 'acl_users') acl_users.userFolderAddUser( NORMAL_USER_NAME, NORMAL_USER_PASSWORD, ['Member'], [], ) acl_users.userFolderAddUser( EDITOR_USER_NAME, EDITOR_USER_PASSWORD, ['Editor'], [], ) acl_users.userFolderAddUser( MANAGER_USER_NAME, MANAGER_USER_PASSWORD, ['Manager'], [], ) # define the dexterity "junk" type fti = DexterityFTI('DecoTestType1') fti.schema = u'plone.app.standardtiles.testing.ITestType1' fti.behaviors = ('plone.app.dexterity.behaviors.metadata.IDublinCore',) portal.portal_types._setObject('DecoTestType1', fti) # inserts the content of the types defined above login(portal, MANAGER_USER_NAME) content = portal[portal.invokeFactory('DecoTestType1', 'deco-test-type1')] content.title = u"Test content" content.description = u"Just a test content" content.contributors = (u'Jane Doe', u'John Doe') logout()
def test_lookupSchema_with_dynamic_schema(self): fti = DexterityFTI('testtype') fti.schema = None # use dynamic schema portal = self.create_dummy(getPhysicalPath=lambda: ('', 'site')) self.mock_utility(portal, Interface) schemaName = utils.portalTypeToSchemaName(fti.getId()) setattr(plone.dexterity.schema.generated, schemaName, ITestSchema) self.assertEqual(ITestSchema, fti.lookupSchema()) # cleanup delattr(plone.dexterity.schema.generated, schemaName)
def setup_sample_fti(self): types_tool = self.layer['portal'].portal_types default_behaviors = [ 'plone.app.dexterity.behaviors.metadata.IBasic', 'plone.app.content.interfaces.INameFromTitle', IDataGridFieldExample.__identifier__ ] fti = DexterityFTI('SampleContent') fti.schema = 'ftw.publisher.core.testing.ISampleContentSchema' fti.klass = 'ftw.publisher.core.testing.SampleContent' fti.behaviors = tuple(default_behaviors) fti.default_view = 'view' types_tool._setObject('SampleContent', fti)
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_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(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 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 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('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 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 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_alias_dexterity_object(self): tt = getToolByName(self.portal, 'portal_types') fti = DexterityFTI('collective.alias.test') fti.schema = ITest.__identifier__ tt._setObject('collective.alias.test', fti) self.folder.invokeFactory('collective.alias.test', 't1') self.folder['t1'].title = "Dummy title" self.folder['t1'].foo = "Foo Bar" relation = RelationValue(self.intids.getId(self.folder['t1'])) self.folder.invokeFactory('collective.alias', 'a2', _aliasTarget=relation) self.failUnless(ITest.providedBy(self.folder['a2'])) self.assertEquals("Dummy title", self.folder['a2'].title) self.assertEquals("Foo Bar", self.folder['a2'].foo)
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_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_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")