Ejemplo n.º 1
0
    def test_ajax_tile(self):
        # ``ajax_tile`` is the server side bdajax implementation for cone.
        # Using ``bdajax.action`` with cone renders tiles by action name.
        with self.layer.hook_tile_reg():

            @tile(name='testtile')
            class TestTile(Tile):
                def render(self):
                    return 'rendered test tile'

        root = get_root()
        request = self.layer.new_request()
        request.params['bdajax.action'] = 'testtile'
        request.params['bdajax.mode'] = 'replace'
        request.params['bdajax.selector'] = '.foo'

        # Fails unauthenticated, since default permission for tiles is 'view'
        self.assertEqual(ajax_tile(root, request), {})
        self.assertEqual(request.response.status, '403 Forbidden')

        # Authenticate and test again
        with self.layer.authenticated('max'):
            res = ajax_tile(root, request)
        self.assertEqual(
            res, {
                'continuation': False,
                'payload': 'rendered test tile',
                'mode': 'replace',
                'selector': '.foo'
            })

        # Test with error raising tile
        with self.layer.hook_tile_reg():

            @tile(name='errortile')
            class ErrorTile(Tile):
                def render(self):
                    raise Exception('Error while rendering')

        request = self.layer.new_request()
        request.params['bdajax.action'] = 'errortile'
        request.params['bdajax.mode'] = 'replace'
        request.params['bdajax.selector'] = '.foo'

        with self.layer.authenticated('max'):
            res = ajax_tile(root, request)
        self.assertEqual(res['payload'], '')
        self.assertEqual(res['mode'], 'NONE')
        self.assertEqual(res['selector'], 'NONE')
        self.assertEqual(res['continuation'][0]['flavor'], 'error')
        self.assertEqual(res['continuation'][0]['type'], 'message')
        self.assertEqual(res['continuation'][0]['selector'], None)
        expected = 'Exception: Error while rendering'
        self.assertTrue(res['continuation'][0]['payload'].find(expected) > -1)
Ejemplo n.º 2
0
    def test_ajax_tile(self):
        # ``ajax_tile`` is the server side bdajax implementation for cone.
        # Using ``bdajax.action`` with cone renders tiles by action name.
        with self.layer.hook_tile_reg():
            @tile(name='testtile')
            class TestTile(Tile):
                def render(self):
                    return 'rendered test tile'

        request = self.layer.new_request()
        request.params['bdajax.action'] = 'testtile'
        request.params['bdajax.mode'] = 'replace'
        request.params['bdajax.selector'] = '.foo'

        # Fails unauthenticated, since default permission for tiles is 'view'
        self.assertEqual(ajax_tile(root, request), {})
        self.assertEqual(request.response.status, '403 Forbidden')

        # Authenticate and test again
        with self.layer.authenticated('max'):
            res = ajax_tile(root, request)
        self.assertEqual(res, {
            'continuation': False,
            'payload': 'rendered test tile',
            'mode': 'replace',
            'selector': '.foo'
        })

        # Test with error raising tile
        with self.layer.hook_tile_reg():
            @tile(name='errortile')
            class ErrorTile(Tile):
                def render(self):
                    raise Exception('Error while rendering')

        request = self.layer.new_request()
        request.params['bdajax.action'] = 'errortile'
        request.params['bdajax.mode'] = 'replace'
        request.params['bdajax.selector'] = '.foo'

        with self.layer.authenticated('max'):
            res = ajax_tile(root, request)
        self.assertEqual(res['payload'], '')
        self.assertEqual(res['mode'], 'NONE')
        self.assertEqual(res['selector'], 'NONE')
        self.assertEqual(res['continuation'][0]['flavor'], 'error')
        self.assertEqual(res['continuation'][0]['type'], 'message')
        self.assertEqual(res['continuation'][0]['selector'], None)
        expected = 'Exception: Error while rendering'
        self.assertTrue(res['continuation'][0]['payload'].find(expected) > -1)
Ejemplo n.º 3
0
    def test_ajax_continue(self):
        with self.layer.hook_tile_reg():
            @tile(name='testtile2')
            class TestTile(Tile):
                def render(self):
                    ajax_continue(
                        self.request,
                        AjaxAction('target', 'name', 'mode', 'selector')
                    )
                    return u''

        request = self.layer.new_request()
        request.params['bdajax.action'] = 'testtile2'
        request.params['bdajax.mode'] = 'replace'
        request.params['bdajax.selector'] = '.foo'

        with self.layer.authenticated('max'):
            self.assertEqual(ajax_tile(root, request), {
                'continuation': [{
                    'mode': 'mode',
                    'selector': 'selector',
                    'type': 'action',
                    'target': 'target',
                    'name': 'name'
                }],
                'payload': u'',
                'mode': 'replace',
                'selector': '.foo'
            })
Ejemplo n.º 4
0
    def test_remove_role(self):
        root = SharingNode(name='root')
        child = root['child'] = SharingNode()
        child.principal_roles['viewer'] = ['admin', 'manager']
        child.principal_roles['editor'] = ['admin']
        child.principal_roles['otheruser'] = ['manager']

        # Remove role for user
        request = self.layer.new_request()
        request.params['id'] = 'viewer'
        request.params['role'] = 'manager'
        request.params['bdajax.action'] = 'remove_principal_role'
        request.params['bdajax.mode'] = 'NONE'
        request.params['bdajax.selector'] = 'NONE'

        # Nothing happens if success
        with self.layer.authenticated('manager'):
            res = ajax_tile(child, request)
        self.assertEqual(res, {
            'continuation': False,
            'payload': u'',
            'mode': 'NONE',
            'selector': 'NONE'
        })

        # Principal roles has changed
        self.assertEqual(child.principal_roles, {
            'viewer': ['admin'],
            'editor': ['admin'],
            'otheruser': ['manager']
        })

        # Principal id gets removed if no more roles left
        request.params['id'] = 'otheruser'
        request.params['role'] = 'manager'
        with self.layer.authenticated('manager'):
            res = ajax_tile(child, request)
        self.assertEqual(res, {
            'continuation': False,
            'payload': u'',
            'mode': 'NONE',
            'selector': 'NONE'
        })

        self.assertEqual(child.principal_roles, {
            'viewer': ['admin'],
            'editor': ['admin']
        })

        # If an error occurs, a message gets displayed.
        # Inexistent role
        request.params['id'] = 'viewer'
        request.params['role'] = 'inexistent'
        with self.layer.authenticated('manager'):
            res = ajax_tile(child, request)
        self.assertEqual(res, {
            'continuation': [{
                'flavor': 'error',
                'type': 'message',
                'payload': u"Can not remove role 'inexistent' for principal 'viewer'",
                'selector': None
            }],
            'payload': u'',
            'mode': 'NONE',
            'selector': 'NONE'
        })

        # Inexistent userid
        request = self.layer.new_request()
        request.params['id'] = 'foo'
        request.params['role'] = 'manager'
        request.params['bdajax.action'] = 'remove_principal_role'
        request.params['bdajax.mode'] = 'NONE'
        request.params['bdajax.selector'] = 'NONE'
        with self.layer.authenticated('manager'):
            res = ajax_tile(child, request)
        self.assertEqual(res, {
            'continuation': [{
                'flavor': 'error',
                'type': 'message',
                'payload': u"Can not remove role 'manager' for principal 'foo'",
                'selector': None
            }],
            'payload': u'',
            'mode': 'NONE',
            'selector': 'NONE'
        })
Ejemplo n.º 5
0
    def test_add_role(self):
        root = SharingNode(name='root')
        child = root['child'] = SharingNode()
        child.principal_roles['viewer'] = ['admin']
        child.principal_roles['editor'] = ['admin']

        # Add role for user
        request = self.layer.new_request()
        request.params['id'] = 'viewer'
        request.params['role'] = 'manager'
        request.params['bdajax.action'] = 'add_principal_role'
        request.params['bdajax.mode'] = 'NONE'
        request.params['bdajax.selector'] = 'NONE'

        # Nothing happens if success
        with self.layer.authenticated('manager'):
            res = ajax_tile(child, request)
        self.assertEqual(res, {
            'continuation': False,
            'payload': u'',
            'mode': 'NONE',
            'selector': 'NONE'
        })

        # Principal roles have changed
        self.assertEqual(len(child.principal_roles), 2)
        self.assertEqual(
            sorted(child.principal_roles['viewer']),
            ['admin', 'manager']
        )
        self.assertEqual(child.principal_roles['editor'], ['admin'])

        # Add role for user not added yet
        request.params['id'] = 'otheruser'
        request.params['role'] = 'manager'
        with self.layer.authenticated('manager'):
            res = ajax_tile(child, request)
        self.assertEqual(res, {
            'continuation': False,
            'payload': u'',
            'mode': 'NONE',
            'selector': 'NONE'
        })

        self.assertEqual(len(child.principal_roles), 3)
        self.assertEqual(
            sorted(child.principal_roles['viewer']),
            ['admin', 'manager']
        )
        self.assertEqual(child.principal_roles['editor'], ['admin'])
        self.assertEqual(child.principal_roles['otheruser'], ['manager'])

        # If an error occurs, a message gets displayed
        invalid_node = BaseNode()
        request.params['id'] = 'viewer'
        with self.layer.authenticated('manager'):
            res = ajax_tile(invalid_node, request)
        self.assertEqual(res, {
            'continuation': [{
                'flavor': 'error',
                'type': 'message',
                'payload': u"Can not add role 'manager' for principal 'viewer'",
                'selector': None
            }],
            'payload': u'',
            'mode': 'NONE',
            'selector': 'NONE'
        })
Ejemplo n.º 6
0
    def test_remove_role(self):
        root = SharingNode(name='root')
        child = root['child'] = SharingNode()
        child.principal_roles['viewer'] = ['admin', 'manager']
        child.principal_roles['editor'] = ['admin']
        child.principal_roles['otheruser'] = ['manager']

        # Remove role for user
        request = self.layer.new_request()
        request.params['id'] = 'viewer'
        request.params['role'] = 'manager'
        request.params['bdajax.action'] = 'remove_principal_role'
        request.params['bdajax.mode'] = 'NONE'
        request.params['bdajax.selector'] = 'NONE'

        # Nothing happens if success
        with self.layer.authenticated('manager'):
            res = ajax_tile(child, request)
        self.assertEqual(
            res, {
                'continuation': False,
                'payload': u'',
                'mode': 'NONE',
                'selector': 'NONE'
            })

        # Principal roles has changed
        self.assertEqual(child.principal_roles, {
            'viewer': ['admin'],
            'editor': ['admin'],
            'otheruser': ['manager']
        })

        # Principal id gets removed if no more roles left
        request.params['id'] = 'otheruser'
        request.params['role'] = 'manager'
        with self.layer.authenticated('manager'):
            res = ajax_tile(child, request)
        self.assertEqual(
            res, {
                'continuation': False,
                'payload': u'',
                'mode': 'NONE',
                'selector': 'NONE'
            })

        self.assertEqual(child.principal_roles, {
            'viewer': ['admin'],
            'editor': ['admin']
        })

        # If an error occurs, a message gets displayed.
        # Inexistent role
        request.params['id'] = 'viewer'
        request.params['role'] = 'inexistent'
        with self.layer.authenticated('manager'):
            res = ajax_tile(child, request)
        self.assertEqual(
            res, {
                'continuation': [{
                    'flavor': 'error',
                    'type': 'message',
                    'payload':
                    u"Can not remove role 'inexistent' for principal 'viewer'",
                    'selector': None
                }],
                'payload':
                u'',
                'mode':
                'NONE',
                'selector':
                'NONE'
            })

        # Inexistent userid
        request = self.layer.new_request()
        request.params['id'] = 'foo'
        request.params['role'] = 'manager'
        request.params['bdajax.action'] = 'remove_principal_role'
        request.params['bdajax.mode'] = 'NONE'
        request.params['bdajax.selector'] = 'NONE'
        with self.layer.authenticated('manager'):
            res = ajax_tile(child, request)
        self.assertEqual(
            res, {
                'continuation': [{
                    'flavor': 'error',
                    'type': 'message',
                    'payload':
                    u"Can not remove role 'manager' for principal 'foo'",
                    'selector': None
                }],
                'payload':
                u'',
                'mode':
                'NONE',
                'selector':
                'NONE'
            })
Ejemplo n.º 7
0
    def test_add_role(self):
        root = SharingNode(name='root')
        child = root['child'] = SharingNode()
        child.principal_roles['viewer'] = ['admin']
        child.principal_roles['editor'] = ['admin']

        # Add role for user
        request = self.layer.new_request()
        request.params['id'] = 'viewer'
        request.params['role'] = 'manager'
        request.params['bdajax.action'] = 'add_principal_role'
        request.params['bdajax.mode'] = 'NONE'
        request.params['bdajax.selector'] = 'NONE'

        # Nothing happens if success
        with self.layer.authenticated('manager'):
            res = ajax_tile(child, request)
        self.assertEqual(
            res, {
                'continuation': False,
                'payload': u'',
                'mode': 'NONE',
                'selector': 'NONE'
            })

        # Principal roles have changed
        self.assertEqual(len(child.principal_roles), 2)
        self.assertEqual(sorted(child.principal_roles['viewer']),
                         ['admin', 'manager'])
        self.assertEqual(child.principal_roles['editor'], ['admin'])

        # Add role for user not added yet
        request.params['id'] = 'otheruser'
        request.params['role'] = 'manager'
        with self.layer.authenticated('manager'):
            res = ajax_tile(child, request)
        self.assertEqual(
            res, {
                'continuation': False,
                'payload': u'',
                'mode': 'NONE',
                'selector': 'NONE'
            })

        self.assertEqual(len(child.principal_roles), 3)
        self.assertEqual(sorted(child.principal_roles['viewer']),
                         ['admin', 'manager'])
        self.assertEqual(child.principal_roles['editor'], ['admin'])
        self.assertEqual(child.principal_roles['otheruser'], ['manager'])

        # If an error occurs, a message gets displayed
        invalid_node = BaseNode()
        request.params['id'] = 'viewer'
        with self.layer.authenticated('manager'):
            res = ajax_tile(invalid_node, request)
        self.assertEqual(
            res, {
                'continuation': [{
                    'flavor': 'error',
                    'type': 'message',
                    'payload':
                    u"Can not add role 'manager' for principal 'viewer'",
                    'selector': None
                }],
                'payload':
                u'',
                'mode':
                'NONE',
                'selector':
                'NONE'
            })