forked from erp-dev/erp
feat: added wecom notify when printing_job production was completed(new status) and shipment was created
This commit is contained in:
98
shipment/test_notification.py
Normal file
98
shipment/test_notification.py
Normal file
@@ -0,0 +1,98 @@
|
||||
from unittest.mock import patch
|
||||
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.db import transaction
|
||||
from django.test import TestCase, TransactionTestCase, override_settings
|
||||
|
||||
from basic_info import models as basic_models
|
||||
from shipment import handlers
|
||||
from shipment import models as shipment_models
|
||||
from shipment import tasks as shipment_tasks
|
||||
|
||||
|
||||
class ShipmentCreatedWeComServiceTestCase(TestCase):
|
||||
def setUp(self):
|
||||
self.user = get_user_model().objects.create_user(username="shipment-user", password="pass")
|
||||
self.merchant = basic_models.Merchant.objects.create(
|
||||
name="测试印花厂",
|
||||
type=basic_models.MerchantTypeEnum.FACTORY,
|
||||
)
|
||||
basic_models.Employee.objects.create(
|
||||
sys_user=self.user,
|
||||
merchant=self.merchant,
|
||||
name="出货员工",
|
||||
status=basic_models.EmployeeStatusEnum.ACTIVE,
|
||||
)
|
||||
self.customer = basic_models.Customer.objects.create(
|
||||
merchant=self.merchant,
|
||||
name="测试客户",
|
||||
)
|
||||
|
||||
def test_send_shipment_created_wecom_dry_run(self):
|
||||
shipment = shipment_models.Shipment.objects.create(
|
||||
merchant=self.merchant,
|
||||
customer=self.customer,
|
||||
shipment_date="2026-01-14",
|
||||
created_by=self.user,
|
||||
)
|
||||
|
||||
from shipment.services import send_shipment_created_wecom
|
||||
|
||||
payload = send_shipment_created_wecom(
|
||||
shipment_id=shipment.id,
|
||||
created_by_id=self.user.id,
|
||||
dry_run=True,
|
||||
)
|
||||
|
||||
self.assertEqual(payload["shipment_id"], shipment.id)
|
||||
self.assertEqual(payload["customer_name"], self.customer.name)
|
||||
self.assertEqual(payload["shipment_date"], "2026-01-14")
|
||||
self.assertEqual(payload["items_count"], 0)
|
||||
self.assertEqual(payload["sender_label"], "出货员工")
|
||||
|
||||
|
||||
@override_settings(
|
||||
CELERY_TASK_ALWAYS_EAGER=True,
|
||||
CELERY_TASK_EAGER_PROPAGATES=True,
|
||||
)
|
||||
class ShipmentCreatedWeComTaskTestCase(TestCase):
|
||||
def test_task_delegates_to_service(self):
|
||||
with patch("shipment.tasks.send_shipment_created_wecom") as mock_sync:
|
||||
mock_sync.return_value = {"shipment_id": 123, "ok": True}
|
||||
|
||||
async_result = shipment_tasks.notify_shipment_created_wecom.delay(
|
||||
shipment_id=123,
|
||||
created_by_id=456,
|
||||
)
|
||||
payload = async_result.get(timeout=5)
|
||||
|
||||
mock_sync.assert_called_once_with(
|
||||
shipment_id=123,
|
||||
created_by_id=456,
|
||||
)
|
||||
self.assertEqual(payload["shipment_id"], 123)
|
||||
self.assertIn("task_id", payload)
|
||||
|
||||
|
||||
@override_settings(
|
||||
TESTING=False,
|
||||
SHIPMENT_CREATED_WECOM_NOTIFY_ENABLED=True,
|
||||
)
|
||||
class ShipmentCreatedHandlerTestCase(TransactionTestCase):
|
||||
def test_handler_enqueues_task_on_commit(self):
|
||||
shipment = type("Shipment", (), {"id": 321})()
|
||||
user = type("User", (), {"id": 654})()
|
||||
|
||||
with patch("shipment.tasks.notify_shipment_created_wecom.delay") as mock_delay:
|
||||
with transaction.atomic():
|
||||
handlers.on_shipment_created(
|
||||
sender=shipment_models.Shipment,
|
||||
instance=shipment,
|
||||
created_by=user,
|
||||
)
|
||||
self.assertFalse(mock_delay.called)
|
||||
|
||||
mock_delay.assert_called_once_with(
|
||||
shipment_id=321,
|
||||
created_by_id=654,
|
||||
)
|
||||
Reference in New Issue
Block a user