def setUp(self): self.portal = self.layer['portal'] self.request = self.layer['request'] # TYPE 1 type1_fti = DexterityFTI('type1') type1_fti.klass = 'plone.dexterity.content.Container' type1_fti.filter_content_types = True type1_fti.allowed_content_types = [] type1_fti.behaviors = ( 'plone.app.dexterity.behaviors.metadata.IBasic', ) self.portal.portal_types._setObject('type1', type1_fti) self.type1_fti = type1_fti # TYPE 2 type2_fti = DexterityFTI('type1') type2_fti.klass = 'plone.dexterity.content.Item' type2_fti.filter_content_types = True type2_fti.allowed_content_types = [] type2_fti.behaviors = ( 'plone.app.dexterity.behaviors.metadata.IBasic', ) self.portal.portal_types._setObject('type2', type2_fti) self.type2_fti = type2_fti login(self.portal, TEST_USER_NAME) setRoles(self.portal, TEST_USER_ID, ['Manager']) self.portal.invokeFactory('type1', id='it1', title='Item 1') self.portal.invokeFactory('type2', id='it2', title='Item 2')
def setUp(self): self.portal = self.layer['portal'] self.request = self.layer['request'] # TYPE 1 type1_fti = DexterityFTI('type1') type1_fti.klass = 'plone.dexterity.content.Container' type1_fti.filter_content_types = True type1_fti.allowed_content_types = [] type1_fti.behaviors = ('plone.app.dexterity.behaviors.metadata.IBasic') self.portal.portal_types._setObject('type1', type1_fti) self.type1_fti = type1_fti # TYPE 2 type2_fti = DexterityFTI('type1') type2_fti.klass = 'plone.dexterity.content.Item' type2_fti.filter_content_types = True type2_fti.allowed_content_types = [] type2_fti.behaviors = ('plone.app.dexterity.behaviors.metadata.IBasic') self.portal.portal_types._setObject('type2', type2_fti) self.type2_fti = type2_fti login(self.portal, TEST_USER_NAME) setRoles(self.portal, TEST_USER_ID, ['Manager']) self.portal.invokeFactory('type1', id='it1', title='Item 1') self.portal.invokeFactory('type2', id='it2', title='Item 2')
def test_schema_exception(self): # Mock FTI fti_mock = DexterityFTI(u"testtype") fti_mock.lookupSchema = Mock(side_effect=AttributeError) fti_mock.behaviors = () self.mock_utility(fti_mock, IDexterityFTI, u'testtype') # Content item item = Item('test') item.portal_type = u"testtype" item.test = u"foo" item.foo = u"bar" SCHEMA_CACHE.clear() self.assertTrue( item.__allow_access_to_unprotected_subobjects__('test', u"foo") ) self.assertTrue( item.__allow_access_to_unprotected_subobjects__('foo', u"bar") ) self.assertTrue( item.__allow_access_to_unprotected_subobjects__('random', u"stuff") )
def test_no_tagged_value(self): # Mock schema model class ITestSchema(Interface): test = zope.schema.TextLine(title=u"Test") # Mock FTI fti_mock = DexterityFTI(u"testtype") fti_mock.lookupSchema = Mock(return_value=ITestSchema) fti_mock.behaviors = () self.mock_utility(fti_mock, IDexterityFTI, u'testtype') # Content item item = Item('test') item.portal_type = u"testtype" item.test = u"foo" item.foo = u"bar" SCHEMA_CACHE.clear() # Everything allowed self.assertTrue( item.__allow_access_to_unprotected_subobjects__('test', u"foo") ) self.assertTrue( item.__allow_access_to_unprotected_subobjects__('foo', u"bar") ) # Unknown attributes are allowed self.assertTrue( item.__allow_access_to_unprotected_subobjects__('random', u"stuff") )
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): app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() setRoles(self.portal, TEST_USER_ID, ['Contributor']) fti = DexterityFTI('leadimagefolder') self.portal.portal_types._setObject('leadimagefolder', fti) fti.klass = 'plone.dexterity.content.Container' fti.behaviors = ( 'plone.app.contenttypes.behaviors.leadimage.ILeadImageBehavior', ) self.fti = fti alsoProvides(self.portal.REQUEST, IPloneAppContenttypesLayer) alsoProvides(self.request, IPloneAppContenttypesLayer) from plone.app.contenttypes.behaviors.leadimage import ILeadImage alsoProvides(self.request, ILeadImage) self.portal.invokeFactory('leadimagefolder', id='leadimagefolder', title=u'Folder with a lead image') import transaction transaction.commit() # Set up browser self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic {0}:{1}'.format( SITE_OWNER_NAME, SITE_OWNER_PASSWORD, ))
def setUp(self): self.portal = self.layer["portal"] self.request = self.layer["request"] self.catalog = api.portal.get_tool("portal_catalog") setRoles(self.portal, TEST_USER_ID, ["Manager"]) fti = DexterityFTI("venueitem") self.portal.portal_types._setObject("venueitem", fti) fti.klass = "plone.dexterity.content.Item" fti.behaviors = ( "plone.app.content.interfaces.INameFromTitle", "plone.app.dexterity.behaviors.metadata.IBasic", "plone.app.dexterity.behaviors.metadata.ICategorization", "collective.geolocationbehavior.geolocation.IGeolocatable", "design.plone.contenttypes.behavior.additional_help_infos", "design.plone.contenttypes.behavior.argomenti", "plone.leadimage", "volto.preview_image", "collective.address.behaviors.IAddress", "design.plone.contenttypes.behavior.luogo", "collective.dexteritytextindexer", ) self.fti = fti self.portal.invokeFactory("venueitem", id="venue", title="venue") self.venue = self.portal.venue commit()
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 setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.wf = api.portal.get_tool('portal_workflow') self.portal.acl_users._doAddUser('user_std', 'secret', ['Member'], []) self.portal_url = self.portal.absolute_url() setRoles(self.portal, TEST_USER_ID, ['Manager']) fti = DexterityFTI(self.portal_type) self.portal.portal_types._setObject(self.portal_type, fti) fti.klass = 'plone.dexterity.content.Item' fti.behaviors = self.behaviors api.content.create( container=self.portal, type=self.portal_type, id='doc1') setRoles(self.portal, TEST_USER_ID, ['Member']) import transaction transaction.commit() # Set up browser self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic {0}:{1}'.format(SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) )
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 test_supports(self): # Context mock context_dummy = self.create_dummy(portal_type=u"testtype") # Behavior mock behavior_dummy_1 = self.create_dummy(interface=IOne) self.mock_utility( behavior_dummy_1, IBehavior, name=IOne.__identifier__ ) behavior_dummy_4 = self.create_dummy(interface=IFour) self.mock_utility( behavior_dummy_4, IBehavior, name=IFour.__identifier__ ) # FTI mock fti = DexterityFTI(u"testtype") fti.behaviors = [IOne.__identifier__, IFour.__identifier__] self.mock_utility(fti, IDexterityFTI, name=u"testtype") assignable = DexterityBehaviorAssignable(context_dummy) self.assertEqual(True, assignable.supports(IOne)) self.assertEqual(False, assignable.supports(ITwo)) self.assertEqual(True, assignable.supports(IThree)) self.assertEqual(True, assignable.supports(IFour))
def setUp(self): self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() setRoles(self.portal, TEST_USER_ID, ['Manager']) fti = DexterityFTI('collectioncontainer') self.portal.portal_types._setObject('collectioncontainer', fti) fti.klass = 'plone.dexterity.content.Container' fti.behaviors = ( 'plone.app.contenttypes.behaviors.collection.ICollection', ) self.fti = fti alsoProvides(self.portal.REQUEST, IPloneAppContenttypesLayer) alsoProvides(self.request, IPloneAppContenttypesLayer) from plone.app.contenttypes.behaviors.collection import ICollection alsoProvides(self.request, ICollection) self.portal.invokeFactory( 'collectioncontainer', id='collectioncontainer', title=u'Container with a collection', customViewFields=['Title', 'portal_type'], query=query, ) self.portal.invokeFactory( 'Document', id='doc', title=u'Collection Test Page', )
def test_repeated_behavior_registration_lookup(self): fti = DexterityFTI(u"testtype") self.mock_utility(fti, IDexterityFTI, name=u"testtype") # Mock a test behavior class ITestBehavior(Interface): pass fti.behaviors = [ITestBehavior.__identifier__] from plone.behavior.registration import BehaviorRegistration registration = BehaviorRegistration( title=u"Test Behavior", description=u"Provides test behavior", interface=Interface, marker=ITestBehavior, factory=None ) from plone.behavior.interfaces import IBehavior self.mock_utility( registration, IBehavior, ITestBehavior.__identifier__ ) r1 = SCHEMA_CACHE.behavior_registrations(u'testtype') r2 = SCHEMA_CACHE.behavior_registrations(u'testtype') self.assertTrue(r1[0] is r2[0] is registration)
def add_item_type(portal): fti = DexterityFTI('item') portal.portal_types._setObject('item', fti) fti.klass = 'plone.dexterity.content.Item' fti.filter_content_types = False fti.behaviors = ('plone.app.dexterity.behaviors.metadata.IBasic') return fti
def test_repeated_subtypes_lookup(self): fti = DexterityFTI(u"testtype") self.mock_utility(fti, IDexterityFTI, name=u"testtype") # Mock a test behavior class ITestSchema(Interface): pass class ITestMarker(Interface): pass fti.behaviors = [ITestSchema.__identifier__] from plone.behavior.registration import BehaviorRegistration registration = BehaviorRegistration( title=u"Test Behavior", description=u"Provides test behavior", interface=ITestSchema, marker=ITestMarker, factory=None ) from plone.behavior.interfaces import IBehavior self.mock_utility( registration, IBehavior, ITestSchema.__identifier__ ) s1 = SCHEMA_CACHE.subtypes(u"testtype") s2 = SCHEMA_CACHE.subtypes(u"testtype") self.assertTrue(s1[0] is s2[0] is ITestMarker)
def test_getSize(self): class SizedValue(str): def getSize(self): return len(self) class ITest(Interface): field1 = zope.schema.TextLine() class ITestBehavior(Interface): field2 = zope.schema.TextLine() alsoProvides(ITestBehavior, IFormFieldProvider) self.mock_adapter(DexterityBehaviorAssignable, IBehaviorAssignable, (IDexterityContent, )) fti_mock = DexterityFTI(u'testtype') fti_mock.lookupSchema = Mock(return_value=ITest) fti_mock.behaviors = ['test_behavior'] self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype") behavior_reg = BehaviorRegistration(u"Test Behavior", "", ITestBehavior, ITestBehavior, None) self.mock_utility(behavior_reg, IBehavior, name="test_behavior") item = Item('item') item.portal_type = 'testtype' item.field1 = SizedValue('1') item.field2 = SizedValue('22') self.assertEqual(3, item.getSize())
def setUp(self): self.app = self.layer["app"] self.request = self.layer["request"] self.portal = self.layer["portal"] self.portal_url = self.portal.absolute_url() setRoles(self.portal, TEST_USER_ID, ["Manager"]) # set up blocksdocument content type with IBlock behavior fti = DexterityFTI("blocksdocument") self.portal.portal_types._setObject("blocksdocument", fti) fti.klass = "plone.dexterity.content.Container" fti.behaviors = ("volto.blocks", ) self.portal.invokeFactory("blocksdocument", id="doc") self.doc = self.portal["doc"] alsoProvides(self.doc, IBlocks) # Set up a mock mailhost self.portal._original_MailHost = self.portal.MailHost self.portal.MailHost = mailhost = MockMailHost('MailHost') sm = getSiteManager(context=self.portal) sm.unregisterUtility(provided=IMailHost) sm.registerUtility(mailhost, provided=IMailHost) # We need to fake a valid mail setup registry = getUtility(IRegistry) mail_settings = registry.forInterface(IMailSchema, prefix='plone') mail_settings.email_from_address = '*****@*****.**' self.mailhost = self.portal.MailHost transaction.commit()
def test_no_tagged_value(self): # Mock schema model class ITestSchema(Interface): test = zope.schema.TextLine(title=u"Test") # Mock FTI fti_mock = DexterityFTI(u"testtype") fti_mock.lookupSchema = Mock(return_value=ITestSchema) fti_mock.behaviors = () self.mock_utility(fti_mock, IDexterityFTI, u'testtype') # Content item item = Item('test') item.portal_type = u"testtype" item.test = u"foo" item.foo = u"bar" SCHEMA_CACHE.clear() # Everything allowed self.assertTrue( item.__allow_access_to_unprotected_subobjects__('test', u"foo")) self.assertTrue( item.__allow_access_to_unprotected_subobjects__('foo', u"bar")) # Unknown attributes are allowed self.assertTrue( item.__allow_access_to_unprotected_subobjects__( 'random', u"stuff"))
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 test_supports(self): # Context mock context_dummy = self.create_dummy(portal_type=u"testtype") # Behavior mock behavior_dummy_1 = self.create_dummy(interface=IOne) self.mock_utility(behavior_dummy_1, IBehavior, name=IOne.__identifier__) behavior_dummy_4 = self.create_dummy(interface=IFour) self.mock_utility(behavior_dummy_4, IBehavior, name=IFour.__identifier__) # FTI mock fti = DexterityFTI(u"testtype") fti.behaviors = [IOne.__identifier__, IFour.__identifier__] self.mock_utility(fti, IDexterityFTI, name=u"testtype") self.replay() assignable = DexterityBehaviorAssignable(context_dummy) self.assertEqual(True, assignable.supports(IOne)) self.assertEqual(False, assignable.supports(ITwo)) self.assertEqual(True, assignable.supports(IThree)) self.assertEqual(True, assignable.supports(IFour))
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 setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() setRoles(self.portal, TEST_USER_ID, ['Contributor']) fti = DexterityFTI('leadimagefolder') self.portal.portal_types._setObject('leadimagefolder', fti) fti.klass = 'plone.dexterity.content.Container' fti.behaviors = ( 'plone.app.contenttypes.behaviors.leadimage.ILeadImage', ) self.fti = fti alsoProvides(self.portal.REQUEST, IPloneAppContenttypesLayer) alsoProvides(self.request, IPloneAppContenttypesLayer) from plone.app.contenttypes.behaviors.leadimage import ILeadImage alsoProvides(self.request, ILeadImage) self.portal.invokeFactory( 'leadimagefolder', id='leadimagefolder', title=u'Folder with a lead image' ) import transaction transaction.commit() # Set up browser self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) )
def setUp(self): self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() setRoles(self.portal, TEST_USER_ID, ['Manager']) fti = DexterityFTI('collectioncontainer') self.portal.portal_types._setObject('collectioncontainer', fti) fti.klass = 'plone.dexterity.content.Container' fti.behaviors = ( 'plone.app.contenttypes.behaviors.collection.ICollection', ) self.fti = fti alsoProvides(self.portal.REQUEST, IPloneAppContenttypesLayer) alsoProvides(self.request, IPloneAppContenttypesLayer) from plone.app.contenttypes.behaviors.collection import ICollection alsoProvides(self.request, ICollection) self.portal.invokeFactory( 'collectioncontainer', id='collectioncontainer', title=u'Container with a collection', customViewFields=['Title', 'portal_type'], query=query, ) self.portal.invokeFactory( 'Document', id='doc', title=u'Collection Test Page', )
def test_repeated_behavior_registration_lookup(self): fti = DexterityFTI(u"testtype") self.mock_utility(fti, IDexterityFTI, name=u"testtype") # Mock a test behavior class ITestBehavior(Interface): pass fti.behaviors = [ITestBehavior.__identifier__] from plone.behavior.registration import BehaviorRegistration registration = BehaviorRegistration( title=u"Test Behavior", description=u"Provides test behavior", interface=Interface, marker=ITestBehavior, factory=None ) from plone.behavior.interfaces import IBehavior self.mock_utility( registration, IBehavior, ITestBehavior.__identifier__ ) r1 = SCHEMA_CACHE.behavior_registrations(u'testtype') r2 = SCHEMA_CACHE.behavior_registrations(u'testtype') self.assertTrue(r1[0] is r2[0] is registration)
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): # add IShortName behavior to Page self.portal = self.layer['portal'] self.request = self.layer['request'] setRoles(self.portal, TEST_USER_ID, ['Manager']) fti = DexterityFTI('LockableType', factory='LockableType') fti.behaviors = ('plone.app.lockingbehavior.behaviors.ILocking', ) fti.global_allow = True self.portal.portal_types._setObject('LockableType', fti) transaction.commit() # prepare two browsers self.foo_browser = z2.Browser(self.layer['app']) self.foo_browser.addHeader( 'Authorization', 'Basic %s:%s' % (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) ) self.foo_browser.open('http://nohost/plone') self.bar_browser = z2.Browser(self.layer['app']) self.bar_browser.addHeader( 'Authorization', 'Basic %s:%s' % (TEST_USER_NAME, TEST_USER_PASSWORD,) ) self.bar_browser.open('http://nohost/plone')
def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.wf = api.portal.get_tool('portal_workflow') self.portal.acl_users._doAddUser('user_std', 'secret', ['Member'], []) self.portal_url = self.portal.absolute_url() setRoles(self.portal, TEST_USER_ID, ['Manager']) fti = DexterityFTI(self.portal_type) self.portal.portal_types._setObject(self.portal_type, fti) fti.klass = 'plone.dexterity.content.Item' fti.behaviors = self.behaviors api.content.create(container=self.portal, type=self.portal_type, id='doc1') setRoles(self.portal, TEST_USER_ID, ['Member']) import transaction transaction.commit() # Set up browser self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic {0}:{1}'.format( SITE_OWNER_NAME, SITE_OWNER_PASSWORD, ))
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 test_repeated_subtypes_lookup(self): fti = DexterityFTI(u"testtype") self.mock_utility(fti, IDexterityFTI, name=u"testtype") # Mock a test behavior class ITestSchema(Interface): pass class ITestMarker(Interface): pass fti.behaviors = [ITestSchema.__identifier__] from plone.behavior.registration import BehaviorRegistration registration = BehaviorRegistration( title=u"Test Behavior", description=u"Provides test behavior", interface=ITestSchema, marker=ITestMarker, factory=None ) from plone.behavior.interfaces import IBehavior self.mock_utility( registration, IBehavior, ITestSchema.__identifier__ ) s1 = SCHEMA_CACHE.subtypes(u"testtype") s2 = SCHEMA_CACHE.subtypes(u"testtype") self.assertTrue(s1[0] is s2[0] is ITestMarker)
def setUp(self): app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] self.portal_url = self.portal.absolute_url() setRoles(self.portal, TEST_USER_ID, ['Contributor']) fti = DexterityFTI('tocdocument') self.portal.portal_types._setObject('tocdocument', fti) fti.klass = 'plone.dexterity.content.Item' fti.behaviors = ( 'plone.app.contenttypes.behaviors.tableofcontents.' 'ITableOfContents', ) self.fti = fti alsoProvides(self.portal.REQUEST, IPloneAppContenttypesLayer) alsoProvides(self.request, IPloneAppContenttypesLayer) from plone.app.contenttypes.behaviors.tableofcontents \ import ITableOfContents alsoProvides(self.request, ITableOfContents) self.portal.invokeFactory( 'tocdocument', id='tocdoc', title=u'Document with a table of contents' ) import transaction transaction.commit() # Set up browser self.browser = Browser(app) self.browser.handleErrors = False self.browser.addHeader( 'Authorization', 'Basic {0}:{1}'.format(SITE_OWNER_NAME, SITE_OWNER_PASSWORD,) )
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 add_item_type(portal): fti = DexterityFTI('item') portal.portal_types._setObject('item', fti) fti.klass = 'plone.dexterity.content.Item' fti.filter_content_types = False fti.behaviors = ( 'plone.app.dexterity.behaviors.metadata.IBasic') return fti
def setUp(self): portal_types = getToolByName(self.layer['portal'], 'portal_types') # Define new portal type without behavior fti = DexterityFTI(str('without_behavior'), title='Without Behavior') fti.behaviors = ( 'plone.app.dexterity.behaviors.metadata.IBasic', ) fti.model_source = u"""\ <model xmlns="http://namespaces.plone.org/supermodel/schema"> <schema> <field name="custom" type="zope.schema.TextLine"> <description /> <required>False</required> <title>Custom field</title> </field> </schema> </model>""" portal_types._setObject(str('without_behavior'), fti) # Define new portal type with behavior fti = DexterityFTI(str('with_behavior'), title='With Behavior') fti.behaviors = ( 'plone.app.dexterity.behaviors.metadata.IBasic', 'collective.dexteritytextindexer.behavior.IDexterityTextIndexer' ) fti.model_source = u"""\ <model xmlns="http://namespaces.plone.org/supermodel/schema"> <schema> <field name="custom" type="zope.schema.TextLine"> <description /> <required>False</required> <title>Custom field</title> </field> </schema> </model>""" portal_types._setObject(str('with_behavior'), fti) setRoles(self.layer['portal'], TEST_USER_ID, ['Manager']) transaction.commit() self.browser = Browser(self.layer['app']) self.browser.addHeader( 'Authorization', 'Basic %s:%s' % (TEST_USER_NAME, TEST_USER_PASSWORD,)) self.portal_url = self.layer['portal'].absolute_url()
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 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 test_schema_lookup_default_view(self): # Context and request class IMarker(IDexterityContent): pass context_mock = self.create_dummy(portal_type=u'testtype') alsoProvides(context_mock, IMarker) request_mock = TestRequest() # FTI fti_mock = DexterityFTI(u"testtype") fti_mock.lookupSchema = Mock(return_value=ISchema) fti_mock.behaviors = (IBehaviorOne.__identifier__, IBehaviorTwo.__identifier__, IBehaviorThree.__identifier__) self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype") from plone.behavior.interfaces import IBehavior from plone.behavior.registration import BehaviorRegistration registration = BehaviorRegistration( title=u"Test Behavior 1", description=u"Provides test behavior", interface=IBehaviorOne, marker=None, factory=None) self.mock_utility(registration, IBehavior, IBehaviorOne.__identifier__) registration = BehaviorRegistration( title=u"Test Behavior 2", description=u"Provides test behavior", interface=IBehaviorTwo, marker=None, factory=None) self.mock_utility(registration, IBehavior, IBehaviorTwo.__identifier__) registration = BehaviorRegistration( title=u"Test Behavior 3", description=u"Provides test behavior", interface=IBehaviorThree, marker=None, factory=None) self.mock_utility(registration, IBehavior, IBehaviorThree.__identifier__) # Form view = DefaultView(context_mock, request_mock) view.portal_type = u"testtype" self.assertEqual(ISchema, view.schema) # we expect here only formfieldprovider! self.assertEqual((IBehaviorOne, IBehaviorTwo), tuple(view.additionalSchemata)) # When we register our own IBehaviorAssignable we can # influence what goes into the additionalSchemata. self.mock_adapter(NoBehaviorAssignable, IBehaviorAssignable, [IMarker]) additionalSchemata = tuple(view.additionalSchemata) self.assertEqual(tuple(), tuple(additionalSchemata))
def setUp(self): portal_types = getToolByName(self.layer['portal'], 'portal_types') # Define new portal type without behavior fti = DexterityFTI(str('without_behavior'), title='Without Behavior') fti.behaviors = ('plone.app.dexterity.behaviors.metadata.IBasic', ) fti.model_source = u"""\ <model xmlns="http://namespaces.plone.org/supermodel/schema"> <schema> <field name="custom" type="zope.schema.TextLine"> <description /> <required>False</required> <title>Custom field</title> </field> </schema> </model>""" portal_types._setObject(str('without_behavior'), fti) # Define new portal type with behavior fti = DexterityFTI(str('with_behavior'), title='With Behavior') fti.behaviors = ( 'plone.app.dexterity.behaviors.metadata.IBasic', 'collective.dexteritytextindexer.behavior.IDexterityTextIndexer') fti.model_source = u"""\ <model xmlns="http://namespaces.plone.org/supermodel/schema"> <schema> <field name="custom" type="zope.schema.TextLine"> <description /> <required>False</required> <title>Custom field</title> </field> </schema> </model>""" portal_types._setObject(str('with_behavior'), fti) setRoles(self.layer['portal'], TEST_USER_ID, ['Manager']) transaction.commit() self.browser = Browser(self.layer['app']) self.browser.addHeader( 'Authorization', 'Basic %s:%s' % ( TEST_USER_NAME, TEST_USER_PASSWORD, )) self.portal_url = self.layer['portal'].absolute_url()
def _setup_test_content_type(self, name): from plone.dexterity.fti import DexterityFTI fti = DexterityFTI(name) fti.behaviors = ('plone.app.dexterity.behaviors.metadata.IDublinCore', 'adhocracy.plone.behavior.IAdhocracyStaticPagesRoot') fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False self.portal.portal_types._setObject(name, fti) fti.lookupSchema()
def setUp(self): super(TestCreatorBehavior, self).setUp() self.grant('Contributor') fti = DexterityFTI('ReferenceFTI') fti.behaviors = ('opengever.base.behaviors.creator.ICreator', ) self.portal.portal_types._setObject('ReferenceFTI', fti) fti.lookupSchema() transaction.commit()
def add_folder_type(portal): fti = DexterityFTI('folder') portal.portal_types._setObject('folder', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ( 'plone.app.dexterity.behaviors.metadata.IBasic', 'brasil.gov.vcge.dx.behaviors.IVCGE') return fti
def setUp(self): self.portal = self.layer["portal"] self.request = self.layer["request"] login(self.portal, TEST_USER_NAME) setRoles(self.portal, TEST_USER_ID, ["Manager"]) fti = DexterityFTI("blocksfolder") self.portal.portal_types._setObject("blocksfolder", fti) fti.klass = "plone.dexterity.content.Container" fti.behaviors = ("volto.blocks", )
def test_schema_lookup_add(self): # Context and request context_mock = self.create_dummy(portal_type=u'testtype') request_mock = TestRequest() # FTI fti_mock = DexterityFTI(u"testtype") fti_mock.lookupSchema = Mock(return_value=ISchema) fti_mock.behaviors = (IBehaviorOne.__identifier__, IBehaviorTwo.__identifier__, IBehaviorThree.__identifier__) self.mock_utility(fti_mock, IDexterityFTI, name=u"testtype") from plone.behavior.interfaces import IBehavior from plone.behavior.registration import BehaviorRegistration registration = BehaviorRegistration( title=u"Test Behavior 1", description=u"Provides test behavior", interface=IBehaviorOne, marker=None, factory=None) self.mock_utility(registration, IBehavior, IBehaviorOne.__identifier__) registration = BehaviorRegistration( title=u"Test Behavior 2", description=u"Provides test behavior", interface=IBehaviorTwo, marker=None, factory=None) self.mock_utility(registration, IBehavior, IBehaviorTwo.__identifier__) registration = BehaviorRegistration( title=u"Test Behavior 3", description=u"Provides test behavior", interface=IBehaviorThree, marker=None, factory=None) self.mock_utility(registration, IBehavior, IBehaviorThree.__identifier__) # Form view = DefaultAddForm(context_mock, request_mock) view.portal_type = u"testtype" self.assertEqual(ISchema, view.schema) # we expect here only formfieldprovider! self.assertEqual((IBehaviorOne, IBehaviorTwo), tuple(view.additionalSchemata)) # When we register our own IBehaviorAssignable we can # influence what goes into the additionalSchemata. But in an Addform # this never grips, since its an adapter on context, and contextless # there is always the FTI the only valid source self.mock_adapter(NoBehaviorAssignable, IBehaviorAssignable, [Interface]) self.assertEqual((IBehaviorOne, IBehaviorTwo), tuple(view.additionalSchemata))
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(TestCreatorBehavior, self).setUp() self.grant('Contributor') fti = DexterityFTI('ReferenceFTI') fti.behaviors = ('opengever.base.behaviors.creator.ICreator',) self.portal.portal_types._setObject('ReferenceFTI', 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 add_folder_type(portal): fti = DexterityFTI('folder') portal.portal_types._setObject('folder', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('Products.CMFPlone.interfaces.constrains.' 'ISelectableConstrainTypes', 'plone.app.dexterity.behaviors.metadata.IBasic') return fti
def add_folder_type(portal): from plone.dexterity.fti import DexterityFTI fti = DexterityFTI(DEXTERITY_FTI_FOLDER) portal.portal_types._setObject(DEXTERITY_FTI_FOLDER, fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('plone.app.dexterity.behaviors.metadata.IBasic', 'brasil.gov.vcge.dx.behaviors.IVCGE') return fti
def add_folder_type(portal): fti = DexterityFTI('folder') portal.portal_types._setObject('folder', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ( 'Products.CMFPlone.interfaces.constrains.' 'ISelectableConstrainTypes', 'plone.app.dexterity.behaviors.metadata.IBasic') return fti
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 setUpPloneSite(self, portal): self.applyProfile(portal, 'plone.app.dexterity:default') self.applyProfile(portal, 'plone.app.drafts:default') if 'Folder' not in portal.portal_types.objectIds(): fti = DexterityFTI('Folder') fti.behaviors = ( 'plone.app.dexterity.behaviors.metadata.IDublinCore', ) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.global_allow = True portal.portal_types._setObject('Folder', fti) fti = DexterityFTI('MyDocument') fti.behaviors = ( 'plone.app.dexterity.behaviors.metadata.IDublinCore', 'plone.app.drafts.interfaces.IDraftable', ) fti.global_allow = True portal.portal_types._setObject('MyDocument', fti)
def add_folder_type(portal): from plone.dexterity.fti import DexterityFTI fti = DexterityFTI(DEXTERITY_FTI_FOLDER) portal.portal_types._setObject(DEXTERITY_FTI_FOLDER, fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ( 'plone.app.dexterity.behaviors.metadata.IBasic', 'brasil.gov.vcge.dx.behaviors.IVCGE') return 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): self.portal = self.layer["portal"] self.request = self.layer["request"] login(self.portal, TEST_USER_NAME) setRoles(self.portal, TEST_USER_ID, ["Manager"]) fti = DexterityFTI("tiledfolder") self.portal.portal_types._setObject("tiledfolder", fti) fti.klass = "plone.dexterity.content.Container" fti.behaviors = ("plone.tiles", ) self.fti = fti alsoProvides(self.request, ITiles)
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): self.app = self.layer.get('app') self.portal = self.layer.get('portal') setRoles(self.portal, TEST_USER_ID, ['Member', 'Contributor', 'Manager']) fti = DexterityFTI('TrashTestFTI', klass="plone.dexterity.content.Container", global_allow=True, filter_content_types=False) fti.behaviors = ('plone.app.content.interfaces.INameFromTitle', 'opengever.trash.trash.ITrashable') self.portal.portal_types._setObject('TrashTestFTI', fti)