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)
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)