fix(migrations): 数据库升级 - 兼容旧工作台 v51 账本
This commit is contained in:
@@ -98,6 +98,53 @@ func TestMigrateSchemaRecordsAndValidatesVersion(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMigrateSchemaNormalizesLegacyWorkbenchMigrationV51(t *testing.T) {
|
||||
db, err := Open(Config{Driver: "sqlite", DSN: "file:migration-legacy-workbench-v51?mode=memory&cache=shared"})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := MigrateSchema(db); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.Where("version IN ?", []int64{51, 52, 53}).Delete(&schemaMigration{}).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.Model(&schemaMigration{}).Where("version = ?", 54).Updates(map[string]any{
|
||||
"version": 51,
|
||||
"name": workbenchToolsMigrationName,
|
||||
"checksum": legacyWorkbenchToolsMigrationChecksum,
|
||||
}).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if err := MigrateSchema(db); err != nil {
|
||||
t.Fatalf("legacy workbench migration should be normalized: %v", err)
|
||||
}
|
||||
status, err := ReadSchemaStatus(db)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !status.Ready || status.Current != CurrentSchemaVersion {
|
||||
t.Fatalf("unexpected normalized schema status: %#v", status)
|
||||
}
|
||||
var normalized schemaMigration
|
||||
if err := db.First(&normalized, "version = ?", workbenchToolsMigrationVersion).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if normalized.Name != workbenchToolsMigrationName || normalized.Checksum != workbenchToolsMigrationChecksum {
|
||||
t.Fatalf("normalized workbench migration = %#v", normalized)
|
||||
}
|
||||
for _, item := range schemaMigrations {
|
||||
var count int64
|
||||
if err := db.Model(&schemaMigration{}).Where("version = ? AND name = ? AND checksum = ?", item.version, item.name, item.checksum).Count(&count).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if item.version != workbenchToolsMigrationVersion && count != 1 {
|
||||
t.Fatalf("migration %d was not restored: %#v", item.version, item)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestMigrateSchemaV35UpgradesExistingDatabase(t *testing.T) {
|
||||
db, err := Open(Config{Driver: "sqlite", DSN: "file:migration-auth-notifications-v35?mode=memory&cache=shared"})
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user