Files
DadaoTask/backend/tests/test_config_prod.py
T

40 lines
1.2 KiB
Python

"""生产配置校验:固定验证码必须显式开关,否则启动即失败。
这两条是「部署纪律」的守门员:生产一旦误用 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()