更新登录页及优化相关功能
This commit is contained in:
@@ -60,7 +60,7 @@ def integrity_error() -> IntegrityError:
|
||||
|
||||
def make_pallet_record(
|
||||
pallet_id: int,
|
||||
capacity_packages: int = 20,
|
||||
capacity_packages: int = 100,
|
||||
test_batch_id: int | None = None,
|
||||
) -> SimpleNamespace:
|
||||
return SimpleNamespace(
|
||||
@@ -113,7 +113,7 @@ class TestPalletVoContract(unittest.TestCase):
|
||||
BusinessUserOptionModel.model_validate(value)
|
||||
|
||||
def test_pallet_edit_rejects_code_and_qr_token(self) -> None:
|
||||
base = {'palletId': 1, 'capacityPackages': 20, 'assetStatus': '0'}
|
||||
base = {'palletId': 1, 'capacityPackages': 100, 'assetStatus': '0'}
|
||||
for identity_field in ({'palletCode': 'P-001'}, {'qrToken': 'fixed-token'}):
|
||||
with self.subTest(identity_field=identity_field), self.assertRaises(ValidationError):
|
||||
PalletEditModel.model_validate({**base, **identity_field})
|
||||
@@ -147,7 +147,7 @@ class TestPalletMasterDao(unittest.IsolatedAsyncioTestCase):
|
||||
pallet = BizPallet(
|
||||
pallet_code='P-001',
|
||||
qr_token='fixed-token',
|
||||
capacity_packages=20,
|
||||
capacity_packages=100,
|
||||
asset_status='0',
|
||||
)
|
||||
inventory = BizPalletInventory(
|
||||
@@ -179,7 +179,7 @@ class TestPalletMasterDao(unittest.IsolatedAsyncioTestCase):
|
||||
self.assertNotIn('test_batch_id', compile_sql(statement.whereclause))
|
||||
|
||||
async def test_update_pallet_sql_never_contains_identity_fields(self) -> None:
|
||||
edit = PalletEditModel(palletId=3, capacityPackages=18, assetStatus='1', remark='停用')
|
||||
edit = PalletEditModel(palletId=3, capacityPackages=100, assetStatus='1', remark='停用')
|
||||
updated_at = datetime(2026, 7, 26, 10, 30)
|
||||
|
||||
await MasterDao.update_pallet(
|
||||
@@ -193,7 +193,7 @@ class TestPalletMasterDao(unittest.IsolatedAsyncioTestCase):
|
||||
statement = self.db.execute.await_args.args[0]
|
||||
sql = compile_sql(statement)
|
||||
self.assertIn('UPDATE biz_pallet', sql)
|
||||
self.assertIn('capacity_packages=18', sql)
|
||||
self.assertIn('capacity_packages=100', sql)
|
||||
self.assertIn("asset_status='1'", sql)
|
||||
self.assertIn("remark='停用'", sql)
|
||||
self.assertIn("update_by='admin'", sql)
|
||||
@@ -357,7 +357,7 @@ class TestPalletCreationService(unittest.IsolatedAsyncioTestCase):
|
||||
self.db = MagicMock(spec=AsyncSession)
|
||||
self.admin = make_admin()
|
||||
self.scope = TestBatchScope.formal()
|
||||
self.create = PalletCreateModel(palletCode='P-001', capacityPackages=20, remark='测试托盘')
|
||||
self.create = PalletCreateModel(palletCode='P-001', capacityPackages=100, remark='测试托盘')
|
||||
self.fixed_time = datetime(2026, 7, 26, 11, 30)
|
||||
|
||||
async def test_add_generates_server_token_and_initial_inventory_in_one_transaction(self) -> None:
|
||||
@@ -393,7 +393,7 @@ class TestPalletCreationService(unittest.IsolatedAsyncioTestCase):
|
||||
pallet = captured['pallet']
|
||||
self.assertEqual('P-001', pallet.pallet_code)
|
||||
self.assertEqual('server-fixed-token', pallet.qr_token)
|
||||
self.assertEqual(20, pallet.capacity_packages)
|
||||
self.assertEqual(100, pallet.capacity_packages)
|
||||
self.assertEqual('0', pallet.asset_status)
|
||||
self.assertEqual('admin', pallet.create_by)
|
||||
self.assertEqual(self.fixed_time, pallet.create_time)
|
||||
@@ -549,7 +549,7 @@ class TestPalletQueryAndEditService(unittest.IsolatedAsyncioTestCase):
|
||||
self.assertEqual('托盘不存在', raised.exception.message)
|
||||
|
||||
async def test_edit_updates_only_mutable_fields_with_server_audit(self) -> None:
|
||||
edit = PalletEditModel(palletId=3, capacityPackages=12, assetStatus='1', remark='停用')
|
||||
edit = PalletEditModel(palletId=3, capacityPackages=100, assetStatus='1', remark='停用')
|
||||
updated_at = datetime(2026, 7, 26, 12, 30)
|
||||
update_pallet = AsyncMock()
|
||||
lock_actions: list[str] = []
|
||||
@@ -591,7 +591,11 @@ class TestPalletQueryAndEditService(unittest.IsolatedAsyncioTestCase):
|
||||
edit = PalletEditModel(palletId=3, capacityPackages=11, assetStatus='0')
|
||||
update_pallet = AsyncMock()
|
||||
with (
|
||||
patch.object(MasterDao, 'get_pallet', new=AsyncMock(return_value=make_pallet_record(3))),
|
||||
patch.object(
|
||||
MasterDao,
|
||||
'get_pallet',
|
||||
new=AsyncMock(return_value=make_pallet_record(3, capacity_packages=11)),
|
||||
),
|
||||
patch.object(
|
||||
MasterDao,
|
||||
'get_pallet_inventory',
|
||||
@@ -608,7 +612,7 @@ class TestPalletQueryAndEditService(unittest.IsolatedAsyncioTestCase):
|
||||
self.db.rollback.assert_awaited_once()
|
||||
|
||||
async def test_edit_rejects_missing_inventory(self) -> None:
|
||||
edit = PalletEditModel(palletId=3, capacityPackages=20, assetStatus='0')
|
||||
edit = PalletEditModel(palletId=3, capacityPackages=100, assetStatus='0')
|
||||
with (
|
||||
patch.object(MasterDao, 'get_pallet', new=AsyncMock(return_value=make_pallet_record(3))),
|
||||
patch.object(MasterDao, 'get_pallet_inventory', new=AsyncMock(return_value=None)),
|
||||
@@ -975,7 +979,7 @@ class TestPalletBatchScopeService(unittest.IsolatedAsyncioTestCase):
|
||||
self.db = MagicMock(spec=AsyncSession)
|
||||
self.admin = make_admin()
|
||||
self.scope = make_test_scope(9)
|
||||
self.create = PalletCreateModel(palletCode='P-T09', capacityPackages=20)
|
||||
self.create = PalletCreateModel(palletCode='P-T09', capacityPackages=100)
|
||||
|
||||
async def test_list_detail_and_qrcode_forward_scope_to_scoped_dao_reads(self) -> None:
|
||||
query = PalletPageQueryModel()
|
||||
@@ -1049,7 +1053,7 @@ class TestPalletBatchScopeService(unittest.IsolatedAsyncioTestCase):
|
||||
events.append('get-pallet')
|
||||
return make_pallet_record(7, test_batch_id=9)
|
||||
|
||||
edit = PalletEditModel(palletId=7, capacityPackages=20, assetStatus='0')
|
||||
edit = PalletEditModel(palletId=7, capacityPackages=100, assetStatus='0')
|
||||
update_pallet = AsyncMock()
|
||||
with (
|
||||
patch.object(TestBatchAccessService, 'lock_active_batch', new=AsyncMock(side_effect=lock_batch)),
|
||||
@@ -1205,7 +1209,7 @@ class TestPalletDaoBatchScope(unittest.IsolatedAsyncioTestCase):
|
||||
self.assertIn('FOR UPDATE', sql)
|
||||
|
||||
async def test_pallet_update_is_scoped_and_never_updates_batch_id(self) -> None:
|
||||
edit = PalletEditModel(palletId=7, capacityPackages=20, assetStatus='0')
|
||||
edit = PalletEditModel(palletId=7, capacityPackages=100, assetStatus='0')
|
||||
await MasterDao.update_pallet(
|
||||
self.db,
|
||||
edit,
|
||||
|
||||
Reference in New Issue
Block a user