Files
simkeep/tests/test_domain.py
T
2026-10-06 15:49:27 +08:00

43 lines
1.9 KiB
Python

import unittest
try:
from server import domain
except ImportError:
domain = None
class DomainTests(unittest.TestCase):
def run_function(self, name, *args):
self.assertIsNotNone(domain, 'Service date rules must be implemented')
return getattr(domain, name)(*args)
def test_calendar_months_and_leap_year(self):
self.assertEqual(self.run_function('add_cycle','2026-01-31',1,'months'),'2026-02-28')
self.assertEqual(self.run_function('add_cycle','2028-01-31',1,'months'),'2028-02-29')
def test_fixed_months_restore_original_anchor(self):
rule = dict(dueDate='2026-02-28',anchorDate='2026-01-31',interval=1,unit='months',anchor='scheduled')
self.assertEqual(self.run_function('next_due',rule,'2026-02-28'),'2026-03-31')
def test_early_fixed_completion_advances_current_occurrence(self):
rule = dict(dueDate='2026-10-10',anchorDate='2026-10-10',interval=1,unit='months',anchor='scheduled')
self.assertEqual(self.run_function('next_due',rule,'2026-10-04'),'2026-11-10')
def test_overdue_fixed_completion_skips_elapsed_occurrences(self):
rule = dict(dueDate='2026-01-31',anchorDate='2026-01-31',interval=1,unit='months',anchor='scheduled')
self.assertEqual(self.run_function('next_due',rule,'2026-04-01'),'2026-04-30')
def test_completion_based_dates_start_from_actual_date(self):
rule = dict(dueDate='2026-10-03',interval=90,unit='days',anchor='completion')
self.assertEqual(self.run_function('next_due',rule,'2026-10-04'),'2027-01-02')
def test_bad_date_and_cycle_rejected(self):
self.assertIsNotNone(domain)
for value, interval, unit in [('2026-02-30',1,'months'),('2026-10-04',0,'days'),('2026-10-04',True,'days')]:
with self.assertRaises(ValueError):
domain.add_cycle(value,interval,unit)
if __name__ == '__main__':
unittest.main()