1
0
forked from erp-dev/erp

feat: added custom signal for pre sales order created

This commit is contained in:
2026-01-31 23:58:40 +08:00
parent f643b643b7
commit a633a617d5
5 changed files with 173 additions and 0 deletions

View File

@@ -1,5 +1,7 @@
from django.test import TestCase
from django.contrib.auth import get_user_model
from django.test import TransactionTestCase
from django.db import transaction
from basic_info import models as basic_models
from business import models as business_models
@@ -120,3 +122,78 @@ class PreSalesOrderServiceTestCase(TestCase):
pre_order_services.delete_pre_sales_order(pre_sales_order=pre_sales_order)
self.assertFalse(business_models.PreSalesOrder.objects.filter(id=order_id).exists())
class PreSalesOrderSignalTestCase(TransactionTestCase):
def setUp(self):
(
self.merchant,
self.customer,
self.warehouse_strict,
self.warehouse_relaxed,
self.warehouse_strict_out,
self.product,
self.operator,
) = create_sales_fixtures()
self.user = get_user_model().objects.create_user(username='signal-user', password='pass')
self.operator.sys_user = self.user
self.operator.save(update_fields=['sys_user'])
def test_pre_sales_order_created_signal_fires_on_commit(self):
from business.signals import pre_sales_order_created
received = []
uid = 'tests.pre_sales_order_created.on_commit'
def _receiver(sender, **kwargs):
received.append(kwargs)
pre_sales_order_created.connect(_receiver, dispatch_uid=uid, weak=False)
try:
pre_order_services.create_pre_sales_order(
merchant=self.merchant,
customer_id=self.customer.id,
warehouse_id=self.warehouse_relaxed.id,
operator=self.operator,
created_by=self.user,
items=[{'product_id': self.product.id, 'quantity': '1', 'unit': ''}],
)
self.assertEqual(len(received), 1)
payload = received[0]
self.assertIsNotNone(payload.get('instance'))
self.assertEqual(payload.get('created_by').id, self.user.id)
self.assertEqual(payload.get('operator').id, self.operator.id)
self.assertEqual(payload.get('items_count'), 1)
finally:
pre_sales_order_created.disconnect(dispatch_uid=uid)
def test_pre_sales_order_created_signal_not_fired_on_rollback(self):
from business.signals import pre_sales_order_created
received = []
uid = 'tests.pre_sales_order_created.on_rollback'
def _receiver(sender, **kwargs):
received.append(kwargs)
pre_sales_order_created.connect(_receiver, dispatch_uid=uid, weak=False)
try:
try:
with transaction.atomic():
pre_order_services.create_pre_sales_order(
merchant=self.merchant,
customer_id=self.customer.id,
warehouse_id=self.warehouse_relaxed.id,
operator=self.operator,
created_by=self.user,
items=[{'product_id': self.product.id, 'quantity': '1', 'unit': ''}],
)
raise RuntimeError('force rollback')
except RuntimeError:
pass
self.assertEqual(received, [])
finally:
pre_sales_order_created.disconnect(dispatch_uid=uid)