feat: 实现 Admin 首次初始化与网页登录 (#50)
This commit is contained in:
@@ -593,6 +593,36 @@ func TestMigrate_v5新增会话表同步状态表和product_spec列(t *testing.T
|
||||
}
|
||||
}
|
||||
|
||||
func TestMigrate_v6新增用户和WebSession表(t *testing.T) {
|
||||
for _, c := range []struct {
|
||||
name string
|
||||
db *sql.DB
|
||||
}{
|
||||
{"全新库", newFreshDB(t)},
|
||||
{"v2 老结构库", newV2DB(t)},
|
||||
{"v2 新结构库", newV2NewStructureDB(t)},
|
||||
} {
|
||||
if c.name != "全新库" {
|
||||
if err := Migrate(c.db); err != nil {
|
||||
t.Fatalf("%s 迁移失败: %v", c.name, err)
|
||||
}
|
||||
}
|
||||
tables := existingTableSet(t, c.db)
|
||||
for _, table := range []string{"users", "web_sessions"} {
|
||||
if !tables[table] {
|
||||
t.Errorf("%s:迁移后应该有表 %s", c.name, table)
|
||||
}
|
||||
}
|
||||
var version int
|
||||
if err := c.db.QueryRow("PRAGMA user_version").Scan(&version); err != nil {
|
||||
t.Fatalf("%s 读取 user_version 失败: %v", c.name, err)
|
||||
}
|
||||
if version != 6 {
|
||||
t.Errorf("%s user_version = %d,期望 6", c.name, version)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// existingTableSet 返回库里当前存在的表名集合。
|
||||
func existingTableSet(t *testing.T, db *sql.DB) map[string]bool {
|
||||
t.Helper()
|
||||
@@ -1027,11 +1057,14 @@ func TestCheckSchema_缺少v4关键列时拒绝(t *testing.T) {
|
||||
if err := migrateV3(db); err != nil {
|
||||
t.Fatalf("准备 v3 数据库失败: %v", err)
|
||||
}
|
||||
// 故意跳过 v4(不加 shop_name),但把 v5 补上——否则 CheckSchema 会先
|
||||
// 因为缺 v5 的表报错,测不到本测试真正要覆盖的"缺 shop_name"这条路径。
|
||||
// 故意跳过 v4(不加 shop_name),但把 v5/v6 补上——否则 CheckSchema 会先
|
||||
// 因为缺后续表报错,测不到本测试真正要覆盖的"缺 shop_name"这条路径。
|
||||
if err := runSQLMigration(db, 5, migrationV5); err != nil {
|
||||
t.Fatalf("准备 v5 数据库失败: %v", err)
|
||||
}
|
||||
if err := runSQLMigration(db, 6, migrationV6); err != nil {
|
||||
t.Fatalf("准备 v6 数据库失败: %v", err)
|
||||
}
|
||||
|
||||
err := CheckSchema(db)
|
||||
if err == nil || !strings.Contains(err.Error(), "shop_name") {
|
||||
|
||||
Reference in New Issue
Block a user