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 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 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 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_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 _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 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): 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 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): 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(self, portal): # Register a dexterity folder type. fti = DexterityFTI('Folder') portal.portal_types._delObject('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', 'plone.app.content.interfaces.INameFromTitle') return fti
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'] type1_fti.behaviors = ( 'Products.CMFPlone.interfaces.constrains.ISelectableConstrainTypes', # noqa 'plone.app.dexterity.behaviors.metadata.IBasic') self.portal.portal_types._setObject('type1', type1_fti) self.type1_fti = type1_fti login(self.portal, TEST_USER_NAME) setRoles(self.portal, TEST_USER_ID, ['Manager'])
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'] type1_fti.behaviors = ( 'Products.CMFPlone.interfaces.constrains.ISelectableConstrainTypes', # noqa 'plone.app.dexterity.behaviors.metadata.IBasic' ) self.portal.portal_types._setObject('type1', type1_fti) self.type1_fti = type1_fti login(self.portal, TEST_USER_NAME) setRoles(self.portal, TEST_USER_ID, ['Manager'])
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 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 _setupFTI(self): fti = DexterityFTI(self._portal_type) self.portal.portal_types._setObject(self._portal_type, fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = self._behaviors
def create1_0EventType(portal): """Recreate the old event type used in the 1.0 branch""" fti = DexterityFTI('Event') fti.title = 'Event' fti.description = 'Events can be shown in calendars.' fti.factory = 'Event' fti.add_view_expr = 'string:${folder_url}/++add++Event' fti.link_target = '' fti.link_target = '' fti.immediate_view = 'view' fti.global_allow = True fti.filter_content_types = True fti.allowed_content_types = [] fti.allow_discussion = False fti.default_view = 'event_view' fti.view_methods = ('event_view', ) fti.default_view_fallback = False fti.add_permission = 'plone.app.contenttypes.addEvent' fti.klass = 'plone.app.contenttypes.tests.oldtypes.Event' fti.behaviors = ( 'plone.app.contenttypes.interfaces.IEvent', 'plone.app.dexterity.behaviors.metadata.IDublinCore', 'plone.app.content.interfaces.INameFromTitle', 'plone.app.dexterity.behaviors.discussion.IAllowDiscussion', 'plone.app.dexterity.behaviors.exclfromnav.IExcludeFromNavigation', 'plone.app.relationfield.behavior.IRelatedItems', 'plone.app.versioningbehavior.behaviors.IVersionable', ) fti.schema = None fti.model_source = """ <model xmlns="http://namespaces.plone.org/supermodel/schema" xmlns:indexer="http://namespaces.plone.org/supermodel/indexer" xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="plone"> <schema> <field name="location" type="zope.schema.TextLine" indexer:searchable="true"> <description /> <required>False</required> <title i18n:translate="label_event_location">Event Location</title> </field> <field name="start_date" type="zope.schema.Datetime"> <description /> <title i18n:translate="label_event_start">Event Starts</title> </field> <field name="end_date" type="zope.schema.Datetime"> <description /> <title i18n:translate="label_event_end">Event Ends</title> </field> <field name="text" type="plone.app.textfield.RichText" indexer:searchable="true"> <description /> <required>False</required> <title i18n:translate="">Text</title> </field> <field name="attendees" type="zope.schema.Text" indexer:searchable="true"> <description /> <required>False</required> <title i18n:translate="label_event_attendees">Attendees</title> </field> <field name="event_url" type="zope.schema.TextLine"> <description i18n:translate="help_url"> Web address with more info about the event. Add http:// for external links. </description> <required>False</required> <title i18n:translate="event_more_information">Event URL</title> </field> <field name="contact_name" type="zope.schema.TextLine" indexer:searchable="true"> <description /> <required>False</required> <title i18n:translate="label_contact_name">Contact Name</title> </field> <field name="contact_email" type="zope.schema.TextLine"> <description /> <required>False</required> <title i18n:translate="label_contact_email">Contact E-mail</title> </field> <field name="contact_phone" type="zope.schema.TextLine"> <description /> <required>False</required> <title i18n:translate="label_contact_phone">Contact Phone</title> </field> </schema> </model>""" fti.model_file = None # Was plone.app.contenttypes.schema:event.xml if 'Event' in portal.portal_types: del portal.portal_types['Event'] portal.portal_types._setObject('Event', fti) return fti
def setUp(self): self.app = self.layer['app'] self.portal = self.layer['portal'] self.request = self.layer['request'] from plone.dexterity.fti import DexterityFTI ### Single behavior types # Make organization type providing organization behavior fti = DexterityFTI('organization') self.portal.portal_types._setObject('organization', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('collective.fundraising.core.behaviors.interfaces.IFundraisingOrganization',) # Make campaign type providing campaign behavior fti = DexterityFTI('campaign') self.portal.portal_types._setObject('campaign', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('collective.fundraising.core.behaviors.interfaces.IFundraisingCampaign',) # Make fundraising_page type providing page behavior fti = DexterityFTI('fundraising_page') self.portal.portal_types._setObject('fundraising_page', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('collective.fundraising.core.behaviors.interfaces.IFundraisingPage',) # Make personal type providing personal fundraiser behavior fti = DexterityFTI('personal') self.portal.portal_types._setObject('personal', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('collective.fundraising.core.behaviors.interfaces.IPersonalFundraiser',) ### Combination behavior types # Make organization_campaign type providing organization and campaign behaviors fti = DexterityFTI('organization_campaign') self.portal.portal_types._setObject('organization_campaign', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('collective.fundraising.core.behaviors.interfaces.IFundraisingOrganization', 'collective.fundraising.core.behaviors.interfaces.IFundraisingCampaign') # Make organization_campaign_page type providing organization, campaign, and page behaviors fti = DexterityFTI('organization_campaign_page') self.portal.portal_types._setObject('organization_campaign_page', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('collective.fundraising.core.behaviors.interfaces.IFundraisingOrganization', 'collective.fundraising.core.behaviors.interfaces.IFundraisingCampaign', 'collective.fundraising.core.behaviors.interfaces.IFundraisingPage') # Make organization_campaign_page type providing organization, campaign, and personal fundraiser behaviors fti = DexterityFTI('organization_campaign_personal') self.portal.portal_types._setObject('organization_campaign_personal', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('collective.fundraising.core.behaviors.interfaces.IFundraisingOrganization', 'collective.fundraising.core.behaviors.interfaces.IFundraisingCampaign', 'collective.fundraising.core.behaviors.interfaces.IPersonalFundraiser') # Make organization_campaign_page_personal type providing organization, campaign, page, and personal fundraiser behaviors fti = DexterityFTI('organization_campaign_page_personal') self.portal.portal_types._setObject('organization_campaign_page_personal', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('collective.fundraising.core.behaviors.interfaces.IFundraisingOrganization', 'collective.fundraising.core.behaviors.interfaces.IFundraisingCampaign', 'collective.fundraising.core.behaviors.interfaces.IFundraisingPage', 'collective.fundraising.core.behaviors.interfaces.IPersonalFundraiser') # Make organization_campaign_personal_page type providing organization, campaign, personal fundraiser, and page behaviors fti = DexterityFTI('organization_campaign_personal_page') self.portal.portal_types._setObject('organization_campaign_personal_page', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('collective.fundraising.core.behaviors.interfaces.IFundraisingOrganization', 'collective.fundraising.core.behaviors.interfaces.IFundraisingCampaign', 'collective.fundraising.core.behaviors.interfaces.IPersonalFundraiser', 'collective.fundraising.core.behaviors.interfaces.IFundraisingPage') # Make campaign_page type providing campaign and page behaviors fti = DexterityFTI('campaign_page') self.portal.portal_types._setObject('campaign_page', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('collective.fundraising.core.behaviors.interfaces.IFundraisingCampaign', 'collective.fundraising.core.behaviors.interfaces.IFundraisingPage') # Make campaign_personal type providing campaign and personal fundraiser behaviors fti = DexterityFTI('campaign_personal') self.portal.portal_types._setObject('campaign_personal', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('collective.fundraising.core.behaviors.interfaces.IFundraisingCampaign', 'collective.fundraising.core.behaviors.interfaces.IPersonalFundraiser') # Make campaign_page_personal type providing campaign, page, and personal fundraiser behaviors fti = DexterityFTI('campaign_page_personal') self.portal.portal_types._setObject('campaign_page_personal', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('collective.fundraising.core.behaviors.interfaces.IFundraisingCampaign', 'collective.fundraising.core.behaviors.interfaces.IFundraisingPage', 'collective.fundraising.core.behaviors.interfaces.IPersonalFundraiser') # Make campaign_personal_page type providing campaign, personal fundraiser, and page behaviors fti = DexterityFTI('campaign_personal_page') self.portal.portal_types._setObject('campaign_personal_page', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('collective.fundraising.core.behaviors.interfaces.IFundraisingCampaign', 'collective.fundraising.core.behaviors.interfaces.IPersonalFundraiser', 'collective.fundraising.core.behaviors.interfaces.IFundraisingPage') # Make page_personal type providing page and personal fundraiser behaviors fti = DexterityFTI('page_personal') self.portal.portal_types._setObject('page_personal', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('collective.fundraising.core.behaviors.interfaces.IFundraisingPage', 'collective.fundraising.core.behaviors.interfaces.IPersonalFundraiser') # Make personal_page type providing personal fundraiser and page behaviors fti = DexterityFTI('personal_page') self.portal.portal_types._setObject('personal_page', fti) fti.klass = 'plone.dexterity.content.Container' fti.filter_content_types = False fti.behaviors = ('collective.fundraising.core.behaviors.interfaces.IPersonalFundraiser', 'collective.fundraising.core.behaviors.interfaces.IFundraisingPage') # Get Manager role from plone.app.testing import setRoles from plone.app.testing import TEST_USER_ID setRoles(self.portal, TEST_USER_ID, ['Manager'])
def create1_0EventType(portal): """Recreate the old event type used in the 1.0 branch""" fti = DexterityFTI("Event") fti.title = "Event" fti.description = "Events can be shown in calendars." fti.factory = "Event" fti.add_view_expr = "string:${folder_url}/++add++Event" fti.link_target = "" fti.link_target = "" fti.immediate_view = "view" fti.global_allow = True fti.filter_content_types = True fti.allowed_content_types = [] fti.allow_discussion = False fti.default_view = "event_view" fti.view_methods = ("event_view",) fti.default_view_fallback = False fti.add_permission = "plone.app.contenttypes.addEvent" fti.klass = "plone.app.contenttypes.content.Event" fti.behaviors = ( "plone.app.contenttypes.interfaces.IEvent", "plone.app.dexterity.behaviors.metadata.IDublinCore", "plone.app.content.interfaces.INameFromTitle", "plone.app.dexterity.behaviors.discussion.IAllowDiscussion", "plone.app.dexterity.behaviors.exclfromnav.IExcludeFromNavigation", "plone.app.relationfield.behavior.IRelatedItems", "plone.app.versioningbehavior.behaviors.IVersionable", ) fti.schema = None fti.model_source = """ <model xmlns="http://namespaces.plone.org/supermodel/schema" xmlns:indexer="http://namespaces.plone.org/supermodel/indexer" xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="plone"> <schema> <field name="location" type="zope.schema.TextLine" indexer:searchable="true"> <description /> <required>False</required> <title i18n:translate="label_event_location">Event Location</title> </field> <field name="start_date" type="zope.schema.Datetime"> <description /> <title i18n:translate="label_event_start">Event Starts</title> </field> <field name="end_date" type="zope.schema.Datetime"> <description /> <title i18n:translate="label_event_end">Event Ends</title> </field> <field name="text" type="plone.app.textfield.RichText" indexer:searchable="true"> <description /> <required>False</required> <title i18n:translate="">Text</title> </field> <field name="attendees" type="zope.schema.Text" indexer:searchable="true"> <description /> <required>False</required> <title i18n:translate="label_event_attendees">Attendees</title> </field> <field name="event_url" type="zope.schema.TextLine"> <description i18n:translate="help_url"> Web address with more info about the event. Add http:// for external links. </description> <required>False</required> <title i18n:translate="event_more_information">Event URL</title> </field> <field name="contact_name" type="zope.schema.TextLine" indexer:searchable="true"> <description /> <required>False</required> <title i18n:translate="label_contact_name">Contact Name</title> </field> <field name="contact_email" type="zope.schema.TextLine"> <description /> <required>False</required> <title i18n:translate="label_contact_email">Contact E-mail</title> </field> <field name="contact_phone" type="zope.schema.TextLine"> <description /> <required>False</required> <title i18n:translate="label_contact_phone">Contact Phone</title> </field> </schema> </model>""" fti.model_file = None # Was plone.app.contenttypes.schema:event.xml if "Event" in portal.portal_types: del portal.portal_types["Event"] portal.portal_types._setObject("Event", fti) return fti
def setUp(self): self.app = self.layer["app"] self.portal = self.layer["portal"] self.request = self.layer["request"] from plone.dexterity.fti import DexterityFTI # Make fundraising_campaign type providing campaign and organization behavior fti = DexterityFTI("campaign") self.portal.portal_types._setObject("campaign", fti) fti.klass = "plone.dexterity.content.Container" fti.filter_content_types = False fti.behaviors = ( "collective.fundraising.core.behaviors.interfaces.IFundraisingOrganization", "collective.fundraising.core.behaviors.interfaces.IFundraisingCampaign", ) # Make personal_page type providing the page and personal fundraiser behaviors fti = DexterityFTI("personal_page") self.portal.portal_types._setObject("personal_page", fti) fti.klass = "plone.dexterity.content.Container" fti.filter_content_types = False fti.behaviors = ( "collective.fundraising.core.behaviors.interfaces.IFundraisingPage", "collective.fundraising.core.behaviors.interfaces.IPersonalFundraiser", ) # Make fundraising_campaign type combining campaign and page behaviors fti = DexterityFTI("combo_page") self.portal.portal_types._setObject("combo_page", fti) fti.klass = "plone.dexterity.content.Container" fti.filter_content_types = False fti.behaviors = ( "collective.fundraising.core.behaviors.interfaces.IFundraisingCampaign", "collective.fundraising.core.behaviors.interfaces.IFundraisingPage", ) # Make donation type combining honorary/memorial, donor and donation behaviors fti = DexterityFTI("combo_donation") self.portal.portal_types._setObject("combo_donation", fti) fti.klass = "plone.dexterity.content.Container" fti.filter_content_types = False fti.behaviors = ( "collective.fundraising.core.behaviors.interfaces.IDedication", "collective.fundraising.core.behaviors.interfaces.IDonor", "collective.fundraising.core.behaviors.interfaces.IDonation", ) # Get Manager role from plone.app.testing import setRoles from plone.app.testing import TEST_USER_ID setRoles(self.portal, TEST_USER_ID, ["Manager"]) # Create a single campaign from collective.fundraising.core.behaviors.interfaces import IFundraisingCampaign self.portal.invokeFactory("campaign", "test_campaign", title=u"Test Fundraising Campaign") self.campaign = IFundraisingCampaign(self.portal["test_campaign"]) # Create a page inside the campaign from collective.fundraising.core.behaviors.interfaces import IFundraisingPage from collective.fundraising.core.behaviors.interfaces import IPersonalFundraiser self.campaign.context.invokeFactory("personal_page", "test_page", title=u"Test Personal Page") self.page = IFundraisingPage(self.campaign.context["test_page"]) self.personal_fundraiser = IPersonalFundraiser(self.campaign.context["test_page"]) # Set test campaign values self.campaign.goal = 1000 self.campaign.total = 150.0 # Set test page values self.page.goal = 200 self.page.total = 50.0 # Create a combo donation providing donor, donation, and dedication self.page.context.invokeFactory("combo_donation", "test_combo_donation", title=u"Test Combo Donation") # Get an instance of each behavior of the combo donation donation = self.page.context["test_combo_donation"] from collective.fundraising.core.behaviors.interfaces import IDonor self.donor = IDonor(donation) from collective.fundraising.core.behaviors.interfaces import IDonation self.donation = IDonation(donation) from collective.fundraising.core.behaviors.interfaces import IDedication self.dedication = IDedication(donation) # Set donor values self.donor.first_name = u"John" self.donor.last_name = u"Doe" self.donor.email = u"*****@*****.**" # Set donation values self.donation.amount = 10.0 # Set dedication values self.dedication.dedication_type = u"memorial" self.dedication.first_name = u"George" self.dedication.last_name = u"Washington" self.dedication.recipient_first_name = u"John" self.dedication.recipient_last_name = u"Adams"