def test_user_name_validator_with_a_name_that_already_exists(self): '''user_name_validator() should add to the errors dict if given a user name that already exists. ''' import ckan.logic.validators as validators # Mock ckan.model. model.User.get('user_name') will return another mock # object rather than None, which will simulate an existing user with # the same user name in the database. mock_model = mock.MagicMock() data = factories.validator_data_dict() key = ('name',) data[key] = 'user_name' errors = factories.validator_errors_dict() errors[key] = [] @does_not_modify_other_keys_in_errors_dict @t.does_not_modify_data_dict @t.returns_None @adds_message_to_errors_dict('That login name is not available.') def call_validator(*args, **kwargs): return validators.user_name_validator(*args, **kwargs) call_validator(key, data, errors, context={'model': mock_model})
def test_ignore_missing_with_value_missing(self): '''ignore_missing() should raise StopOnError if: - data[key] is None, or - data[key] is dictization_functions.missing, or - key is not in data ''' import ckan.lib.navl.dictization_functions as df import ckan.lib.navl.validators as validators for value in (None, df.missing, 'skip'): # This is the key for the value that is going to be validated. key = ('key to be validated',) # The data to pass to the validator function for validation. data = factories.validator_data_dict() if value != 'skip': data[key] = value # The errors dict to pass to the validator function. errors = factories.validator_errors_dict() errors[key] = [] @does_not_modify_other_keys_in_data_dict @does_not_modify_errors_dict @removes_key_from_data_dict @raises_StopOnError def call_validator(*args, **kwargs): return validators.ignore_missing(*args, **kwargs) call_validator(key=key, data=data, errors=errors, context={})
def test_user_name_validator_with_a_name_that_already_exists(self): '''user_name_validator() should add to the errors dict if given a user name that already exists. ''' import ckan.logic.validators as validators # Mock ckan.model. model.User.get('user_name') will return another mock # object rather than None, which will simulate an existing user with # the same user name in the database. mock_model = mock.MagicMock() data = factories.validator_data_dict() key = ('name', ) data[key] = 'user_name' errors = factories.validator_errors_dict() errors[key] = [] @does_not_modify_other_keys_in_errors_dict @t.does_not_modify_data_dict @t.returns_None @adds_message_to_errors_dict('That login name is not available.') def call_validator(*args, **kwargs): return validators.user_name_validator(*args, **kwargs) call_validator(key, data, errors, context={'model': mock_model})
def test_datasets_with_org_can_be_private_when_updating(self): import ckan.logic.validators as validators data = factories.validator_data_dict() errors = factories.validator_errors_dict() key = ('private', ) data[key] = True errors[key] = [] data[('id', )] = 'some_dataset_id' data[('owner_org', )] = 'some_org_id' # Mock ckan.model. mock_model = mock.MagicMock() @t.does_not_modify_errors_dict @t.does_not_modify_data_dict @t.returns_None def call_validator(*args, **kwargs): return validators.datasets_with_no_organization_cannot_be_private( *args, **kwargs) call_validator(key, data, errors, context={'model': mock_model})
def test_ignore_missing_with_a_value(self): '''If data[key] is neither None or missing, ignore_missing() should do nothing. ''' import ckan.lib.navl.validators as validators key = ('key to be validated',) data = factories.validator_data_dict() data[key] = 'value to be validated' errors = factories.validator_errors_dict() errors[key] = [] @returns_None @does_not_modify_data_dict @does_not_modify_errors_dict def call_validator(*args, **kwargs): return validators.ignore_missing(*args, **kwargs) call_validator(key=key, data=data, errors=errors, context={})
def test_datasets_with_no_org_cannot_be_private_when_creating(self): data = factories.validator_data_dict() errors = factories.validator_errors_dict() key = ('private',) data[key] = True errors[key] = [] # Mock ckan.model. mock_model = mock.MagicMock() @t.does_not_modify_data_dict @adds_message_to_errors_dict( "Datasets with no organization can't be private.") def call_validator(*args, **kwargs): return validators.datasets_with_no_organization_cannot_be_private( *args, **kwargs) call_validator(key, data, errors, context={'model': mock_model})
def test_datasets_with_no_org_cannot_be_private_when_creating(self): data = factories.validator_data_dict() errors = factories.validator_errors_dict() key = ('private', ) data[key] = True errors[key] = [] # Mock ckan.model. mock_model = mock.MagicMock() @t.does_not_modify_data_dict @adds_message_to_errors_dict( "Datasets with no organization can't be private.") def call_validator(*args, **kwargs): return validators.datasets_with_no_organization_cannot_be_private( *args, **kwargs) call_validator(key, data, errors, context={'model': mock_model})
def test_datasets_with_org_can_be_private_when_creating(self): data = factories.validator_data_dict() errors = factories.validator_errors_dict() key = ('private',) data[key] = True errors[key] = [] data[('owner_org',)] = 'some_org_id' # Mock ckan.model. mock_model = mock.MagicMock() @t.does_not_modify_errors_dict @t.does_not_modify_data_dict @t.returns_None def call_validator(*args, **kwargs): return validators.datasets_with_no_organization_cannot_be_private( *args, **kwargs) call_validator(key, data, errors, context={'model': mock_model})
def test_user_name_validator_successful(self): '''user_name_validator() should do nothing if given a valid name.''' data = factories.validator_data_dict() key = ('name',) data[key] = 'new_user_name' errors = factories.validator_errors_dict() errors[key] = [] # Mock ckan.model. mock_model = mock.MagicMock() # model.User.get(user_name) should return None, to simulate that no # user with that name exists in the database. mock_model.User.get.return_value = None @t.does_not_modify_errors_dict @t.does_not_modify_data_dict @t.returns_None def call_validator(*args, **kwargs): return validators.user_name_validator(*args, **kwargs) call_validator(key, data, errors, context={'model': mock_model})
def test_user_name_validator_with_non_string_value(self): '''user_name_validator() should raise Invalid if given a non-string value. ''' import ckan.logic.validators as validators non_string_values = [ 13, 23.7, 100L, 1.0j, None, True, False, ('a', 2, False), [13, None, True], { 'foo': 'bar' }, lambda x: x**2, ] # Mock ckan.model. mock_model = mock.MagicMock() # model.User.get(some_user_id) needs to return None for this test. mock_model.User.get.return_value = None key = ('name', ) for non_string_value in non_string_values: data = factories.validator_data_dict() data[key] = non_string_value errors = factories.validator_errors_dict() errors[key] = [] @t.does_not_modify_data_dict @raises_Invalid def call_validator(*args, **kwargs): return validators.user_name_validator(*args, **kwargs) call_validator(key, data, errors, context={'model': mock_model})
def test_user_name_validator_successful(self): '''user_name_validator() should do nothing if given a valid name.''' data = factories.validator_data_dict() key = ('name', ) data[key] = 'new_user_name' errors = factories.validator_errors_dict() errors[key] = [] # Mock ckan.model. mock_model = mock.MagicMock() # model.User.get(user_name) should return None, to simulate that no # user with that name exists in the database. mock_model.User.get.return_value = None @t.does_not_modify_errors_dict @t.does_not_modify_data_dict @t.returns_None def call_validator(*args, **kwargs): return validators.user_name_validator(*args, **kwargs) call_validator(key, data, errors, context={'model': mock_model})
def test_user_name_validator_with_non_string_value(self): """user_name_validator() should raise Invalid if given a non-string value. """ import ckan.logic.validators as validators non_string_values = [ 13, 23.7, 100L, 1.0j, None, True, False, ("a", 2, False), [13, None, True], {"foo": "bar"}, lambda x: x ** 2, ] # Mock ckan.model. mock_model = mock.MagicMock() # model.User.get(some_user_id) needs to return None for this test. mock_model.User.get.return_value = None key = ("name",) for non_string_value in non_string_values: data = factories.validator_data_dict() data[key] = non_string_value errors = factories.validator_errors_dict() errors[key] = [] @t.does_not_modify_data_dict @raises_Invalid def call_validator(*args, **kwargs): return validators.user_name_validator(*args, **kwargs) call_validator(key, data, errors, context={"model": mock_model})