"""包材订单到货批次不良品补填规则回归测试。""" import unittest from pathlib import Path class PackagingArrivalDefectiveTest(unittest.TestCase): def test_packaging_defective_allows_negative_and_over_arrival(self): from routes.purchase import _arrival_batch_quantities self.assertEqual((10, -3, True, True), _arrival_batch_quantities( {'arrival_qty': '10', 'defective_qty': '-3'}, 'packaging')) self.assertEqual((10, 30, True, True), _arrival_batch_quantities( {'arrival_qty': '10', 'defective_qty': '30'}, 'packaging')) def test_blank_defective_is_preserved_as_unfilled(self): from routes.purchase import _arrival_batch_quantities self.assertEqual((10, 0, True, False), _arrival_batch_quantities( {'arrival_qty': '10', 'defective_qty': ''}, 'packaging')) def test_domestic_and_overseas_use_same_defective_rules(self): from routes.purchase import _arrival_batch_quantities self.assertEqual((10, -1, True, True), _arrival_batch_quantities( {'arrival_qty': '10', 'defective_qty': '-1'}, 'domestic')) self.assertEqual((10, 11, True, True), _arrival_batch_quantities( {'arrival_qty': '10', 'defective_qty': '11'}, 'overseas')) def test_frontend_keeps_blank_and_only_validates_non_packaging_range(self): source = Path(__file__).resolve().parents[1].joinpath('static/js/app.js').read_text(encoding='utf-8') self.assertIn("defectiveRaw === '' ? ''", source) self.assertNotIn("orderType !== 'packaging' && defectiveRaw !== ''", source) self.assertIn("renderArrivalBatchStoredCell('number', 'batch-defective-qty'", source) self.assertNotIn('min="0" class="batch-defective-qty"', source) def test_defective_column_is_visible_for_all_three_order_types(self): source = Path(__file__).resolve().parents[1].joinpath('static/js/app.js').read_text(encoding='utf-8') self.assertIn('var showDefectiveQty = true;', source) self.assertIn("renderArrivalBatchStoredCell('number', 'batch-defective-qty'", source) if __name__ == '__main__': unittest.main()