def test_move_content_id_already_in_use(self):
        """Move a content with an id that is already in use in the
        target folder.
        """
        factory = self.root.target.manage_addProduct['Silva']
        factory.manage_addLink('toc', 'Link to AutoTOC')
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectWillBeMovedEvent', 'ObjectMovedEvent',
                                  'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertNotEqual(mover(self.root.source.toc), None)

        self.assertFalse('toc' in self.root.source.objectIds())
        self.assertTrue('toc' in self.root.target.objectIds())
        self.assertTrue('move_of_toc' in self.root.target.objectIds())
        self.assertTrue(verifyObject(ILink, self.root.target.toc))
        self.assertTrue(verifyObject(IAutoTOC, self.root.target.move_of_toc))

        # Now if we move it back, the move_of_ will be stripped
        manager = IContainerManager(self.root.source)
        with assertTriggersEvents('ObjectWillBeMovedEvent', 'ObjectMovedEvent',
                                  'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertNotEqual(mover(self.root.target.move_of_toc), None)

        self.assertTrue('toc' in self.root.source.objectIds())
        self.assertFalse('move_of_toc' in self.root.target.objectIds())
        self.assertTrue(verifyObject(IAutoTOC, self.root.source.toc))
    def test_move_content_id_already_in_use(self):
        """Move a content with an id that is already in use in the
        target folder.
        """
        factory = self.root.target.manage_addProduct['Silva']
        factory.manage_addLink('toc', 'Link to AutoTOC')
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectWillBeMovedEvent',
                                  'ObjectMovedEvent',
                                  'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertNotEqual(
                    mover(self.root.source.toc),
                    None)

        self.assertFalse('toc' in self.root.source.objectIds())
        self.assertTrue('toc' in self.root.target.objectIds())
        self.assertTrue('move_of_toc' in self.root.target.objectIds())
        self.assertTrue(verifyObject(ILink, self.root.target.toc))
        self.assertTrue(verifyObject(IAutoTOC, self.root.target.move_of_toc))

        # Now if we move it back, the move_of_ will be stripped
        manager = IContainerManager(self.root.source)
        with assertTriggersEvents('ObjectWillBeMovedEvent',
                                  'ObjectMovedEvent',
                                  'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertNotEqual(
                    mover(self.root.target.move_of_toc),
                    None)

        self.assertTrue('toc' in self.root.source.objectIds())
        self.assertFalse('move_of_toc' in self.root.target.objectIds())
        self.assertTrue(verifyObject(IAutoTOC, self.root.source.toc))
    def test_move_content(self):
        """Move a single item.
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectWillBeMovedEvent', 'ObjectMovedEvent',
                                  'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertNotEqual(mover(self.root.source.toc), None)

        self.assertFalse('toc' in self.root.source.objectIds())
        self.assertTrue('toc' in self.root.target.objectIds())
        self.assertTrue(verifyObject(IAutoTOC, self.root.target.toc))
    def test_move_content_same_container(self):
        """Move a single content into the same container than it is
        already there.
        """
        manager = IContainerManager(self.root.source)
        with assertNotTriggersEvents('ObjectWillBeMovedEvent',
                                     'ObjectMovedEvent',
                                     'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertIsInstance(mover(self.root.source.toc),
                                      ContainerError)

        self.assertTrue('toc' in self.root.source.objectIds())
    def test_move_content_same_container(self):
        """Move a single content into the same container than it is
        already there.
        """
        manager = IContainerManager(self.root.source)
        with assertNotTriggersEvents('ObjectWillBeMovedEvent',
                                     'ObjectMovedEvent',
                                     'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertIsInstance(
                    mover(self.root.source.toc),
                    ContainerError)

        self.assertTrue('toc' in self.root.source.objectIds())
    def test_move_content(self):
        """Move a single item.
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectWillBeMovedEvent',
                                  'ObjectMovedEvent',
                                  'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertNotEqual(
                    mover(self.root.source.toc),
                    None)

        self.assertFalse('toc' in self.root.source.objectIds())
        self.assertTrue('toc' in self.root.target.objectIds())
        self.assertTrue(verifyObject(IAutoTOC, self.root.target.toc))
    def test_move_published_container(self):
        """Move a single published container.

        Authors doesn't have the right to do it.
        """
        manager = IContainerManager(self.root.target)
        with assertNotTriggersEvents('ObjectWillBeMovedEvent',
                                     'ObjectMovedEvent',
                                     'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertIsInstance(mover(self.root.source), ContentError)

        self.assertTrue('source' in self.root.objectIds())
        self.assertFalse('source' in self.root.target.objectIds())
        self.assertTrue(verifyObject(IFolder, self.root.source))
    def test_move_multiple(self):
        """Move multiple content in one time (one container, one
        unpublished content).
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectWillBeMovedEvent', 'ObjectMovedEvent',
                                  'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertNotEqual(mover(self.root.source.folder), None)
                self.assertNotEqual(mover(self.root.source.link), None)

        self.assertFalse('folder' in self.root.source.objectIds())
        self.assertTrue('folder' in self.root.target.objectIds())
        self.assertTrue(verifyObject(IFolder, self.root.target.folder))
        self.assertFalse('link' in self.root.source.objectIds())
        self.assertTrue('link' in self.root.target.objectIds())
        self.assertTrue(verifyObject(ILink, self.root.target.link))
    def test_move_published_content(self):
        """Move a single published content.

        Editors can do it. The link stays published.
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectWillBeMovedEvent', 'ObjectMovedEvent',
                                  'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertNotEqual(mover(self.root.source.published_link),
                                    None)

        self.assertFalse('published_link' in self.root.source.objectIds())
        self.assertTrue('published_link' in self.root.target.objectIds())
        self.assertTrue(verifyObject(ILink, self.root.target.published_link))
        self.assertNotEqual(self.root.target.published_link.get_viewable(),
                            None)
    def test_move_published_container(self):
        """Move a single published container.

        Authors doesn't have the right to do it.
        """
        manager = IContainerManager(self.root.target)
        with assertNotTriggersEvents('ObjectWillBeMovedEvent',
                                     'ObjectMovedEvent',
                                     'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertIsInstance(
                    mover(self.root.source),
                    ContentError)

        self.assertTrue('source' in self.root.objectIds())
        self.assertFalse('source' in self.root.target.objectIds())
        self.assertTrue(verifyObject(IFolder, self.root.source))
    def test_move_published_content(self):
        """Move a single published content.

        Editors can do it. The link stays published.
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectWillBeMovedEvent',
                                  'ObjectMovedEvent',
                                  'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertNotEqual(
                    mover(self.root.source.published_link),
                    None)

        self.assertFalse('published_link' in self.root.source.objectIds())
        self.assertTrue('published_link' in self.root.target.objectIds())
        self.assertTrue(verifyObject(ILink, self.root.target.published_link))
        self.assertNotEqual(self.root.target.published_link.get_viewable(), None)
Beispiel #12
0
    def payload(self):
        manager = IContainerManager(self.context)

        with manager.copier() as copier:
            with self.notifier(
                copier,
                u"Pasted as a copy ${contents}.",
                u"Could not copy ${contents}: ${reason}") as notifier:
                notifier.map(self.get_selected_contents('copied'))

        with manager.mover() as mover:
            with self.notifier(
                mover,
                u"Moved ${contents}.",
                u"Could not move ${contents}: ${reason}") as notifier:
                notifier.map(self.get_selected_contents('cutted'))

        return {}
    def test_move_published_container(self):
        """Move a single published container.

        Authors doesn't have the right to do it.
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectWillBeMovedEvent', 'ObjectMovedEvent',
                                  'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertNotEqual(mover(self.root.source), None)

        self.assertFalse('source' in self.root.objectIds())
        self.assertTrue('source' in self.root.target.objectIds())
        self.assertTrue(verifyObject(IFolder, self.root.target.source))
        # Inner content is still there and published.
        self.assertItemsEqual(self.root.target.source.objectIds(),
                              ['toc', 'link', 'published_link', 'folder'])
        self.assertNotEqual(
            self.root.target.source.published_link.get_viewable(), None)
    def test_move_not_addable_content(self):
        """Move a content that is not addable in the target folder.

        This should not be possible (for everybody).
        """
        self.root.target.set_silva_addables_allowed_in_container(
            ['Silva Image', 'Silva File'])

        manager = IContainerManager(self.root.target)
        with assertNotTriggersEvents('ObjectWillBeMovedEvent',
                                     'ObjectMovedEvent',
                                     'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertIsInstance(mover(self.root.source.toc),
                                      ContainerError)

        self.assertTrue('toc' in self.root.source.objectIds())
        self.assertEqual(self.root.target.objectIds(), [])
        self.assertTrue(verifyObject(IAutoTOC, self.root.source.toc))
    def test_move_not_addable_content(self):
        """Move a content that is not addable in the target folder.

        This should not be possible (for everybody).
        """
        self.root.target.set_silva_addables_allowed_in_container(
            ['Silva Image', 'Silva File'])

        manager = IContainerManager(self.root.target)
        with assertNotTriggersEvents('ObjectWillBeMovedEvent',
                                     'ObjectMovedEvent',
                                     'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertIsInstance(
                    mover(self.root.source.toc),
                    ContainerError)

        self.assertTrue('toc' in self.root.source.objectIds())
        self.assertEqual(self.root.target.objectIds(), [])
        self.assertTrue(verifyObject(IAutoTOC, self.root.source.toc))
    def test_move_published_container(self):
        """Move a single published container.

        Authors doesn't have the right to do it.
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectWillBeMovedEvent',
                                  'ObjectMovedEvent',
                                  'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertNotEqual(
                    mover(self.root.source),
                    None)

        self.assertFalse('source' in self.root.objectIds())
        self.assertTrue('source' in self.root.target.objectIds())
        self.assertTrue(verifyObject(IFolder, self.root.target.source))
        # Inner content is still there and published.
        self.assertItemsEqual(
            self.root.target.source.objectIds(),
            ['toc', 'link', 'published_link', 'folder'])
        self.assertNotEqual(self.root.target.source.published_link.get_viewable(), None)
    def test_move_multiple(self):
        """Move multiple content in one time (one container, one
        unpublished content).
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectWillBeMovedEvent',
                                  'ObjectMovedEvent',
                                  'ContainerModifiedEvent'):
            with manager.mover() as mover:
                self.assertNotEqual(
                    mover(self.root.source.folder),
                    None)
                self.assertNotEqual(
                    mover(self.root.source.link),
                    None)

        self.assertFalse('folder' in self.root.source.objectIds())
        self.assertTrue('folder' in self.root.target.objectIds())
        self.assertTrue(verifyObject(IFolder, self.root.target.folder))
        self.assertFalse('link' in self.root.source.objectIds())
        self.assertTrue('link' in self.root.target.objectIds())
        self.assertTrue(verifyObject(ILink, self.root.target.link))
    def test_folder_action(self):
        """Test that folder action update used space.
        Content structure:

        root
        |-- folder1
        |   `-- subfolder1
        |       `-- zipfile1.zip
        `-- folder2
            `-- image1.jpg
        """
        # XXX this big hugre
        factory = self.root.manage_addProduct['Silva']
        factory.manage_addFolder('folder1', 'FooFolder 1')
        factory.manage_addFolder('folder2', 'FooFolder 2')
        folder1 = self.root._getOb('folder1')
        folder2 = self.root._getOb('folder2')
        factory = folder1.manage_addProduct['Silva']
        factory.manage_addFolder('subfolder1', 'Sub FooFolder')
        subfolder1 = folder1._getOb('subfolder1')

        # By default, all used_space should be at 0
        self.assertEqual(self.root.used_space, 0)
        self.assertEqual(folder1.used_space, 0)
        self.assertEqual(subfolder1.used_space, 0)

        # Add a file
        factory = subfolder1.manage_addProduct['Silva']
        with self.layer.open_fixture('test2.zip') as source:
            factory.manage_addFile('file.zip', 'Zip File', source)
            zipfile_size = source.tell()
            zipfile = subfolder1._getOb('file.zip')

        self.assertTrue(verifyObject(IAsset, zipfile))
        self.assertEqual(zipfile.get_file_size(), zipfile_size)
        # And check used space
        self.assertEqual(subfolder1.used_space, zipfile_size)
        self.assertEqual(self.root.used_space, zipfile_size)

        # Change file data
        with self.layer.open_fixture('test1.zip') as source:
            zipfile.set_file(source)
            zipfile_size = source.tell()
        self.assertEqual(zipfile.get_file_size(), zipfile_size)
        # And check used space
        self.assertEqual(subfolder1.used_space, zipfile_size)
        self.assertEqual(self.root.used_space, zipfile_size)
        self.assertEqual(folder2.used_space, 0)

        # Add an image
        factory = folder2.manage_addProduct['Silva']
        with self.layer.open_fixture('torvald.jpg') as source:
            factory.manage_addImage('image1.jpg', 'Image File', source)
            image_size = source.tell()

        # Verify added image
        image = folder2._getOb('image1.jpg')
        self.assertTrue(verifyObject(IAsset, image))
        self.assertEqual(image.get_file_size(), image_size)
        # And check used space
        self.assertEqual(self.root.used_space, zipfile_size + image_size)
        self.assertEqual(folder2.used_space, image_size)
        # Change image and check size
        with self.layer.open_fixture('testimage.gif') as source:
            image.set_image(source)
            image_size = source.tell()
        # And check used space
        self.assertEqual(image.get_file_size(), image_size)
        self.assertEqual(subfolder1.used_space, zipfile_size)
        self.assertEqual(self.root.used_space, zipfile_size + image_size)
        self.assertEqual(folder2.used_space, image_size)

        # Try cut and paste
        manager2 = IContainerManager(folder2)
        with manager2.mover() as mover:
            mover(folder1['subfolder1'])

        # And check used space
        self.assertEqual(folder1.used_space, 0)
        self.assertEqual(self.root.used_space, zipfile_size + image_size)
        self.assertEqual(folder2.used_space, zipfile_size + image_size)

        # Try cut and ghost paste
        manager1 = IContainerManager(folder1)
        with manager1.ghoster() as ghoster:
            ghoster(folder2['subfolder1'])

        # And check used space. Ghost Assets don't use any quota.
        self.assertEqual(folder1.used_space, 0)
        self.assertEqual(self.root.used_space, zipfile_size + image_size)
        self.assertEqual(folder2.used_space, zipfile_size + image_size)

        # Delete the ghost
        with manager1.deleter() as deleter:
            deleter(folder1['subfolder1'])

        # And check used space
        self.assertEqual(folder1.used_space, 0)
        self.assertEqual(self.root.used_space, zipfile_size + image_size)
        self.assertEqual(folder2.used_space, zipfile_size + image_size)

        # Try copy and paste
        with manager1.copier() as copier:
            copier(folder2['image1.jpg'])

        # And check used space
        self.assertEqual(folder1.used_space, image_size)
        self.assertEqual(self.root.used_space, zipfile_size + (2 * image_size))
        self.assertEqual(folder2.used_space, zipfile_size + image_size)

        # Clean, and check each time
        manager = IContainerManager(self.root)
        with manager.deleter() as deleter:
            deleter(self.root['folder2'])
        self.assertEqual(self.root.used_space, image_size)
        with manager.deleter() as deleter:
            deleter(self.root['folder1'])
        self.assertEqual(self.root.used_space, 0)
    def test_folder_action(self):
        """Test that folder action update used space.
        Content structure:

        root
        |-- folder1
        |   `-- subfolder1
        |       `-- zipfile1.zip
        `-- folder2
            `-- image1.jpg
        """
        # XXX this big hugre
        factory = self.root.manage_addProduct['Silva']
        factory.manage_addFolder('folder1', 'FooFolder 1')
        factory.manage_addFolder('folder2', 'FooFolder 2')
        folder1 = self.root._getOb('folder1')
        folder2 = self.root._getOb('folder2')
        factory = folder1.manage_addProduct['Silva']
        factory.manage_addFolder('subfolder1', 'Sub FooFolder')
        subfolder1 = folder1._getOb('subfolder1')

        # By default, all used_space should be at 0
        self.assertEqual(self.root.used_space, 0)
        self.assertEqual(folder1.used_space, 0)
        self.assertEqual(subfolder1.used_space, 0)

        # Add a file
        factory = subfolder1.manage_addProduct['Silva']
        with self.layer.open_fixture('test2.zip') as source:
            factory.manage_addFile('file.zip', 'Zip File', source)
            zipfile_size = source.tell()
            zipfile = subfolder1._getOb('file.zip')

        self.assertTrue(verifyObject(IAsset, zipfile))
        self.assertEqual(zipfile.get_file_size(), zipfile_size)
        # And check used space
        self.assertEqual(subfolder1.used_space, zipfile_size)
        self.assertEqual(self.root.used_space, zipfile_size)

        # Change file data
        with self.layer.open_fixture('test1.zip') as source:
            zipfile.set_file(source)
            zipfile_size = source.tell()
        self.assertEqual(zipfile.get_file_size(), zipfile_size)
        # And check used space
        self.assertEqual(subfolder1.used_space, zipfile_size)
        self.assertEqual(self.root.used_space, zipfile_size)
        self.assertEqual(folder2.used_space, 0)

        # Add an image
        factory = folder2.manage_addProduct['Silva']
        with self.layer.open_fixture('torvald.jpg') as source:
            factory.manage_addImage('image1.jpg', 'Image File', source)
            image_size = source.tell()

        # Verify added image
        image = folder2._getOb('image1.jpg')
        self.assertTrue(verifyObject(IAsset, image))
        self.assertEqual(image.get_file_size(), image_size)
        # And check used space
        self.assertEqual(self.root.used_space, zipfile_size + image_size)
        self.assertEqual(folder2.used_space, image_size)
        # Change image and check size
        with self.layer.open_fixture('testimage.gif') as source:
            image.set_image(source)
            image_size = source.tell()
        # And check used space
        self.assertEqual(image.get_file_size(), image_size)
        self.assertEqual(subfolder1.used_space, zipfile_size)
        self.assertEqual(self.root.used_space, zipfile_size + image_size)
        self.assertEqual(folder2.used_space, image_size)

        # Try cut and paste
        manager2 = IContainerManager(folder2)
        with manager2.mover() as mover:
            mover(folder1['subfolder1'])

        # And check used space
        self.assertEqual(folder1.used_space, 0)
        self.assertEqual(self.root.used_space, zipfile_size + image_size)
        self.assertEqual(folder2.used_space, zipfile_size + image_size)

        # Try cut and ghost paste
        manager1 = IContainerManager(folder1)
        with manager1.ghoster() as ghoster:
            ghoster(folder2['subfolder1'])

        # And check used space. Ghost Assets don't use any quota.
        self.assertEqual(folder1.used_space, 0)
        self.assertEqual(self.root.used_space, zipfile_size + image_size)
        self.assertEqual(folder2.used_space, zipfile_size + image_size)

        # Delete the ghost
        with manager1.deleter() as deleter:
            deleter(folder1['subfolder1'])

        # And check used space
        self.assertEqual(folder1.used_space, 0)
        self.assertEqual(self.root.used_space, zipfile_size + image_size)
        self.assertEqual(folder2.used_space, zipfile_size + image_size)

        # Try copy and paste
        with manager1.copier() as copier:
            copier(folder2['image1.jpg'])

        # And check used space
        self.assertEqual(folder1.used_space, image_size)
        self.assertEqual(self.root.used_space, zipfile_size + (2 * image_size))
        self.assertEqual(folder2.used_space, zipfile_size + image_size)

        # Clean, and check each time
        manager = IContainerManager(self.root)
        with manager.deleter() as deleter:
            deleter(self.root['folder2'])
        self.assertEqual(self.root.used_space, image_size)
        with manager.deleter() as deleter:
            deleter(self.root['folder1'])
        self.assertEqual(self.root.used_space, 0)