From f64241ed9068a38a2604e7066e56e188ee2f8979 Mon Sep 17 00:00:00 2001 From: Teknium Date: Fri, 17 Apr 2026 05:40:39 -0700 Subject: [PATCH] feat(cron+tests): extend origin fallback to email/dingtalk/qqbot + fix Weixin test mocks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cron origin fallback extension (builds on #9193's _HOME_TARGET_ENV_VARS): adds the three remaining origin-fallback-eligible platforms that have home channel env vars configured in gateway/config.py but use non-generic env var names: - email → EMAIL_HOME_ADDRESS (non-standard suffix) - dingtalk → DINGTALK_HOME_CHANNEL - qqbot → QQ_HOME_CHANNEL (non-standard prefix: QQ_ not QQBOT_) Picks up the completeness intent of @Xowiek's PR #11317 using the architecturally-correct dict-based lookup from #9193, so platforms with non-standard env var names actually resolve instead of silently missing. Extended the parametrized regression test to cover the new three. Weixin test mock alignment (builds on #10091's _send_session split): Three test sites added in Batch 1 (TestWeixinSendImageFileParameterName) and Batch 3 (TestWeixinVoiceSending) mocked only adapter._session, but #10091 switched the send paths to check self._send_session. Added the companion setter so the tests stay green with the session split in place. --- cron/scheduler.py | 3 +++ tests/cron/test_scheduler.py | 6 ++++++ tests/gateway/test_weixin.py | 3 +++ 3 files changed, 12 insertions(+) diff --git a/cron/scheduler.py b/cron/scheduler.py index d527a22601..28c9057137 100644 --- a/cron/scheduler.py +++ b/cron/scheduler.py @@ -59,10 +59,13 @@ _HOME_TARGET_ENV_VARS = { "signal": "SIGNAL_HOME_CHANNEL", "mattermost": "MATTERMOST_HOME_CHANNEL", "sms": "SMS_HOME_CHANNEL", + "email": "EMAIL_HOME_ADDRESS", + "dingtalk": "DINGTALK_HOME_CHANNEL", "feishu": "FEISHU_HOME_CHANNEL", "wecom": "WECOM_HOME_CHANNEL", "weixin": "WEIXIN_HOME_CHANNEL", "bluebubbles": "BLUEBUBBLES_HOME_CHANNEL", + "qqbot": "QQ_HOME_CHANNEL", } from cron.jobs import get_due_jobs, mark_job_run, save_job_output, advance_next_run diff --git a/tests/cron/test_scheduler.py b/tests/cron/test_scheduler.py index 0877564fe6..2717584e46 100644 --- a/tests/cron/test_scheduler.py +++ b/tests/cron/test_scheduler.py @@ -71,9 +71,12 @@ class TestResolveDeliveryTarget: ("signal", "SIGNAL_HOME_CHANNEL", "+15551234567"), ("mattermost", "MATTERMOST_HOME_CHANNEL", "team-town-square"), ("sms", "SMS_HOME_CHANNEL", "+15557654321"), + ("email", "EMAIL_HOME_ADDRESS", "home@example.com"), + ("dingtalk", "DINGTALK_HOME_CHANNEL", "cidNNN"), ("feishu", "FEISHU_HOME_CHANNEL", "oc_home"), ("wecom", "WECOM_HOME_CHANNEL", "wecom-home"), ("weixin", "WEIXIN_HOME_CHANNEL", "wxid_home"), + ("qqbot", "QQ_HOME_CHANNEL", "group-openid-home"), ], ) def test_origin_delivery_without_origin_falls_back_to_supported_home_channels( @@ -88,10 +91,13 @@ class TestResolveDeliveryTarget: "SIGNAL_HOME_CHANNEL", "MATTERMOST_HOME_CHANNEL", "SMS_HOME_CHANNEL", + "EMAIL_HOME_ADDRESS", + "DINGTALK_HOME_CHANNEL", "BLUEBUBBLES_HOME_CHANNEL", "FEISHU_HOME_CHANNEL", "WECOM_HOME_CHANNEL", "WEIXIN_HOME_CHANNEL", + "QQ_HOME_CHANNEL", ): monkeypatch.delenv(fallback_env, raising=False) monkeypatch.setenv(env_var, chat_id) diff --git a/tests/gateway/test_weixin.py b/tests/gateway/test_weixin.py index cd911e80b4..a0dfbbb8f0 100644 --- a/tests/gateway/test_weixin.py +++ b/tests/gateway/test_weixin.py @@ -527,6 +527,7 @@ class TestWeixinSendImageFileParameterName: """Verify send_image_file accepts image_path and forwards to send_document.""" adapter = _make_adapter() adapter._session = object() + adapter._send_session = adapter._session adapter._token = "test-token" send_document_mock.return_value = weixin.SendResult(success=True, message_id="test-id") @@ -554,6 +555,7 @@ class TestWeixinSendImageFileParameterName: """Verify send_image_file works with minimal required params.""" adapter = _make_adapter() adapter._session = object() + adapter._send_session = adapter._session adapter._token = "test-token" send_document_mock.return_value = weixin.SendResult(success=True, message_id="test-id") @@ -578,6 +580,7 @@ class TestWeixinVoiceSending: def _connected_adapter(self) -> WeixinAdapter: adapter = _make_adapter() adapter._session = object() + adapter._send_session = adapter._session adapter._token = "test-token" adapter._base_url = "https://weixin.example.com" adapter._token_store.get = lambda account_id, chat_id: "ctx-token"