mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-10-07 18:26:37 +08:00
66be07750f
- Extract database layer into model and repo packages - Split repository into focused modules (control, federation, flow, groups, mutations) - Remove monolithic db.go and sqlite/repository.go - Update handlers to use new repository structure - Migrate contract tests to new patterns - Add migration plan documentation
86 lines
2.1 KiB
Go
86 lines
2.1 KiB
Go
package repo
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
gsqlite "github.com/glebarez/sqlite"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/logger"
|
|
)
|
|
|
|
func TestMigrateSchemaRunsPostgresIDRepairEvenAtCurrentVersion(t *testing.T) {
|
|
db, err := gorm.Open(gsqlite.Open(":memory:"), &gorm.Config{
|
|
Logger: logger.Default.LogMode(logger.Silent),
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("open sqlite: %v", err)
|
|
}
|
|
t.Cleanup(func() {
|
|
sqlDB, _ := db.DB()
|
|
if sqlDB != nil {
|
|
_ = sqlDB.Close()
|
|
}
|
|
})
|
|
|
|
if err := db.Exec(`CREATE TABLE schema_version (version INTEGER NOT NULL DEFAULT 0)`).Error; err != nil {
|
|
t.Fatalf("create schema_version: %v", err)
|
|
}
|
|
if err := db.Exec(`INSERT INTO schema_version(version) VALUES(?)`, currentSchemaVersion).Error; err != nil {
|
|
t.Fatalf("seed schema_version: %v", err)
|
|
}
|
|
|
|
called := 0
|
|
original := ensurePostgresIDDefaultsFn
|
|
ensurePostgresIDDefaultsFn = func(db *gorm.DB) error {
|
|
called++
|
|
return nil
|
|
}
|
|
t.Cleanup(func() {
|
|
ensurePostgresIDDefaultsFn = original
|
|
})
|
|
|
|
if err := migrateSchema(db); err != nil {
|
|
t.Fatalf("migrateSchema: %v", err)
|
|
}
|
|
if called != 1 {
|
|
t.Fatalf("expected postgres id repair to run once, got %d", called)
|
|
}
|
|
}
|
|
|
|
func TestMigrateSchemaReturnsPostgresIDRepairError(t *testing.T) {
|
|
db, err := gorm.Open(gsqlite.Open(":memory:"), &gorm.Config{
|
|
Logger: logger.Default.LogMode(logger.Silent),
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("open sqlite: %v", err)
|
|
}
|
|
t.Cleanup(func() {
|
|
sqlDB, _ := db.DB()
|
|
if sqlDB != nil {
|
|
_ = sqlDB.Close()
|
|
}
|
|
})
|
|
|
|
if err := db.Exec(`CREATE TABLE schema_version (version INTEGER NOT NULL DEFAULT 0)`).Error; err != nil {
|
|
t.Fatalf("create schema_version: %v", err)
|
|
}
|
|
if err := db.Exec(`INSERT INTO schema_version(version) VALUES(?)`, currentSchemaVersion).Error; err != nil {
|
|
t.Fatalf("seed schema_version: %v", err)
|
|
}
|
|
|
|
wantErr := errors.New("repair failed")
|
|
original := ensurePostgresIDDefaultsFn
|
|
ensurePostgresIDDefaultsFn = func(db *gorm.DB) error {
|
|
return wantErr
|
|
}
|
|
t.Cleanup(func() {
|
|
ensurePostgresIDDefaultsFn = original
|
|
})
|
|
|
|
err = migrateSchema(db)
|
|
if !errors.Is(err, wantErr) {
|
|
t.Fatalf("expected error %v, got %v", wantErr, err)
|
|
}
|
|
}
|