def test_folder(self):
        """When pasting a folder as a ghost, its content is ghosted
        and any versioned content (ghost) in it are published.
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectWillBeAddedEvent',
                                  'ObjectAddedEvent',
                                  'ContainerModifiedEvent'):
            with manager.ghoster() as ghoster:
                ghost = ghoster(self.root.source)

        self.assertTrue(verifyObject(IGhostFolder, ghost))
        self.assertEqual(ghost.get_link_status(), None)
        self.assertEqual(ghost.get_haunted(), self.root.source)
        self.assertIn('source', self.root.target.objectIds())

        # The ghost folder is created inside the target folder and is
        # already haunting the source.
        ghost = self.root.target.source
        self.assertTrue(verifyObject(IGhostFolder, ghost))
        self.assertEqual(ghost.get_link_status(), None)
        self.assertEqual(ghost.get_haunted(), self.root.source)
        self.assertItemsEqual(
            ghost.objectIds(),
            ['toc', 'data', 'folder', 'logo'])
        self.assertTrue(verifyObject(IGhost, ghost.toc))
        self.assertEqual(ghost.toc.get_haunted(), self.root.source.toc)
        self.assertTrue(verifyObject(IGhost, ghost.data))
        self.assertEqual(ghost.data.get_haunted(), self.root.source.data)
        self.assertEqual(ghost.data.is_published(), True)
        self.assertTrue(verifyObject(IGhostFolder, ghost.folder))
        self.assertEqual(ghost.folder.get_haunted(), self.root.source.folder)
    def test_asset(self):
        """Pasting an asset as a ghost asset.
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectWillBeAddedEvent',
                                  'ObjectAddedEvent',
                                  'ContainerModifiedEvent'):
            with manager.ghoster() as ghoster:
                ghost = ghoster(self.root.source.logo)

        self.assertTrue(verifyObject(IGhostAsset, ghost))
        self.assertIn('logo', self.root.target.objectIds())
        self.assertEqual(ghost.get_link_status(), None)
        self.assertEqual(ghost.get_haunted(), self.root.source.logo)
    def test_other(self):
        """Pasting a content that doesn't have a ghost
        implementation. It should be copied.
        """
        factory = self.root.source.manage_addProduct['Silva']
        factory.manage_addMockupNonPublishable('stuff', 'Stuff')
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectWillBeAddedEvent',
                                  'ObjectAddedEvent',
                                  'ContainerModifiedEvent'):
            with manager.ghoster() as ghoster:
                ghost = ghoster(self.root.source.stuff)

        self.assertTrue(verifyObject(IMockupNonPublishable, ghost))
        self.assertIn('stuff', self.root.target.objectIds())
    def test_invalid(self):
        """Pasting a content as a ghost folder that contains a content
        with an invalid identifier.
        """
        self.root.source.manage_renameObject('folder', 'index')
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectWillBeAddedEvent',
                                  'ObjectAddedEvent',
                                  'ContainerModifiedEvent'):
            with manager.ghoster() as ghoster:
                error = ghoster(self.root.source)

        self.assertTrue(verifyObject(IContentErrorBundle, error))
        self.assertEqual(error.content, self.root.target.source)
        self.assertEqual(error.reason, u'Error while synchronizing the Ghost Folder: not all its content have been updated properly.')
        self.assertEqual(len(error.errors), 1)
    def test_content(self):
        """When pasting a content as a regular ghost, it doesn't get
        published.
        """
        manager = IContainerManager(self.root.target)
        with assertTriggersEvents('ObjectWillBeAddedEvent',
                                  'ObjectAddedEvent',
                                  'ContainerModifiedEvent'):
            with manager.ghoster() as ghoster:
                ghost = ghoster(self.root.source.data)

        self.assertTrue(verifyObject(IGhost, ghost))
        self.assertIn('data', self.root.target.objectIds())
        self.assertEqual(ghost.get_haunted(), self.root.source.data)
        self.assertEqual(ghost.is_published(), False)
        self.assertEqual(ghost.get_viewable(), None)

        version = ghost.get_editable()
        self.assertTrue(verifyObject(IGhostVersion, version))
        self.assertEqual(version.get_link_status(), None)
        self.assertEqual(version.get_haunted(), self.root.source.data)
Exemplo n.º 6
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)
Exemplo n.º 7
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)