From 8c49dd22b06f29cdf2e7ef6a43c0f7637d86e3e2 Mon Sep 17 00:00:00 2001 From: "Logan.Li" Date: Sun, 18 Oct 2026 20:10:04 +0000 Subject: [PATCH] =?UTF-8?q?test(migrations):=20=E6=96=AD=E8=A8=80=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E6=A0=A1=E9=AA=8C=E7=9C=9F=E5=AE=9E=E6=84=8F=E5=9B=BE?= =?UTF-8?q?=EF=BC=8C=E9=81=BF=E5=85=8D=E6=96=B0=E5=A2=9E=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E5=8D=B3=E8=AF=AF=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原断言写死"旧库只应补跑 0002/0003 两条迁移", 新增 0004_metric_aggregate_unique 与 0005_agent_settings 后必然失败。 改为校验:不得重跑基线、不得重跑 0001, 且 0002/0003 必须被执行——这才是该用例真正要守护的行为。 // Logan.Li --- backend/migrations/migrations_test.go | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/backend/migrations/migrations_test.go b/backend/migrations/migrations_test.go index 069212b..3e04af8 100644 --- a/backend/migrations/migrations_test.go +++ b/backend/migrations/migrations_test.go @@ -107,9 +107,31 @@ func TestBaselineDoesNotAlterProductionLikeSchema(t *testing.T) { if err != nil { t.Fatalf("旧库执行后续迁移失败: %v", err) } - if len(applied) != 2 || applied[0] != "0002_legacy_schema_patches" || applied[1] != "0003_billing_settings" { - t.Fatalf("旧库不应重跑 0001,实际执行: %v", applied) + // 断言真实意图:旧库不得重跑基线,且已登记的后续迁移不能再执行。 + // 不再写死迁移条数——否则每新增一个迁移都会误报。 // Logan.Li + for _, v := range applied { + if v == BaselineVersion { + t.Fatalf("旧库不应重跑基线 %s,实际执行: %v", BaselineVersion, applied) + } + if v == "0001_agent_credentials" { + t.Fatalf("旧库不应重跑 0001,实际执行: %v", applied) + } } + for _, want := range []string{"0002_legacy_schema_patches", "0003_billing_settings"} { + if !containsString(applied, want) { + t.Fatalf("旧库应补跑迁移 %s,实际执行: %v", want, applied) + } + } +} + +// containsString 判断字符串切片是否包含目标值。 // Logan.Li +func containsString(list []string, want string) bool { + for _, v := range list { + if v == want { + return true + } + } + return false } // schemaDefinitions 读取 SQLite 表定义,供基线非破坏性回归测试使用。 // Logan.Li