fix: 上传二维码并发送 Ad Hoc 通知
This commit is contained in:
@@ -50,3 +50,28 @@ def test_app_store_distribution_uploads_only_ipa(tmp_path):
|
||||
assert uploaded_files[0][0].suffix == ".ipa"
|
||||
assert download_url.endswith("100_2_0_0.ipa")
|
||||
assert qr_path == ""
|
||||
|
||||
|
||||
def test_adhoc_distribution_uploads_qrcode(tmp_path):
|
||||
ipa = tmp_path / "source.ipa"
|
||||
ipa.write_bytes(b"ad-hoc-ipa")
|
||||
config = {
|
||||
"APPID": "100",
|
||||
"VERSION": "2.0.0",
|
||||
"BUILD_TYPE": "Ad_Hoc",
|
||||
"OSS_FLODER": "readoor",
|
||||
"_upload_config": {"mode": "oss", "oss": {}},
|
||||
}
|
||||
|
||||
def upload_files(_upload_config, files):
|
||||
local_path, remote_path = files[0]
|
||||
return {local_path.suffix: f"https://files.example.com/{remote_path}"}
|
||||
|
||||
with patch("backend.services.distribution._upload_oss", side_effect=upload_files) as upload:
|
||||
download_url, qr_url = publish_ipa(config, ipa, tmp_path / "build")
|
||||
|
||||
assert download_url.endswith("100_2_0_0.html")
|
||||
assert qr_url.endswith("100_2_0_0.png")
|
||||
assert [call.args[1][0][0].suffix for call in upload.call_args_list] == [
|
||||
".ipa", ".plist", ".html", ".png",
|
||||
]
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
"""钉钉通知测试。"""
|
||||
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")
|
||||
Reference in New Issue
Block a user