"""生产配置校验:固定验证码必须显式开关,否则启动即失败。 这两条是「部署纪律」的守门员:生产一旦误用 dev 验证码,等于任意手机号可登录。 """ from __future__ import annotations import pytest from app.config import Settings _STRONG_SECRET = "x" * 48 _PROD_DB = "postgresql+asyncpg://dadao_prod_app:pw@192.168.8.160:8432/dadaotask_prod" def _prod(**overrides: object) -> Settings: values: dict[str, object] = { "env": "prod", "jwt_secret": _STRONG_SECRET, "database_url": _PROD_DB, "sms_provider": "aliyun", } values.update(overrides) return Settings(**values) def test_prod_rejects_dev_sms_without_switch() -> None: with pytest.raises(RuntimeError, match="SMS_PROVIDER=dev"): _prod(sms_provider="dev").validate_runtime() def test_prod_allows_dev_sms_with_internal_test_login() -> None: # 内测模式:显式开关后放行,启动时 main.lifespan 会打 WARNING _prod(sms_provider="dev", internal_test_login=True).validate_runtime() def test_prod_still_rejects_weak_jwt_secret() -> None: with pytest.raises(RuntimeError, match="JWT_SECRET"): _prod(jwt_secret="short").validate_runtime()