"""基线建库的最小验证:空库执行基线后账本登记且业务角色可连。""" from collections.abc import Iterator from pathlib import Path import pytest from muse.共享.调用身份 import 用途 from muse.基础设施.数据库.迁移 import 列出迁移, 已应用版本 from muse.基础设施.数据库.连接 import 数据库引用, 连接 pytestmark = pytest.mark.数据库 @pytest.fixture def 临时库(空测试库) -> Iterator[dict[用途, 数据库引用]]: yield 空测试库 @pytest.mark.case_id( "TC-base-0001", environment="隔离PG", given="全新空库与包内基线 SQL", when="以维护用途执行基线迁移", then=["账本登记基线版本,生产角色可连接并读取结构"], ) def test_空库执行基线登记账本且业务角色可连__base001(临时库) -> None: # 空测试库不预执行 DDL;在本用例内从零执行基线并验证账本与角色连接。 维护 = 连接(临时库[用途.维护].引用, 用途标记=用途.维护) with 维护 as 连: from muse.基础设施.数据库.迁移 import 执行迁移 执行迁移(连, Path("数据库/迁移")) 项 = 列出迁移() assert [i.版本 for i in 项] == [1] assert 已应用版本(连) == {1: 项[0].校验和} 生产 = 连接(临时库[用途.生产].引用, 用途标记=用途.生产) with 生产 as 连: 表数 = 连.execute( "SELECT count(*) FROM information_schema.tables " "WHERE table_schema = 'public' AND table_name LIKE 'muse_%'" ).fetchone()[0] assert 表数 > 30, "基线应建出完整的业务表集合"