Exemplo n.º 1
0
 def test_update_invalid_deleted_revert(self):
     workflow_state1 = ckanext_factories.WorkflowState()
     workflow_state2 = ckanext_factories.WorkflowState()
     call_action('workflow_state_delete', id=workflow_state1['id'])
     result, obj = self.test_action('workflow_state_update',
                                    should_error=True,
                                    id=workflow_state2['id'],
                                    revert_state_id=workflow_state1['id'])
     assert_error(result, 'revert_state_id', 'Not found: Workflow State')
 def test_create_valid(self):
     workflow_state1 = ckanext_factories.WorkflowState()
     workflow_state2 = ckanext_factories.WorkflowState()
     input_dict = {
         'from_state_id': workflow_state1['id'],
         'to_state_id': workflow_state2['id'],
     }
     result, obj = self.test_action('workflow_transition_create',
                                    **input_dict)
     assert_object_matches_dict(obj, input_dict)
Exemplo n.º 3
0
 def test_update_invalid_duplicate_name(self):
     workflow_state1 = ckanext_factories.WorkflowState()
     workflow_state2 = ckanext_factories.WorkflowState()
     input_dict = {
         'id': workflow_state1['id'],
         'name': workflow_state2['name'],
     }
     result, obj = self.test_action('workflow_state_update',
                                    should_error=True,
                                    **input_dict)
     assert_error(result, 'name', 'Duplicate name: Workflow State')
 def test_create_invalid_deleted_states(self):
     workflow_state1 = ckanext_factories.WorkflowState()
     workflow_state2 = ckanext_factories.WorkflowState()
     call_action('workflow_state_delete', id=workflow_state1['id'])
     call_action('workflow_state_delete', id=workflow_state2['id'])
     result, obj = self.test_action('workflow_transition_create',
                                    should_error=True,
                                    from_state_id=workflow_state1['id'],
                                    to_state_id=workflow_state2['id'])
     assert_error(result, 'from_state_id', 'Not found: Workflow State')
     assert_error(result, 'to_state_id', 'Not found: Workflow State')
Exemplo n.º 5
0
 def test_update_valid_change_revert_1(self):
     workflow_state1 = ckanext_factories.WorkflowState()
     workflow_state2 = ckanext_factories.WorkflowState()
     input_dict = {
         'id': workflow_state1['id'],
         'name': workflow_state1['name'],
         'revert_state_id': workflow_state2['id'],
         'metadata_records_private': True,
         'workflow_rules_json': '{}',
     }
     result, obj = self.test_action('workflow_state_update', **input_dict)
     assert_object_matches_dict(obj, input_dict)
Exemplo n.º 6
0
    def test_delete_with_revert_references(self):
        workflow_state1 = ckanext_factories.WorkflowState()
        workflow_state2 = ckanext_factories.WorkflowState(
            revert_state_id=workflow_state1['name'])
        assert workflow_state2['revert_state_id'] == workflow_state1['id']

        self.test_action('workflow_state_delete', id=workflow_state1['id'])
        workflow_state2['revert_state_id'] = None
        del workflow_state2['revision_id']
        del workflow_state2['display_name']
        assert_object_matches_dict(ckanext_model.WorkflowState.get(
            workflow_state2['id']),
                                   workflow_state2,
                                   json_values=('workflow_rules_json', ))
Exemplo n.º 7
0
 def test_update_invalid_bad_revert(self):
     workflow_state = ckanext_factories.WorkflowState()
     result, obj = self.test_action('workflow_state_update',
                                    should_error=True,
                                    id=workflow_state['id'],
                                    revert_state_id='foo')
     assert_error(result, 'revert_state_id', 'Not found: Workflow State')
Exemplo n.º 8
0
 def test_update_invalid_missing_values(self):
     workflow_state = ckanext_factories.WorkflowState()
     result, obj = self.test_action('workflow_state_update',
                                    should_error=True,
                                    id=workflow_state['id'],
                                    workflow_rules_json='')
     assert_error(result, 'workflow_rules_json', 'Missing value')
Exemplo n.º 9
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.º 10
0
 def test_update_invalid_missing_params(self):
     workflow_state = ckanext_factories.WorkflowState()
     result, obj = self.test_action('workflow_state_update',
                                    should_error=True,
                                    id=workflow_state['id'])
     assert_error(result, 'revert_state_id', 'Missing parameter')
     assert_error(result, 'metadata_records_private', 'Missing parameter')
     assert_error(result, 'workflow_rules_json', 'Missing parameter')
Exemplo n.º 11
0
 def test_create_valid_with_revert(self):
     workflow_state = ckanext_factories.WorkflowState()
     input_dict = {
         'name': 'test-workflow-state',
         'revert_state_id': workflow_state['id'],
         'metadata_records_private': False,
         'workflow_rules_json': '{ "testkey": "testvalue" }',
     }
     result, obj = self.test_action('workflow_state_create', **input_dict)
     assert_object_matches_dict(obj, input_dict)
 def test_create_invalid_self_transition(self):
     workflow_state = ckanext_factories.WorkflowState()
     result, obj = self.test_action('workflow_transition_create',
                                    should_error=True,
                                    from_state_id=workflow_state['id'],
                                    to_state_id=workflow_state['id'])
     assert_error(
         result, '__after',
         'The from- and to-state of a workflow transition cannot be the same.'
     )
Exemplo n.º 13
0
 def test_update_invalid_self_revert(self):
     workflow_state = ckanext_factories.WorkflowState()
     input_dict = {
         'id': workflow_state['id'],
         'revert_state_id': workflow_state['id'],
     }
     result, obj = self.test_action('workflow_state_update',
                                    should_error=True,
                                    **input_dict)
     assert_error(result, 'revert_state_id',
                  'A workflow state cannot revert to itself')
    def test_create_invalid_backward_transition(self):
        workflow_state1 = ckanext_factories.WorkflowState()
        workflow_state2 = ckanext_factories.WorkflowState(
            revert_state_id=workflow_state1['id'])
        workflow_state3 = ckanext_factories.WorkflowState(
            revert_state_id=workflow_state2['id'])

        result, obj = self.test_action('workflow_transition_create',
                                       should_error=True,
                                       from_state_id=workflow_state2['id'],
                                       to_state_id=workflow_state1['id'])
        assert_error(result, '__after',
                     'Backward transition in workflow state graph')

        result, obj = self.test_action('workflow_transition_create',
                                       should_error=True,
                                       from_state_id=workflow_state3['id'],
                                       to_state_id=workflow_state1['id'])
        assert_error(result, '__after',
                     'Backward transition in workflow state graph')
Exemplo n.º 15
0
    def test_update_invalid_circular_revert(self):
        workflow_state1 = ckanext_factories.WorkflowState()
        workflow_state2 = ckanext_factories.WorkflowState(
            revert_state_id=workflow_state1['id'])
        workflow_state3 = ckanext_factories.WorkflowState(
            revert_state_id=workflow_state2['id'])

        result, obj = self.test_action('workflow_state_update',
                                       should_error=True,
                                       id=workflow_state1['id'],
                                       revert_state_id=workflow_state2['id'])
        assert_error(result, 'revert_state_id',
                     'Revert loop in workflow state graph')

        result, obj = self.test_action('workflow_state_update',
                                       should_error=True,
                                       id=workflow_state1['id'],
                                       revert_state_id=workflow_state3['id'])
        assert_error(result, 'revert_state_id',
                     'Revert loop in workflow state graph')
Exemplo n.º 16
0
    def test_delete_with_transition_references(self):
        workflow_state = ckanext_factories.WorkflowState()
        workflow_transition = ckanext_factories.WorkflowTransition(
            from_state_id=workflow_state['id'])
        self.test_action('workflow_state_delete', id=workflow_state['id'])
        assert ckanext_model.WorkflowTransition.get(
            workflow_transition['id']).state == 'deleted'

        workflow_state = ckanext_factories.WorkflowState()
        workflow_transition = ckanext_factories.WorkflowTransition(
            to_state_id=workflow_state['id'])
        self.test_action('workflow_state_delete', id=workflow_state['id'])
        assert ckanext_model.WorkflowTransition.get(
            workflow_transition['id']).state == 'deleted'

        workflow_state = ckanext_factories.WorkflowState()
        workflow_transition = ckanext_factories.WorkflowTransition(
            from_state_id=None, to_state_id=workflow_state['id'])
        self.test_action('workflow_state_delete', id=workflow_state['id'])
        assert ckanext_model.WorkflowTransition.get(
            workflow_transition['id']).state == 'deleted'
Exemplo n.º 17
0
 def test_update_valid(self):
     workflow_state = ckanext_factories.WorkflowState()
     input_dict = {
         'id': workflow_state['id'],
         'name': 'updated-test-workflow-state',
         'title': 'Updated Test Workflow State',
         'description': 'Updated test workflow state description',
         'revert_state_id': '',
         'metadata_records_private': False,
         'workflow_rules_json': '{ "testkey": "newtestvalue" }',
     }
     result, obj = self.test_action('workflow_state_update', **input_dict)
     assert_object_matches_dict(obj, input_dict)
Exemplo n.º 18
0
    def test_update_invalid_forward_revert(self):
        workflow_state1 = ckanext_factories.WorkflowState()
        workflow_state2 = ckanext_factories.WorkflowState()
        workflow_state3 = ckanext_factories.WorkflowState()
        ckanext_factories.WorkflowTransition(
            from_state_id=workflow_state1['id'],
            to_state_id=workflow_state2['id'])
        ckanext_factories.WorkflowTransition(
            from_state_id=workflow_state2['id'],
            to_state_id=workflow_state3['id'])

        result, obj = self.test_action('workflow_state_update',
                                       should_error=True,
                                       id=workflow_state1['id'],
                                       revert_state_id=workflow_state2['id'])
        assert_error(result, 'revert_state_id',
                     'Forward revert in workflow state graph')

        result, obj = self.test_action('workflow_state_update',
                                       should_error=True,
                                       id=workflow_state1['id'],
                                       revert_state_id=workflow_state3['id'])
        assert_error(result, 'revert_state_id',
                     'Forward revert in workflow state graph')
    def test_create_invalid_circular_transition(self):
        workflow_state1 = ckanext_factories.WorkflowState()
        workflow_state2 = ckanext_factories.WorkflowState()
        workflow_state3 = ckanext_factories.WorkflowState()
        ckanext_factories.WorkflowTransition(
            from_state_id=workflow_state1['id'],
            to_state_id=workflow_state2['id'])
        ckanext_factories.WorkflowTransition(
            from_state_id=workflow_state2['id'],
            to_state_id=workflow_state3['id'])

        result, obj = self.test_action('workflow_transition_create',
                                       should_error=True,
                                       from_state_id=workflow_state2['id'],
                                       to_state_id=workflow_state1['id'])
        assert_error(result, '__after',
                     'Transition loop in workflow state graph')

        result, obj = self.test_action('workflow_transition_create',
                                       should_error=True,
                                       from_state_id=workflow_state3['id'],
                                       to_state_id=workflow_state1['id'])
        assert_error(result, '__after',
                     'Transition loop in workflow state graph')
Exemplo n.º 20
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.º 21
0
 def test_create_invalid_duplicate_name(self):
     workflow_state = ckanext_factories.WorkflowState()
     result, obj = self.test_action('workflow_state_create',
                                    should_error=True,
                                    name=workflow_state['name'])
     assert_error(result, 'name', 'Duplicate name: Workflow State')
Exemplo n.º 22
0
 def test_delete_valid(self):
     workflow_state = ckanext_factories.WorkflowState()
     self.test_action('workflow_state_delete', id=workflow_state['id'])