def test_copy_outdated_ghost_folder(self): """Test creating a Ghost Folder and copying it when it is outdated. We should get a new ghost folder, that is fully ghost. """ factory = self.root.target.manage_addProduct['Silva'] factory.manage_addGhostFolder('ghost', None, haunted=self.root.folder) self.assertEqual(self.root.target.ghost.get_link_status(), None) # We delete something from the ghost manager = IContainerManager(self.root.target.ghost) with manager.deleter() as deleter: deleter(self.root.target.ghost.index) self.assertNotIn('index', self.root.target.ghost.objectIds()) # Copy the ghost in the root folder with IContainerManager(self.root).copier() as copier: self.assertNotEqual(copier(self.root.target.ghost), None) # We should have a copy self.assertIn('ghost', self.root.objectIds()) self.assertTrue(verifyObject(IGhostFolder, self.root.ghost)) self.assertEqual(self.root.ghost.get_link_status(), None) self.assertEqual(self.root.ghost.get_haunted(), self.root.folder) self.assertIn('index', self.root.ghost.objectIds()) self.assertTrue(verifyObject(IGhost, self.root.ghost.index)) self.assertEqual(self.root.ghost.index.get_link_status(), None) self.assertEqual(self.root.ghost.index.get_haunted(), self.root.folder.index)
def test_copy_outdated_ghost_folder(self): """Test creating a Ghost Folder and copying it when it is outdated. We should get a new ghost folder, that is fully ghost. """ factory = self.root.target.manage_addProduct['Silva'] factory.manage_addGhostFolder('ghost', None, haunted=self.root.folder) self.assertEqual(self.root.target.ghost.get_link_status(), None) # We delete something from the ghost manager = IContainerManager(self.root.target.ghost) with manager.deleter() as deleter: deleter(self.root.target.ghost.index) self.assertNotIn('index', self.root.target.ghost.objectIds()) # Copy the ghost in the root folder with IContainerManager(self.root).copier() as copier: self.assertNotEqual(copier(self.root.target.ghost), None) # We should have a copy self.assertIn('ghost', self.root.objectIds()) self.assertTrue(verifyObject(IGhostFolder, self.root.ghost)) self.assertEqual(self.root.ghost.get_link_status(), None) self.assertEqual(self.root.ghost.get_haunted(), self.root.folder) self.assertIn('index', self.root.ghost.objectIds()) self.assertTrue(verifyObject(IGhost, self.root.ghost.index)) self.assertEqual(self.root.ghost.index.get_link_status(), None) self.assertEqual( self.root.ghost.index.get_haunted(), self.root.folder.index)
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_delete_single(self): manager = IContainerManager(self.root.folder) with assertTriggersEvents('ObjectWillBeRemovedEvent', 'ObjectRemovedEvent', 'ContainerModifiedEvent'): with manager.deleter() as deleter: self.assertEqual(deleter(self.root.folder.toc), self.root.folder.toc) self.assertFalse('toc' in self.root.folder.objectIds())
def test_delete_published_recursive(self): """An editor can delete a folder that contains published content. """ manager = IContainerManager(self.root) with assertTriggersEvents('ObjectWillBeRemovedEvent', 'ObjectRemovedEvent', 'ContainerModifiedEvent'): with manager.deleter() as deleter: self.assertEqual(deleter(self.root.folder), self.root.folder) self.assertFalse('folder' in self.root.objectIds())
def test_delete_single(self): manager = IContainerManager(self.root.folder) with assertTriggersEvents( 'ObjectWillBeRemovedEvent', 'ObjectRemovedEvent', 'ContainerModifiedEvent'): with manager.deleter() as deleter: self.assertEqual( deleter(self.root.folder.toc), self.root.folder.toc) self.assertFalse('toc' in self.root.folder.objectIds())
def test_delete_published_recursive(self): """An author cannot delete a folder that contains published content. """ manager = IContainerManager(self.root) with assertNotTriggersEvents('ObjectWillBeRemovedEvent', 'ObjectRemovedEvent', 'ContainerModifiedEvent'): with manager.deleter() as deleter: self.assertIsInstance(deleter(self.root.folder), ContentError) self.assertTrue('folder' in self.root.objectIds())
def test_delete_published(self): """An author cannot delete published content. """ manager = IContainerManager(self.root.folder) with assertNotTriggersEvents( 'ObjectWillBeRemovedEvent', 'ObjectRemovedEvent', 'ContainerModifiedEvent'): with manager.deleter() as deleter: self.assertIsInstance( deleter(self.root.folder.published_link), ContentError) self.assertTrue('published_link' in self.root.folder.objectIds())
def test_delete_published_recursive(self): """An editor can delete a folder that contains published content. """ manager = IContainerManager(self.root) with assertTriggersEvents( 'ObjectWillBeRemovedEvent', 'ObjectRemovedEvent', 'ContainerModifiedEvent'): with manager.deleter() as deleter: self.assertEqual( deleter(self.root.folder), self.root.folder) self.assertFalse('folder' in self.root.objectIds())
def test_delete_invalid(self): manager = IContainerManager(self.root.folder) with assertNotTriggersEvents('ObjectWillBeRemovedEvent', 'ObjectRemovedEvent', 'ContainerModifiedEvent'): with manager.deleter() as deleter: self.assertIsInstance(deleter(self.root.publication), ContentError) self.assertIsInstance(deleter(self.root.toc), ContentError) self.assertIsInstance(deleter(self.root.folder), ContentError) self.assertTrue('publication' in self.root.objectIds()) self.assertTrue('toc' in self.root.objectIds()) self.assertTrue('folder' in self.root.objectIds())
def test_delete_invalid(self): manager = IContainerManager(self.root.folder) with assertNotTriggersEvents( 'ObjectWillBeRemovedEvent', 'ObjectRemovedEvent', 'ContainerModifiedEvent'): with manager.deleter() as deleter: self.assertIsInstance( deleter(self.root.publication), ContentError) self.assertIsInstance( deleter(self.root.toc), ContentError) self.assertIsInstance( deleter(self.root.folder), ContentError) self.assertTrue('publication' in self.root.objectIds()) self.assertTrue('toc' in self.root.objectIds()) self.assertTrue('folder' in self.root.objectIds())
def test_reference(self): """Test the reference created by the ghost. """ factory = self.root.manage_addProduct['Silva'] factory.manage_addGhost('ghost', None, haunted=self.root.document) ghost = self.root.ghost.get_editable() reference = getUtility(IReferenceService).get_reference( ghost, name=u"haunted") self.assertTrue(verifyObject(IReferenceValue, reference)) self.assertEqual(aq_chain(reference.target), aq_chain(self.root.document)) self.assertEqual(aq_chain(reference.source), aq_chain(ghost)) manager = IContainerManager(self.root) with manager.deleter() as deleter: deleter(self.root.document) reference = getUtility(IReferenceService).get_reference( ghost, name=u"haunted") self.assertEqual(reference, None)
def test_ghost(self): """Test simple ghost creation and life time. """ factory = self.root.manage_addProduct['Silva'] factory.manage_addGhost('ghost', None, haunted=self.root.document) version = self.root.ghost.get_editable() self.assertTrue(verifyObject(IGhost, self.root.ghost)) self.assertTrue(verifyObject(IGhostVersion, version)) self.assertEqual(version.get_link_status(), None) self.assertEqual(version.get_haunted(), self.root.document) self.assertEqual(aq_chain(version.get_haunted()), aq_chain(self.root.document)) manager = IContainerManager(self.root) with manager.deleter() as deleter: deleter(self.root.document) self.assertEqual(version.get_haunted(), None) self.assertEqual(version.get_link_status(), errors.EmptyInvalidTarget())
def test_ghost(self): """Test simple ghost creation and life time. """ factory = self.root.manage_addProduct['Silva'] factory.manage_addGhost('ghost', None, haunted=self.root.document) version = self.root.ghost.get_editable() self.assertTrue(verifyObject(IGhost, self.root.ghost)) self.assertTrue(verifyObject(IGhostVersion, version)) self.assertEqual(version.get_link_status(), None) self.assertEqual(version.get_haunted(), self.root.document) self.assertEqual( aq_chain(version.get_haunted()), aq_chain(self.root.document)) manager = IContainerManager(self.root) with manager.deleter() as deleter: deleter(self.root.document) self.assertEqual(version.get_haunted(), None) self.assertEqual(version.get_link_status(), errors.EmptyInvalidTarget())
def test_reference(self): """Test the reference created by the ghost. """ factory = self.root.manage_addProduct['Silva'] factory.manage_addGhost('ghost', None, haunted=self.root.document) ghost = self.root.ghost.get_editable() reference = getUtility(IReferenceService).get_reference( ghost, name=u"haunted") self.assertTrue(verifyObject(IReferenceValue, reference)) self.assertEqual( aq_chain(reference.target), aq_chain(self.root.document)) self.assertEqual( aq_chain(reference.source), aq_chain(ghost)) manager = IContainerManager(self.root) with manager.deleter() as deleter: deleter(self.root.document) reference = getUtility(IReferenceService).get_reference( ghost, name=u"haunted") self.assertEqual(reference, 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)