forked from erp-dev/erp
feat: added pre sales order in business module, and explode tests of business module
This commit is contained in:
128
business/tests/test_stock_services.py
Normal file
128
business/tests/test_stock_services.py
Normal file
@@ -0,0 +1,128 @@
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.test import TestCase
|
||||
from django.utils import timezone
|
||||
from unittest.mock import patch, MagicMock
|
||||
|
||||
from stock import models as stock_models
|
||||
from business import models as business_models, services
|
||||
|
||||
from .fixtures import create_basic_fixtures, create_sales_fixtures
|
||||
|
||||
|
||||
class PurchaseOrderStockServiceTestCase(TestCase):
|
||||
def setUp(self):
|
||||
(
|
||||
self.merchant,
|
||||
self.supplier,
|
||||
self.warehouse_strict,
|
||||
self.warehouse_relaxed,
|
||||
self.product,
|
||||
self.operator,
|
||||
) = create_basic_fixtures()
|
||||
User = get_user_model()
|
||||
self.user = User.objects.create_user(username='svc-user', password='pass123')
|
||||
self.purchase_order = business_models.PurchaseOrder.objects.create(
|
||||
merchant=self.merchant,
|
||||
supplier=self.supplier,
|
||||
purchase_date=timezone.now().date(),
|
||||
operator=self.operator,
|
||||
warehouse=self.warehouse_strict,
|
||||
)
|
||||
self.items = [{'product_id': self.product.id, 'quantities': ['8']}]
|
||||
|
||||
def test_service_calls_stock_flow_service(self):
|
||||
with patch('business.services.StockFlowService') as mock_flow_cls:
|
||||
mock_instance = mock_flow_cls.return_value
|
||||
mock_instance.stock_in.return_value = (MagicMock(id=321), [], 2)
|
||||
|
||||
payload = services.create_purchase_order_stock_entries_sync(
|
||||
purchase_order_id=self.purchase_order.id,
|
||||
warehouse_id=self.warehouse_strict.id,
|
||||
items=self.items,
|
||||
created_by_id=self.user.id,
|
||||
)
|
||||
|
||||
mock_flow_cls.assert_called_once_with(merchant=self.merchant, created_by=self.user)
|
||||
mock_instance.stock_in.assert_called_once_with(
|
||||
warehouse_id=self.warehouse_strict.id,
|
||||
source_type=stock_models.StockChangeSourceEnum.PURCHASE,
|
||||
source_id=self.purchase_order.id,
|
||||
items=[{'product_id': self.product.id, 'quantities': ['8']}],
|
||||
)
|
||||
self.assertEqual(payload['purchase_order_id'], self.purchase_order.id)
|
||||
self.assertEqual(payload['stock_change_record_id'], 321)
|
||||
|
||||
|
||||
class SalesOrderStockServiceTestCase(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()
|
||||
User = get_user_model()
|
||||
self.user = User.objects.create_user(username='sales-svc', password='pass123')
|
||||
self.sales_order = business_models.SalesOrder.objects.create(
|
||||
merchant=self.merchant,
|
||||
customer=self.customer,
|
||||
sales_date=timezone.now().date(),
|
||||
operator=self.operator,
|
||||
warehouse=self.warehouse_strict,
|
||||
)
|
||||
self.items = [{'product_id': self.product.id, 'quantities': ['5']}]
|
||||
|
||||
def test_service_calls_stock_out(self):
|
||||
with patch('business.services.StockFlowService') as mock_flow_cls:
|
||||
mock_instance = mock_flow_cls.return_value
|
||||
mock_instance.stock_out.return_value = (MagicMock(id=654), [], 1)
|
||||
|
||||
payload = services.create_sales_order_stock_entries_sync(
|
||||
sales_order_id=self.sales_order.id,
|
||||
warehouse_id=self.warehouse_strict.id,
|
||||
items=self.items,
|
||||
created_by_id=self.user.id,
|
||||
)
|
||||
|
||||
mock_flow_cls.assert_called_once_with(merchant=self.merchant, created_by=self.user)
|
||||
mock_instance.stock_out.assert_called_once_with(
|
||||
warehouse_id=self.warehouse_strict.id,
|
||||
source_type=stock_models.StockChangeSourceEnum.SALES,
|
||||
source_id=self.sales_order.id,
|
||||
items=[{'product_id': self.product.id, 'quantities': ['5']}],
|
||||
)
|
||||
self.assertEqual(payload['sales_order_id'], self.sales_order.id)
|
||||
self.assertEqual(payload['stock_change_record_id'], 654)
|
||||
|
||||
def test_service_calls_stock_out_strict_mode(self):
|
||||
strict_order = business_models.SalesOrder.objects.create(
|
||||
merchant=self.merchant,
|
||||
customer=self.customer,
|
||||
sales_date=timezone.now().date(),
|
||||
operator=self.operator,
|
||||
warehouse=self.warehouse_strict_out,
|
||||
)
|
||||
consume_items = [{'product_id': self.product.id, 'consume_detail_ids': [11, 12], 'quantity': 50}]
|
||||
with patch('business.services.StockFlowService') as mock_flow_cls:
|
||||
mock_instance = mock_flow_cls.return_value
|
||||
mock_instance.stock_out.return_value = (MagicMock(id=987), [], 2)
|
||||
|
||||
payload = services.create_sales_order_stock_entries_sync(
|
||||
sales_order_id=strict_order.id,
|
||||
warehouse_id=self.warehouse_strict_out.id,
|
||||
items=consume_items,
|
||||
created_by_id=self.user.id,
|
||||
)
|
||||
|
||||
mock_flow_cls.assert_called_once_with(merchant=self.merchant, created_by=self.user)
|
||||
mock_instance.stock_out.assert_called_once_with(
|
||||
warehouse_id=self.warehouse_strict_out.id,
|
||||
source_type=stock_models.StockChangeSourceEnum.SALES,
|
||||
source_id=strict_order.id,
|
||||
items=[{'product_id': self.product.id, 'consume_detail_ids': [11, 12], 'quantity': 50}],
|
||||
)
|
||||
self.assertEqual(payload['sales_order_id'], strict_order.id)
|
||||
self.assertEqual(payload['stock_change_record_id'], 987)
|
||||
Reference in New Issue
Block a user