def setUp(self): self.super() self.task = AgiloTicket(self.env, t_type=Type.TASK) # this task is not stored in the db on purpose - so I can check # that no workflow does any permanent damage! del self.task._old[Key.TYPE] self._set_status_to(Status.NEW) req = self.teh.mock_request('foo') self.finder = TransitionFinder(self.env, req, self.task) self.assert_equals({}, self.task._old)
class TestFindTransitionInWorkflow(AgiloTestCase): def setUp(self): self.super() self.task = AgiloTicket(self.env, t_type=Type.TASK) # this task is not stored in the db on purpose - so I can check # that no workflow does any permanent damage! del self.task._old[Key.TYPE] self._set_status_to(Status.NEW) req = self.teh.mock_request('foo') self.finder = TransitionFinder(self.env, req, self.task) self.assert_equals({}, self.task._old) def _set_status_to(self, status): self.task[Key.STATUS] = status del self.task._old[Key.STATUS] self.assert_equals({}, self.task._old) def test_can_find_transition_from_new_to_in_progress(self): self.assert_equals(Status.NEW, self.task[Key.STATUS]) transition = self.finder.transition_to_in_progress_state() self.assert_equals(['accept'], transition) self.assert_equals({}, self.task._old) def test_can_find_direct_transition_from_accepted_to_closed(self): self._set_status_to(Status.ACCEPTED) transition = self.finder.transition_to_closed_state() self.assert_equals(['resolve'], transition) self.assert_equals({}, self.task._old) def test_can_find_direct_transition_from_assigned_to_new(self): self.teh.change_workflow_config([('putback', 'assigned -> new')]) self._set_status_to(Status.ASSIGNED) transition = self.finder.transition_to_new_state() self.assert_equals(['putback'], transition) self.assert_equals({}, self.task._old) def test_can_find_even_indirect_transitions(self): self.teh.change_workflow_config([('putback', 'assigned -> new')]) self._set_status_to(Status.ACCEPTED) transition = self.finder.transition_to_new_state() self.assert_equals(['reassign', 'putback'], transition) self.assert_equals({}, self.task._old) def test_use_shortest_transition(self): self.teh.change_workflow_config([ ('ask', 'assigned -> needinfo'), ('invalidate', 'needinfo -> new'), ('putback', 'assigned -> new'), ]) self._set_status_to(Status.ACCEPTED) transition = self.finder.transition_to_new_state() self.assert_equals(['reassign', 'putback'], transition) self.assert_equals({}, self.task._old) def test_return_none_for_assigned_to_new_if_no_transition_allowed(self): self._set_status_to('assigned') transition = self.finder.transition_to_new_state() self.assert_none(transition) self.assert_equals({}, self.task._old) def test_return_none_for_reopenend_to_new_if_no_transition_allowed(self): self._set_status_to(Status.REOPENED) transition = self.finder.transition_to_new_state() self.assert_none(transition) self.assert_equals({}, self.task._old) def test_empty_transition_if_ticket_is_already_in_target_state(self): self.assert_equals(Status.NEW, self.task[Key.STATUS]) self.assert_equals([], self.finder.transition_to_new_state()) self._set_status_to(Status.ACCEPTED) self.assert_equals([], self.finder.transition_to_in_progress_state()) self._set_status_to(Status.CLOSED) self.assert_equals([], self.finder.transition_to_closed_state())
class TestFindTransitionInWorkflow(AgiloTestCase): def setUp(self): self.super() self.task = AgiloTicket(self.env, t_type=Type.TASK) # this task is not stored in the db on purpose - so I can check # that no workflow does any permanent damage! del self.task._old[Key.TYPE] self._set_status_to(Status.NEW) req = self.teh.mock_request('foo') self.finder = TransitionFinder(self.env, req, self.task) self.assert_equals({}, self.task._old) def _set_status_to(self, status): self.task[Key.STATUS] = status del self.task._old[Key.STATUS] self.assert_equals({}, self.task._old) def test_can_find_transition_from_new_to_in_progress(self): self.assert_equals(Status.NEW, self.task[Key.STATUS]) transition = self.finder.transition_to_in_progress_state() self.assert_equals(['accept'], transition) self.assert_equals({}, self.task._old) def test_can_find_direct_transition_from_accepted_to_closed(self): self._set_status_to(Status.ACCEPTED) transition = self.finder.transition_to_closed_state() self.assert_equals(['resolve'], transition) self.assert_equals({}, self.task._old) def test_can_find_direct_transition_from_assigned_to_new(self): self.teh.change_workflow_config([('putback', 'assigned -> new')]) self._set_status_to(Status.ASSIGNED) transition = self.finder.transition_to_new_state() self.assert_equals(['putback'], transition) self.assert_equals({}, self.task._old) def test_can_find_even_indirect_transitions(self): self.teh.change_workflow_config([('putback', 'assigned -> new')]) self._set_status_to(Status.ACCEPTED) transition = self.finder.transition_to_new_state() self.assert_equals(['reassign', 'putback'], transition) self.assert_equals({}, self.task._old) def test_use_shortest_transition(self): self.teh.change_workflow_config([('ask', 'assigned -> needinfo'), ('invalidate', 'needinfo -> new'), ('putback', 'assigned -> new'), ]) self._set_status_to(Status.ACCEPTED) transition = self.finder.transition_to_new_state() self.assert_equals(['reassign', 'putback'], transition) self.assert_equals({}, self.task._old) def test_return_none_for_assigned_to_new_if_no_transition_allowed(self): self._set_status_to('assigned') transition = self.finder.transition_to_new_state() self.assert_none(transition) self.assert_equals({}, self.task._old) def test_return_none_for_reopenend_to_new_if_no_transition_allowed(self): self._set_status_to(Status.REOPENED) transition = self.finder.transition_to_new_state() self.assert_none(transition) self.assert_equals({}, self.task._old) def test_empty_transition_if_ticket_is_already_in_target_state(self): self.assert_equals(Status.NEW, self.task[Key.STATUS]) self.assert_equals([], self.finder.transition_to_new_state()) self._set_status_to(Status.ACCEPTED) self.assert_equals([], self.finder.transition_to_in_progress_state()) self._set_status_to(Status.CLOSED) self.assert_equals([], self.finder.transition_to_closed_state())