forked from erp-dev/erp
feat: added pre sales order in business module, and explode tests of business module
This commit is contained in:
112
business/tests/test_pre_sales_order.py
Normal file
112
business/tests/test_pre_sales_order.py
Normal file
@@ -0,0 +1,112 @@
|
||||
from django.test import TestCase
|
||||
|
||||
from basic_info import models as basic_models
|
||||
from business import models as business_models
|
||||
from business import pre_order_services
|
||||
|
||||
from .fixtures import create_sales_fixtures
|
||||
|
||||
|
||||
class PreSalesOrderServiceTestCase(TestCase):
|
||||
def setUp(self):
|
||||
(
|
||||
self.merchant,
|
||||
self.customer,
|
||||
self.warehouse_strict,
|
||||
self.warehouse_relaxed,
|
||||
self.warehouse_strict_out,
|
||||
self.product,
|
||||
self.operator,
|
||||
) = create_sales_fixtures()
|
||||
|
||||
def test_create_pre_sales_order_success(self):
|
||||
pre_sales_order = pre_order_services.create_pre_sales_order(
|
||||
merchant=self.merchant,
|
||||
customer_id=self.customer.id,
|
||||
warehouse_id=self.warehouse_relaxed.id,
|
||||
created_by=self.operator,
|
||||
kind=business_models.SalesOrderKindEnum.WHOLESALE,
|
||||
items=[
|
||||
{
|
||||
'product_id': self.product.id,
|
||||
'quantity': '12.5',
|
||||
'unit': '米',
|
||||
'order_quantity': 8,
|
||||
'remarks': 'item-remarks',
|
||||
}
|
||||
],
|
||||
remarks='order-remarks',
|
||||
)
|
||||
|
||||
self.assertEqual(pre_sales_order.merchant_id, self.merchant.id)
|
||||
self.assertEqual(pre_sales_order.customer_id, self.customer.id)
|
||||
self.assertEqual(pre_sales_order.warehouse_id, self.warehouse_relaxed.id)
|
||||
self.assertEqual(pre_sales_order.created_by_id, self.operator.id)
|
||||
self.assertEqual(pre_sales_order.items.count(), 1)
|
||||
|
||||
item = pre_sales_order.items.first()
|
||||
self.assertEqual(item.product_id, self.product.id)
|
||||
self.assertEqual(item.unit, '米')
|
||||
self.assertEqual(item.order_quantity, 8)
|
||||
|
||||
def test_create_pre_sales_order_rejects_cross_merchant_customer(self):
|
||||
other_merchant = basic_models.Merchant.objects.create(
|
||||
name='其他商户',
|
||||
type=basic_models.MerchantTypeEnum.FACTORY,
|
||||
)
|
||||
other_customer = basic_models.Customer.objects.create(
|
||||
merchant=other_merchant,
|
||||
name='其他客户',
|
||||
created_by=None,
|
||||
)
|
||||
|
||||
with self.assertRaises(ValueError):
|
||||
pre_order_services.create_pre_sales_order(
|
||||
merchant=self.merchant,
|
||||
customer_id=other_customer.id,
|
||||
warehouse_id=self.warehouse_relaxed.id,
|
||||
created_by=self.operator,
|
||||
items=[{'product_id': self.product.id, 'quantity': '1', 'unit': '米'}],
|
||||
)
|
||||
|
||||
def test_update_pre_sales_order_replaces_items(self):
|
||||
pre_sales_order = pre_order_services.create_pre_sales_order(
|
||||
merchant=self.merchant,
|
||||
customer_id=self.customer.id,
|
||||
warehouse_id=self.warehouse_relaxed.id,
|
||||
created_by=self.operator,
|
||||
items=[{'product_id': self.product.id, 'quantity': '10', 'unit': '米'}],
|
||||
)
|
||||
|
||||
updated = pre_order_services.update_pre_sales_order(
|
||||
pre_sales_order=pre_sales_order,
|
||||
warehouse_id=self.warehouse_strict.id,
|
||||
items=[
|
||||
{
|
||||
'product_id': self.product.id,
|
||||
'quantity': '20',
|
||||
'unit': '米',
|
||||
'order_quantity': 3,
|
||||
}
|
||||
],
|
||||
remarks='updated-remarks',
|
||||
)
|
||||
|
||||
self.assertEqual(updated.warehouse_id, self.warehouse_strict.id)
|
||||
self.assertEqual(updated.remarks, 'updated-remarks')
|
||||
self.assertEqual(updated.items.count(), 1)
|
||||
self.assertEqual(str(updated.items.first().quantity), '20.00')
|
||||
self.assertEqual(updated.items.first().order_quantity, 3)
|
||||
|
||||
def test_delete_pre_sales_order(self):
|
||||
pre_sales_order = pre_order_services.create_pre_sales_order(
|
||||
merchant=self.merchant,
|
||||
customer_id=self.customer.id,
|
||||
warehouse_id=self.warehouse_relaxed.id,
|
||||
created_by=self.operator,
|
||||
items=[{'product_id': self.product.id, 'quantity': '10', 'unit': '米'}],
|
||||
)
|
||||
order_id = pre_sales_order.id
|
||||
|
||||
pre_order_services.delete_pre_sales_order(pre_sales_order=pre_sales_order)
|
||||
self.assertFalse(business_models.PreSalesOrder.objects.filter(id=order_id).exists())
|
||||
Reference in New Issue
Block a user