Example #1
0
 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)
Example #2
0
 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)
Example #3
0
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())
Example #4
0
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())