Exemplo n.º 1
0
    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'}})
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
    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'}})
Exemplo n.º 4
0
    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'}})
Exemplo n.º 5
0
    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()), [])
Exemplo n.º 6
0
    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'}})
Exemplo n.º 7
0
    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()), [])
Exemplo n.º 8
0
    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()), [])
Exemplo n.º 9
0
    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'}})
Exemplo n.º 10
0
    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'}})
Exemplo n.º 11
0
    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'}})