feat: integrate last30days and daily-news-report skills
This commit is contained in:
114
skills/last30days/tests/test_dates.py
Normal file
114
skills/last30days/tests/test_dates.py
Normal file
@@ -0,0 +1,114 @@
|
||||
"""Tests for dates module."""
|
||||
|
||||
import sys
|
||||
import unittest
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from pathlib import Path
|
||||
|
||||
# Add lib to path
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent / "scripts"))
|
||||
|
||||
from lib import dates
|
||||
|
||||
|
||||
class TestGetDateRange(unittest.TestCase):
|
||||
def test_returns_tuple_of_two_strings(self):
|
||||
from_date, to_date = dates.get_date_range(30)
|
||||
self.assertIsInstance(from_date, str)
|
||||
self.assertIsInstance(to_date, str)
|
||||
|
||||
def test_date_format(self):
|
||||
from_date, to_date = dates.get_date_range(30)
|
||||
# Should be YYYY-MM-DD format
|
||||
self.assertRegex(from_date, r'^\d{4}-\d{2}-\d{2}$')
|
||||
self.assertRegex(to_date, r'^\d{4}-\d{2}-\d{2}$')
|
||||
|
||||
def test_range_is_correct_days(self):
|
||||
from_date, to_date = dates.get_date_range(30)
|
||||
start = datetime.strptime(from_date, "%Y-%m-%d")
|
||||
end = datetime.strptime(to_date, "%Y-%m-%d")
|
||||
delta = end - start
|
||||
self.assertEqual(delta.days, 30)
|
||||
|
||||
|
||||
class TestParseDate(unittest.TestCase):
|
||||
def test_parse_iso_date(self):
|
||||
result = dates.parse_date("2026-01-15")
|
||||
self.assertIsNotNone(result)
|
||||
self.assertEqual(result.year, 2026)
|
||||
self.assertEqual(result.month, 1)
|
||||
self.assertEqual(result.day, 15)
|
||||
|
||||
def test_parse_timestamp(self):
|
||||
# Unix timestamp for 2026-01-15 00:00:00 UTC
|
||||
result = dates.parse_date("1768435200")
|
||||
self.assertIsNotNone(result)
|
||||
|
||||
def test_parse_none(self):
|
||||
result = dates.parse_date(None)
|
||||
self.assertIsNone(result)
|
||||
|
||||
def test_parse_empty_string(self):
|
||||
result = dates.parse_date("")
|
||||
self.assertIsNone(result)
|
||||
|
||||
|
||||
class TestTimestampToDate(unittest.TestCase):
|
||||
def test_valid_timestamp(self):
|
||||
# 2026-01-15 00:00:00 UTC
|
||||
result = dates.timestamp_to_date(1768435200)
|
||||
self.assertEqual(result, "2026-01-15")
|
||||
|
||||
def test_none_timestamp(self):
|
||||
result = dates.timestamp_to_date(None)
|
||||
self.assertIsNone(result)
|
||||
|
||||
|
||||
class TestGetDateConfidence(unittest.TestCase):
|
||||
def test_high_confidence_in_range(self):
|
||||
result = dates.get_date_confidence("2026-01-15", "2026-01-01", "2026-01-31")
|
||||
self.assertEqual(result, "high")
|
||||
|
||||
def test_low_confidence_before_range(self):
|
||||
result = dates.get_date_confidence("2025-12-15", "2026-01-01", "2026-01-31")
|
||||
self.assertEqual(result, "low")
|
||||
|
||||
def test_low_confidence_no_date(self):
|
||||
result = dates.get_date_confidence(None, "2026-01-01", "2026-01-31")
|
||||
self.assertEqual(result, "low")
|
||||
|
||||
|
||||
class TestDaysAgo(unittest.TestCase):
|
||||
def test_today(self):
|
||||
today = datetime.now(timezone.utc).date().isoformat()
|
||||
result = dates.days_ago(today)
|
||||
self.assertEqual(result, 0)
|
||||
|
||||
def test_none_date(self):
|
||||
result = dates.days_ago(None)
|
||||
self.assertIsNone(result)
|
||||
|
||||
|
||||
class TestRecencyScore(unittest.TestCase):
|
||||
def test_today_is_100(self):
|
||||
today = datetime.now(timezone.utc).date().isoformat()
|
||||
result = dates.recency_score(today)
|
||||
self.assertEqual(result, 100)
|
||||
|
||||
def test_30_days_ago_is_0(self):
|
||||
old_date = (datetime.now(timezone.utc).date() - timedelta(days=30)).isoformat()
|
||||
result = dates.recency_score(old_date)
|
||||
self.assertEqual(result, 0)
|
||||
|
||||
def test_15_days_ago_is_50(self):
|
||||
mid_date = (datetime.now(timezone.utc).date() - timedelta(days=15)).isoformat()
|
||||
result = dates.recency_score(mid_date)
|
||||
self.assertEqual(result, 50)
|
||||
|
||||
def test_none_date_is_0(self):
|
||||
result = dates.recency_score(None)
|
||||
self.assertEqual(result, 0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user