- 51 个增量迁移文件压扁为 V0001__基线.sql 完整快照(结构+种子+授权), 等价门禁:旧链全量执行库与基线库 pg_dump 逐字节一致 - 剔除 pg_dump 固化的 public schema 超级用户归属断言(muse_maint 无权执行) - 测试删减至保留集:备份往返 2 + 预算 2 + 租约 2 + 基线建库 1 - 租约/预算夹具改共享库,消除按例克隆建库 - 修复共享库三类既有污染:账本注入残留(系统管理)、失败触发器残留(评测)、 建表残留(正式变更事务),发布包迁移文件名硬编码改动态核对 - 全量数据库验收 722 passed / 0 failed / 0 errors(main 基线为 24F+291E) - 运行手册登记基线模式改表流程与账本校验和同步
44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
"""基线建库的最小验证:空库执行基线后账本登记且业务角色可连。"""
|
||
|
||
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, "基线应建出完整的业务表集合"
|