forked from erp-dev/erp
feat: message-api for mission via wecomm agent
This commit is contained in:
110
mission/tests.py
110
mission/tests.py
@@ -1,5 +1,6 @@
|
||||
from django.test import TestCase
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import patch
|
||||
from django.utils import timezone
|
||||
|
||||
@@ -23,6 +24,9 @@ from mission.signals import (
|
||||
mission_replied,
|
||||
mission_reply_rejected,
|
||||
)
|
||||
from mission.payload_processors import _split_structured_description
|
||||
from notifier.models import NotificationEventKeyEnum, Notifier, NotifierChannelEnum, NotifierRoute
|
||||
from notifier.services import dispatch_notification_event
|
||||
|
||||
|
||||
class MissionModelTestCase(TestCase):
|
||||
@@ -546,6 +550,26 @@ class MissionModelTestCase(TestCase):
|
||||
|
||||
self.assertEqual(received, [(Mission, self.mission.id, self.creator.id)])
|
||||
|
||||
def test_split_structured_description_v1(self):
|
||||
title, body, url, image_url = _split_structured_description(
|
||||
"系统首行\n标题一\n款式图:https://images.yuwen.cloud/abc.jpg\n标题二\n\n正文一\n正文二\n手机端链接: https://example.com/detail"
|
||||
)
|
||||
|
||||
self.assertEqual(title, "标题一\n标题二")
|
||||
self.assertEqual(body, "正文一\n正文二")
|
||||
self.assertEqual(url, "https://example.com/detail")
|
||||
self.assertEqual(image_url, "https://images.yuwen.cloud/abc.jpg")
|
||||
|
||||
def test_split_structured_description_v1_without_blank_line_uses_title_only(self):
|
||||
title, body, url, image_url = _split_structured_description(
|
||||
"系统首行\n标题一\n款式图:https://images.yuwen.cloud/abc.jpg\n标题二\n手机端链接: https://example.com/detail"
|
||||
)
|
||||
|
||||
self.assertEqual(title, "标题一\n标题二")
|
||||
self.assertEqual(body, "")
|
||||
self.assertEqual(url, "https://example.com/detail")
|
||||
self.assertEqual(image_url, "https://images.yuwen.cloud/abc.jpg")
|
||||
|
||||
@patch("mission.handlers.enqueue_notification_event")
|
||||
def test_mission_created_handler_enqueues_notifier_event(self, mock_enqueue):
|
||||
with self.captureOnCommitCallbacks(execute=True):
|
||||
@@ -556,6 +580,28 @@ class MissionModelTestCase(TestCase):
|
||||
self.assertEqual(mock_enqueue.call_args.kwargs["merchant_id"], self.merchant.id)
|
||||
self.assertEqual(mock_enqueue.call_args.kwargs["payload"]["mission_id"], mission.id)
|
||||
|
||||
@patch("mission.handlers.enqueue_notification_event")
|
||||
def test_mission_created_handler_applies_category_payload_processor(self, mock_enqueue):
|
||||
self.default_category.payload_processor = "structured_description_v1"
|
||||
self.default_category.save(update_fields=["payload_processor", "updated_at"])
|
||||
|
||||
with self.captureOnCommitCallbacks(execute=True):
|
||||
mission = create_mission(
|
||||
creator=self.creator,
|
||||
description=(
|
||||
"系统首行\n标题一\n款式图:https://images.yuwen.cloud/abc.jpg\n标题二\n\n正文一\n正文二\n"
|
||||
"手机端链接: https://example.com/detail"
|
||||
),
|
||||
)
|
||||
|
||||
payload = mock_enqueue.call_args.kwargs["payload"]
|
||||
self.assertEqual(payload["mission_id"], mission.id)
|
||||
self.assertEqual(payload["payload_processor"], "structured_description_v1")
|
||||
self.assertEqual(payload["parsed_description_title"], "标题一\n标题二")
|
||||
self.assertEqual(payload["parsed_description_body"], "正文一\n正文二")
|
||||
self.assertEqual(payload["parsed_description_url"], "https://example.com/detail")
|
||||
self.assertEqual(payload["parsed_description_image_url"], "https://images.yuwen.cloud/abc.jpg")
|
||||
|
||||
@patch("mission.handlers.enqueue_notification_event")
|
||||
def test_create_ending_reply_handler_enqueues_replied_and_completed_notifications(self, mock_enqueue):
|
||||
with self.captureOnCommitCallbacks(execute=True):
|
||||
@@ -614,3 +660,67 @@ class MissionModelTestCase(TestCase):
|
||||
mock_enqueue.assert_called_once()
|
||||
self.assertEqual(mock_enqueue.call_args.kwargs["event_key"], "mission.cancelled")
|
||||
self.assertEqual(mock_enqueue.call_args.kwargs["payload"]["mission_id"], self.mission.id)
|
||||
|
||||
@patch("notifier.backends.send_message_api_news_to_agents")
|
||||
@patch("notifier.tasks.dispatch_notification_event_task.delay")
|
||||
def test_mission_created_can_flow_to_message_api_news_with_structured_description_template(
|
||||
self,
|
||||
mock_delay,
|
||||
mock_send_news,
|
||||
):
|
||||
self.default_category.payload_processor = "structured_description_v1"
|
||||
self.default_category.save(update_fields=["payload_processor", "updated_at"])
|
||||
notifier = Notifier.objects.create(
|
||||
merchant=self.merchant,
|
||||
name="结构化描述图文通知",
|
||||
channel=NotifierChannelEnum.MESSAGE_API,
|
||||
template_key="mission_structured_description_news",
|
||||
config={
|
||||
"agent_ids": [1000007],
|
||||
"image_url": "https://cdn.example.com/covers/mission-news.png",
|
||||
},
|
||||
)
|
||||
NotifierRoute.objects.create(
|
||||
merchant=self.merchant,
|
||||
notifier=notifier,
|
||||
event_key=NotificationEventKeyEnum.MISSION_CREATED,
|
||||
mission_category=self.default_category,
|
||||
)
|
||||
mock_send_news.return_value = [
|
||||
{
|
||||
"agent_id": 1000007,
|
||||
"ok": True,
|
||||
"response": {"errcode": 0, "errmsg": "ok"},
|
||||
"error": None,
|
||||
}
|
||||
]
|
||||
|
||||
def inline_delay(*, event_key, merchant_id, payload):
|
||||
dispatch_notification_event(
|
||||
event_key=event_key,
|
||||
merchant_id=merchant_id,
|
||||
payload=payload,
|
||||
)
|
||||
return SimpleNamespace(id="task-inline-1")
|
||||
|
||||
mock_delay.side_effect = inline_delay
|
||||
|
||||
with self.captureOnCommitCallbacks(execute=True):
|
||||
create_mission(
|
||||
creator=self.creator,
|
||||
category=self.default_category,
|
||||
description=(
|
||||
"系统首行\n标题一\n款式图:https://images.yuwen.cloud/abc.jpg\n标题二\n\n正文一\n正文二\n"
|
||||
"手机端链接: https://example.com/detail"
|
||||
),
|
||||
)
|
||||
|
||||
mock_send_news.assert_called_once()
|
||||
self.assertEqual(mock_send_news.call_args.kwargs["agent_ids"], [1000007])
|
||||
self.assertEqual(mock_send_news.call_args.kwargs["title"], "标题一\n标题二")
|
||||
self.assertEqual(mock_send_news.call_args.kwargs["description"], "正文一\n正文二")
|
||||
self.assertEqual(mock_send_news.call_args.kwargs["url"], "https://example.com/detail")
|
||||
self.assertEqual(
|
||||
mock_send_news.call_args.kwargs["image_url"],
|
||||
"https://images.yuwen.cloud/abc.jpg",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user