返回 last30days-skill
test_as_of_date.py
根目录 / tests / test_as_of_date.py
1 # ruff: noqa: E402
2 """Tests for --as-of date support."""
3
4 import json
5 import subprocess
6 import sys
7 import unittest
8 from pathlib import Path
9
10
11 REPO_ROOT = Path(__file__).resolve().parents[1]
12 sys.path.insert(0, str(REPO_ROOT / "skills" / "last30days" / "scripts"))
13
14 import last30days as cli
15 from lib import dates
16
17
18 class AsOfDateTests(unittest.TestCase):
19 def test_get_date_range_with_as_of_date_and_7_days(self):
20 from_date, to_date = dates.get_date_range(7, "2020-05-25")
21
22 self.assertEqual("2020-05-18", from_date)
23 self.assertEqual("2020-05-25", to_date)
24
25 def test_get_date_range_with_as_of_date_and_30_days(self):
26 from_date, to_date = dates.get_date_range(30, "2020-05-25")
27
28 self.assertEqual("2020-04-25", from_date)
29 self.assertEqual("2020-05-25", to_date)
30
31 def test_get_date_range_rejects_invalid_as_of_date(self):
32 with self.assertRaisesRegex(ValueError, "YYYY-MM-DD"):
33 dates.get_date_range(7, "2020/05/25")
34
35 def test_build_parser_accepts_as_of_date(self):
36 parser = cli.build_parser()
37 args, extra = parser.parse_known_args(
38 ["--as-of", "2020-05-25", "--days", "7", "OpenAI"]
39 )
40
41 self.assertEqual("2020-05-25", args.as_of_date)
42 self.assertEqual(7, args.lookback_days)
43 self.assertEqual(["OpenAI"], args.topic)
44 self.assertEqual([], extra)
45
46 def test_mock_json_cli_uses_as_of_date_range(self):
47 result = subprocess.run(
48 [
49 sys.executable,
50 "skills/last30days/scripts/last30days.py",
51 "OpenAI",
52 "--mock",
53 "--emit=json",
54 "--json-profile=raw",
55 "--as-of",
56 "2020-05-25",
57 "--days",
58 "7",
59 ],
60 cwd=REPO_ROOT,
61 capture_output=True,
62 text=True,
63 encoding="utf-8",
64 errors="replace",
65 check=False,
66 )
67
68 self.assertEqual(0, result.returncode, result.stderr)
69 payload = json.loads(result.stdout)
70
71 self.assertEqual("2020-05-18", payload["range_from"])
72 self.assertEqual("2020-05-25", payload["range_to"])
73
74 def test_cli_rejects_invalid_as_of_date(self):
75 result = subprocess.run(
76 [
77 sys.executable,
78 "skills/last30days/scripts/last30days.py",
79 "OpenAI",
80 "--mock",
81 "--emit=json",
82 "--as-of",
83 "2020/05/25",
84 ],
85 cwd=REPO_ROOT,
86 capture_output=True,
87 text=True,
88 encoding="utf-8",
89 errors="replace",
90 check=False,
91 )
92
93 self.assertNotEqual(0, result.returncode)
94 self.assertIn("YYYY-MM-DD", result.stderr)
95
96 def test_days_ago_uses_reference_date(self):
97 self.assertEqual(
98 5,
99 dates.days_ago("2020-05-20", reference_date="2020-05-25"),
100 )
101
102 def test_recency_score_uses_reference_date(self):
103 self.assertEqual(
104 50,
105 dates.recency_score(
106 "2020-05-20",
107 max_days=10,
108 reference_date="2020-05-25",
109 ),
110 )
111
112
113 if __name__ == "__main__":
114 unittest.main()
115
115 lines PYTHON