feat: 增加客户端采购员归属管理 (#54)

This commit is contained in:
chengma
2026-08-09 16:02:25 +08:00
parent 0181170457
commit e0c0dac7a0
17 changed files with 766 additions and 37 deletions
+14 -11
View File
@@ -593,7 +593,7 @@ func TestMigrate_v5新增会话表同步状态表和product_spec列(t *testing.T
}
}
func TestMigrate_v6新增用户和WebSession表(t *testing.T) {
func TestMigrate_v6用户表与v7客户端归属表均存在(t *testing.T) {
for _, c := range []struct {
name string
db *sql.DB
@@ -608,7 +608,7 @@ func TestMigrate_v6新增用户和WebSession表(t *testing.T) {
}
}
tables := existingTableSet(t, c.db)
for _, table := range []string{"users", "web_sessions"} {
for _, table := range []string{"users", "web_sessions", "client_user_assignments"} {
if !tables[table] {
t.Errorf("%s:迁移后应该有表 %s", c.name, table)
}
@@ -617,21 +617,21 @@ func TestMigrate_v6新增用户和WebSession表(t *testing.T) {
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)
if version != schemaVersion {
t.Errorf("%s user_version = %d,期望 %d", c.name, version, schemaVersion)
}
}
}
// #52:网页登录上线后显式覆盖每一个已发布版本起点,证明 Client 现实库
// 不会因为 v6 的用户表而卡在中间版本。v2 的两种历史结构另由上面的收敛
// #52/#54:显式覆盖每一个已发布版本起点,证明 Client 现实库
// 不会因为 v6/v7 的新增表而卡在中间版本。v2 的两种历史结构另由上面的收敛
// 测试持续覆盖;这里验证顺序发布的 v1-v5 路径。
func TestMigrate_v1到v5均可升级到v6(t *testing.T) {
func TestMigrate_v1到v5均可升级到最新版本(t *testing.T) {
for version := 1; version <= 5; version++ {
t.Run(fmt.Sprintf("v%d", version), func(t *testing.T) {
db := newPublishedVersionDB(t, version)
if err := Migrate(db); err != nil {
t.Fatalf("v%d 迁移到 v6 失败: %v", version, err)
t.Fatalf("v%d 迁移到最新版本失败: %v", version, err)
}
if err := CheckSchema(db); err != nil {
t.Fatalf("v%d 迁移后 schema 自检失败: %v", version, err)
@@ -640,8 +640,8 @@ func TestMigrate_v1到v5均可升级到v6(t *testing.T) {
if err := db.QueryRow(`PRAGMA user_version`).Scan(&gotVersion); err != nil {
t.Fatal(err)
}
if gotVersion != 6 {
t.Fatalf("v%d 迁移后 user_version = %d,期望 6", version, gotVersion)
if gotVersion != schemaVersion {
t.Fatalf("v%d 迁移后 user_version = %d,期望 %d", version, gotVersion, schemaVersion)
}
})
}
@@ -1120,7 +1120,7 @@ func TestCheckSchema_缺少v4关键列时拒绝(t *testing.T) {
if err := migrateV3(db); err != nil {
t.Fatalf("准备 v3 数据库失败: %v", err)
}
// 故意跳过 v4(不加 shop_name),但把 v5/v6 补上——否则 CheckSchema 会先
// 故意跳过 v4(不加 shop_name),但把 v5-v7 补上——否则 CheckSchema 会先
// 因为缺后续表报错,测不到本测试真正要覆盖的"缺 shop_name"这条路径。
if err := runSQLMigration(db, 5, migrationV5); err != nil {
t.Fatalf("准备 v5 数据库失败: %v", err)
@@ -1128,6 +1128,9 @@ func TestCheckSchema_缺少v4关键列时拒绝(t *testing.T) {
if err := runSQLMigration(db, 6, migrationV6); err != nil {
t.Fatalf("准备 v6 数据库失败: %v", err)
}
if err := runSQLMigration(db, 7, migrationV7); err != nil {
t.Fatalf("准备 v7 数据库失败: %v", err)
}
err := CheckSchema(db)
if err == nil || !strings.Contains(err.Error(), "shop_name") {