def test_internal_breaches_are_dropped(self):
        folder1 = self.portal.folder1
        create(folder1, 'Document', id='doc5', title='Test Page 5')
        doc1 = self.portal.doc1
        doc4 = self.portal.folder1.doc4
        doc5 = self.portal.folder1.doc5
        self._set_text(doc1, '<a href="folder1">f1</a>')
        self._set_text(doc4, '<a href="doc5">d5</a><a href="../doc1">d1</a>')
        self._set_text(doc5, '<a href="../folder1">f1</a>')

        doc4_breaches = set([r.to_object for r in getOutgoingLinks(doc4)])
        # the order of breaches is non-deterministic
        self.assertEqual(set([doc1, doc5]), doc4_breaches)
        self.assertEqual(
            [r.to_object for r in getOutgoingLinks(doc5)], [folder1])
        self.assertEqual(
            [r.to_object for r in getOutgoingLinks(doc1)], [folder1])
        view = DeleteConfirmationInfo(self.portal, self.request)
        self.assertEqual(len(view.get_breaches([doc4])), 0)
        self.assertEqual(len(view.get_breaches([doc5])), 1)
        self.assertEqual(len(view.get_breaches([doc4, doc5])), 0)
        self.assertEqual(len(view.get_breaches([folder1])), 1)
        self.assertEqual(len(view.get_breaches([doc1])), 1)
        self.assertEqual(len(view.get_breaches([doc1, folder1])), 0)

        view = folder1.restrictedTraverse('delete_confirmation')
        self.assertIn('Potential link breakage', view())
        view = folder1.restrictedTraverse('delete_confirmation_info')
        self.assertIn('Potential link breakage', view())
        view = doc4.restrictedTraverse('delete_confirmation')
        self.assertNotIn('Potential link breakage', view())
        view = doc4.restrictedTraverse('delete_confirmation_info')
        self.assertNotIn('Potential link breakage', view())
Example #2
0
    def test_internal_breaches_are_dropped(self):
        folder1 = self.portal.folder1
        create(folder1, 'Document', id='doc5', title='Test Page 5')
        doc1 = self.portal.doc1
        doc4 = self.portal.folder1.doc4
        doc5 = self.portal.folder1.doc5
        self._set_text(doc1, '<a href="folder1">f1</a>')
        self._set_text(doc4, '<a href="doc5">d5</a><a href="../doc1">d1</a>')
        self._set_text(doc5, '<a href="../folder1">f1</a>')

        doc4_breaches = set([r.to_object for r in getOutgoingLinks(doc4)])
        # the order of breaches is non-deterministic
        self.assertEqual(set([doc1, doc5]), doc4_breaches)
        self.assertEqual([r.to_object for r in getOutgoingLinks(doc5)],
                         [folder1])
        self.assertEqual([r.to_object for r in getOutgoingLinks(doc1)],
                         [folder1])
        view = DeleteConfirmationInfo(self.portal, self.request)
        self.assertEqual(len(view.get_breaches([doc4])), 0)
        self.assertEqual(len(view.get_breaches([doc5])), 1)
        self.assertEqual(len(view.get_breaches([doc4, doc5])), 0)
        self.assertEqual(len(view.get_breaches([folder1])), 1)
        self.assertEqual(len(view.get_breaches([doc1])), 1)
        self.assertEqual(len(view.get_breaches([doc1, folder1])), 0)

        view = folder1.restrictedTraverse('delete_confirmation')
        self.assertIn('Potential link breakage', view())
        view = folder1.restrictedTraverse('delete_confirmation_info')
        self.assertIn('Potential link breakage', view())
        view = doc4.restrictedTraverse('delete_confirmation')
        self.assertNotIn('Potential link breakage', view())
        view = doc4.restrictedTraverse('delete_confirmation_info')
        self.assertNotIn('Potential link breakage', view())
Example #3
0
    def test_file_reference_linkintegrity_page_is_shown(self):
        doc1 = self.portal.doc1
        file2 = testing.create(self.portal,
                               'File',
                               id='file2',
                               file=testing.GIF)

        self.assertFalse(hasOutgoingLinks(doc1))
        self._set_text(doc1, '<a href="file2">A File</a>')
        self.assertTrue(hasOutgoingLinks(doc1))
        self.assertIn('file2', self.portal.objectIds())

        token = self._get_token(file2)
        self.request['_authenticator'] = token

        # Make changes visible to test browser
        transaction.commit()

        self.browser.handleErrors = True
        self.browser.addHeader(
            'Authorization',
            'Basic {0:s}:{1:s}'.format(TEST_USER_NAME, TEST_USER_PASSWORD))

        delete_url = '{0:s}/delete_confirmation?_authenticator={1:s}'.format(
            file2.absolute_url(), token)

        # Try to remove but cancel
        self.browser.open(delete_url)

        # Validate text
        self.assertIn('Potential link breakage', self.browser.contents)
        self.assertIn('<a href="http://nohost/plone/doc1">Test Page 1</a>',
                      self.browser.contents)
        self.assertIn('Would you like to delete it anyway?',
                      self.browser.contents)

        # Click cancel button, item should stay in place
        # FIXME! This fails in Archetypes because the redirect
        # plone.app.content.browser.actions.DeleteConfirmationForm.handle_cancel
        # is broken for AT-content.
        self.browser.getControl(name='form.buttons.Cancel').click()
        self.assertEqual(self.browser.url, file2.absolute_url() + '/view')
        self.assertIn('Removal cancelled.', self.browser.contents)
        self.assertIn('file2', self.portal.objectIds())

        # Try to remove and confirm
        self.browser.open(delete_url)
        self.browser.getControl(name='form.buttons.Delete').click()
        self.assertNotIn('file2', self.portal.objectIds())
Example #4
0
    def test_broken_references(self):
        # create a temporary document to test with
        doc1a = testing.create(self.portal, 'Document', id='doc1a')
        doc1 = self.portal.doc1

        self.assertEqual(len(list(getOutgoingLinks(doc1))), 0)
        self._set_text(doc1, '<a href="doc1a">Doc 1a</a>')
        self.assertEqual(len(list(getOutgoingLinks(doc1))), 1)
        self.assertEqual([l.to_object for l in getOutgoingLinks(doc1)],
                         [self.portal.doc1a])

        # Now delete the target item, suppress events and test again,
        # the reference should be gone now.
        self.portal._delObject(doc1a.id, suppress_events=True)
        self.assertEqual([l.to_object for l in getOutgoingLinks(doc1)], [None])
    def test_broken_references(self):
        # create a temporary document to test with
        doc1a = testing.create(self.portal, 'Document', id='doc1a')
        doc1 = self.portal.doc1

        self.assertEqual(len(list(getOutgoingLinks(doc1))), 0)
        self._set_text(doc1, '<a href="doc1a">Doc 1a</a>')
        self.assertEqual(len(list(getOutgoingLinks(doc1))), 1)
        self.assertEqual([l.to_object for l in getOutgoingLinks(doc1)],
                         [self.portal.doc1a])

        # Now delete the target item, suppress events and test again,
        # the reference should be gone now.
        self.portal._delObject(doc1a.id, suppress_events=True)
        self.assertEqual([l.to_object for l in getOutgoingLinks(doc1)], [None])
    def test_file_reference_linkintegrity_page_is_shown(self):
        doc1 = self.portal.doc1
        file2 = testing.create(self.portal, 'File',
                               id='file2', file=testing.GIF)

        self.assertFalse(hasOutgoingLinks(doc1))
        self._set_text(doc1, '<a href="file2">A File</a>')
        self.assertTrue(hasOutgoingLinks(doc1))
        self.assertIn('file2', self.portal.objectIds())

        token = self._get_token(file2)
        self.request['_authenticator'] = token

        # Make changes visible to test browser
        transaction.commit()

        self.browser.handleErrors = True
        self.browser.addHeader(
            'Authorization',
            'Basic {0:s}:{1:s}'.format(TEST_USER_NAME, TEST_USER_PASSWORD))

        delete_url = '{0:s}/delete_confirmation?_authenticator={1:s}'.format(
            file2.absolute_url(), token)

        # Try to remove but cancel
        self.browser.open(delete_url)

        # Validate text
        self.assertIn('Potential link breakage', self.browser.contents)
        self.assertIn('<a href="http://nohost/plone/doc1">Test Page 1</a>',
                      self.browser.contents)
        self.assertIn('Would you like to delete it anyway?',
                      self.browser.contents)

        # Click cancel button, item should stay in place
        # FIXME! This fails in Archetypes because the redirect
        # plone.app.content.browser.actions.DeleteConfirmationForm.handle_cancel
        # is broken for AT-content.
        self.browser.getControl(name='form.buttons.Cancel').click()
        self.assertEqual(self.browser.url, file2.absolute_url() + '/view')
        self.assertIn('Removal cancelled.', self.browser.contents)
        self.assertIn('file2', self.portal.objectIds())

        # Try to remove and confirm
        self.browser.open(delete_url)
        self.browser.getControl(name='form.buttons.Delete').click()
        self.assertNotIn('file2', self.portal.objectIds())
Example #7
0
    def test_file_reference_linkintegrity_page_is_shown(self):
        doc1 = self.portal.doc1
        file2 = testing.create(self.portal,
                               'File',
                               id='file2',
                               file=testing.GIF)

        self._set_text(doc1, '<a href="file2">A File</a>')
        self.assertEqual(IReferenceable(doc1).getReferences(), [file2])
        self.assertIn('file2', self.portal.objectIds())

        token = self._get_token(file2)
        self.request['_authenticator'] = token

        # Make changes visible to test browser
        transaction.commit()

        self.browser.handleErrors = True
        self.browser.addHeader(
            'Authorization',
            'Basic {0:s}:{1:s}'.format(TEST_USER_NAME, TEST_USER_PASSWORD))

        delete_url = '{0:s}/object_delete?_authenticator={1:s}'.format(
            file2.absolute_url(), token)

        # Try to remove but cancel
        self.browser.open(delete_url)

        # Validate text
        self.assertIn('Potential link breakage', self.browser.contents)
        self.assertIn('removeConfirmationAction', self.browser.contents)
        self.assertIn('<a href="http://nohost/plone/doc1">Test Page 1</a>',
                      self.browser.contents)
        self.assertIn('Would you like to delete it anyway?',
                      self.browser.contents)

        # Click cancel button, item should stay in place
        self.browser.getControl(name='cancel').click()
        self.assertEqual(self.browser.url, self.portal.absolute_url())
        self.assertIn('Removal cancelled.', self.browser.contents)
        self.assertIn('file2', self.portal.objectIds())

        # Try to remove and confirm
        self.browser.open(delete_url)
        self.browser.getControl(name='delete').click()
        self.assertNotIn('file2', self.portal.objectIds())
Example #8
0
    def test_file_reference_throws_exception(self):
        """This tests the behaviour when removing a referenced file."""

        doc1 = self.portal.doc1
        file2 = testing.create(self.portal,
                               'File',
                               id='file2',
                               file=testing.GIF)

        self._set_text(doc1, '<a href="file2">A File</a>')
        self.assertEqual(IReferenceable(doc1).getReferences(), [file2])
        self.assertIn('file2', self.portal.objectIds())

        token = self._get_token(file2)
        self.request['_authenticator'] = token

        # Throws exception which actually should abort transaction
        view = file2.restrictedTraverse('@@object_delete')
        self.assertRaises(exceptions.LinkIntegrityNotificationException, view)
Example #9
0
    def test_broken_references(self):
        # create a temporary document to test with
        doc1a = testing.create(self.portal, 'Document', id='doc1a')
        doc1 = self.portal.doc1

        self.assertEqual(len(IReferenceable(doc1).getReferences()), 0)
        self._set_text(doc1, '<a href="doc1a">Doc 1a</a>')
        self.assertEqual(len(IReferenceable(doc1).getReferences()), 1)
        self.assertEqual(IReferenceable(doc1).getReferences()[0].id,
                         self.portal.doc1a.id)

        # Now delete the target item, suppress events and test again,
        # the reference should be broken now.
        self.portal._delObject(doc1a.id, suppress_events=True)
        self.assertEqual(IReferenceable(doc1).getReferences(), [None])

        # If we now try to update the linking document again in order to
        # remove the link, things used to break raising a
        # ``ReferenceException``.  This should be handled more
        # gracefully now:
        self._set_text(doc1, 'foo!')
        self.assertEqual(IReferenceable(doc1).getReferences(), [])