Exemplo n.º 1
0
    def test_update_organization_invalidate_records_2(self):
        """
        Unassign an organization from a schema. This should invalidate existing validated metadata records that are
        newly dependent on the schema.
        """
        metadata_record_1, _, metadata_schema_1 = self._generate_and_validate_metadata_record(
            add_organization_to_schema=True)
        metadata_record_2, _, metadata_schema_2 = self._generate_and_validate_metadata_record(
            metadata_standard_id=metadata_record_1['metadata_standard_id'],
            add_organization_to_schema=True)
        assert_metadata_schema_has_dependent_records(metadata_schema_1['id'],
                                                     metadata_record_1['id'])

        result, obj = self.test_action(
            'metadata_schema_update',
            id=metadata_schema_1['id'],
            metadata_standard_id=metadata_schema_1['metadata_standard_id'],
            organization_id='',
            infrastructure_id='',
            schema_json=metadata_schema_1['schema_json'])

        assert_package_has_extra(metadata_record_1['id'], 'validated', True)
        assert_package_has_extra(metadata_record_2['id'], 'validated', False)
        assert_metadata_schema_has_dependent_records(metadata_schema_1['id'],
                                                     metadata_record_1['id'],
                                                     metadata_record_2['id'])
        self.assert_invalidate_activity_logged(metadata_record_2['id'],
                                               'metadata_schema_update', obj)
Exemplo n.º 2
0
    def test_update_metadata_records_private_cascade_2(self):
        """
        Test that the visibility of a metadata record is determined by that of its workflow state.
        """
        metadata_record = ckanext_factories.MetadataRecord()
        workflow_state = ckanext_factories.WorkflowState(
            metadata_records_private=True)
        call_action('metadata_record_workflow_state_override',
                    context={'user': self.normal_user['name']},
                    id=metadata_record['id'],
                    workflow_state_id=workflow_state['id'])
        assert_package_has_extra(metadata_record['id'], 'workflow_state_id',
                                 workflow_state['id'])
        assert_package_has_attribute(metadata_record['id'], 'private', True)

        input_dict = {
            'id': workflow_state['id'],
            'revert_state_id': '',
            'metadata_records_private': False,
            'workflow_rules_json': '{}',
        }
        result, obj = self.test_action('workflow_state_update', **input_dict)
        assert_object_matches_dict(obj, input_dict)
        assert_package_has_extra(metadata_record['id'], 'workflow_state_id',
                                 workflow_state['id'])
        assert_package_has_attribute(metadata_record['id'], 'private', False)
Exemplo n.º 3
0
    def _bulk_action_setup(self):
        metadata_schema = ckanext_factories.MetadataSchema()
        self.workflow_transition_1 = ckanext_factories.WorkflowTransition(
            from_state_id='')
        self.workflow_transition_2 = ckanext_factories.WorkflowTransition(
            from_state_id=self.workflow_transition_1['to_state_id'])
        self.metadata_collection = ckanext_factories.MetadataCollection()
        self.metadata_records = [
            ckanext_factories.MetadataRecord(
                owner_org=self.metadata_collection['organization_id'],
                metadata_collection_id=self.metadata_collection['id'],
                metadata_standard_id=metadata_schema['metadata_standard_id'])
            for _ in range(3)
        ]

        # modify the middle record; this should not affect processing of the surrounding records
        self.test_action('metadata_record_validate',
                         id=self.metadata_records[1]['id'])
        self.test_action(
            'metadata_record_workflow_state_override',
            id=self.metadata_records[1]['id'],
            workflow_state_id=self.workflow_transition_1['to_state_id'])
        assert_package_has_extra(self.metadata_records[1]['id'], 'validated',
                                 True)
        assert_package_has_extra(self.metadata_records[1]['id'],
                                 'workflow_state_id',
                                 self.workflow_transition_1['to_state_id'])
Exemplo n.º 4
0
    def test_update_organization_invalidate_records_1(self):
        """
        Assign an organization to a schema that was used to validate existing metadata records. This should invalidate
        those records that are no longer dependent on the schema due to not being associated with that organization.
        """
        metadata_record_1, _, metadata_schema = self._generate_and_validate_metadata_record(
        )
        metadata_record_2 = self._generate_and_validate_metadata_record_using_schema(
            metadata_schema)
        assert_metadata_schema_has_dependent_records(metadata_schema['id'],
                                                     metadata_record_1['id'],
                                                     metadata_record_2['id'])

        result, obj = self.test_action(
            'metadata_schema_update',
            id=metadata_schema['id'],
            metadata_standard_id=metadata_schema['metadata_standard_id'],
            organization_id=metadata_record_1['owner_org'],
            infrastructure_id='',
            schema_json=metadata_schema['schema_json'])

        assert_package_has_extra(metadata_record_1['id'], 'validated', True)
        assert_package_has_extra(metadata_record_2['id'], 'validated', False)
        assert_metadata_schema_has_dependent_records(metadata_schema['id'],
                                                     metadata_record_1['id'])
        self.assert_invalidate_activity_logged(metadata_record_2['id'],
                                               'metadata_schema_update', obj)
Exemplo n.º 5
0
    def test_update_json_invalidate_records_3(self):
        """
        Update the JSON of a schema that was used to validate existing metadata records that are associated with
        the same organization and different infrastructures. This should invalidate all those records.
        """
        metadata_record_1, _, metadata_schema = self._generate_and_validate_metadata_record(
            add_infrastructure_to_collection=True,
            add_organization_to_schema=True)
        metadata_record_2 = self._generate_and_validate_metadata_record_using_schema(
            metadata_schema)
        assert_metadata_schema_has_dependent_records(metadata_schema['id'],
                                                     metadata_record_1['id'],
                                                     metadata_record_2['id'])

        result, obj = self.test_action(
            'metadata_schema_update',
            id=metadata_schema['id'],
            metadata_standard_id=metadata_schema['metadata_standard_id'],
            organization_id=metadata_schema['organization_id'],
            infrastructure_id='',
            schema_json='{ "newtestkey": "newtestvalue" }')

        assert_package_has_extra(metadata_record_1['id'], 'validated', False)
        assert_package_has_extra(metadata_record_2['id'], 'validated', False)
        assert_metadata_schema_has_dependent_records(metadata_schema['id'],
                                                     metadata_record_1['id'],
                                                     metadata_record_2['id'])
        self.assert_invalidate_activity_logged(metadata_record_1['id'],
                                               'metadata_schema_update', obj)
        self.assert_invalidate_activity_logged(metadata_record_2['id'],
                                               'metadata_schema_update', obj)
Exemplo n.º 6
0
 def _validate_metadata_record(self, metadata_record):
     """
     :param metadata_record: metadata record dict
     """
     call_action('metadata_record_validate',
                 id=metadata_record['id'],
                 context={'user': self.normal_user['name']})
     assert_package_has_extra(metadata_record['id'], 'validated', True)
Exemplo n.º 7
0
 def test_create_no_invalidate_records_different_infrastructure_2(self):
     """
     Create a schema with the same standard but a different infrastructure to that of an existing
     validated metadata record. This should not invalidate the record.
     """
     metadata_record, _, _ = self._generate_and_validate_metadata_record()
     call_action(
         'metadata_schema_create',
         metadata_standard_id=metadata_record['metadata_standard_id'],
         organization_id='',
         infrastructure_id=ckanext_factories.Infrastructure()['id'],
         schema_json='{}')
     assert_package_has_extra(metadata_record['id'], 'validated', True)
Exemplo n.º 8
0
 def test_create_invalidate_records_matching_standard_organization(self):
     """
     Create a schema that will be used for validating an existing validated metadata record by virtue
     of matching on standard and organization. This should invalidate the record.
     """
     metadata_record, _, _ = self._generate_and_validate_metadata_record()
     result, obj = self.test_action(
         'metadata_schema_create',
         metadata_standard_id=metadata_record['metadata_standard_id'],
         organization_id=metadata_record['owner_org'],
         infrastructure_id='',
         schema_json='{}')
     assert_package_has_extra(metadata_record['id'], 'validated', False)
     self.assert_invalidate_activity_logged(metadata_record['id'],
                                            'metadata_schema_create', obj)
Exemplo n.º 9
0
 def test_create_invalidate_records_matching_standard(self):
     """
     Create a schema that will be used for validating an existing validated metadata record by virtue
     of matching on the record's metadata standard. This should invalidate the record.
     """
     # add org to schema to avoid unique key violation below
     metadata_record, _, _ = self._generate_and_validate_metadata_record(
         add_organization_to_schema=True)
     result, obj = self.test_action(
         'metadata_schema_create',
         metadata_standard_id=metadata_record['metadata_standard_id'],
         organization_id='',
         infrastructure_id='',
         schema_json='{}')
     assert_package_has_extra(metadata_record['id'], 'validated', False)
     self.assert_invalidate_activity_logged(metadata_record['id'],
                                            'metadata_schema_create', obj)
Exemplo n.º 10
0
    def test_delete_with_dependencies(self):
        metadata_record = ckanext_factories.MetadataRecord()
        workflow_state = ckanext_factories.WorkflowState()
        call_action('metadata_record_workflow_state_override',
                    context={'user': self.normal_user['name']},
                    id=metadata_record['id'],
                    workflow_state_id=workflow_state['id'])
        assert_package_has_extra(metadata_record['id'], 'workflow_state_id',
                                 workflow_state['id'])

        result, obj = self.test_action('workflow_state_delete',
                                       should_error=True,
                                       id=workflow_state['id'])
        assert_error(result, 'message',
                     'Workflow state has dependent metadata records')

        call_action('metadata_record_delete', id=metadata_record['id'])
        self.test_action('workflow_state_delete', id=workflow_state['id'])
Exemplo n.º 11
0
    def test_delete_invalidate_records(self):
        metadata_record, _, metadata_schema = self._generate_and_validate_metadata_record(
        )
        result, obj = self.test_action('metadata_schema_delete',
                                       id=metadata_schema['id'])
        assert_package_has_extra(metadata_record['id'], 'validated', False)
        self.assert_invalidate_activity_logged(metadata_record['id'],
                                               'metadata_schema_delete', obj)

        metadata_record, _, metadata_schema = self._generate_and_validate_metadata_record(
            add_organization_to_schema=True)
        result, obj = self.test_action('metadata_schema_delete',
                                       id=metadata_schema['id'])
        assert_package_has_extra(metadata_record['id'], 'validated', False)
        self.assert_invalidate_activity_logged(metadata_record['id'],
                                               'metadata_schema_delete', obj)

        metadata_record, _, metadata_schema = self._generate_and_validate_metadata_record(
            add_infrastructure_to_collection=True,
            add_infrastructure_to_schema=True)
        result, obj = self.test_action('metadata_schema_delete',
                                       id=metadata_schema['id'])
        assert_package_has_extra(metadata_record['id'], 'validated', False)
        self.assert_invalidate_activity_logged(metadata_record['id'],
                                               'metadata_schema_delete', obj)
Exemplo n.º 12
0
    def test_bulk_validate(self):
        self._bulk_action_setup()

        self.test_action('metadata_collection_validate',
                         id=self.metadata_collection['id'])
        assert_package_has_extra(self.metadata_records[0]['id'], 'validated',
                                 True)
        assert_package_has_extra(self.metadata_records[1]['id'], 'validated',
                                 True)
        assert_package_has_extra(self.metadata_records[2]['id'], 'validated',
                                 True)
Exemplo n.º 13
0
    def test_bulk_transition_async(self):
        self._bulk_action_setup()

        self.test_action(
            'metadata_collection_workflow_state_transition',
            id=self.metadata_collection['id'],
            workflow_state_id=self.workflow_transition_2['to_state_id'],
            async=True)
        assert_package_has_extra(self.metadata_records[0]['id'],
                                 'workflow_state_id', '')
        assert_package_has_extra(self.metadata_records[1]['id'],
                                 'workflow_state_id',
                                 self.workflow_transition_1['to_state_id'])
        assert_package_has_extra(self.metadata_records[2]['id'],
                                 'workflow_state_id', '')

        process_queued_tasks()
        assert_package_has_extra(self.metadata_records[0]['id'],
                                 'workflow_state_id', '')
        assert_package_has_extra(self.metadata_records[1]['id'],
                                 'workflow_state_id',
                                 self.workflow_transition_2['to_state_id'])
        assert_package_has_extra(self.metadata_records[2]['id'],
                                 'workflow_state_id', '')

        self.test_action(
            'metadata_collection_workflow_state_transition',
            id=self.metadata_collection['id'],
            workflow_state_id=self.workflow_transition_1['to_state_id'],
            async=True)
        assert_package_has_extra(self.metadata_records[0]['id'],
                                 'workflow_state_id', '')
        assert_package_has_extra(self.metadata_records[1]['id'],
                                 'workflow_state_id',
                                 self.workflow_transition_2['to_state_id'])
        assert_package_has_extra(self.metadata_records[2]['id'],
                                 'workflow_state_id', '')

        process_queued_tasks()
        assert_package_has_extra(self.metadata_records[0]['id'],
                                 'workflow_state_id',
                                 self.workflow_transition_1['to_state_id'])
        assert_package_has_extra(self.metadata_records[1]['id'],
                                 'workflow_state_id',
                                 self.workflow_transition_2['to_state_id'])
        assert_package_has_extra(self.metadata_records[2]['id'],
                                 'workflow_state_id',
                                 self.workflow_transition_1['to_state_id'])
Exemplo n.º 14
0
    def test_bulk_validate_async(self):
        self._bulk_action_setup()

        self.test_action('metadata_collection_validate',
                         id=self.metadata_collection['id'],
                         async=True)
        assert_package_has_extra(self.metadata_records[0]['id'], 'validated',
                                 False)
        assert_package_has_extra(self.metadata_records[1]['id'], 'validated',
                                 True)
        assert_package_has_extra(self.metadata_records[2]['id'], 'validated',
                                 False)

        process_queued_tasks()
        assert_package_has_extra(self.metadata_records[0]['id'], 'validated',
                                 True)
        assert_package_has_extra(self.metadata_records[1]['id'], 'validated',
                                 True)
        assert_package_has_extra(self.metadata_records[2]['id'], 'validated',
                                 True)