dy-dashboard/tests/test_planning_snapshot.py
2026-10-28 11:14:17 +08:00

34 lines
1.7 KiB
Python

"""Regression coverage for immutable planning suggestion snapshots."""
import unittest
from pathlib import Path
from unittest.mock import patch
from services import planning_snapshot
class PlanningSnapshotTest(unittest.TestCase):
def test_counter_resets_and_restarts(self):
self.assertEqual(planning_snapshot._next_counter(0, {'suggested_qty': 5, 'consecutive_days': 8}), 0)
self.assertEqual(planning_snapshot._next_counter(10, {'suggested_qty': 0, 'consecutive_days': 0}), 1)
self.assertEqual(planning_snapshot._next_counter(10, None), 1)
self.assertEqual(planning_snapshot._next_counter(10, {'suggested_qty': 1, 'consecutive_days': 8}), 9)
def test_rows_use_snapshot_value_and_default_to_zero(self):
rows = [{'product_code': 'A', '建议下单数量': 99}, {'product_code': 'B', '建议下单数量': 10}]
with patch.object(planning_snapshot, 'consecutive_days_map', return_value={'A': 4}):
planning_snapshot.attach_consecutive_days(rows, '2026-10-20')
self.assertEqual(rows[0]['连续建议天数'], 4)
self.assertEqual(rows[1]['连续建议天数'], 0)
def test_planning_page_and_export_expose_new_field(self):
root = Path(__file__).resolve().parents[1]
app_js = (root / 'static/js/app.js').read_text(encoding='utf-8')
planning_py = (root / 'routes/planning.py').read_text(encoding='utf-8')
self.assertIn("{field: '连续建议天数', label: '连续建议天数', defaultShow: true}", app_js)
self.assertIn("'连续建议天数':1", app_js)
self.assertIn("'建议下单数量','连续建议天数'", planning_py)
if __name__ == '__main__':
unittest.main()