| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- """OA 抄送已读:序列化、筛选语义、标记幂等"""
- import unittest
- from datetime import datetime
- from types import SimpleNamespace
- from unittest.mock import MagicMock
- from app.services import oa_engine as eng
- class TestTaskToDictIsRead(unittest.TestCase):
- def test_includes_is_read_and_read_time(self):
- t = SimpleNamespace(
- id="t1",
- instance_id="i1",
- node_key="n1",
- node_name="抄送",
- task_type="cc",
- assignee_user_id="u1",
- status="done",
- comment_text=None,
- resolve_source=None,
- sign_mode=None,
- is_read=1,
- read_time=datetime(2026, 8, 6, 12, 0, 0),
- create_time=datetime(2026, 8, 6, 10, 0, 0),
- update_time=datetime(2026, 8, 6, 11, 0, 0),
- )
- d = eng._task_to_dict(t)
- self.assertEqual(d["isRead"], True)
- self.assertEqual(d["readTime"], "2026-08-06 12:00:00")
- def test_unread_defaults(self):
- t = SimpleNamespace(
- id="t2",
- instance_id="i1",
- node_key="n1",
- node_name="抄送",
- task_type="cc",
- assignee_user_id="u1",
- status="done",
- comment_text=None,
- resolve_source=None,
- sign_mode=None,
- is_read=0,
- read_time=None,
- create_time=None,
- update_time=None,
- )
- d = eng._task_to_dict(t)
- self.assertEqual(d["isRead"], False)
- self.assertEqual(d["readTime"], "")
- class TestMarkCcReadHelpers(unittest.TestCase):
- def test_normalize_read_status(self):
- self.assertEqual(eng._normalize_cc_read_status(None), "unread")
- self.assertEqual(eng._normalize_cc_read_status(""), "unread")
- self.assertEqual(eng._normalize_cc_read_status("all"), "all")
- self.assertEqual(eng._normalize_cc_read_status("read"), "read")
- with self.assertRaises(eng.OaEngineError):
- eng._normalize_cc_read_status("weird")
- def test_mark_idempotent_keeps_read_time(self):
- first = datetime(2026, 8, 1, 9, 0, 0)
- task = SimpleNamespace(
- id="t1",
- task_type="cc",
- assignee_user_id="u1",
- del_flag=0,
- is_read=1,
- read_time=first,
- update_by=None,
- update_time=None,
- )
- db = MagicMock()
- out = eng._apply_cc_task_read(db, task=task, user_id="u1", now=datetime(2026, 8, 6, 12, 0, 0))
- self.assertFalse(out) # 未发生更新
- self.assertEqual(task.read_time, first)
- self.assertEqual(task.is_read, 1)
- if __name__ == "__main__":
- unittest.main()
|