Beispiel #1
0
class CTSMPloneIntegrationTestCase(ptc.PloneTestCase):
    """
    Testing the validation on just the objects with the provided 
    mapping and other Plone integration.
    """

    def afterSetUp(self):
        self.sm = ContentTypeScopeManager()
        self.mapping = {}

    def assertScopeValid(self, accessed, name):
        self.assertTrue(self.sm.validateTargetWithMapping(
            accessed, name, self.mapping))

    def assertScopeInvalid(self, accessed, name):
        self.assertFalse(self.sm.validateTargetWithMapping(
            accessed, name, self.mapping))

    def test_0000_resolve_target(self):
        obj, path = self.sm.resolveTarget(self.folder, 'folder_contents')
        self.assertEqual(obj, 'Folder')
        self.assertEqual(path, 'folder_contents')

    def test_0001_resolve_subtarget(self):
        folder_add = self.folder.restrictedTraverse('+')
        obj, path = self.sm.resolveTarget(folder_add, 'addFolder')
        self.assertEqual(obj, 'Folder')
        self.assertEqual(path, '+/addFolder')

    def test_0002_resolve_nothing(self):
        obj, path = self.sm.resolveTarget(object(), 'addFolder')
        self.assertEqual(obj, None)
        self.assertEqual(path, None)

    def test_0100_root_scope(self):
        self.mapping = {
            'Plone Site': ['folder_contents'],
        }
        self.assertScopeValid(self.portal, 'folder_contents')
        self.assertScopeInvalid(self.portal, 'manage')

    def test_0101_folder_scope(self):
        self.mapping = {
            'Folder': ['folder_contents'],
        }
        self.assertScopeValid(self.folder, 'folder_contents')

    def test_0201_browser_view(self):
        self.mapping = {
            'Folder': ['+/addFile', 'folder_contents'],
        }
        # Adding views.
        folder_add = self.folder.restrictedTraverse('+')
        self.assertScopeValid(folder_add, 'addFile')
        self.assertScopeInvalid(folder_add, 'addFolder')
        self.assertScopeInvalid(self.folder, 'addFile')

        # For whatever reason this happened, but still forbidden by
        # scope restrictions.
        portal_add = self.portal.unrestrictedTraverse('+')
        self.assertScopeInvalid(portal_add, 'addFile')

    def test_0301_asterisk_ending(self):
        self.mapping = {
            'Folder': ['folder*contents', 'test_*'],
            'Plone Site': ['test/test_*', 'test/view*me', 'example/*'],
        }

        self.assertScopeInvalid(self.folder, 'folder_contents')
        self.assertScopeInvalid(self.folder, 'test_view')
        self.assertScopeInvalid(self.folder, 'test_')

        self.assertScopeInvalid(self.portal, 'test_')
        self.assertScopeInvalid(self.portal, 'test/test')
        self.assertScopeInvalid(self.portal, 'test/view_me')
        self.assertScopeValid(self.portal, 'test/test_')
        self.assertScopeValid(self.portal, 'test/test_view')
        self.assertScopeValid(self.portal, 'test/test_page')

        # invalid for now
        self.assertScopeInvalid(self.portal, 'example')
        self.assertScopeValid(self.portal, 'example/')
        self.assertScopeValid(self.portal, 'example/a')