def test_step_status_lists_in_progress_commits(self):
        step = BuildStep("a step")
        commit1 = Mock(**{"status": "commit status"})

        step.add_commit(commit1)
        step.start()

        self.assertEqual(step.status["waiting"], [])
        self.assertEqual(step.status["in-progress"], ["commit status"])
    def test_step_status_lists_waiting_commits(self):
        step = BuildStep("a step")
        commit1, commit2 = Mock(**{"status":"commit 1"}), Mock(**{"status":"commit 2"})

        step.add_commit(commit1)
        step.start()
        step.succeed()
        step.add_commit(commit2)

        self.assertEqual(step.status["waiting"], ["commit 2"])
    def test_build_step_failures_call_failure_callbacks(self):
        step, commit1, commit2, callback = BuildStep("step1"), MockCommit("1"), MockCommit("2"), Mock()
        step.add_failure_listener(callback)

        step.add_commit(commit1)
        step.add_commit(commit2)
        step.start()
        step.fail()

        callback.assert_called_once_with([commit1, commit2])
    def test_build_step_doesnt_call_wrong_callbacks(self):
        step = BuildStep("step1")
        commit1, commit2 = MockCommit("1"), MockCommit("2")
        success_callback, failure_callback = Mock(), Mock()
        step.add_success_listener(success_callback)
        step.add_failure_listener(failure_callback)

        step.add_commit(commit1)
        step.start()
        step.fail()

        step.add_commit(commit2)
        step.start()
        step.succeed()

        failure_callback.assert_called_once_with([commit1])
        success_callback.assert_called_once_with([commit2])
    def test_build_steps_only_fails_commits_present_when_the_step_was_started(self):
        step, commit1, commit2, callback = BuildStep("step1"), MockCommit("1"), MockCommit("2"), Mock()
        step.add_failure_listener(callback)

        step.add_commit(commit1)
        step.start()
        step.add_commit(commit2)
        step.fail()

        callback.assert_called_once_with([commit1])