Spaces:
Running on Zero
Running on Zero
| """Tests for the preflight runner.""" | |
| from __future__ import annotations | |
| import unittest | |
| from unittest.mock import patch | |
| from zsgdp.preflight import StepResult, format_failures, format_summary, run_preflight | |
| class FormatSummaryTests(unittest.TestCase): | |
| def test_pass_summary_lists_each_step(self): | |
| from zsgdp.preflight import PreflightResult | |
| result = PreflightResult( | |
| steps=[ | |
| StepResult(name="unit", passed=True, elapsed_seconds=0.5), | |
| StepResult(name="regression", passed=True, elapsed_seconds=0.7), | |
| ] | |
| ) | |
| summary = format_summary(result) | |
| self.assertIn("[ok] unit", summary) | |
| self.assertIn("[ok] regression", summary) | |
| self.assertIn("preflight: PASS", summary) | |
| def test_fail_summary_marks_failed_step(self): | |
| from zsgdp.preflight import PreflightResult | |
| result = PreflightResult( | |
| steps=[ | |
| StepResult(name="unit", passed=True, elapsed_seconds=0.5), | |
| StepResult(name="regression", passed=False, elapsed_seconds=1.2, output="snapshot drift"), | |
| ] | |
| ) | |
| summary = format_summary(result) | |
| self.assertIn("[FAIL] regression", summary) | |
| self.assertIn("preflight: FAIL", summary) | |
| def test_skipped_steps_render_as_skip(self): | |
| from zsgdp.preflight import PreflightResult | |
| result = PreflightResult( | |
| steps=[StepResult(name="unit", passed=True, elapsed_seconds=0.0, skipped=True)] | |
| ) | |
| self.assertIn("[skip] unit", format_summary(result)) | |
| def test_format_failures_concatenates_outputs(self): | |
| from zsgdp.preflight import PreflightResult | |
| result = PreflightResult( | |
| steps=[ | |
| StepResult(name="unit", passed=False, elapsed_seconds=0.0, output="boom"), | |
| StepResult(name="regression", passed=False, elapsed_seconds=0.0, output="snapshot off"), | |
| ] | |
| ) | |
| text = format_failures(result) | |
| self.assertIn("--- unit output ---", text) | |
| self.assertIn("boom", text) | |
| self.assertIn("--- regression output ---", text) | |
| self.assertIn("snapshot off", text) | |
| class RunPreflightTests(unittest.TestCase): | |
| def test_skip_flags_mark_steps_skipped(self): | |
| with patch("zsgdp.preflight._run_step") as run_step: | |
| run_step.return_value = StepResult(name="unit", passed=True, elapsed_seconds=0.0) | |
| result = run_preflight( | |
| skip_unit=True, | |
| skip_regression=True, | |
| skip_space_check=True, | |
| skip_parsers=True, | |
| ) | |
| self.assertEqual(run_step.call_count, 0) | |
| self.assertTrue(all(step.skipped for step in result.steps)) | |
| self.assertTrue(result.passed) | |
| def test_aggregates_pass_when_all_steps_succeed(self): | |
| with patch( | |
| "zsgdp.preflight._run_step", | |
| side_effect=lambda name, command, cwd: StepResult(name=name, passed=True, elapsed_seconds=0.1), | |
| ): | |
| result = run_preflight() | |
| self.assertTrue(result.passed) | |
| # No benchmark by default => 4 steps. | |
| self.assertEqual(len(result.steps), 4) | |
| def test_failure_in_one_step_fails_overall(self): | |
| def _step(name, command, cwd): | |
| return StepResult(name=name, passed=(name != "regression"), elapsed_seconds=0.1, output="boom" if name == "regression" else "") | |
| with patch("zsgdp.preflight._run_step", side_effect=_step): | |
| result = run_preflight() | |
| self.assertFalse(result.passed) | |
| failed_names = [step.name for step in result.failed_steps] | |
| self.assertEqual(failed_names, ["regression"]) | |
| def test_benchmark_step_added_when_enabled(self): | |
| with patch( | |
| "zsgdp.preflight._run_step", | |
| side_effect=lambda name, command, cwd: StepResult(name=name, passed=True, elapsed_seconds=0.1), | |
| ): | |
| result = run_preflight(run_benchmark=True) | |
| names = [step.name for step in result.steps] | |
| self.assertEqual(names, ["unit", "regression", "space_check", "parsers", "benchmark"]) | |
| if __name__ == "__main__": | |
| unittest.main() | |