def test_forwarding_predecessors_are_ignored(self):
        forwarding = create(Builder('forwarding')
                            .in_state('forwarding-state-closed'))
        successor = create(Builder('task')
                           .in_state('task-state-in-progress')
                           .successor_from(forwarding))

        sender = WorkflowResponseSyncerSender(successor, self.request)
        self.assertEqual(
            [], sender.get_related_tasks_to_sync(transition='task-transition-reassign'))
    def test_task_predecessors_are_synced(self):
        task = create(Builder('task').in_state('task-state-in-progress'))
        successor = create(
            Builder('task').in_state('task-state-in-progress').successor_from(
                task))

        sender = WorkflowResponseSyncerSender(successor, self.request)
        self.assertEqual([task.get_sql_object()],
                         sender.get_related_tasks_to_sync(
                             transition='task-transition-reassign'))
    def test_sync_state_change_on_successor_to_predecessor(self):
        predecessor = create(Builder('task').in_state('task-state-resolved'))
        successor = create(Builder('task').successor_from(predecessor))

        sender = WorkflowResponseSyncerSender(successor, self.request)

        sender.sync_related_tasks('task-transition-resolved-in-progress',
                                  text=u'Please extend chapter 2.4')

        self.assertEquals('task-state-in-progress',
                          api.content.get_state(predecessor))
    def test_forwarding_predecessors_are_ignored(self):
        forwarding = create(
            Builder('forwarding').in_state('forwarding-state-closed'))
        successor = create(
            Builder('task').in_state('task-state-in-progress').successor_from(
                forwarding))

        sender = WorkflowResponseSyncerSender(successor, self.request)
        self.assertEqual([],
                         sender.get_related_tasks_to_sync(
                             transition='task-transition-reassign'))
    def test_task_predecessors_are_synced(self):
        task = create(Builder('task')
                            .in_state('task-state-in-progress'))
        successor = create(Builder('task')
                           .in_state('task-state-in-progress')
                           .successor_from(task))

        sender = WorkflowResponseSyncerSender(successor, self.request)
        self.assertEqual(
            [task.get_sql_object()],
            sender.get_related_tasks_to_sync(transition='task-transition-reassign'))
    def test_sync_state_change_on_successor_to_predecessor(self):
        predecessor = create(Builder('task').in_state('task-state-resolved'))
        successor = create(Builder('task').successor_from(predecessor))

        sender = WorkflowResponseSyncerSender(successor, self.request)

        sender.sync_related_tasks(
            'task-transition-resolved-in-progress',
            text=u'Please extend chapter 2.4')

        self.assertEquals('task-state-in-progress',
                          api.content.get_state(predecessor))
    def test_raises_sync_exception_raises_workflow_specific_exception_message(
            self):
        predecessor = create(Builder('task').in_state('task-state-resolved'))

        sender = WorkflowResponseSyncerSender(object(), self.request)

        with self.assertRaises(ResponseSyncerSenderException) as exception:
            sender.raise_sync_exception(predecessor.get_sql_object(),
                                        'publish', 'some text')

        self.assertEqual(
            'Could not execute workflow transition (publish) on remote admin unit client1 (task-1)',
            str(exception.exception))
    def test_raises_sync_exception_raises_workflow_specific_exception_message(self):
        predecessor = create(Builder('task').in_state('task-state-resolved'))

        sender = WorkflowResponseSyncerSender(object(), self.request)

        with self.assertRaises(ResponseSyncerSenderException) as exception:
            sender.raise_sync_exception(
                predecessor.get_sql_object(),
                'publish', 'some text')

        self.assertEqual(
            'Could not execute workflow transition (publish) on remote admin unit admin-unit-1 (task-1)',
            str(exception.exception))
    def test_adds_corresponding_response(self):
        predecessor = create(Builder('task'))
        successor = create(
            Builder('task').successor_from(predecessor).in_state(
                'task-state-in-progress'))

        sender = WorkflowResponseSyncerSender(predecessor, self.request)

        sender.sync_related_tasks('task-transition-in-progress-resolved',
                                  text=u'\xe4\xe4hhh I am done!')

        response = IResponseContainer(successor)[-1]
        self.assertEquals('task-transition-in-progress-resolved',
                          response.transition)
        self.assertEquals('\xc3\xa4\xc3\xa4hhh I am done!', response.text)
        self.assertEquals(TEST_USER_ID, response.creator)
        self.assertEquals([{
            'before': 'task-state-in-progress',
            'after': 'task-state-resolved',
            'id': 'review_state',
            'name': u'Issue state'
        }], response.changes)