Skip to content

Commit

Permalink
Update schema validators and tests for attribute mappings
Browse files Browse the repository at this point in the history
Changes due to disallowing modification of an attribute map's metadata_standard_id in recent commit.
  • Loading branch information
mark-saeon committed Nov 29, 2018
1 parent 7535d11 commit 2f876c3
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 27 deletions.
10 changes: 10 additions & 0 deletions ckanext/metadata/logic/validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -575,6 +575,12 @@ def metadata_template_json_path_validator(key, data, errors, context):
"""
json_path = _convert_missing(data.get(key[:-1] + ('json_path',)), '')
metadata_standard_id = _convert_missing(data.get(key[:-1] + ('metadata_standard_id',)))
if not metadata_standard_id:
id_ = data.get(key[:-1] + ('id',))
mapping_obj = ckanext_model.MetadataJSONAttrMap.get(id_)
if mapping_obj:
metadata_standard_id = mapping_obj.metadata_standard_id

metadata_standard = ckanext_model.MetadataStandard.get(metadata_standard_id)
if metadata_standard:
metadata_template_dict = json.loads(metadata_standard.metadata_template_json)
Expand All @@ -593,6 +599,10 @@ def metadata_json_attr_map_unique(key, data, errors, context):
json_path = _convert_missing(data.get(key[:-1] + ('json_path',)))
record_attr = _convert_missing(data.get(key[:-1] + ('record_attr',)))
metadata_standard_id = _convert_missing(data.get(key[:-1] + ('metadata_standard_id',)))
if not metadata_standard_id:
mapping_obj = ckanext_model.MetadataJSONAttrMap.get(id_)
if mapping_obj:
metadata_standard_id = mapping_obj.metadata_standard_id

mapping_obj = ckanext_model.MetadataJSONAttrMap.lookup_by_json_path(metadata_standard_id, json_path)
if mapping_obj and mapping_obj.state != 'deleted' and mapping_obj.id != id_:
Expand Down
32 changes: 5 additions & 27 deletions ckanext/metadata/tests/test_metadata_json_attr_map_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,45 +134,26 @@ def test_update_valid(self):
'json_path': '/c/d',
'record_attr': 'notes',
'is_key': False,
'metadata_standard_id': metadata_json_attr_map['metadata_standard_id'],
}
result, obj = self.test_action('metadata_json_attr_map_update', **input_dict)
assert_object_matches_dict(obj, input_dict)

def test_update_invalid_bad_metadata_standard(self):
metadata_json_attr_map = ckanext_factories.MetadataJSONAttrMap()
result, obj = self.test_action('metadata_json_attr_map_update', should_error=True,
id=metadata_json_attr_map['id'],
metadata_standard_id='foo')
assert_error(result, 'metadata_standard_id', 'Not found: Metadata Standard')

def test_update_invalid_deleted_metadata_standard(self):
metadata_json_attr_map = ckanext_factories.MetadataJSONAttrMap()
metadata_standard = ckanext_factories.MetadataStandard()
call_action('metadata_standard_delete', id=metadata_standard['id'])
result, obj = self.test_action('metadata_json_attr_map_update', should_error=True,
id=metadata_json_attr_map['id'],
metadata_standard_id=metadata_standard['id'])
assert_error(result, 'metadata_standard_id', 'Not found: Metadata Standard')

def test_update_invalid_duplicate_standard_jsonpath(self):
metadata_json_attr_map1 = ckanext_factories.MetadataJSONAttrMap()
metadata_json_attr_map2 = ckanext_factories.MetadataJSONAttrMap()
metadata_json_attr_map1 = ckanext_factories.MetadataJSONAttrMap(json_path='/c/d', record_attr='url')
metadata_json_attr_map2 = ckanext_factories.MetadataJSONAttrMap(metadata_standard_id=metadata_json_attr_map1['metadata_standard_id'])
input_dict = {
'id': metadata_json_attr_map1['id'],
'json_path': metadata_json_attr_map2['json_path'],
'metadata_standard_id': metadata_json_attr_map2['metadata_standard_id'],
}
result, obj = self.test_action('metadata_json_attr_map_update', should_error=True, **input_dict)
assert_error(result, 'json_path', 'Unique constraint violation')

def test_update_invalid_duplicate_standard_recordattr(self):
metadata_json_attr_map1 = ckanext_factories.MetadataJSONAttrMap()
metadata_json_attr_map2 = ckanext_factories.MetadataJSONAttrMap()
metadata_json_attr_map1 = ckanext_factories.MetadataJSONAttrMap(json_path='/c/d', record_attr='url')
metadata_json_attr_map2 = ckanext_factories.MetadataJSONAttrMap(metadata_standard_id=metadata_json_attr_map1['metadata_standard_id'])
input_dict = {
'id': metadata_json_attr_map1['id'],
'record_attr': metadata_json_attr_map2['record_attr'],
'metadata_standard_id': metadata_json_attr_map2['metadata_standard_id'],
}
result, obj = self.test_action('metadata_json_attr_map_update', should_error=True, **input_dict)
assert_error(result, 'record_attr', 'Unique constraint violation')
Expand Down Expand Up @@ -208,18 +189,15 @@ def test_update_invalid_missing_params(self):
assert_error(result, 'json_path', 'Missing parameter')
assert_error(result, 'record_attr', 'Missing parameter')
assert_error(result, 'is_key', 'Missing parameter')
assert_error(result, 'metadata_standard_id', 'Missing parameter')

def test_update_invalid_missing_values(self):
metadata_json_attr_map = ckanext_factories.MetadataJSONAttrMap()
result, obj = self.test_action('metadata_json_attr_map_update', should_error=True,
id=metadata_json_attr_map['id'],
json_path='',
record_attr='',
metadata_standard_id='')
record_attr='')
assert_error(result, 'json_path', 'Missing value')
assert_error(result, 'record_attr', 'Missing value')
assert_error(result, 'metadata_standard_id', 'Missing value')

def test_delete_valid(self):
metadata_json_attr_map = ckanext_factories.MetadataJSONAttrMap()
Expand Down

0 comments on commit 2f876c3

Please sign in to comment.