forked from erp-dev/erp
feat: pick up logic of api - stock_record_change.post to stock - services module
This commit is contained in:
@@ -371,6 +371,72 @@ class MakeStockChangeCompletedTestCase(StockServicesTestCase):
|
||||
# 验证记录状态
|
||||
self.stock_change_in.refresh_from_db()
|
||||
self.assertTrue(self.stock_change_in.is_finished)
|
||||
|
||||
|
||||
class CreateStockChangeRecordWithDetailsTestCase(StockServicesTestCase):
|
||||
"""测试 create_stock_change_record_with_details 服务"""
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.products_payload = [
|
||||
{'product': self.product_fabric_a.id, 'quantity': [Decimal('10.00'), Decimal('20.50')]},
|
||||
{'product': self.product_fabric_b.id, 'quantity': [Decimal('5.00')]}
|
||||
]
|
||||
|
||||
def test_create_record_success(self):
|
||||
"""创建库存变动记录并返回所有明细"""
|
||||
record, details, created_count = services.create_stock_change_record_with_details(
|
||||
merchant=self.merchant,
|
||||
created_by=None,
|
||||
type=models.StockChangeTypeEnum.ADD,
|
||||
warehouse_id=self.warehouse_main.id,
|
||||
source_type=models.StockChangeSourceEnum.PURCHASE,
|
||||
source_id=self.purchase_order.id,
|
||||
products=self.products_payload,
|
||||
)
|
||||
|
||||
self.assertEqual(record.details.count(), 3)
|
||||
self.assertEqual(len(details), 3)
|
||||
self.assertEqual(created_count, 3)
|
||||
self.assertEqual(record.merchant, self.merchant)
|
||||
self.assertEqual(record.warehouse, self.warehouse_main)
|
||||
self.assertCountEqual(
|
||||
[Decimal('10.00'), Decimal('20.50'), Decimal('5.00')],
|
||||
[detail.quantity for detail in details]
|
||||
)
|
||||
|
||||
def test_auto_complete_triggers_completion(self):
|
||||
"""商户开启自动确认时会调用完成逻辑"""
|
||||
self.merchant.auto_complete_stock_change = True
|
||||
self.merchant.save()
|
||||
|
||||
with patch('stock.services.make_stock_change_completed') as mock_complete:
|
||||
services.create_stock_change_record_with_details(
|
||||
merchant=self.merchant,
|
||||
created_by=None,
|
||||
type=models.StockChangeTypeEnum.ADD,
|
||||
warehouse_id=self.warehouse_main.id,
|
||||
source_type=models.StockChangeSourceEnum.PURCHASE,
|
||||
source_id=self.purchase_order.id,
|
||||
products=self.products_payload,
|
||||
)
|
||||
|
||||
mock_complete.assert_called_once()
|
||||
|
||||
def test_invalid_product_raises_error(self):
|
||||
"""无效的产品ID会触发 ValueError"""
|
||||
products = [{'product': 99999, 'quantity': [Decimal('1.00')]}]
|
||||
|
||||
with self.assertRaises(ValueError):
|
||||
services.create_stock_change_record_with_details(
|
||||
merchant=self.merchant,
|
||||
created_by=None,
|
||||
type=models.StockChangeTypeEnum.ADD,
|
||||
warehouse_id=self.warehouse_main.id,
|
||||
source_type=models.StockChangeSourceEnum.PURCHASE,
|
||||
source_id=self.purchase_order.id,
|
||||
products=products,
|
||||
)
|
||||
|
||||
def test_complete_outbound_record(self):
|
||||
"""测试完成出库记录"""
|
||||
|
||||
Reference in New Issue
Block a user