class DatasetDeserializerTestCase(BaseTestCase): def set_up_managers(self): super(DatasetDeserializerTestCase, self).set_up_managers() self.dataset_manager = DatasetManager(self.app) self.dataset_deserializer = DatasetDeserializer(self.app) def test_deserialize_delete(self): dataset = self.dataset_manager.create() self.log('should raise when deserializing deleted from non-bool') self.assertFalse(dataset.deleted) self.assertRaises(exceptions.RequestParameterInvalidException, self.dataset_deserializer.deserialize, dataset, data={'deleted': None}) self.assertFalse(dataset.deleted) self.log('should be able to deserialize deleted from True') self.dataset_deserializer.deserialize(dataset, data={'deleted': True}) self.assertTrue(dataset.deleted) self.log( 'should be able to reverse by deserializing deleted from False') self.dataset_deserializer.deserialize(dataset, data={'deleted': False}) self.assertFalse(dataset.deleted) def test_deserialize_purge(self): dataset = self.dataset_manager.create() self.log('should raise when deserializing purged from non-bool') self.assertRaises(exceptions.RequestParameterInvalidException, self.dataset_deserializer.deserialize, dataset, data={'purged': None}) self.assertFalse(dataset.purged) self.log('should be able to deserialize purged from True') self.dataset_deserializer.deserialize(dataset, data={'purged': True}) self.assertTrue(dataset.purged) # TODO: should this raise an error? self.log( 'should NOT be able to deserialize purged from False (will remain True)' ) self.dataset_deserializer.deserialize(dataset, data={'purged': False}) self.assertTrue(dataset.purged)
class DatasetDeserializerTestCase( BaseTestCase ): def set_up_managers( self ): super( DatasetDeserializerTestCase, self ).set_up_managers() self.dataset_manager = DatasetManager( self.app ) self.dataset_deserializer = DatasetDeserializer( self.app ) def test_deserialize_delete( self ): dataset = self.dataset_manager.create() self.log( 'should raise when deserializing deleted from non-bool' ) self.assertFalse( dataset.deleted ) self.assertRaises( exceptions.RequestParameterInvalidException, self.dataset_deserializer.deserialize, dataset, data={ 'deleted': None } ) self.assertFalse( dataset.deleted ) self.log( 'should be able to deserialize deleted from True' ) self.dataset_deserializer.deserialize( dataset, data={ 'deleted': True } ) self.assertTrue( dataset.deleted ) self.log( 'should be able to reverse by deserializing deleted from False' ) self.dataset_deserializer.deserialize( dataset, data={ 'deleted': False } ) self.assertFalse( dataset.deleted ) def test_deserialize_purge( self ): dataset = self.dataset_manager.create() self.log( 'should raise when deserializing purged from non-bool' ) self.assertRaises( exceptions.RequestParameterInvalidException, self.dataset_deserializer.deserialize, dataset, data={ 'purged': None } ) self.assertFalse( dataset.purged ) self.log( 'should be able to deserialize purged from True' ) self.dataset_deserializer.deserialize( dataset, data={ 'purged': True } ) self.assertTrue( dataset.purged ) # TODO: should this raise an error? self.log( 'should NOT be able to deserialize purged from False (will remain True)' ) self.dataset_deserializer.deserialize( dataset, data={ 'purged': False } ) self.assertTrue( dataset.purged )
class DatasetDeserializerTestCase(BaseTestCase): def set_up_managers(self): super(DatasetDeserializerTestCase, self).set_up_managers() self.dataset_manager = DatasetManager(self.app) self.dataset_serializer = DatasetSerializer(self.app) self.dataset_deserializer = DatasetDeserializer(self.app) self.role_manager = RoleManager(self.app) def test_deserialize_delete(self): dataset = self.dataset_manager.create() self.log('should raise when deserializing deleted from non-bool') self.assertFalse(dataset.deleted) self.assertRaises(exceptions.RequestParameterInvalidException, self.dataset_deserializer.deserialize, dataset, data={'deleted': None}) self.assertFalse(dataset.deleted) self.log('should be able to deserialize deleted from True') self.dataset_deserializer.deserialize(dataset, data={'deleted': True}) self.assertTrue(dataset.deleted) self.log( 'should be able to reverse by deserializing deleted from False') self.dataset_deserializer.deserialize(dataset, data={'deleted': False}) self.assertFalse(dataset.deleted) def test_deserialize_purge(self): dataset = self.dataset_manager.create() self.log('should raise when deserializing purged from non-bool') self.assertRaises(exceptions.RequestParameterInvalidException, self.dataset_deserializer.deserialize, dataset, data={'purged': None}) self.assertFalse(dataset.purged) self.log('should be able to deserialize purged from True') self.dataset_deserializer.deserialize(dataset, data={'purged': True}) self.assertTrue(dataset.purged) # TODO: should this raise an error? self.log( 'should NOT be able to deserialize purged from False (will remain True)' ) self.dataset_deserializer.deserialize(dataset, data={'purged': False}) self.assertTrue(dataset.purged) def test_deserialize_permissions(self): dataset = self.dataset_manager.create() who_manages = self.user_manager.create(**user2_data) self.dataset_manager.permissions.manage.grant(dataset, who_manages) existing_permissions = self.dataset_serializer.serialize_permissions( dataset, 'permissions', user=who_manages) existing_manage_permissions = existing_permissions['manage'] user3 = self.user_manager.create(**user3_data) self.log( 'deserializing permissions from a non-dictionary should error') not_a_dict = [] self.assertRaises(exceptions.RequestParameterInvalidException, self.dataset_deserializer.deserialize, dataset, user=who_manages, data={'permissions': not_a_dict}) self.log( 'deserializing permissions from a malformed dictionary should error' ) self.assertRaises(exceptions.RequestParameterInvalidException, self.dataset_deserializer.deserialize, dataset, user=who_manages, data={'permissions': dict(nope=[], access=[])}) self.log('deserializing permissions with no manage roles should error') self.assertRaises(exceptions.RequestParameterInvalidException, self.dataset_deserializer.deserialize, dataset, user=who_manages, data={'permissions': dict(manage=[], access=[])}) self.log( 'deserializing permissions using a non-managing user should error') self.assertRaises(rbac_secured.DatasetManagePermissionFailedException, self.dataset_deserializer.deserialize, dataset, user=user3, data={'permissions': existing_permissions}) self.log( 'deserializing permissions with a single access should make the dataset private' ) private_role = self.user_manager.private_role(who_manages) private_role = private_role.to_dict( value_mapper={'id': self.app.security.encode_id}) permissions = dict(manage=existing_manage_permissions, access=[private_role['id']]) self.dataset_deserializer.deserialize( dataset, user=who_manages, data={'permissions': permissions}) self.assertFalse( self.dataset_manager.is_accessible(dataset, user=user3)) self.log( 'deserializing permissions manage should make the permissions available' ) self.assertRaises(SkipAttribute, self.dataset_serializer.serialize_permissions, dataset, 'perms', user=user3) # now, have who_manages give a manage permission to user3 private_role = self.user_manager.private_role(user3) new_manage_permissions = existing_manage_permissions + [ self.app.security.encode_id(private_role.id) ] permissions = dict(manage=new_manage_permissions, access=[]) self.dataset_deserializer.deserialize( dataset, user=who_manages, data={'permissions': permissions}) # deserializing for user3 shouldn't throw a skip bc they can manage permissions = self.dataset_serializer.serialize_permissions( dataset, 'perms', user=who_manages) self.assertEqual(new_manage_permissions, permissions['manage'])
class DatasetDeserializerTestCase( BaseTestCase ): def set_up_managers( self ): super( DatasetDeserializerTestCase, self ).set_up_managers() self.dataset_manager = DatasetManager( self.app ) self.dataset_serializer = DatasetSerializer( self.app ) self.dataset_deserializer = DatasetDeserializer( self.app ) self.role_manager = RoleManager( self.app ) def test_deserialize_delete( self ): dataset = self.dataset_manager.create() self.log( 'should raise when deserializing deleted from non-bool' ) self.assertFalse( dataset.deleted ) self.assertRaises( exceptions.RequestParameterInvalidException, self.dataset_deserializer.deserialize, dataset, data={ 'deleted': None } ) self.assertFalse( dataset.deleted ) self.log( 'should be able to deserialize deleted from True' ) self.dataset_deserializer.deserialize( dataset, data={ 'deleted': True } ) self.assertTrue( dataset.deleted ) self.log( 'should be able to reverse by deserializing deleted from False' ) self.dataset_deserializer.deserialize( dataset, data={ 'deleted': False } ) self.assertFalse( dataset.deleted ) def test_deserialize_purge( self ): dataset = self.dataset_manager.create() self.log( 'should raise when deserializing purged from non-bool' ) self.assertRaises( exceptions.RequestParameterInvalidException, self.dataset_deserializer.deserialize, dataset, data={ 'purged': None } ) self.assertFalse( dataset.purged ) self.log( 'should be able to deserialize purged from True' ) self.dataset_deserializer.deserialize( dataset, data={ 'purged': True } ) self.assertTrue( dataset.purged ) # TODO: should this raise an error? self.log( 'should NOT be able to deserialize purged from False (will remain True)' ) self.dataset_deserializer.deserialize( dataset, data={ 'purged': False } ) self.assertTrue( dataset.purged ) def test_deserialize_permissions( self ): dataset = self.dataset_manager.create() who_manages = self.user_manager.create( **user2_data ) self.dataset_manager.permissions.manage.grant( dataset, who_manages ) existing_permissions = self.dataset_serializer.serialize_permissions( dataset, 'permissions', user=who_manages ) existing_manage_permissions = existing_permissions[ 'manage' ] user3 = self.user_manager.create( **user3_data ) self.log( 'deserializing permissions from a non-dictionary should error' ) not_a_dict = [] self.assertRaises( exceptions.RequestParameterInvalidException, self.dataset_deserializer.deserialize, dataset, user=who_manages, data={ 'permissions': not_a_dict }) self.log( 'deserializing permissions from a malformed dictionary should error' ) self.assertRaises( exceptions.RequestParameterInvalidException, self.dataset_deserializer.deserialize, dataset, user=who_manages, data={ 'permissions': dict( nope=[], access=[] ) }) self.log( 'deserializing permissions with no manage roles should error' ) self.assertRaises( exceptions.RequestParameterInvalidException, self.dataset_deserializer.deserialize, dataset, user=who_manages, data={ 'permissions': dict( manage=[], access=[] ) }) self.log( 'deserializing permissions using a non-managing user should error' ) self.assertRaises( rbac_secured.DatasetManagePermissionFailedException, self.dataset_deserializer.deserialize, dataset, user=user3, data={ 'permissions': existing_permissions }) self.log( 'deserializing permissions with a single access should make the dataset private' ) private_role = self.user_manager.private_role( who_manages ) private_role = private_role.to_dict( value_mapper={ 'id' : self.app.security.encode_id } ) permissions = dict( manage=existing_manage_permissions, access=[ private_role[ 'id' ] ] ) self.dataset_deserializer.deserialize( dataset, user=who_manages, data={ 'permissions': permissions }) self.assertFalse( self.dataset_manager.is_accessible( dataset, user=user3 ) ) self.log( 'deserializing permissions manage should make the permissions available' ) self.assertRaises( SkipAttribute, self.dataset_serializer.serialize_permissions, dataset, 'perms', user=user3 ) # now, have who_manages give a manage permission to user3 private_role = self.user_manager.private_role( user3 ) new_manage_permissions = existing_manage_permissions + [ self.app.security.encode_id( private_role.id ) ] permissions = dict( manage=new_manage_permissions, access=[] ) self.dataset_deserializer.deserialize( dataset, user=who_manages, data={ 'permissions': permissions }) # deserializing for user3 shouldn't throw a skip bc they can manage permissions = self.dataset_serializer.serialize_permissions( dataset, 'perms', user=who_manages ) self.assertEqual( new_manage_permissions, permissions[ 'manage' ] )