"""批次 1 部署治理回归测试。 覆盖: - AUTO_MIGRATE 开关:env 解析与默认值(默认 true 保持现行启动行为) - create_admin_user:ADMIN_PASSWORD 未配置时显式报错,不创建空口令管理员 """ import pytest from unittest.mock import MagicMock from shared.config.settings import Settings def test_auto_migrate_default_true(monkeypatch): """未配置时默认 true:保持既有单机开发行为(启动即迁移)。""" monkeypatch.delenv("AUTO_MIGRATE", raising=False) assert Settings().AUTO_MIGRATE is True def test_auto_migrate_env_parsing(monkeypatch): monkeypatch.setenv("AUTO_MIGRATE", "false") assert Settings().AUTO_MIGRATE is False monkeypatch.setenv("AUTO_MIGRATE", "true") assert Settings().AUTO_MIGRATE is True @pytest.mark.asyncio async def test_create_admin_without_password_is_explicit_error(monkeypatch): """ADMIN_PASSWORD 缺失必须显式失败(compose 已去弱默认),而非静默创建空口令管理员。""" # init_db 顶层 import alembic;未安装 alembic 的环境跳过(与 OCC 测试同策略) pytest.importorskip("alembic.config") from shared.config.settings import settings from shared.database.init_db import create_admin_user monkeypatch.setattr(settings, "ADMIN_PASSWORD", None) # 校验发生在任何 DB 访问之前,MagicMock 会话不会被触碰 with pytest.raises(RuntimeError, match="ADMIN_PASSWORD"): await create_admin_user(MagicMock())