58 lines
3.1 KiB
Python
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()
|