Spaces:
Sleeping
Sleeping
File size: 4,531 Bytes
3c5146b | 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 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 | """Tests for core/date_engine.py three-mode logic."""
import os
import sys
import unittest
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
from core.date_engine import (
days_between,
detect_date_mode,
format_date_range,
offset_date,
validate_date_order,
)
class TestDetectDateMode(unittest.TestCase):
def test_mode_a_both_provided_no_ai(self):
result = detect_date_mode("2025-01-01", "2025-03-01", False, False)
self.assertEqual(result, "A")
def test_mode_b_start_only(self):
result = detect_date_mode("2025-01-01", "", False, False)
self.assertEqual(result, "B")
def test_mode_c_end_only(self):
result = detect_date_mode("", "2025-03-01", False, False)
self.assertEqual(result, "C")
def test_raises_value_error_both_blank(self):
with self.assertRaises(ValueError) as ctx:
detect_date_mode("", "", False, False)
self.assertEqual(str(ctx.exception), "At least one date must be provided.")
def test_raises_value_error_both_ai(self):
with self.assertRaises(ValueError):
detect_date_mode("2025-01-01", "2025-03-01", True, True)
def test_start_ai_true_treats_as_no_start(self):
# start_ai=True with start provided -> has_start is False -> Mode C if end is real
result = detect_date_mode("2025-01-01", "2025-03-01", True, False)
self.assertEqual(result, "C")
def test_start_ai_true_no_end_raises(self):
with self.assertRaises(ValueError):
detect_date_mode("2025-01-01", "", True, False)
class TestValidateDateOrder(unittest.TestCase):
def test_valid_order_returns_true(self):
self.assertTrue(validate_date_order("2025-01-01", "2025-06-01"))
def test_same_date_returns_true(self):
self.assertTrue(validate_date_order("2025-03-15", "2025-03-15"))
def test_reversed_order_returns_false(self):
self.assertFalse(validate_date_order("2025-06-01", "2025-01-01"))
def test_empty_start_returns_true(self):
self.assertTrue(validate_date_order("", "2025-06-01"))
def test_empty_end_returns_true(self):
self.assertTrue(validate_date_order("2025-01-01", ""))
def test_both_empty_returns_true(self):
self.assertTrue(validate_date_order("", ""))
class TestFormatDateRange(unittest.TestCase):
def test_formats_both_dates_correctly(self):
result = format_date_range("2025-01-15", "2025-03-20")
self.assertEqual(result, "Jan 15, 2025 \u2192 Mar 20, 2025")
def test_handles_none_start(self):
result = format_date_range(None, "2025-03-20")
self.assertEqual(result, "Mar 20, 2025")
def test_handles_empty_start(self):
result = format_date_range("", "2025-03-20")
self.assertEqual(result, "Mar 20, 2025")
def test_handles_none_end(self):
result = format_date_range("2025-01-15", None)
self.assertEqual(result, "Jan 15, 2025")
def test_handles_both_none(self):
result = format_date_range(None, None)
self.assertEqual(result, "")
def test_handles_both_empty(self):
result = format_date_range("", "")
self.assertEqual(result, "")
class TestDaysBetween(unittest.TestCase):
def test_returns_correct_count(self):
self.assertEqual(days_between("2025-01-01", "2025-01-11"), 10)
def test_returns_correct_count_reversed(self):
self.assertEqual(days_between("2025-01-11", "2025-01-01"), 10)
def test_same_date_returns_zero(self):
self.assertEqual(days_between("2025-06-01", "2025-06-01"), 0)
def test_invalid_start_returns_zero(self):
self.assertEqual(days_between("not-a-date", "2025-01-01"), 0)
def test_invalid_end_returns_zero(self):
self.assertEqual(days_between("2025-01-01", ""), 0)
class TestOffsetDate(unittest.TestCase):
def test_correctly_advances_date(self):
self.assertEqual(offset_date("2025-01-01", 30), "2025-01-31")
def test_advance_across_month_boundary(self):
self.assertEqual(offset_date("2025-01-15", 20), "2025-02-04")
def test_negative_offset_goes_back(self):
self.assertEqual(offset_date("2025-03-01", -1), "2025-02-28")
def test_zero_offset_returns_same(self):
self.assertEqual(offset_date("2025-06-15", 0), "2025-06-15")
def test_invalid_base_raises(self):
with self.assertRaises(ValueError):
offset_date("not-a-date", 5)
if __name__ == "__main__":
unittest.main()
|