Files
bot-bottle/tests/unit/test_unittest_gate.py
T
didericis-codex 1022247ce5
prd-number-check / require-numbered-prds (pull_request) Successful in 7s
tracker-policy-pr / check-pr (pull_request) Successful in 8s
lint / lint (push) Successful in 58s
test / unit (pull_request) Successful in 48s
test / integration-docker (pull_request) Failing after 19m28s
test / coverage (pull_request) Has been skipped
test(ci): cover assurance gate entry points
2026-07-26 08:14:00 +00:00

92 lines
3.0 KiB
Python

"""Unit tests for CI's unittest execution-count gate."""
from __future__ import annotations
import unittest
from contextlib import redirect_stderr
from io import StringIO
from unittest.mock import Mock, patch
from scripts.unittest_gate import assurance_errors, main
class TestAssuranceErrors(unittest.TestCase):
def test_accepts_suite_that_meets_minimum_without_skips(self) -> None:
self.assertEqual(
[],
assurance_errors(
tests_run=22, skipped=0, minimum_executed=22, fail_on_skip=True
),
)
def test_rejects_green_suite_below_execution_minimum(self) -> None:
errors = assurance_errors(
tests_run=22, skipped=18, minimum_executed=22, fail_on_skip=False
)
self.assertEqual(1, len(errors))
self.assertIn("executed 4", errors[0])
def test_rejects_any_skip_when_required(self) -> None:
errors = assurance_errors(
tests_run=23, skipped=1, minimum_executed=22, fail_on_skip=True
)
self.assertEqual(["1 test(s) skipped in a no-skip suite"], errors)
def test_main_accepts_successful_assured_suite(self) -> None:
result = Mock(
testsRun=22,
skipped=[],
wasSuccessful=Mock(return_value=True),
)
runner = Mock()
runner.run.return_value = result
with patch(
"scripts.unittest_gate.unittest.defaultTestLoader.discover",
return_value=Mock(),
) as discover, patch(
"scripts.unittest_gate.unittest.TextTestRunner",
return_value=runner,
) as runner_type:
self.assertEqual(
0,
main([
"-s", "tests/integration",
"-t", ".",
"-p", "test_*.py",
"--minimum-executed", "22",
"--fail-on-skip",
"-v",
]),
)
discover.assert_called_once_with(
"tests/integration", pattern="test_*.py", top_level_dir="."
)
runner_type.assert_called_once_with(verbosity=2)
def test_main_rejects_unsuccessful_underfilled_suite(self) -> None:
result = Mock(
testsRun=1,
skipped=[(Mock(), "not available")],
wasSuccessful=Mock(return_value=False),
)
runner = Mock()
runner.run.return_value = result
error = StringIO()
with patch(
"scripts.unittest_gate.unittest.defaultTestLoader.discover",
return_value=Mock(),
), patch(
"scripts.unittest_gate.unittest.TextTestRunner",
return_value=runner,
), redirect_stderr(error):
self.assertEqual(
1,
main(["--minimum-executed", "2", "--fail-on-skip"]),
)
self.assertIn("below required minimum", error.getvalue())
self.assertIn("skipped in a no-skip suite", error.getvalue())
if __name__ == "__main__":
unittest.main()