Пример #1
0
 def setup_method(self, method):
     self.dummy_db_obj = mock.Mock(spec=DummyDbObj())
     self.dummy_db_obj.save(WorkflowStatus.NEW)
     self.wfe = DbWorkflowEngine(self.dummy_db_obj)
     self.data = ['one', 'two', 'three', 'four', 'five']
     self.tokens = [mock.Mock(spec=FakeToken(x)) for x in self.data]
Пример #2
0
class TestWorkflowEngineDb(object):
    def setup_method(self, method):
        self.dummy_db_obj = mock.Mock(spec=DummyDbObj())
        self.dummy_db_obj.save(WorkflowStatus.NEW)
        self.wfe = DbWorkflowEngine(self.dummy_db_obj)
        self.data = ['one', 'two', 'three', 'four', 'five']
        self.tokens = [mock.Mock(spec=FakeToken(x)) for x in self.data]

    def teardown_method(self, method):
        pass

    @mock.patch.object(TransitionActions, 'HaltProcessing')
    def test_halt_processing_calls_parent(self, mock_HaltProcessing):
        self.wfe.callbacks.add_many([m('mouse'), lambda obj, eng: eng.halt()])
        self.wfe.process(self.tokens)

        assert mock_HaltProcessing.call_count == len(self.data)
        for args_list in mock_HaltProcessing.call_args_list:
            args_list = args_list[0]
            assert isinstance(args_list[0], FakeToken)
            assert isinstance(args_list[1], DbWorkflowEngine)
            assert isinstance(args_list[2], Iterable)
            assert isinstance(args_list[3][1], HaltProcessing)  # exc_info

    def test_halt_processing_saves_eng_and_obj(self):
        self.wfe.callbacks.add_many([lambda obj, eng: eng.halt('please wait')])
        with pytest.raises(HaltProcessing):
            self.wfe.process(self.tokens)

        token = self.tokens[0]

        assert token.save.call_count == 2
        assert token.save.call_args_list[0][1][
            'status'] == token.known_statuses.RUNNING
        assert token.save.call_args_list[1][1][
            'status'] == token.known_statuses.HALTED

    def test_halt_processing_saves_correct_statuses(self):
        self.wfe.callbacks.add_many([lambda obj, eng: eng.halt('please wait')])
        with pytest.raises(HaltProcessing):
            self.wfe.process(self.tokens)

        # Token saved
        token = self.tokens[0]
        assert token.save.call_count == 2
        assert token.save.call_args_list[0][1][
            'status'] == token.known_statuses.RUNNING
        assert token.save.call_args_list[1][1][
            'status'] == token.known_statuses.HALTED

        # Engine saved
        assert self.dummy_db_obj.save.call_count == 3
        assert self.dummy_db_obj.save.call_args_list[0][0] == (
            WorkflowStatus.NEW, )
        assert self.dummy_db_obj.save.call_args_list[1][0] == (
            WorkflowStatus.RUNNING, )
        assert self.dummy_db_obj.save.call_args_list[2][0] == (
            WorkflowStatus.HALTED, )

    # Sorry, no parametrization here because mocks won't do.
    def test_before_object_save_object(self):
        DbProcessingFactory.before_object(self.wfe, self.tokens,
                                          self.tokens[0])
        assert self.tokens[0].save.call_count == 1
        assert self.tokens[0].save.call_args_list[0][1][
            'status'] == self.tokens[0].known_statuses.RUNNING

    # Sorry, no parametrization here because mocks won't do.
    def test_after_object_save_object(self):
        DbProcessingFactory.after_object(self.wfe, self.tokens, self.tokens[0])
        assert self.tokens[0].save.call_count == 1
        assert self.tokens[0].save.call_args_list[0][1][
            'status'] == self.tokens[0].known_statuses.COMPLETED

    @pytest.mark.parametrize("method, status, has_completed", (
        (DbProcessingFactory.before_processing, WorkflowStatus.RUNNING, False),
        (DbProcessingFactory.after_processing, WorkflowStatus.HALTED, False),
        (DbProcessingFactory.after_processing, WorkflowStatus.COMPLETED, True),
    ))
    def test_after_processing_save_status(self, method, status, has_completed):
        self.wfe.__class__.has_completed = mock.PropertyMock(
            return_value=has_completed)
        with mock.patch.object(self.wfe, 'save'):
            method(self.wfe, self.tokens)
            assert self.wfe.save.call_count == 1
            assert self.wfe.save.call_args_list[0][0] == (status, )

    def test_before_processing_save_status(self):
        with mock.patch.object(self.wfe, 'save'):
            self.wfe.processing_factory.before_processing(self.wfe, [])
            assert self.wfe.save.call_count == 1
            assert self.wfe.save.call_args_list[0][0] == (
                WorkflowStatus.RUNNING, )
Пример #3
0
class TestWorkflowEngineDb(object):

    def setup_method(self, method):
        self.dummy_db_obj = mock.Mock(spec=DummyDbObj())
        self.dummy_db_obj.save(WorkflowStatus.NEW)
        self.wfe = DbWorkflowEngine(self.dummy_db_obj)
        self.data = ['one', 'two', 'three', 'four', 'five']
        self.tokens = [mock.Mock(spec=FakeToken(x)) for x in self.data]

    def teardown_method(self, method):
        pass

    @mock.patch.object(TransitionActions, 'HaltProcessing')
    def test_halt_processing_calls_parent(self, mock_HaltProcessing):
        self.wfe.callbacks.add_many([
            m('mouse'),
            lambda obj, eng: eng.halt()
        ])
        self.wfe.process(self.tokens)

        assert mock_HaltProcessing.call_count == len(self.data)
        for args_list in mock_HaltProcessing.call_args_list:
            args_list = args_list[0]
            assert isinstance(args_list[0], FakeToken)
            assert isinstance(args_list[1], DbWorkflowEngine)
            assert isinstance(args_list[2], Iterable)
            assert isinstance(args_list[3][1], HaltProcessing)  # exc_info

    def test_halt_processing_saves_eng_and_obj(self):
        self.wfe.callbacks.add_many([
            lambda obj, eng: eng.halt('please wait')
        ])
        with pytest.raises(HaltProcessing):
            self.wfe.process(self.tokens)

        token = self.tokens[0]

        assert token.save.call_count == 2
        assert token.save.call_args_list[0][1]['status'] == token.known_statuses.RUNNING
        assert token.save.call_args_list[1][1]['status'] == token.known_statuses.HALTED

    def test_halt_processing_saves_correct_statuses(self):
        self.wfe.callbacks.add_many([
            lambda obj, eng: eng.halt('please wait')
        ])
        with pytest.raises(HaltProcessing):
            self.wfe.process(self.tokens)

        # Token saved
        token = self.tokens[0]
        assert token.save.call_count == 2
        assert token.save.call_args_list[0][1]['status'] == token.known_statuses.RUNNING
        assert token.save.call_args_list[1][1]['status'] == token.known_statuses.HALTED

        # Engine saved
        assert self.dummy_db_obj.save.call_count == 3
        assert self.dummy_db_obj.save.call_args_list[0][0] == (WorkflowStatus.NEW, )
        assert self.dummy_db_obj.save.call_args_list[1][0] == (WorkflowStatus.RUNNING, )
        assert self.dummy_db_obj.save.call_args_list[2][0] == (WorkflowStatus.HALTED, )

    # Sorry, no parametrization here because mocks won't do.
    def test_before_object_save_object(self):
        DbProcessingFactory.before_object(self.wfe, self.tokens, self.tokens[0])
        assert self.tokens[0].save.call_count == 1
        assert self.tokens[0].save.call_args_list[0][1]['status'] == self.tokens[0].known_statuses.RUNNING

    # Sorry, no parametrization here because mocks won't do.
    def test_after_object_save_object(self):
        DbProcessingFactory.after_object(self.wfe, self.tokens, self.tokens[0])
        assert self.tokens[0].save.call_count == 1
        assert self.tokens[0].save.call_args_list[0][1]['status'] == self.tokens[0].known_statuses.COMPLETED

    @pytest.mark.parametrize("method, status, has_completed", (
        (DbProcessingFactory.before_processing, WorkflowStatus.RUNNING, False),
        (DbProcessingFactory.after_processing, WorkflowStatus.HALTED, False),
        (DbProcessingFactory.after_processing, WorkflowStatus.COMPLETED, True),
    ))
    def test_after_processing_save_status(self, method, status, has_completed):
        self.wfe.__class__.has_completed = mock.PropertyMock(return_value=has_completed)
        with mock.patch.object(self.wfe, 'save'):
            method(self.wfe, self.tokens)
            assert self.wfe.save.call_count == 1
            assert self.wfe.save.call_args_list[0][0] == (status, )

    def test_before_processing_save_status(self):
        with mock.patch.object(self.wfe, 'save'):
            self.wfe.processing_factory.before_processing(self.wfe, [])
            assert self.wfe.save.call_count == 1
            assert self.wfe.save.call_args_list[0][0] == (WorkflowStatus.RUNNING,)
Пример #4
0
 def setup_method(self, method):
     self.dummy_db_obj = mock.Mock(spec=DummyDbObj())
     self.dummy_db_obj.save(WorkflowStatus.NEW)
     self.wfe = DbWorkflowEngine(self.dummy_db_obj)
     self.data = ['one', 'two', 'three', 'four', 'five']
     self.tokens = [mock.Mock(spec=FakeToken(x)) for x in self.data]
    def save(self, status):
        pass

    @property
    def uuid(self):
        pass

    @property
    def name(self):
        pass

    @property
    def status(self):
        return self._status

    @property
    def objects(self):
        pass


Global_Array = []
dummy_db_obj = mock.Mock(spec=DummyDbObj())
dummy_db_obj.save(WorkflowStatus.NEW)
my_db_engine = DbWorkflowEngine(dummy_db_obj)
my_db_engine.callbacks.replace(callbacks)
try:
    data = ['one', 'two', 'three', 'four', 'five']
    my_db_engine.process(data)
except HaltProcessing:
    print 'The student has failed this test!'