def afterSetUp(self):
        ptc.PloneTestCase.afterSetUp(self)

        # I am ready to kill... from Zope 2.10.4 I have to do this here
        from OFS.Application import install_package
        app = ztc.app()
        install_package(app, upfront.versioning, upfront.versioning.initialize)
        self.addProfile('upfront.versioning:default')

        # Hack persistent utility since we need Folder to be versionable
        sm = self.portal.getSiteManager()
        utility = sm.getUtility(IVersioningSettings, 'upfront.versioning-settings')
        utility.versionable_types = ['Document', 'Folder', 'DDocument']
        
        utility = getUtility(IVersioner)

        # Add a site member
        uf = self.portal.acl_users
        uf._doAddUser('member', 'secret', ['Member'], [])

        # Login as the member
        self.login('member')
        _createHomeFolder(self.portal, 'member', take_ownership=0)

        workspace = self.getWorkspace()

        # Create items in workspace as member
        created = []
        versioned = []
        for portal_type, id, version in (
            ('Document', 'a-document', 1),
            ('Folder', 'folder-containing-item', 1),
            ('DDocument', 'a-ddocument', 1),
            ('Document', 'a-document-unversioned', 0),
            ('Folder', 'folder-containing-item-unversioned', 0),
            ('DDocument', 'a-ddocument-unversioned', 0),
            ):
            ob = _createObjectByType(portal_type, workspace, id)
            fti = self.portal.portal_types.getTypeInfo(portal_type)
            fti._finishConstruction(ob)
            if portal_type == 'DDocument':
                ob.setRelated(self.portal.news)
            if portal_type == 'Document':
                ob.setRelatedItems([self.portal.news])
            created.append(ob)
            if version:
                versioned.append(ob)

        # Create sub-items
        ob = _createObjectByType('Document', workspace['folder-containing-item'], 'contained')
        fti = self.portal.portal_types.getTypeInfo('Document')
        fti._finishConstruction(ob)
        created.append(ob)

        ob = _createObjectByType('Document', workspace['folder-containing-item-unversioned'], 'contained')
        fti = self.portal.portal_types.getTypeInfo('Document')
        fti._finishConstruction(ob)
        created.append(ob)

        # Portal owner must publish the items
        self.loginAsPortalOwner()
        for ob in created:
            self.portal.portal_workflow.doActionFor(ob, 'publish')

        transaction.savepoint(optimistic=True)

        # Subject some items to versioning. The member still has 
        # Modify Portal Content permission thanks to 
        # simple_publication_workflow.
        self.login('member')
        for ob in versioned:
            utility.start_new_version(ob)
 def createMemberarea(self, name):
     '''Creates a minimal memberarea.'''
     _createHomeFolder(self.portal, name)