main
py 64 lines 2.2 KB
Raw
1 import unittest
2
3 from scripts.rerun_modes import validate_modes
4
5
6 class RerunModeTests(unittest.TestCase):
7 def test_normal_mode_allows_guarded_publish_and_reuse_default(self) -> None:
8 decision = validate_modes(run_mode="normal", source_refresh_policy="reuse-same-day")
9
10 self.assertFalse(decision.reasons)
11 self.assertTrue(decision.publish_allowed)
12 self.assertTrue(decision.crawl_allowed)
13 self.assertIn("normal guarded", decision.action)
14
15 def test_rebuild_week_requires_explicit_restore_mode(self) -> None:
16 decision = validate_modes(
17 run_mode="normal",
18 source_refresh_policy="reuse-same-day",
19 rebuild_week="2026-W21",
20 )
21
22 self.assertIn("requires run_mode=restore", decision.reasons[0])
23
24 def test_restore_requires_source_run_id(self) -> None:
25 decision = validate_modes(
26 run_mode="restore",
27 source_refresh_policy="reuse-same-day",
28 rebuild_week="2026-W21",
29 )
30
31 self.assertTrue(any("requires source_run_id" in reason for reason in decision.reasons))
32
33 def test_restore_accepts_source_bound_week(self) -> None:
34 decision = validate_modes(
35 run_mode="restore",
36 source_refresh_policy="reuse-same-day",
37 rebuild_week="2026-W21",
38 source_run_id="26753498571",
39 )
40
41 self.assertFalse(decision.reasons)
42 self.assertFalse(decision.crawl_allowed)
43 self.assertTrue(decision.publish_allowed)
44
45 def test_source_run_id_is_restore_only(self) -> None:
46 decision = validate_modes(
47 run_mode="normal",
48 source_refresh_policy="reuse-same-day",
49 source_run_id="26753498571",
50 )
51
52 self.assertTrue(
53 any("only allowed with run_mode=restore" in reason for reason in decision.reasons)
54 )
55
56 def test_dry_run_cannot_publish_release(self) -> None:
57 decision = validate_modes(
58 run_mode="dry-run",
59 source_refresh_policy="reuse-same-day",
60 publish_release=True,
61 )
62
63 self.assertFalse(decision.publish_allowed)
64 self.assertTrue(any("publish_release" in reason for reason in decision.reasons))