From 0ef729faffb59f8c45cf569313474e8a14ff018f Mon Sep 17 00:00:00 2001 From: Mark Jacobson <35484465+mark-saeon@users.noreply.github.com> Date: Wed, 4 Jul 2018 11:04:16 +0200 Subject: [PATCH] Test validation activity logging --- ckanext/metadata/logic/action/create.py | 3 +- ckanext/metadata/logic/action/delete.py | 11 +- ckanext/metadata/logic/action/get.py | 3 +- ckanext/metadata/logic/action/update.py | 39 ++-- ckanext/metadata/tests/__init__.py | 66 +++++- .../tests/test_metadata_model_actions.py | 191 +++++++++--------- .../tests/test_metadata_record_actions.py | 47 ++--- .../tests/test_metadata_validation.py | 2 - 8 files changed, 217 insertions(+), 145 deletions(-) delete mode 100644 ckanext/metadata/tests/test_metadata_validation.py diff --git a/ckanext/metadata/logic/action/create.py b/ckanext/metadata/logic/action/create.py index c331597..4d99503 100644 --- a/ckanext/metadata/logic/action/create.py +++ b/ckanext/metadata/logic/action/create.py @@ -137,7 +137,8 @@ def metadata_model_create(context, data_dict): invalidate_context.update({ 'defer_commit': True, 'trigger_action': 'metadata_model_create', - 'trigger_object': metadata_model, + 'trigger_object_id': metadata_model.id, + 'trigger_revision_id': rev.id, }) for metadata_record_id in dependent_record_list: tk.get_action('metadata_record_invalidate')(invalidate_context, {'id': metadata_record_id}) diff --git a/ckanext/metadata/logic/action/delete.py b/ckanext/metadata/logic/action/delete.py index e133076..7a10278 100644 --- a/ckanext/metadata/logic/action/delete.py +++ b/ckanext/metadata/logic/action/delete.py @@ -106,20 +106,21 @@ def metadata_model_delete(context, data_dict): tk.check_access('metadata_model_delete', context, data_dict) + rev = model.repo.new_revision() + rev.author = user + rev.message = _(u'REST API: Delete metadata model %s') % metadata_model_id + dependent_record_list = tk.get_action('metadata_model_dependent_record_list')(context, {'id': metadata_model_id}) invalidate_context = context.copy() invalidate_context.update({ 'defer_commit': True, 'trigger_action': 'metadata_model_delete', - 'trigger_object': metadata_model, + 'trigger_object_id': metadata_model_id, + 'trigger_revision_id': rev.id, }) for metadata_record_id in dependent_record_list: tk.get_action('metadata_record_invalidate')(invalidate_context, {'id': metadata_record_id}) - rev = model.repo.new_revision() - rev.author = user - rev.message = _(u'REST API: Delete metadata model %s') % metadata_model_id - metadata_model.delete() if not defer_commit: model.repo.commit() diff --git a/ckanext/metadata/logic/action/get.py b/ckanext/metadata/logic/action/get.py index 4e3469d..9fc60d6 100644 --- a/ckanext/metadata/logic/action/get.py +++ b/ckanext/metadata/logic/action/get.py @@ -513,8 +513,7 @@ def metadata_record_validation_activity_show(context, data_dict): :param id: the id or name of the metadata record :type id: string - :rtype: dictionary including activity detail list under 'details', - or None if the record has never been validated + :rtype: dictionary, or None if the record has never been validated """ log.debug("Retrieving metadata record validation activity: %r", data_dict) diff --git a/ckanext/metadata/logic/action/update.py b/ckanext/metadata/logic/action/update.py index 409c9c0..7f46020 100644 --- a/ckanext/metadata/logic/action/update.py +++ b/ckanext/metadata/logic/action/update.py @@ -170,22 +170,23 @@ def metadata_model_update(context, data_dict): else: affected_record_ids = set(old_dependent_record_list) ^ set(new_dependent_record_list) + rev = model.repo.new_revision() + rev.author = user + if 'message' in context: + rev.message = context['message'] + else: + rev.message = _(u'REST API: Update metadata model %s') % metadata_model_id + invalidate_context = context.copy() invalidate_context.update({ 'defer_commit': True, 'trigger_action': 'metadata_model_update', - 'trigger_object': metadata_model, + 'trigger_object_id': metadata_model_id, + 'trigger_revision_id': rev.id, }) for metadata_record_id in affected_record_ids: tk.get_action('metadata_record_invalidate')(invalidate_context, {'id': metadata_record_id}) - rev = model.repo.new_revision() - rev.author = user - if 'message' in context: - rev.message = context['message'] - else: - rev.message = _(u'REST API: Update metadata model %s') % metadata_model_id - if not defer_commit: model.repo.commit() @@ -394,7 +395,8 @@ def metadata_record_update(context, data_dict): invalidate_context.update({ 'defer_commit': True, 'trigger_action': 'metadata_record_update', - 'trigger_object': metadata_record, + 'trigger_object_id': metadata_record_id, + 'trigger_revision_id': model.Package.get(metadata_record_id).revision_id, }) tk.get_action('metadata_record_invalidate')(invalidate_context, {'id': metadata_record_id}) @@ -415,9 +417,10 @@ def metadata_record_invalidate(context, data_dict): Note: this function is typically called from within another action function whose effect triggers invalidation of the given metadata record. In such a - case, the calling function should pass 'trigger_action' (its own name, e.g. - 'metadata_model_update') and 'trigger_object' (the object being modified, - e.g. a MetadataModel instance) in the context. + case, the calling function should pass the following items in the context: + 'trigger_action': the calling function name, e.g. 'metadata_model_update' + 'trigger_object_id': the id of the object (e.g. a MetadataModel) being modified + 'trigger_revision_id': the id of the revision for this modification :param id: the id or name of the metadata record to invalidate :type id: string @@ -445,15 +448,14 @@ def metadata_record_invalidate(context, data_dict): metadata_record.extras['errors'] = '{}' trigger_action = context.get('trigger_action') - trigger_object = context.get('trigger_object') - trigger_object_id = trigger_object.id if trigger_object else None - trigger_revision_id = trigger_object.revision_id if trigger_object else None + trigger_object_id = context.get('trigger_object_id') + trigger_revision_id = context.get('trigger_revision_id') activity_context = context.copy() activity_context.update({ 'defer_commit': True, 'schema': { - 'user_id': [], + 'user_id': [unicode, tk.get_validator('convert_user_name_or_id_to_id')], 'object_id': [], 'revision_id': [], 'activity_type': [], @@ -538,7 +540,7 @@ def metadata_record_validate(context, data_dict): activity_context.update({ 'defer_commit': True, 'schema': { - 'user_id': [], + 'user_id': [unicode, tk.get_validator('convert_user_name_or_id_to_id')], 'object_id': [], 'revision_id': [], 'activity_type': [], @@ -551,8 +553,7 @@ def metadata_record_validate(context, data_dict): 'activity_type': METADATA_VALIDATION_ACTIVITY_TYPE, 'data': { 'action': 'metadata_record_validate', - 'errors': accumulated_errors, - 'details': validation_results, + 'results': validation_results, } } tk.get_action('activity_create')(activity_context, activity_dict) diff --git a/ckanext/metadata/tests/__init__.py b/ckanext/metadata/tests/__init__.py index 18cb8b3..274e4df 100644 --- a/ckanext/metadata/tests/__init__.py +++ b/ckanext/metadata/tests/__init__.py @@ -4,6 +4,7 @@ import re import json from paste.deploy.converters import asbool +import pkg_resources from ckan.tests import factories as ckan_factories from ckan.tests.helpers import FunctionalTestBase, call_action @@ -26,6 +27,10 @@ } +def load_example(filename): + return pkg_resources.resource_string(__name__, '../../../examples/' + filename) + + def make_uuid(): return unicode(uuid.uuid4()) @@ -136,7 +141,17 @@ def setup(self): def _test_action(self, action_name, should_error=False, exception_class=tk.ValidationError, sysadmin=False, check_auth=False, **kwargs): - + """ + Test an API action. + :param action_name: action function name, e.g. 'metadata_record_create' + :param should_error: True if this test should raise an exception, False otherwise + :param exception_class: the type of exception to be expected if should_error is True + :param sysadmin: True to execute the action as a sysadmin, False to run it as a normal user + :param check_auth: True to check whether the user is authorized to perform the action, + False to ignore the auth check + :param kwargs: additional args to pass to the action function + :return: tuple(result dict, result obj) + """ model, method = action_name.rsplit('_', 1) user = self.sysadmin_user if sysadmin else self.normal_user context = { @@ -176,3 +191,52 @@ def _test_action(self, action_name, should_error=False, exception_class=tk.Valid obj = model_class.get(kwargs['id']) return result, obj + + def _assert_validate_activity_logged(self, metadata_record_id, *validation_models, **validation_errors): + """ + :param validation_models: iterable of metadata model dictionaries + :param validation_errors: dictionary mapping metadata model keys to expected error patterns (regex's) + """ + activity_dict = call_action('metadata_record_validation_activity_show', id=metadata_record_id) + assert activity_dict['user_id'] == self.normal_user['id'] + assert activity_dict['object_id'] == metadata_record_id + assert activity_dict['activity_type'] == 'metadata validation' + assert activity_dict['data']['action'] == 'metadata_record_validate' + logged_results = activity_dict['data']['results'] + assert len(logged_results) == len(validation_models) + logged_errors = {} + for validation_model in validation_models: + logged_result = next((result for result in logged_results + if result['metadata_model_id'] == validation_model['id']), None) + assert logged_result + assert logged_result['metadata_model_revision_id'] == validation_model['revision_id'] + logged_errors.update(logged_result['errors']) + assert len(logged_errors) == len(validation_errors) + for error_key, error_pattern in validation_errors.items(): + assert_error(logged_errors, error_key, error_pattern) + + def _assert_invalidate_activity_logged(self, metadata_record_id, trigger_action, trigger_object): + activity_dict = call_action('metadata_record_validation_activity_show', id=metadata_record_id) + assert activity_dict['user_id'] == self.normal_user['id'] + assert activity_dict['object_id'] == metadata_record_id + assert activity_dict['activity_type'] == 'metadata validation' + assert activity_dict['data'] == { + 'action': 'metadata_record_invalidate', + 'trigger_action': trigger_action, + 'trigger_object_id': trigger_object.id if trigger_object else None, + 'trigger_revision_id': trigger_object.revision_id if trigger_object else None, + } + + def _assert_metadata_record_has_validation_models(self, metadata_record_id, *metadata_model_names): + """ + Check that the given record has the expected set of validation models. + """ + validation_model_list = call_action('metadata_record_validation_model_list', id=metadata_record_id) + assert set(validation_model_list) == set(metadata_model_names) + + def _assert_metadata_model_has_dependent_records(self, metadata_model_id, *metadata_record_ids): + """ + Check that the given model has the expected set of dependent records. + """ + dependent_record_list = call_action('metadata_model_dependent_record_list', id=metadata_model_id) + assert set(dependent_record_list) == set(metadata_record_ids) diff --git a/ckanext/metadata/tests/test_metadata_model_actions.py b/ckanext/metadata/tests/test_metadata_model_actions.py index 81bb303..f9c5be4 100644 --- a/ckanext/metadata/tests/test_metadata_model_actions.py +++ b/ckanext/metadata/tests/test_metadata_model_actions.py @@ -40,7 +40,9 @@ def _generate_and_validate_metadata_record(self, metadata_schema_id=None, organization_id=metadata_record['owner_org'] if add_organization_to_model else '', infrastructure_id=metadata_record['infrastructures'][0]['id'] if add_infrastructure_to_model else '') + self._assert_metadata_record_has_validation_models(metadata_record['id'], metadata_model['name']) self._validate_metadata_record(metadata_record) + self._assert_validate_activity_logged(metadata_record['id'], metadata_model) return metadata_record, metadata_model def _generate_and_validate_metadata_record_using_model(self, metadata_model): @@ -54,7 +56,9 @@ def _generate_and_validate_metadata_record_using_model(self, metadata_model): owner_org=metadata_model['organization_id'], infrastructures=[{'id': metadata_model['infrastructure_id']}] if metadata_model['infrastructure_id'] else []) + self._assert_metadata_record_has_validation_models(metadata_record['id'], metadata_model['name']) self._validate_metadata_record(metadata_record) + self._assert_validate_activity_logged(metadata_record['id'], metadata_model) return metadata_record def _validate_metadata_record(self, metadata_record): @@ -191,12 +195,13 @@ def test_create_invalidate_records_matching_schema(self): """ # add org to model to avoid unique key violation below metadata_record, _ = self._generate_and_validate_metadata_record(add_organization_to_model=True) - call_action('metadata_model_create', - metadata_schema_id=metadata_record['metadata_schema_id'], - organization_id='', - infrastructure_id='', - model_json='') + result, obj = self._test_action('metadata_model_create', + metadata_schema_id=metadata_record['metadata_schema_id'], + organization_id='', + infrastructure_id='', + model_json='') assert_package_has_extra(metadata_record['id'], 'validated', False) + self._assert_invalidate_activity_logged(metadata_record['id'], 'metadata_model_create', obj) def test_create_invalidate_records_matching_schema_organization(self): """ @@ -204,12 +209,13 @@ def test_create_invalidate_records_matching_schema_organization(self): of matching on schema and organization. This should invalidate the record. """ metadata_record, _ = self._generate_and_validate_metadata_record() - call_action('metadata_model_create', - metadata_schema_id=metadata_record['metadata_schema_id'], - organization_id=metadata_record['owner_org'], - infrastructure_id='', - model_json='') + result, obj = self._test_action('metadata_model_create', + metadata_schema_id=metadata_record['metadata_schema_id'], + organization_id=metadata_record['owner_org'], + infrastructure_id='', + model_json='') assert_package_has_extra(metadata_record['id'], 'validated', False) + self._assert_invalidate_activity_logged(metadata_record['id'], 'metadata_model_create', obj) def test_create_invalidate_records_matching_schema_infrastructure(self): """ @@ -217,12 +223,13 @@ def test_create_invalidate_records_matching_schema_infrastructure(self): of matching on schema and infrastructure. This should invalidate the record. """ metadata_record, _ = self._generate_and_validate_metadata_record(add_infrastructure_to_record=True) - call_action('metadata_model_create', - metadata_schema_id=metadata_record['metadata_schema_id'], - organization_id='', - infrastructure_id=metadata_record['infrastructures'][0]['id'], - model_json='') + result, obj = self._test_action('metadata_model_create', + metadata_schema_id=metadata_record['metadata_schema_id'], + organization_id='', + infrastructure_id=metadata_record['infrastructures'][0]['id'], + model_json='') assert_package_has_extra(metadata_record['id'], 'validated', False) + self._assert_invalidate_activity_logged(metadata_record['id'], 'metadata_model_create', obj) def test_create_no_invalidate_records_different_schema(self): """ @@ -444,20 +451,20 @@ def test_update_json_invalidate_records_1(self): """ metadata_record_1, metadata_model = self._generate_and_validate_metadata_record(add_infrastructure_to_record=True) metadata_record_2 = self._generate_and_validate_metadata_record_using_model(metadata_model) - dependent_records = call_action('metadata_model_dependent_record_list', id=metadata_model['id']) - assert set(dependent_records) == {metadata_record_1['id'], metadata_record_2['id']} + self._assert_metadata_model_has_dependent_records(metadata_model['id'], metadata_record_1['id'], metadata_record_2['id']) - call_action('metadata_model_update', - id=metadata_model['id'], - metadata_schema_id=metadata_model['metadata_schema_id'], - organization_id='', - infrastructure_id='', - model_json='{ "newtestkey": "newtestvalue" }') + result, obj = self._test_action('metadata_model_update', + id=metadata_model['id'], + metadata_schema_id=metadata_model['metadata_schema_id'], + organization_id='', + infrastructure_id='', + model_json='{ "newtestkey": "newtestvalue" }') assert_package_has_extra(metadata_record_1['id'], 'validated', False) assert_package_has_extra(metadata_record_2['id'], 'validated', False) - dependent_records = call_action('metadata_model_dependent_record_list', id=metadata_model['id']) - assert set(dependent_records) == {metadata_record_1['id'], metadata_record_2['id']} + self._assert_metadata_model_has_dependent_records(metadata_model['id'], metadata_record_1['id'], metadata_record_2['id']) + self._assert_invalidate_activity_logged(metadata_record_1['id'], 'metadata_model_update', obj) + self._assert_invalidate_activity_logged(metadata_record_2['id'], 'metadata_model_update', obj) def test_update_json_invalidate_records_2(self): """ @@ -466,20 +473,20 @@ def test_update_json_invalidate_records_2(self): """ metadata_record_1, metadata_model = self._generate_and_validate_metadata_record(add_infrastructure_to_record=True, add_infrastructure_to_model=True) metadata_record_2 = self._generate_and_validate_metadata_record_using_model(metadata_model) - dependent_records = call_action('metadata_model_dependent_record_list', id=metadata_model['id']) - assert set(dependent_records) == {metadata_record_1['id'], metadata_record_2['id']} + self._assert_metadata_model_has_dependent_records(metadata_model['id'], metadata_record_1['id'], metadata_record_2['id']) - call_action('metadata_model_update', - id=metadata_model['id'], - metadata_schema_id=metadata_model['metadata_schema_id'], - organization_id='', - infrastructure_id=metadata_model['infrastructure_id'], - model_json='{ "newtestkey": "newtestvalue" }') + result, obj = self._test_action('metadata_model_update', + id=metadata_model['id'], + metadata_schema_id=metadata_model['metadata_schema_id'], + organization_id='', + infrastructure_id=metadata_model['infrastructure_id'], + model_json='{ "newtestkey": "newtestvalue" }') assert_package_has_extra(metadata_record_1['id'], 'validated', False) assert_package_has_extra(metadata_record_2['id'], 'validated', False) - dependent_records = call_action('metadata_model_dependent_record_list', id=metadata_model['id']) - assert set(dependent_records) == {metadata_record_1['id'], metadata_record_2['id']} + self._assert_metadata_model_has_dependent_records(metadata_model['id'], metadata_record_1['id'], metadata_record_2['id']) + self._assert_invalidate_activity_logged(metadata_record_1['id'], 'metadata_model_update', obj) + self._assert_invalidate_activity_logged(metadata_record_2['id'], 'metadata_model_update', obj) def test_update_json_invalidate_records_3(self): """ @@ -488,20 +495,20 @@ def test_update_json_invalidate_records_3(self): """ metadata_record_1, metadata_model = self._generate_and_validate_metadata_record(add_infrastructure_to_record=True, add_organization_to_model=True) metadata_record_2 = self._generate_and_validate_metadata_record_using_model(metadata_model) - dependent_records = call_action('metadata_model_dependent_record_list', id=metadata_model['id']) - assert set(dependent_records) == {metadata_record_1['id'], metadata_record_2['id']} + self._assert_metadata_model_has_dependent_records(metadata_model['id'], metadata_record_1['id'], metadata_record_2['id']) - call_action('metadata_model_update', - id=metadata_model['id'], - metadata_schema_id=metadata_model['metadata_schema_id'], - organization_id=metadata_model['organization_id'], - infrastructure_id='', - model_json='{ "newtestkey": "newtestvalue" }') + result, obj = self._test_action('metadata_model_update', + id=metadata_model['id'], + metadata_schema_id=metadata_model['metadata_schema_id'], + organization_id=metadata_model['organization_id'], + infrastructure_id='', + model_json='{ "newtestkey": "newtestvalue" }') assert_package_has_extra(metadata_record_1['id'], 'validated', False) assert_package_has_extra(metadata_record_2['id'], 'validated', False) - dependent_records = call_action('metadata_model_dependent_record_list', id=metadata_model['id']) - assert set(dependent_records) == {metadata_record_1['id'], metadata_record_2['id']} + self._assert_metadata_model_has_dependent_records(metadata_model['id'], metadata_record_1['id'], metadata_record_2['id']) + self._assert_invalidate_activity_logged(metadata_record_1['id'], 'metadata_model_update', obj) + self._assert_invalidate_activity_logged(metadata_record_2['id'], 'metadata_model_update', obj) def test_update_infrastructure_invalidate_records_1(self): """ @@ -510,20 +517,19 @@ def test_update_infrastructure_invalidate_records_1(self): """ metadata_record_1, metadata_model = self._generate_and_validate_metadata_record(add_infrastructure_to_record=True) metadata_record_2 = self._generate_and_validate_metadata_record_using_model(metadata_model) - dependent_records = call_action('metadata_model_dependent_record_list', id=metadata_model['id']) - assert set(dependent_records) == {metadata_record_1['id'], metadata_record_2['id']} + self._assert_metadata_model_has_dependent_records(metadata_model['id'], metadata_record_1['id'], metadata_record_2['id']) - call_action('metadata_model_update', - id=metadata_model['id'], - metadata_schema_id=metadata_model['metadata_schema_id'], - organization_id='', - infrastructure_id=metadata_record_1['infrastructures'][0]['id'], - model_json=json.dumps(metadata_model['model_json'])) + result, obj = self._test_action('metadata_model_update', + id=metadata_model['id'], + metadata_schema_id=metadata_model['metadata_schema_id'], + organization_id='', + infrastructure_id=metadata_record_1['infrastructures'][0]['id'], + model_json=json.dumps(metadata_model['model_json'])) assert_package_has_extra(metadata_record_1['id'], 'validated', True) assert_package_has_extra(metadata_record_2['id'], 'validated', False) - dependent_records = call_action('metadata_model_dependent_record_list', id=metadata_model['id']) - assert set(dependent_records) == {metadata_record_1['id']} + self._assert_metadata_model_has_dependent_records(metadata_model['id'], metadata_record_1['id']) + self._assert_invalidate_activity_logged(metadata_record_2['id'], 'metadata_model_update', obj) def test_update_infrastructure_invalidate_records_2(self): """ @@ -532,20 +538,19 @@ def test_update_infrastructure_invalidate_records_2(self): """ metadata_record_1, metadata_model_1 = self._generate_and_validate_metadata_record(add_infrastructure_to_record=True, add_infrastructure_to_model=True) metadata_record_2, metadata_model_2 = self._generate_and_validate_metadata_record(metadata_schema_id=metadata_record_1['metadata_schema_id'], add_organization_to_model=True) - dependent_records = call_action('metadata_model_dependent_record_list', id=metadata_model_1['id']) - assert set(dependent_records) == {metadata_record_1['id']} + self._assert_metadata_model_has_dependent_records(metadata_model_1['id'], metadata_record_1['id']) - call_action('metadata_model_update', - id=metadata_model_1['id'], - metadata_schema_id=metadata_model_1['metadata_schema_id'], - organization_id='', - infrastructure_id='', - model_json=json.dumps(metadata_model_1['model_json'])) + result, obj = self._test_action('metadata_model_update', + id=metadata_model_1['id'], + metadata_schema_id=metadata_model_1['metadata_schema_id'], + organization_id='', + infrastructure_id='', + model_json=json.dumps(metadata_model_1['model_json'])) assert_package_has_extra(metadata_record_1['id'], 'validated', True) assert_package_has_extra(metadata_record_2['id'], 'validated', False) - dependent_records = call_action('metadata_model_dependent_record_list', id=metadata_model_1['id']) - assert set(dependent_records) == {metadata_record_1['id'], metadata_record_2['id']} + self._assert_metadata_model_has_dependent_records(metadata_model_1['id'], metadata_record_1['id'], metadata_record_2['id']) + self._assert_invalidate_activity_logged(metadata_record_2['id'], 'metadata_model_update', obj) def test_update_organization_invalidate_records_1(self): """ @@ -554,20 +559,19 @@ def test_update_organization_invalidate_records_1(self): """ metadata_record_1, metadata_model = self._generate_and_validate_metadata_record() metadata_record_2 = self._generate_and_validate_metadata_record_using_model(metadata_model) - dependent_records = call_action('metadata_model_dependent_record_list', id=metadata_model['id']) - assert set(dependent_records) == {metadata_record_1['id'], metadata_record_2['id']} + self._assert_metadata_model_has_dependent_records(metadata_model['id'], metadata_record_1['id'], metadata_record_2['id']) - call_action('metadata_model_update', - id=metadata_model['id'], - metadata_schema_id=metadata_model['metadata_schema_id'], - organization_id=metadata_record_1['owner_org'], - infrastructure_id='', - model_json=json.dumps(metadata_model['model_json'])) + result, obj = self._test_action('metadata_model_update', + id=metadata_model['id'], + metadata_schema_id=metadata_model['metadata_schema_id'], + organization_id=metadata_record_1['owner_org'], + infrastructure_id='', + model_json=json.dumps(metadata_model['model_json'])) assert_package_has_extra(metadata_record_1['id'], 'validated', True) assert_package_has_extra(metadata_record_2['id'], 'validated', False) - dependent_records = call_action('metadata_model_dependent_record_list', id=metadata_model['id']) - assert set(dependent_records) == {metadata_record_1['id']} + self._assert_metadata_model_has_dependent_records(metadata_model['id'], metadata_record_1['id']) + self._assert_invalidate_activity_logged(metadata_record_2['id'], 'metadata_model_update', obj) def test_update_organization_invalidate_records_2(self): """ @@ -576,20 +580,19 @@ def test_update_organization_invalidate_records_2(self): """ metadata_record_1, metadata_model_1 = self._generate_and_validate_metadata_record(add_organization_to_model=True) metadata_record_2, metadata_model_2 = self._generate_and_validate_metadata_record(metadata_schema_id=metadata_record_1['metadata_schema_id'], add_organization_to_model=True) - dependent_records = call_action('metadata_model_dependent_record_list', id=metadata_model_1['id']) - assert set(dependent_records) == {metadata_record_1['id']} + self._assert_metadata_model_has_dependent_records(metadata_model_1['id'], metadata_record_1['id']) - call_action('metadata_model_update', - id=metadata_model_1['id'], - metadata_schema_id=metadata_model_1['metadata_schema_id'], - organization_id='', - infrastructure_id='', - model_json=json.dumps(metadata_model_1['model_json'])) + result, obj = self._test_action('metadata_model_update', + id=metadata_model_1['id'], + metadata_schema_id=metadata_model_1['metadata_schema_id'], + organization_id='', + infrastructure_id='', + model_json=json.dumps(metadata_model_1['model_json'])) assert_package_has_extra(metadata_record_1['id'], 'validated', True) assert_package_has_extra(metadata_record_2['id'], 'validated', False) - dependent_records = call_action('metadata_model_dependent_record_list', id=metadata_model_1['id']) - assert set(dependent_records) == {metadata_record_1['id'], metadata_record_2['id']} + self._assert_metadata_model_has_dependent_records(metadata_model_1['id'], metadata_record_1['id'], metadata_record_2['id']) + self._assert_invalidate_activity_logged(metadata_record_2['id'], 'metadata_model_update', obj) def test_update_invalid_duplicate_name(self): metadata_model1 = ckanext_factories.MetadataModel() @@ -722,16 +725,20 @@ def test_delete_valid(self): def test_delete_invalidate_records(self): metadata_record, metadata_model = self._generate_and_validate_metadata_record() - self._test_action('metadata_model_delete', - id=metadata_model['id']) + result, obj = self._test_action('metadata_model_delete', + id=metadata_model['id']) assert_package_has_extra(metadata_record['id'], 'validated', False) + self._assert_invalidate_activity_logged(metadata_record['id'], 'metadata_model_delete', obj) metadata_record, metadata_model = self._generate_and_validate_metadata_record(add_organization_to_model=True) - self._test_action('metadata_model_delete', - id=metadata_model['id']) + result, obj = self._test_action('metadata_model_delete', + id=metadata_model['id']) assert_package_has_extra(metadata_record['id'], 'validated', False) + self._assert_invalidate_activity_logged(metadata_record['id'], 'metadata_model_delete', obj) - metadata_record, metadata_model = self._generate_and_validate_metadata_record(add_infrastructure_to_record=True, add_infrastructure_to_model=True) - self._test_action('metadata_model_delete', - id=metadata_model['id']) + metadata_record, metadata_model = self._generate_and_validate_metadata_record(add_infrastructure_to_record=True, + add_infrastructure_to_model=True) + result, obj = self._test_action('metadata_model_delete', + id=metadata_model['id']) assert_package_has_extra(metadata_record['id'], 'validated', False) + self._assert_invalidate_activity_logged(metadata_record['id'], 'metadata_model_delete', obj) diff --git a/ckanext/metadata/tests/test_metadata_record_actions.py b/ckanext/metadata/tests/test_metadata_record_actions.py index 0f33720..b2c39c5 100644 --- a/ckanext/metadata/tests/test_metadata_record_actions.py +++ b/ckanext/metadata/tests/test_metadata_record_actions.py @@ -12,6 +12,7 @@ assert_group_has_member, assert_error, factories as ckanext_factories, + load_example, ) @@ -52,9 +53,8 @@ def _validate_metadata_record(self, metadata_record): ) call_action('metadata_record_validate', id=metadata_record['id'], context={'user': self.normal_user['name']}) assert_package_has_extra(metadata_record['id'], 'validated', True) - - validation_model_names = call_action('metadata_record_validation_model_list', id=metadata_record['id']) - assert validation_model_names == [metadata_model['name']] + self._assert_metadata_record_has_validation_models(metadata_record['id'], metadata_model['name']) + self._assert_validate_activity_logged(metadata_record['id'], metadata_model) return metadata_model @@ -78,7 +78,7 @@ def _make_input_dict_from_output_dict(output_dict): def _assert_metadata_record_ok(self, obj, input_dict, **kwargs): """ - Checks the resulting package object against the input dict and referenced objects. + Check the resulting package object against the input dict and referenced objects. Override comparison values using kwargs. """ assert obj.type == 'metadata_record' @@ -286,9 +286,8 @@ def test_update_json_invalidate(self): self._assert_metadata_record_ok(obj, input_dict, name=input_dict['name'], validated=False) - - validation_model_names = call_action('metadata_record_validation_model_list', id=input_dict['id']) - assert validation_model_names == [metadata_model['name']] + self._assert_metadata_record_has_validation_models(metadata_record['id'], metadata_model['name']) + self._assert_invalidate_activity_logged(metadata_record['id'], 'metadata_record_update', obj) def test_update_schema_invalidate(self): metadata_record = self._generate_metadata_record() @@ -303,9 +302,8 @@ def test_update_schema_invalidate(self): name=input_dict['name'], metadata_schema_id=new_metadata_schema['id'], validated=False) - - validation_model_names = call_action('metadata_record_validation_model_list', id=input_dict['id']) - assert validation_model_names == [] + self._assert_metadata_record_has_validation_models(metadata_record['id']) + self._assert_invalidate_activity_logged(metadata_record['id'], 'metadata_record_update', obj) def test_update_owner_org_invalidate(self): metadata_record = self._generate_metadata_record() @@ -328,9 +326,9 @@ def test_update_owner_org_invalidate(self): owner_org=new_organization['id'], metadata_collection_id=new_metadata_collection['id'], validated=False) - - validation_model_names = call_action('metadata_record_validation_model_list', id=input_dict['id']) - assert set(validation_model_names) == {metadata_model['name'], new_metadata_model['name']} + self._assert_metadata_record_has_validation_models(metadata_record['id'], + metadata_model['name'], new_metadata_model['name']) + self._assert_invalidate_activity_logged(metadata_record['id'], 'metadata_record_update', obj) def test_update_infrastructures_invalidate(self): infrastructure = self._generate_infrastructure() @@ -348,9 +346,8 @@ def test_update_infrastructures_invalidate(self): self._assert_metadata_record_ok(obj, input_dict, name=input_dict['name'], validated=False) - - validation_model_names = call_action('metadata_record_validation_model_list', id=input_dict['id']) - assert validation_model_names == [new_metadata_model['name']] + self._assert_metadata_record_has_validation_models(metadata_record['id'], new_metadata_model['name']) + self._assert_invalidate_activity_logged(metadata_record['id'], 'metadata_record_update', obj) def test_update_no_invalidate(self): metadata_record = self._generate_metadata_record() @@ -363,8 +360,7 @@ def test_update_no_invalidate(self): self._assert_metadata_record_ok(obj, input_dict, name=input_dict['name'], validated=True) - validation_model_names = call_action('metadata_record_validation_model_list', id=input_dict['id']) - assert validation_model_names == [metadata_model['name']] + self._assert_metadata_record_has_validation_models(metadata_record['id'], metadata_model['name']) new_organization = self._generate_organization() new_metadata_collection = self._generate_metadata_collection(organization_id=new_organization['id']) @@ -378,8 +374,7 @@ def test_update_no_invalidate(self): owner_org=new_organization['id'], metadata_collection_id=new_metadata_collection['id'], validated=True) - validation_model_names = call_action('metadata_record_validation_model_list', id=input_dict['id']) - assert validation_model_names == [metadata_model['name']] + self._assert_metadata_record_has_validation_models(metadata_record['id'], metadata_model['name']) def test_update_invalid_duplicate_name(self): metadata_record1 = self._generate_metadata_record() @@ -485,6 +480,12 @@ def test_invalidate(self): self._assert_metadata_record_ok(obj, input_dict, name=input_dict['name'], validated=False) - - validation_model_names = call_action('metadata_record_validation_model_list', id=input_dict['id']) - assert validation_model_names == [metadata_model['name']] + self._assert_metadata_record_has_validation_models(metadata_record['id'], metadata_model['name']) + self._assert_invalidate_activity_logged(metadata_record['id'], None, None) + + # def test_validate_datacite(self): + # metadata_record = self._generate_metadata_record( + # metadata_json=load_example('saeon_datacite_record.json')) + # metadata_model = ckanext_factories.MetadataModel( + # metadata_schema_id=metadata_record['metadata_schema_id'], + # model_json=load_example('saeon_datacite_model.json')) diff --git a/ckanext/metadata/tests/test_metadata_validation.py b/ckanext/metadata/tests/test_metadata_validation.py deleted file mode 100644 index 2b5c637..0000000 --- a/ckanext/metadata/tests/test_metadata_validation.py +++ /dev/null @@ -1,2 +0,0 @@ -# encoding: utf-8 -