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

58 lines
3.1 KiB
Python

import io
import unittest
from datetime import datetime
from unittest.mock import patch
from zoneinfo import ZoneInfo
from flask import Flask, jsonify
import openpyxl
from routes import planning
class PlanningDailySortTest(unittest.TestCase):
def test_daily_boundary_and_manual_override(self):
tz = ZoneInfo('Asia/Shanghai')
for hour, minute, expected in [(9, 59, ('', 'asc')), (10, 0, ('建议下单数量', 'desc')),
(23, 59, ('建议下单数量', 'desc')), (0, 0, ('', 'asc'))]:
now = datetime(2026, 10, 21, hour, minute, tzinfo=tz)
self.assertEqual(planning.planning_sort(now=now), expected)
self.assertEqual(planning.planning_sort('库存', 'asc', now), ('库存', 'asc'))
def test_export_reuses_filtered_list_and_preserves_row_order(self):
app = Flask(__name__)
app.secret_key = 'test'
payload = {'view': 'external', 'search': 'SKU', 'sort_by': '建议下单数量',
'sort_order': 'desc', 'custom_field': '__multi__', 'custom_value': '[]',
'columns': [{'field': 'product_code', 'label': '编号'},
{'field': '建议下单数量', 'label': '建议下单数量'}]}
with app.test_request_context('/api/planning/export', method='POST', json=payload), \
patch.object(planning, '_ensure_global_config', return_value={}), \
patch.object(planning.planning_list, '__wrapped__') as listing:
listing.return_value = jsonify({'data': {'rows': [
{'product_code': 'SKU-B', '建议下单数量': 100},
{'product_code': 'SKU-A', '建议下单数量': 2}]}})
response = planning.planning_export.__wrapped__()
listing.assert_called_once_with(dict(payload, page=1, size=1000000))
response.direct_passthrough = False
book = openpyxl.load_workbook(io.BytesIO(response.get_data()))
self.assertEqual(list(book.active.values), [('编号', '建议下单数量'), ('SKU-B', 100), ('SKU-A', 2)])
def test_export_keeps_999_as_integer(self):
app = Flask(__name__)
payload = {'columns': [{'field': 'product_code', 'label': '货品编号'},
{'field': '库存可支撑天数', 'label': '库存可支撑天数'}]}
with app.test_request_context('/api/planning/export', method='POST', json=payload), \
patch.object(planning, '_ensure_global_config', return_value={}), \
patch.object(planning.planning_list, '__wrapped__') as listing:
listing.return_value = jsonify({'data': {'rows': [
{'product_code': 'SKU-999', '库存可支撑天数': 999}]}})
response = planning.planning_export.__wrapped__()
response.direct_passthrough = False
book = openpyxl.load_workbook(io.BytesIO(response.get_data()))
self.assertEqual(list(book.active.values),
[('货品编号', '库存可支撑天数'), ('SKU-999', 999)])
if __name__ == '__main__':
unittest.main()