61 lines
2.2 KiB
Python
61 lines
2.2 KiB
Python
"""钉钉通知测试。"""
|
||
from unittest.mock import MagicMock, patch
|
||
|
||
import pytest
|
||
|
||
from backend.services.notification import NotificationError, build_dingtalk_payload, send_dingtalk_notification
|
||
|
||
|
||
def _build_config():
|
||
return {
|
||
"SERVER": "测试环境",
|
||
"VERSION": "2.195.0",
|
||
"APPID_NAME": "阅门户测试App",
|
||
"BUNDLE_ID": "cn.touchv.a4YX061",
|
||
"APPID": "647372741900537856",
|
||
}
|
||
|
||
|
||
def test_dingtalk_payload_matches_autopacking_content():
|
||
payload = build_dingtalk_payload(
|
||
_build_config(),
|
||
"https://download.example.com/app.html",
|
||
"https://download.example.com/app.png",
|
||
)
|
||
|
||
text = payload["markdown"]["text"]
|
||
assert payload["markdown"]["title"] == "iOS应用下载"
|
||
assert "## 【iOS】打包信息" in text
|
||
assert "**环境:** 测试环境" in text
|
||
assert "**版本:** 2.195.0" in text
|
||
assert "**APP名称:** 阅门户测试App" in text
|
||
assert "**包名:** cn.touchv.a4YX061" in text
|
||
assert "**App Guid:** 647372741900537856" in text
|
||
assert "**iOS 下载链接:** https://download.example.com/app.html" in text
|
||
assert "" in text
|
||
|
||
|
||
def test_dingtalk_notification_skips_when_disabled():
|
||
with patch("backend.services.notification.httpx.post") as post:
|
||
assert send_dingtalk_notification({}, _build_config(), "https://download.example.com/app") is False
|
||
post.assert_not_called()
|
||
|
||
|
||
def test_dingtalk_notification_sends_markdown():
|
||
response = MagicMock(status_code=200)
|
||
response.json.return_value = {"errcode": 0}
|
||
with patch("backend.services.notification.httpx.post", return_value=response) as post:
|
||
assert send_dingtalk_notification(
|
||
{"enabled": True, "webhook_url": "https://example.com/robot"},
|
||
_build_config(),
|
||
"https://download.example.com/app.html",
|
||
"https://download.example.com/app.png",
|
||
) is True
|
||
|
||
assert post.call_args.kwargs["json"]["markdown"]["title"] == "iOS应用下载"
|
||
|
||
|
||
def test_dingtalk_notification_requires_webhook_when_enabled():
|
||
with pytest.raises(NotificationError, match="Webhook"):
|
||
send_dingtalk_notification({"enabled": True}, _build_config(), "https://download.example.com/app")
|