File size: 4,202 Bytes
db06ffa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
"""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()