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))
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)
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)
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(), [])
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))
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')
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_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")
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(), [])
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)
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)
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)
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)
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)