Files
shaguabijia-app-server/tests/test_sms_fallback.py
T
2026-07-30 15:58:35 +08:00

39 lines
1.3 KiB
Python

"""极光→创蓝 容灾 fallback(分派层 send_code / verify_code)。
monkeypatch 各 provider 的 send_code/verify_code 为标记函数,不发真网络;
断言:仅主 503 才转备;429/400 不转;verify try-both 只遍历启用的链。
"""
from __future__ import annotations
import pytest # noqa: F401
from app.core.config import settings
from app.integrations import sms
from app.integrations.sms import aliyun, chuanglan, jiguang # noqa: F401
from app.integrations.sms.base import SendResult, SmsError # noqa: F401 (SmsError 在 Task 4+ 使用)
PHONE = "13800138000"
def _raiser(exc: Exception):
"""返回一个调用即 raise exc 的 send_code 替身(lambda 不能 raise)。"""
def _f(phone):
raise exc
return _f
def test_fallback_provider_defaults_empty():
assert settings.SMS_FALLBACK_PROVIDER == ""
def test_send_code_primary_success_returns_sendresult(monkeypatch):
monkeypatch.setattr(settings, "SMS_PROVIDER", "jiguang")
monkeypatch.setattr(settings, "SMS_FALLBACK_PROVIDER", "")
monkeypatch.setattr(jiguang, "send_code", lambda phone: 60)
r = sms.send_code(PHONE)
assert isinstance(r, SendResult)
assert r.cooldown_sec == 60
assert r.provider == "jiguang"
assert r.fallback is False