|
|
|
@@ -2,6 +2,7 @@ package store
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"io/fs"
|
|
|
|
|
"strings"
|
|
|
|
|
"testing"
|
|
|
|
|
"testing/fstest"
|
|
|
|
@@ -173,7 +174,33 @@ func TestMigrateEmbeddedMigrations(t *testing.T) {
|
|
|
|
|
if err := Migrate(context.Background(), s.Writer, migrations.FS); err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
if got := versions(migrationRows(t, s)); !strings.HasPrefix(got, "0001_init") {
|
|
|
|
|
t.Errorf("versions = %q, want 0001_init first", got)
|
|
|
|
|
if got := versions(migrationRows(t, s)); got != "0000_bootstrap" {
|
|
|
|
|
t.Errorf("versions = %q, want 0000_bootstrap", got)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestMigrateEmbeddedThenNewMigrationApplies(t *testing.T) {
|
|
|
|
|
ctx := context.Background()
|
|
|
|
|
s := openTestStore(t)
|
|
|
|
|
if err := Migrate(ctx, s.Writer, migrations.FS); err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
bootstrap, err := fs.ReadFile(migrations.FS, "0000_bootstrap.sql")
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
// A later build adds 0001_init.sql alongside the unchanged bootstrap.
|
|
|
|
|
upgraded := fstest.MapFS{
|
|
|
|
|
"0000_bootstrap.sql": {Data: bootstrap},
|
|
|
|
|
"0001_init.sql": {Data: []byte("CREATE TABLE later (id INTEGER PRIMARY KEY);")},
|
|
|
|
|
}
|
|
|
|
|
if err := Migrate(ctx, s.Writer, upgraded); err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
if got := versions(migrationRows(t, s)); got != "0000_bootstrap,0001_init" {
|
|
|
|
|
t.Errorf("versions = %q, want 0000_bootstrap,0001_init", got)
|
|
|
|
|
}
|
|
|
|
|
if !tableExists(t, s, "later") {
|
|
|
|
|
t.Error("table from 0001_init was not created")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|