def testRenamedFolderCopyPaste(self):
        # Test copying a folder with items to the same location, so
        # that the copied folder gets a different name.
        portal = self.layer['portal']
        setRoles(portal, TEST_USER_ID, ('Manager',))
        make_folder_structure(portal)
        wf_tool = getToolByName(portal, 'portal_workflow')

        main_objects = [
            portal['private-folder'],
            ]
        paths = ['/'.join(obj.getPhysicalPath()) for obj in main_objects]
        request = self.layer['request']
        request.set('paths', paths)
        portal.folder_copy()
        target = portal
        # Sanity check for the cookie with info about the copied objects:
        self.assertTrue(target.cb_dataValid())
        start_traversing(portal, self.layer['request'])
        target.restrictedTraverse('@@special-paste')()

        def get_state(obj):
            return wf_tool.getInfoFor(obj, 'review_state')

        self.assertEqual(get_state(
            target['copy_of_private-folder']), 'private')
        self.assertEqual(get_state(
            target['copy_of_private-folder']['private-doc']), 'private')
        self.assertEqual(get_state(
            target['copy_of_private-folder']['published-doc']), 'published')
        self.assertEqual(get_state(
            target['copy_of_private-folder']['published-sub-folder']), 'published')
        self.assertEqual(get_state(
            target['copy_of_private-folder']['published-sub-folder']['pending-doc']),
            'pending')
    def testFolderCopyPaste(self):
        # Test copying multiple items, nested, with various review
        # states.
        portal = self.layer['portal']
        setRoles(portal, TEST_USER_ID, ('Manager',))
        make_folder_structure(portal)
        wf_tool = getToolByName(portal, 'portal_workflow')

        main_objects = [
            portal['private-doc'],
            portal['published-doc'],
            portal['private-folder'],
            portal['published-folder'],
            ]
        paths = ['/'.join(obj.getPhysicalPath()) for obj in main_objects]
        request = self.layer['request']
        request.set('paths', paths)
        portal.folder_copy()
        target = portal['target-folder']
        # Sanity check for the cookie with info about the copied objects:
        self.assertTrue(target.cb_dataValid())
        start_traversing(portal, self.layer['request'])
        target.restrictedTraverse('@@special-paste')()
        self.assertEqual(len(target.contentIds()), len(main_objects))

        def get_state(obj):
            return wf_tool.getInfoFor(obj, 'review_state')

        self.assertEqual(get_state(
            target['private-doc']), 'private')
        self.assertEqual(get_state(
            target['published-doc']), 'published')
        self.assertEqual(get_state(
            target['private-folder']), 'private')
        self.assertEqual(get_state(
            target['private-folder']['private-doc']), 'private')
        self.assertEqual(get_state(
            target['private-folder']['published-doc']), 'published')
        self.assertEqual(get_state(
            target['private-folder']['published-sub-folder']), 'published')
        self.assertEqual(get_state(
            target['private-folder']['published-sub-folder']['pending-doc']),
            'pending')
        self.assertEqual(get_state(
            target['published-folder']), 'published')
        self.assertEqual(get_state(
            target['published-folder']['private-doc']), 'private')
        self.assertEqual(get_state(
            target['published-folder']['published-doc']), 'published')
        self.assertEqual(get_state(
            target['published-folder']['private-sub-folder']), 'private')
        self.assertEqual(get_state(
            target['published-folder']['private-sub-folder']['pending-doc']),
            'pending')