| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- """申请人进度通知(每步审批结果)单测。"""
- from unittest.mock import MagicMock, patch
- from app.core.config import settings
- from app.services.oa_wechat_notify import (
- RESULT_FAIL,
- RESULT_OTHER,
- RESULT_PASS,
- RESULT_TRANSFER,
- _send_applicant_progress,
- map_oa_action_to_result,
- )
- def test_map_oa_action_to_result():
- assert map_oa_action_to_result("approve") == RESULT_PASS
- assert map_oa_action_to_result("reject") == RESULT_FAIL
- assert map_oa_action_to_result("transfer") == RESULT_TRANSFER
- assert map_oa_action_to_result("return") == RESULT_OTHER
- assert map_oa_action_to_result("add_sign") == RESULT_OTHER
- assert map_oa_action_to_result("unknown") == RESULT_OTHER
- def test_send_applicant_progress_skips_without_mp():
- db = MagicMock()
- inst = MagicMock()
- inst.id = "i1"
- inst.app_id = "app1"
- inst.title = "请假"
- inst.initiator_user_id = "u-ini"
- inst.del_flag = 0
- ini = MagicMock()
- ini.nick_name = "张三"
- ini.wx_mp_openid = ""
- app = MagicMock()
- app.app_name = "请假申请"
- actor = MagicMock()
- actor.nick_name = "李四"
- def query_side_effect(model):
- q = MagicMock()
- name = getattr(model, "__name__", "") or str(model)
- if "OaInstance" in name:
- q.filter.return_value.first.return_value = inst
- elif "OaApp" in name:
- q.filter.return_value.first.return_value = app
- elif "SysUser" in name:
- # initiator then actor
- q.filter.return_value.first.side_effect = [ini, actor]
- else:
- q.filter.return_value.first.return_value = None
- return q
- db.query.side_effect = query_side_effect
- with patch(
- "app.services.oa_wechat_notify.send_oa_applicant_progress_notify"
- ) as send:
- _send_applicant_progress(
- db,
- instance_id="i1",
- actor_user_id="u-actor",
- result=RESULT_PASS,
- task_id="t1",
- )
- send.assert_not_called()
- def test_send_applicant_progress_payload_args():
- db = MagicMock()
- inst = MagicMock()
- inst.id = "i1"
- inst.app_id = "app1"
- inst.title = "请假"
- inst.initiator_user_id = "u-ini"
- ini = MagicMock()
- ini.nick_name = "张三"
- ini.wx_mp_openid = "mp-ini"
- app = MagicMock()
- app.app_name = "请假申请"
- actor = MagicMock()
- actor.nick_name = "李四"
- user_queue = [ini, actor]
- def query_side_effect(model):
- q = MagicMock()
- name = getattr(model, "__name__", "") or str(model)
- if "OaInstance" in name:
- q.filter.return_value.first.return_value = inst
- elif "OaApp" in name:
- q.filter.return_value.first.return_value = app
- elif "SysUser" in name:
- q.filter.return_value.first.side_effect = lambda: user_queue.pop(0)
- else:
- q.filter.return_value.first.return_value = None
- return q
- db.query.side_effect = query_side_effect
- with patch(
- "app.services.oa_wechat_notify.send_oa_applicant_progress_notify"
- ) as send:
- _send_applicant_progress(
- db,
- instance_id="i1",
- actor_user_id="u-actor",
- result=RESULT_PASS,
- task_id="t1",
- )
- send.assert_called_once()
- kwargs = send.call_args.kwargs
- assert kwargs["mp_openid"] == "mp-ini"
- assert kwargs["business_name"] == "张三 - 请假申请"
- assert kwargs["process_name"] == "请假申请"
- assert kwargs["approver_name"] == "李四"
- assert kwargs["result"] == RESULT_PASS
- assert "mode=view" in kwargs["pagepath"]
- assert "instanceId=i1" in kwargs["pagepath"]
- assert (
- "%2Fpages%2Foa%2Fmine%2Findex" in kwargs["pagepath"]
- or "/pages/oa/mine/index" in kwargs["pagepath"]
- )
- # 我发起的查看:不强制带 taskId
- assert "taskId=0" not in kwargs["pagepath"]
|