forked from erp-dev/erp
feat: mission replied calling task
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from django.test import TestCase
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from unittest.mock import patch
|
||||
from django.utils import timezone
|
||||
|
||||
from basic_info.models import Employee, Merchant, MerchantTypeEnum
|
||||
from mission.models import Mission, MissionCategory, MissionParticipant, MissionReply
|
||||
@@ -160,6 +161,28 @@ class MissionModelTestCase(TestCase):
|
||||
self.assertFalse(mission.is_urgent)
|
||||
self.assertEqual(list(mission.participants.values_list("employee_id", flat=True)), [self.responder.id])
|
||||
|
||||
def test_create_mission_supports_unreplied_notification_fields(self):
|
||||
mission = create_mission(
|
||||
creator=self.creator,
|
||||
description="带未回复提醒的任务",
|
||||
notify_if_unreplied=True,
|
||||
unreplied_notify_interval_minutes=15,
|
||||
)
|
||||
|
||||
self.assertTrue(mission.notify_if_unreplied)
|
||||
self.assertEqual(mission.unreplied_notify_interval_minutes, 15)
|
||||
self.assertEqual(mission.unreplied_notify_max_count, 5)
|
||||
self.assertEqual(mission.unreplied_notify_sent_count, 0)
|
||||
self.assertIsNone(mission.unreplied_last_notified_at)
|
||||
|
||||
def test_create_mission_requires_interval_when_unreplied_notification_enabled(self):
|
||||
with self.assertRaisesMessage(ValueError, "开启未回复提醒时必须设置提醒间隔"):
|
||||
create_mission(
|
||||
creator=self.creator,
|
||||
description="缺少提醒间隔",
|
||||
notify_if_unreplied=True,
|
||||
)
|
||||
|
||||
def test_create_mission_rejects_empty_creator(self):
|
||||
with self.assertRaises(ValueError):
|
||||
create_mission(creator=None, description="无创建人")
|
||||
@@ -222,6 +245,20 @@ class MissionModelTestCase(TestCase):
|
||||
self.assertEqual(self.mission.content_id, related.id)
|
||||
self.assertEqual(list(self.mission.participants.values_list("employee_id", flat=True)), [self.responder.id])
|
||||
|
||||
def test_update_mission_updates_unreplied_notification_fields(self):
|
||||
update_mission(
|
||||
mission=self.mission,
|
||||
updated_by=self.creator,
|
||||
notify_if_unreplied=True,
|
||||
unreplied_notify_interval_minutes=20,
|
||||
unreplied_notify_max_count=8,
|
||||
)
|
||||
|
||||
self.mission.refresh_from_db()
|
||||
self.assertTrue(self.mission.notify_if_unreplied)
|
||||
self.assertEqual(self.mission.unreplied_notify_interval_minutes, 20)
|
||||
self.assertEqual(self.mission.unreplied_notify_max_count, 8)
|
||||
|
||||
def test_create_mission_rejects_cross_merchant_category(self):
|
||||
with self.assertRaises(ValueError):
|
||||
create_mission(
|
||||
@@ -340,6 +377,57 @@ class MissionModelTestCase(TestCase):
|
||||
self.mission.refresh_from_db()
|
||||
self.assertTrue(self.mission.is_completed)
|
||||
|
||||
def test_create_reply_resets_unreplied_notification_state(self):
|
||||
self.mission.notify_if_unreplied = True
|
||||
self.mission.unreplied_notify_interval_minutes = 10
|
||||
self.mission.unreplied_notify_sent_count = 3
|
||||
self.mission.unreplied_last_notified_at = timezone.now()
|
||||
self.mission.save(
|
||||
update_fields=[
|
||||
"notify_if_unreplied",
|
||||
"unreplied_notify_interval_minutes",
|
||||
"unreplied_notify_sent_count",
|
||||
"unreplied_last_notified_at",
|
||||
"updated_at",
|
||||
]
|
||||
)
|
||||
|
||||
create_mission_reply(
|
||||
mission=self.mission,
|
||||
responder=self.responder,
|
||||
content="收到,处理中",
|
||||
)
|
||||
|
||||
self.mission.refresh_from_db()
|
||||
self.assertEqual(self.mission.unreplied_notify_sent_count, 0)
|
||||
self.assertIsNone(self.mission.unreplied_last_notified_at)
|
||||
|
||||
def test_reject_reply_without_other_effective_reply_resets_unreplied_notification_state(self):
|
||||
self.mission.notify_if_unreplied = True
|
||||
self.mission.unreplied_notify_interval_minutes = 10
|
||||
self.mission.unreplied_notify_sent_count = 2
|
||||
self.mission.unreplied_last_notified_at = timezone.now()
|
||||
self.mission.save(
|
||||
update_fields=[
|
||||
"notify_if_unreplied",
|
||||
"unreplied_notify_interval_minutes",
|
||||
"unreplied_notify_sent_count",
|
||||
"unreplied_last_notified_at",
|
||||
"updated_at",
|
||||
]
|
||||
)
|
||||
reply = create_mission_reply(
|
||||
mission=self.mission,
|
||||
responder=self.responder,
|
||||
content="普通回应",
|
||||
)
|
||||
|
||||
reject_reply(reply=reply, rejected_by=self.creator)
|
||||
|
||||
self.mission.refresh_from_db()
|
||||
self.assertEqual(self.mission.unreplied_notify_sent_count, 0)
|
||||
self.assertIsNone(self.mission.unreplied_last_notified_at)
|
||||
|
||||
def test_cancel_already_cancelled_mission_is_rejected(self):
|
||||
cancel_mission(mission=self.mission, cancelled_by=self.creator)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user