def test_delete_content(self): with Reset(): with SimpleTransaction(): factory = self.root.manage_addProduct['Silva'] factory.manage_addFolder('folder', 'Folder') factory = self.root.folder.manage_addProduct['Silva'] factory.manage_addMockupVersionedContent('document', 'Document') with SimpleTransaction(): document_id = self.get_id(self.root.folder.document) self.root.folder.manage_delObjects(['document']) request = TestRequest() invalidation = Invalidation(request) self.assertEqual(request.cookies, {}) self.assertEqual( list(invalidation.get_changes()), [{'action': 'remove', 'container': self.get_id(self.root.folder), 'content': document_id, 'listing': 'publishables', 'interface': 'publishables', }, {'action': 'update', 'container': self.get_id(self.root), 'content': self.get_id(self.root.folder), 'listing': 'publishables', 'interface': 'containers', 'position': 1}]) # A cookie is set (still) self.assertEqual( request.response.cookies, {'silva.listing.invalidation': {'path': '/root', 'value': '1'}})
def get_container_changes(helper, data): serializer = ContentSerializer(helper, helper.request) container = serializer.get_id(helper.context) invalidations = Invalidation(helper.request) added = {} changes = {} updated = [] removed = [] for info in invalidations.get_changes( filter_func=lambda change: change['container'] == container): if info['action'] == 'remove': removed.append(info['content']) else: if info['listing'] is None: continue content_data = serializer(id=info['content']) content_data['position'] = info['position'] if info['action'] == 'add': added.setdefault(info['listing'], []).append(content_data) else: updated.append(content_data) if removed: changes['remove'] = removed if updated: changes['update'] = updated if added: changes['add'] = added if changes: data['content']['actions'].update(changes)
def test_modify_modify_asset(self): with Reset(): with SimpleTransaction(): factory = self.root.manage_addProduct['Silva'] factory.manage_addFolder('folder', 'Folder') factory = self.root.folder.manage_addProduct['Silva'] factory.manage_addFile('data_file', 'Data file') with SimpleTransaction(): data_file = self.root.folder.data_file with assertTriggersEvents('ObjectModifiedEvent'): data_file.set_text('Edit content') with assertTriggersEvents('ObjectModifiedEvent'): data_file.set_text('Actually, edit again the content') with assertTriggersEvents('ObjectModifiedEvent'): data_file.set_text('I am not sure at all') request = TestRequest() invalidation = Invalidation(request) self.assertEqual(request.cookies, {}) self.assertEqual( list(invalidation.get_changes()), [{'action': 'update', 'listing': 'assets', 'interface': 'assets', 'container': self.get_id(self.root.folder), 'content': self.get_id(data_file), 'position': -1}]) # A cookie is set self.assertEqual( request.response.cookies, {'silva.listing.invalidation': {'path': '/root', 'value': '2'}})
def test_title_title_content(self): with Reset(): with SimpleTransaction(): factory = self.root.manage_addProduct['Silva'] factory.manage_addFolder('folder', 'Folder') factory = self.root.folder.manage_addProduct['Silva'] factory.manage_addMockupVersionedContent('document', 'Document') with SimpleTransaction(): content = self.root.folder.document with assertTriggersEvents('MetadataModifiedEvent'): content.set_title('New document') with assertTriggersEvents('MetadataModifiedEvent'): content.get_editable().set_title('Outdated Document') request = TestRequest() invalidation = Invalidation(request) self.assertEqual(request.cookies, {}) self.assertEqual( list(invalidation.get_changes()), [{'action': 'update', 'listing': 'publishables', 'interface': 'publishables', 'container': self.get_id(self.root.folder), 'content': self.get_id(content), 'position': 1}]) # A cookie is set self.assertEqual( request.response.cookies, {'silva.listing.invalidation': {'path': '/root', 'value': '1'}})
def test_add_asset(self): with SimpleTransaction(): factory = self.root.manage_addProduct['Silva'] factory.manage_addFile('examples_txt', 'Examples') request = TestRequest() invalidation = Invalidation(request) self.assertEqual(request.cookies, {}) self.assertEqual( list(invalidation.get_changes()), [{'action': 'add', 'interface': 'assets', 'listing': 'assets', 'container': self.get_id(self.root), 'content': self.get_id(self.root.examples_txt), 'position': -1}, {'action': 'update', 'interface': 'containers', 'listing': 'publishables', 'container': self.get_id(aq_parent(self.root)), 'content': self.get_id(self.root), 'position': -1}]) # A cookie is set self.assertEqual( request.response.cookies, {'silva.listing.invalidation': {'path': '/root', 'value': '2'}}) # Now if we ask the next changes, there are none request = TestRequest() request.cookies = {'silva.listing.invalidation': '2'} invalidation = Invalidation(request) self.assertEqual(list(invalidation.get_changes()), [])
def test_rename_content(self): with Reset(): with SimpleTransaction(): factory = self.root.manage_addProduct['Silva'] factory.manage_addFolder('folder', 'Folder') factory = self.root.folder.manage_addProduct['Silva'] factory.manage_addMockupVersionedContent('padding', 'Padding') factory.manage_addMockupVersionedContent('document', 'Document') with SimpleTransaction(): self.root.folder.manage_renameObject('document', 'stuff') request = TestRequest() invalidation = Invalidation(request) self.assertEqual(request.cookies, {}) # We should have two update changes self.assertEqual( list(invalidation.get_changes()), [{'action': 'update', 'container': self.get_id(self.root.folder), 'content': self.get_id(self.root.folder.stuff), 'listing': 'publishables', 'interface': 'publishables', 'position': 2}, {'action': 'update', 'container': self.get_id(self.root), 'content': self.get_id(self.root.folder), 'listing': 'publishables', 'interface': 'containers', 'position': 1}]) # A cookie is set (still) self.assertEqual( request.response.cookies, {'silva.listing.invalidation': {'path': '/root', 'value': '1'}})
def test_nothing(self): request = TestRequest() invalidation = Invalidation(request) self.assertEqual(invalidation.get_cookie_path(), '/root') self.assertEqual(list(invalidation.get_changes()), []) self.assertEqual(request.response.cookies, {}) # This didn't change. self.assertEqual(list(invalidation.get_changes()), [])
def test_transaction_failed(self): with self.assertRaises(ValueError): with SimpleTransaction(): factory = self.root.manage_addProduct['Silva'] factory.manage_addFolder('folder', 'Folder') raise ValueError # No changes where recorded since the transaction failed. request = TestRequest() invalidation = Invalidation(request) self.assertEqual(invalidation.get_cookie_path(), '/root') self.assertEqual(list(invalidation.get_changes()), []) self.assertEqual(request.response.cookies, {}) # This didn't change. self.assertEqual(list(invalidation.get_changes()), [])
def test_modify_delete_folder(self): with Reset(): with SimpleTransaction(): factory = self.root.manage_addProduct['Silva'] factory.manage_addFolder('folder', 'Folder') factory = self.root.folder.manage_addProduct['Silva'] factory.manage_addMockupVersionedContent('document', 'Document') with SimpleTransaction(): factory.manage_addImage('image', 'Image') with assertTriggersEvents('MetadataModifiedEvent'): self.root.folder.document.set_title('New document') folder_id = self.get_id(self.root.folder) document_id = self.get_id(self.root.folder.document) self.root.manage_delObjects(['folder']) request = TestRequest() invalidation = Invalidation(request) self.assertEqual(request.cookies, {}) # In case of a container delete, all event inside the # containers must not appear, except delete of previous content. self.assertEqual( list(invalidation.get_changes()), [{'action': 'remove', 'listing': 'publishables', 'interface': 'publishables', 'container': folder_id, 'content': document_id}, {'action': 'remove', 'listing': 'publishables', 'interface': 'containers', 'container': self.get_id(self.root), 'content': folder_id}, {'action': 'update', 'listing': 'publishables', 'interface': 'containers', 'container': self.get_id(aq_parent(self.root)), 'content': self.get_id(self.root), 'position': -1}]) # A cookie is set self.assertEqual( request.response.cookies, {'silva.listing.invalidation': {'path': '/root', 'value': '7'}})
def test_filter_func(self): with Reset(): with SimpleTransaction(): factory = self.root.manage_addProduct['Silva'] factory.manage_addFolder('folder', 'Folder') factory = self.root.folder.manage_addProduct['Silva'] factory.manage_addImage('image', 'Image') with SimpleTransaction(): factory.manage_addMockupVersionedContent('document', 'Document') factory.manage_addFolder('images', 'Image Folder') factory.manage_addPublication('publication', 'Publication') self.root.folder.publication.set_title('Maybe not') self.root.folder.manage_delObjects(['image', 'publication']) request = TestRequest() invalidation = Invalidation(request) self.assertEqual(request.cookies, {}) # We ask only changes about container. self.assertEqual( list(invalidation.get_changes( filter_func=lambda c: c['interface'] == 'containers')), [{'action': 'update', 'listing': 'publishables', 'interface': 'containers', 'container': self.get_id(self.root), 'content': self.get_id(self.root.folder), 'position': 1}, {'action': 'add', 'listing': 'publishables', 'interface': 'containers', 'container': self.get_id(self.root.folder), 'content': self.get_id(self.root.folder.images), 'position': -1}]) # A cookie is set self.assertEqual( request.response.cookies, {'silva.listing.invalidation': {'path': '/root', 'value': '13'}})
def test_modify_delete_asset(self): with Reset(): with SimpleTransaction(): factory = self.root.manage_addProduct['Silva'] factory.manage_addFolder('folder', 'Folder') factory = self.root.folder.manage_addProduct['Silva'] factory.manage_addImage('image', 'Data Image') with SimpleTransaction(): image = self.root.folder.image image_id = self.get_id(image) with assertTriggersEvents('MetadataModifiedEvent'): image.set_title('New Image') self.root.folder.manage_delObjects(['image']) request = TestRequest() invalidation = Invalidation(request) self.assertEqual(request.cookies, {}) self.assertEqual( list(invalidation.get_changes()), [{'action': 'remove', 'listing': 'assets', 'interface': 'assets', 'container': self.get_id(self.root.folder), 'content': image_id}, {'action': 'update', 'container': self.get_id(self.root), 'content': self.get_id(self.root.folder), 'listing': 'publishables', 'interface': 'containers', 'position': 1},]) # A cookie is set self.assertEqual( request.response.cookies, {'silva.listing.invalidation': {'path': '/root', 'value': '2'}})