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)
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)
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' })
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' })
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' })
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' })
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' })