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

43 lines
2.1 KiB
Python

import unittest
from pathlib import Path
from unittest.mock import patch
from routes import purchase
class FinishedQianyuInventoryTest(unittest.TestCase):
def test_finished_list_uses_imported_cached_transit_function(self):
source = (Path(__file__).resolve().parents[1] / 'routes/purchase.py').read_text(
encoding='utf-8')
self.assertNotIn('compute_product_in_transit()', source)
self.assertIn('transit_map = compute_product_in_transit_cached()', source)
def test_split_cloud_stock_without_changing_shared_map(self):
cloud = {'SKU': 4935, 'OTHER': 10}
with patch.object(purchase, 'compute_cloud_inventory_cached', return_value=cloud), \
patch.object(purchase, 'query', side_effect=[
[{'product_code': 'SKU', 'quantity': 3956}], [{'warehouse_code': '035'}]
]) as query:
available, qianyu = purchase._finished_inventory_maps()
self.assertEqual(available, {'SKU': 979, 'OTHER': 10})
self.assertEqual(qianyu, {'SKU': 3956})
self.assertEqual(cloud['SKU'], 4935)
self.assertIn('MAX(data_date)', query.call_args_list[0].args[0])
self.assertIn('CAST(warehouse_code AS UNSIGNED) = 35', query.call_args_list[0].args[0])
def test_non_cloud_qianyu_is_displayed_without_subtracting_twice(self):
with patch.object(purchase, 'compute_cloud_inventory_cached', return_value={'SKU': 979}), \
patch.object(purchase, 'query', side_effect=[
[{'product_code': 'SKU', 'quantity': 3956}], []
]):
available, qianyu = purchase._finished_inventory_maps()
self.assertEqual(available['SKU'], 979)
self.assertEqual(qianyu['SKU'], 3956)
def test_no_qianyu_inventory(self):
with patch.object(purchase, 'compute_cloud_inventory_cached', return_value={'SKU': 10}), \
patch.object(purchase, 'query', side_effect=[[], [{'warehouse_code': '35'}]]):
available, qianyu = purchase._finished_inventory_maps()
self.assertEqual(available, {'SKU': 10})
self.assertEqual(qianyu, {})