34 lines
1.7 KiB
Python
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()
|