def test_run_unactions_should_wait_for_the_process(self):
        actions = [{'initial': 1}, {'middle': 2}, {'final': 3}]

        run_task_unactions('test', actions)

        self._initial_stream_mock.close.assert_called_once()
        self._middle_stream_mock.wait.assert_called_once()
    def test_run_unactions_should_kill_process_if_action_raises(self):
        actions = [{'ifailure': 1}, {'middle': 2}, {'final': 3}]

        with self.assertRaises(Exception):
            run_task_unactions('test', actions)

        self._middle_stream_mock.send_signal.assert_called_once()
    def test_run_unactions_should_fail_if_process_fails(self):
        actions = [{'initial': 1}, {'middle': 2}, {'final': 3}]
        self._middle_stream_mock.wait.return_value = 1

        with self.assertRaises(Exception):
            run_task_unactions('test', actions)

        self._middle_stream_mock.stderr.__iter__.assert_called()
    def test_run_unactions_with_unexisting_action_should_fail(self):
        actions = [{'nope': None}]

        with self.assertRaises(KeyError):
            run_task_unactions('test', actions)
    def test_run_unactions_with_action_failing_should_raise_the_exception(
            self):
        actions = [{'ffailure': 1}]

        with self.assertRaisesRegex(KeyError, r'f'):
            run_task_unactions('test', actions)
    def test_run_unactions_with_action_without_unaction_should_fail(self):
        actions = [{'initial-with-no-unaction': 1}]

        with self.assertRaises(Exception):
            run_task_unactions('test', actions)
    def test_run_unactions_with_incompatible_action_should_fail(self):
        actions = [{'initial': 1}]

        with self.assertRaises(Exception):
            run_task_unactions('test', actions)
    def test_run_unactions_should_work(self):
        actions = [{'final': 1}]

        run_task_unactions('test', actions)
 def test_run_unactions_should_work(self):
     run_task_unactions('test', [])
    def test_run_unactions_should_work_2(self):
        actions = [{'initial': 1}, {'middle': 2}, {'final': 3}]

        run_task_unactions('test', actions)
    def test_run_unactions_with_bad_action_should_fail(self):
        actions = [{'bad': ':(', 'final': ':(('}]

        with self.assertRaises(Exception):
            run_task_unactions('test', actions)
    def test_run_unactions_with_action_failing_should_raise_the_exception(
            self):
        actions = [{'initial': 1}, {'ffailure': 2}]

        with self.assertRaises(KeyError):
            run_task_unactions('test', actions)
    def test_run_unactions_should_dispose_streams(self):
        actions = [{'initial': 1}, {'final': 2}]

        run_task_unactions('test', actions)

        self._initial_stream_mock.close.assert_called_once()