70 lines
1.5 KiB
Go
70 lines
1.5 KiB
Go
package migration
|
|
|
|
import (
|
|
"context"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"cmroubao/backend-api/internal/platform/database"
|
|
)
|
|
|
|
func TestRunnerSupportsUpStatusDownAndIdempotentUp(t *testing.T) {
|
|
db, err := database.Open(
|
|
context.Background(),
|
|
filepath.Join(t.TempDir(), "migration.db"),
|
|
)
|
|
if err != nil {
|
|
t.Fatalf("database.Open() error = %v", err)
|
|
}
|
|
t.Cleanup(func() { _ = db.Close() })
|
|
|
|
runner, err := New(db)
|
|
if err != nil {
|
|
t.Fatalf("New() error = %v", err)
|
|
}
|
|
|
|
applied, err := runner.Up(context.Background())
|
|
if err != nil {
|
|
t.Fatalf("Up() error = %v", err)
|
|
}
|
|
if applied != 1 {
|
|
t.Fatalf("Up() applied = %d, want 1", applied)
|
|
}
|
|
assertStatus(t, runner, true)
|
|
|
|
applied, err = runner.Up(context.Background())
|
|
if err != nil {
|
|
t.Fatalf("second Up() error = %v", err)
|
|
}
|
|
if applied != 0 {
|
|
t.Fatalf("second Up() applied = %d, want 0", applied)
|
|
}
|
|
|
|
if err := runner.Down(context.Background()); err != nil {
|
|
t.Fatalf("Down() error = %v", err)
|
|
}
|
|
assertStatus(t, runner, false)
|
|
|
|
applied, err = runner.Up(context.Background())
|
|
if err != nil {
|
|
t.Fatalf("final Up() error = %v", err)
|
|
}
|
|
if applied != 1 {
|
|
t.Fatalf("final Up() applied = %d, want 1", applied)
|
|
}
|
|
}
|
|
|
|
func assertStatus(t *testing.T, runner *Runner, applied bool) {
|
|
t.Helper()
|
|
statuses, err := runner.Status(context.Background())
|
|
if err != nil {
|
|
t.Fatalf("Status() error = %v", err)
|
|
}
|
|
if len(statuses) != 1 {
|
|
t.Fatalf("Status() count = %d, want 1", len(statuses))
|
|
}
|
|
if statuses[0].Version != 1 || statuses[0].Applied != applied {
|
|
t.Fatalf("Status() = %+v", statuses[0])
|
|
}
|
|
}
|