Example #1
0
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 )
Example #3
0
 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)
Example #4
0
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'])
 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 )
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' ] )