返回 last30days-skill
test_dates.py
根目录 / tests / test_dates.py
1 """Tests for dates module."""
2
3 import unittest
4 from datetime import datetime, timedelta, timezone
5
6 # Add lib to path
7
8 from lib import dates
9
10
11 class TestGetDateRange(unittest.TestCase):
12 def test_returns_tuple_of_two_strings(self):
13 from_date, to_date = dates.get_date_range(30)
14 self.assertIsInstance(from_date, str)
15 self.assertIsInstance(to_date, str)
16
17 def test_date_format(self):
18 from_date, to_date = dates.get_date_range(30)
19 # Should be YYYY-MM-DD format
20 self.assertRegex(from_date, r'^\d{4}-\d{2}-\d{2}$')
21 self.assertRegex(to_date, r'^\d{4}-\d{2}-\d{2}$')
22
23 def test_range_is_correct_days(self):
24 from_date, to_date = dates.get_date_range(30)
25 start = datetime.strptime(from_date, "%Y-%m-%d")
26 end = datetime.strptime(to_date, "%Y-%m-%d")
27 delta = end - start
28 self.assertEqual(delta.days, 30)
29
30
31 class TestParseDate(unittest.TestCase):
32 def test_parse_iso_date(self):
33 result = dates.parse_date("2026-01-15")
34 self.assertIsNotNone(result)
35 self.assertEqual(result.year, 2026)
36 self.assertEqual(result.month, 1)
37 self.assertEqual(result.day, 15)
38
39 def test_parse_timestamp(self):
40 # Unix timestamp for 2026-01-15 00:00:00 UTC
41 result = dates.parse_date("1768435200")
42 self.assertIsNotNone(result)
43
44 def test_parse_none(self):
45 result = dates.parse_date(None)
46 self.assertIsNone(result)
47
48 def test_parse_empty_string(self):
49 result = dates.parse_date("")
50 self.assertIsNone(result)
51
52
53 class TestTimestampToDate(unittest.TestCase):
54 def test_valid_timestamp(self):
55 # 2026-01-15 00:00:00 UTC
56 result = dates.timestamp_to_date(1768435200)
57 self.assertEqual(result, "2026-01-15")
58
59 def test_none_timestamp(self):
60 result = dates.timestamp_to_date(None)
61 self.assertIsNone(result)
62
63
64 class TestGetDateConfidence(unittest.TestCase):
65 def test_high_confidence_in_range(self):
66 result = dates.get_date_confidence("2026-01-15", "2026-01-01", "2026-01-31")
67 self.assertEqual(result, "high")
68
69 def test_low_confidence_before_range(self):
70 result = dates.get_date_confidence("2025-12-15", "2026-01-01", "2026-01-31")
71 self.assertEqual(result, "low")
72
73 def test_low_confidence_no_date(self):
74 result = dates.get_date_confidence(None, "2026-01-01", "2026-01-31")
75 self.assertEqual(result, "low")
76
77
78 class TestDaysAgo(unittest.TestCase):
79 def test_today(self):
80 today = datetime.now(timezone.utc).date().isoformat()
81 result = dates.days_ago(today)
82 self.assertEqual(result, 0)
83
84 def test_none_date(self):
85 result = dates.days_ago(None)
86 self.assertIsNone(result)
87
88
89 class TestRecencyScore(unittest.TestCase):
90 def test_today_is_100(self):
91 today = datetime.now(timezone.utc).date().isoformat()
92 result = dates.recency_score(today)
93 self.assertEqual(result, 100)
94
95 def test_30_days_ago_is_0(self):
96 old_date = (datetime.now(timezone.utc).date() - timedelta(days=30)).isoformat()
97 result = dates.recency_score(old_date)
98 self.assertEqual(result, 0)
99
100 def test_15_days_ago_is_50(self):
101 mid_date = (datetime.now(timezone.utc).date() - timedelta(days=15)).isoformat()
102 result = dates.recency_score(mid_date)
103 self.assertEqual(result, 50)
104
105 def test_none_date_is_0(self):
106 result = dates.recency_score(None)
107 self.assertEqual(result, 0)
108
109 if __name__ == "__main__":
110 unittest.main()
111
111 lines PYTHON