Пример #1
0
    def test_copy_content_id_already_in_use(self):
        """Copy a single content to a folder where the content id is
        already in use.
        """
        factory = self.root.target.manage_addProduct['Silva']
        factory.manage_addLink('folder', 'Link to the ultimate Folder')

        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectCopiedEvent',
                                  'ObjectWillBeAddedEvent',
                                  'ObjectAddedEvent',
                                  'ContainerModifiedEvent',
                                  'ObjectClonedEvent'):
            with manager.copier() as copier:
                self.assertNotEqual(copier(self.root.source.folder), None)

        self.assertTrue('folder' in self.root.source.objectIds())
        self.assertTrue('folder' in self.root.target.objectIds())
        self.assertTrue('copy_of_folder' in self.root.target.objectIds())
        self.assertTrue(verifyObject(ILink, self.root.target.folder))
        self.assertTrue(verifyObject(IFolder, self.root.target.copy_of_folder))

        # And an another time will create a copy2_of_folder
        with assertTriggersEvents('ObjectCopiedEvent',
                                  'ObjectWillBeAddedEvent',
                                  'ObjectAddedEvent',
                                  'ContainerModifiedEvent',
                                  'ObjectClonedEvent'):
            with manager.copier() as copier:
                self.assertNotEqual(copier(self.root.source.folder), None)

        self.assertTrue('copy2_of_folder' in self.root.target.objectIds())
        self.assertTrue(verifyObject(IFolder, self.root.target.copy2_of_folder))
Пример #2
0
    def test_collect_quota_on_activation(self):
        """Test values update on activation.
        """
        # Create some content
        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('subfolder', 'Sub FooFolder')
        subfolder1 = folder1._getOb('subfolder')
        factory = subfolder1.manage_addProduct['Silva']
        with self.layer.open_fixture('test1.zip') as source:
            factory.manage_addFile('zipfile1.zip', 'Zip File', source)
            # After reading the file, position should be end of file
            zip1_size = source.tell()
        factory = folder2.manage_addProduct['Silva']
        with self.layer.open_fixture('torvald.jpg') as source:
            factory.manage_addImage('image1.jpg', 'Image File', source)
            image1_size = source.tell()

        # No counting should be done (extensions not activated)
        self.assertEqual(self.root.used_space, 0)
        self.assertEqual(folder1.used_space, 0)
        self.assertEqual(folder2.used_space, 0)

        # Activate the quota system
        self.root.service_extensions.enable_quota_subsystem()

        # Values should be updated
        self.assertEqual(self.root.used_space, zip1_size + image1_size)
        self.assertEqual(folder1.used_space, zip1_size)
        self.assertEqual(subfolder1.used_space, zip1_size)
        self.assertEqual(folder2.used_space, image1_size)

        # Disable
        self.root.service_extensions.disable_quota_subsystem()

        # Do some changes
        manager = IContainerManager(folder1)
        with manager.deleter() as deleter:
            deleter(folder1.subfolder)
        with manager.copier() as copier:
            copier(self.root.folder2)

        # Nothing had change
        self.assertEqual(self.root.used_space, zip1_size + image1_size)
        self.assertEqual(folder1.used_space, zip1_size)
        self.assertEqual(folder2.used_space, image1_size)

        # Re-enable
        self.root.service_extensions.enable_quota_subsystem()
        # Values should be updated
        self.assertEqual(self.root.used_space, (2 * image1_size))
        self.assertEqual(folder1.used_space, image1_size)
        self.assertEqual(folder2.used_space, image1_size)
Пример #3
0
    def test_collect_quota_on_activation(self):
        """Test values update on activation.
        """
        # Create some content
        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('subfolder', 'Sub FooFolder')
        subfolder1 = folder1._getOb('subfolder')
        factory = subfolder1.manage_addProduct['Silva']
        with self.layer.open_fixture('test1.zip') as source:
            factory.manage_addFile('zipfile1.zip', 'Zip File', source)
            # After reading the file, position should be end of file
            zip1_size = source.tell()
        factory = folder2.manage_addProduct['Silva']
        with self.layer.open_fixture('torvald.jpg') as source:
            factory.manage_addImage('image1.jpg', 'Image File', source)
            image1_size = source.tell()

        # No counting should be done (extensions not activated)
        self.assertEqual(self.root.used_space, 0)
        self.assertEqual(folder1.used_space, 0)
        self.assertEqual(folder2.used_space, 0)

        # Activate the quota system
        self.root.service_extensions.enable_quota_subsystem()

        # Values should be updated
        self.assertEqual(self.root.used_space, zip1_size + image1_size)
        self.assertEqual(folder1.used_space, zip1_size)
        self.assertEqual(subfolder1.used_space, zip1_size)
        self.assertEqual(folder2.used_space, image1_size)

        # Disable
        self.root.service_extensions.disable_quota_subsystem()

        # Do some changes
        manager = IContainerManager(folder1)
        with manager.deleter() as deleter:
            deleter(folder1.subfolder)
        with manager.copier() as copier:
            copier(self.root.folder2)

        # Nothing had change
        self.assertEqual(self.root.used_space, zip1_size + image1_size)
        self.assertEqual(folder1.used_space, zip1_size)
        self.assertEqual(folder2.used_space, image1_size)

        # Re-enable
        self.root.service_extensions.enable_quota_subsystem()
        # Values should be updated
        self.assertEqual(self.root.used_space, (2 * image1_size))
        self.assertEqual(folder1.used_space, image1_size)
        self.assertEqual(folder2.used_space, image1_size)
Пример #4
0
    def test_copy_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.copier() as copier:
                self.assertIsInstance(copier(self.root.source.toc), ContainerError)

        self.assertEqual(self.root.target.objectIds(), [])
Пример #5
0
    def test_copy_content_id_already_in_use(self):
        """Copy a single content to a folder where the content id is
        already in use.
        """
        factory = self.root.target.manage_addProduct["Silva"]
        factory.manage_addLink("folder", "Link to the ultimate Folder")

        manager = IContainerManager(self.root.target)
        with assertTriggersEvents(
            "ObjectCopiedEvent",
            "ObjectWillBeAddedEvent",
            "ObjectAddedEvent",
            "ContainerModifiedEvent",
            "ObjectClonedEvent",
        ):
            with manager.copier() as copier:
                self.assertNotEqual(copier(self.root.source.folder), None)

        self.assertTrue("folder" in self.root.source.objectIds())
        self.assertTrue("folder" in self.root.target.objectIds())
        self.assertTrue("copy_of_folder" in self.root.target.objectIds())
        self.assertTrue(verifyObject(ILink, self.root.target.folder))
        self.assertTrue(verifyObject(IFolder, self.root.target.copy_of_folder))

        # And an another time will create a copy2_of_folder
        with assertTriggersEvents(
            "ObjectCopiedEvent",
            "ObjectWillBeAddedEvent",
            "ObjectAddedEvent",
            "ContainerModifiedEvent",
            "ObjectClonedEvent",
        ):
            with manager.copier() as copier:
                self.assertNotEqual(copier(self.root.source.folder), None)

        self.assertTrue("copy2_of_folder" in self.root.target.objectIds())
        self.assertTrue(verifyObject(IFolder, self.root.target.copy2_of_folder))
Пример #6
0
    def test_copy_content(self):
        """Copy a single content.
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectCopiedEvent',
                                  'ObjectWillBeAddedEvent',
                                  'ObjectAddedEvent',
                                  'ContainerModifiedEvent',
                                  'ObjectClonedEvent'):
            with manager.copier() as copier:
                self.assertNotEqual(copier(self.root.source.toc), None)

        self.assertTrue('toc' in self.root.source.objectIds())
        self.assertTrue('toc' in self.root.target.objectIds())
        self.assertTrue(verifyObject(IAutoTOC, self.root.target.toc))
        self.assertEqual(self.root.target.toc.get_title(), 'AutoTOC')
Пример #7
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 {}
Пример #8
0
    def test_copy_content(self):
        """Copy a single content.
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents(
            "ObjectCopiedEvent",
            "ObjectWillBeAddedEvent",
            "ObjectAddedEvent",
            "ContainerModifiedEvent",
            "ObjectClonedEvent",
        ):
            with manager.copier() as copier:
                self.assertNotEqual(copier(self.root.source.toc), None)

        self.assertTrue("toc" in self.root.source.objectIds())
        self.assertTrue("toc" in self.root.target.objectIds())
        self.assertTrue(verifyObject(IAutoTOC, self.root.target.toc))
        self.assertEqual(self.root.target.toc.get_title(), "AutoTOC")
Пример #9
0
    def test_copy_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.copier() as copier:
                self.assertIsInstance(
                    copier(self.root.source.toc),
                    ContainerError)

        self.assertEqual(self.root.target.objectIds(), [])
Пример #10
0
    def test_copy_published_content(self):
        """Copy a content that is published. It is copied, but the
        copy will be closed.
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectCopiedEvent',
                                  'ObjectWillBeAddedEvent',
                                  'ObjectAddedEvent',
                                  'ContainerModifiedEvent',
                                  'ObjectClonedEvent'):
            with manager.copier() as copier:
                self.assertNotEqual(copier(self.root.source.published_link), None)

        self.assertTrue('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.assertEqual(self.root.target.published_link.get_viewable(), None)
        self.assertNotEqual(self.root.source.published_link.get_viewable(), None)
Пример #11
0
    def test_copy_published_content(self):
        """Copy a content that is published. It is copied, but the
        copy will be closed.
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents(
            "ObjectCopiedEvent",
            "ObjectWillBeAddedEvent",
            "ObjectAddedEvent",
            "ContainerModifiedEvent",
            "ObjectClonedEvent",
        ):
            with manager.copier() as copier:
                self.assertNotEqual(copier(self.root.source.published_link), None)

        self.assertTrue("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.assertEqual(self.root.target.published_link.get_viewable(), None)
        self.assertNotEqual(self.root.source.published_link.get_viewable(), None)
Пример #12
0
    def test_copy_published_container(self):
        """Copy a container that contains published content. All
        content will be copied, and published content will be closed.
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents(
            "ObjectCopiedEvent",
            "ObjectWillBeAddedEvent",
            "ObjectAddedEvent",
            "ContainerModifiedEvent",
            "ObjectClonedEvent",
        ):
            with manager.copier() as copier:
                self.assertNotEqual(copier(self.root.source), None)

        self.assertTrue("source" in self.root.target.objectIds())
        self.assertItemsEqual(self.root.target.source.objectIds(), ["folder", "link", "published_link", "toc"])
        self.assertTrue(verifyObject(IFolder, self.root.target.source))
        self.assertTrue(verifyObject(IAutoTOC, self.root.target.source.toc))
        self.assertTrue(verifyObject(ILink, self.root.target.source.link))
        self.assertTrue(verifyObject(ILink, self.root.target.source.published_link))
        self.assertEqual(self.root.target.source.link.get_viewable(), None)
        self.assertEqual(self.root.target.source.published_link.get_viewable(), None)
Пример #13
0
    def test_copy_published_container(self):
        """Copy a container that contains published content. All
        content will be copied, and published content will be closed.
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectCopiedEvent',
                                  'ObjectWillBeAddedEvent',
                                  'ObjectAddedEvent',
                                  'ContainerModifiedEvent',
                                  'ObjectClonedEvent'):
            with manager.copier() as copier:
                self.assertNotEqual(copier(self.root.source), None)

        self.assertTrue('source' in self.root.target.objectIds())
        self.assertItemsEqual(
            self.root.target.source.objectIds(),
            ['folder', 'link', 'published_link', 'toc'])
        self.assertTrue(verifyObject(IFolder, self.root.target.source))
        self.assertTrue(verifyObject(IAutoTOC, self.root.target.source.toc))
        self.assertTrue(verifyObject(ILink, self.root.target.source.link))
        self.assertTrue(verifyObject(ILink, self.root.target.source.published_link))
        self.assertEqual(self.root.target.source.link.get_viewable(), None)
        self.assertEqual(self.root.target.source.published_link.get_viewable(), None)
Пример #14
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)
Пример #15
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)