check / check (push) Waiting to run
Replaces #559, which conflicted. Model: opus-5-5
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package migrations_test
|
|
|
|
import (
|
|
"database/sql"
|
|
"log/slog"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
_ "modernc.org/sqlite"
|
|
"sneak.berlin/go/webhooker/internal/db/migrations"
|
|
"sneak.berlin/go/webhooker/internal/gormlog"
|
|
)
|
|
|
|
// TestApplyRunsEachFileOnce applies each kind of database file's
|
|
// migrations to a new file twice. The first time records every file.
|
|
// The second finds them all recorded and runs none, which is the only
|
|
// way it can succeed: 001_schema.sql creates tables that then exist.
|
|
func TestApplyRunsEachFileOnce(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
for _, dir := range []string{
|
|
migrations.Main, migrations.Events, migrations.Archive,
|
|
} {
|
|
t.Run(dir, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
sqlDB, err := sql.Open(
|
|
"sqlite", filepath.Join(t.TempDir(), "test.db"),
|
|
)
|
|
require.NoError(t, err)
|
|
|
|
t.Cleanup(func() { _ = sqlDB.Close() })
|
|
|
|
db, err := gorm.Open(
|
|
sqlite.Dialector{Conn: sqlDB},
|
|
&gorm.Config{
|
|
Logger: gormlog.New(slog.New(slog.DiscardHandler)),
|
|
},
|
|
)
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, migrations.Apply(db, dir))
|
|
require.NoError(t, migrations.Apply(db, dir))
|
|
|
|
var versions string
|
|
|
|
require.NoError(t, sqlDB.QueryRowContext(t.Context(),
|
|
"SELECT group_concat(version) FROM schema_migrations",
|
|
).Scan(&versions))
|
|
assert.Equal(t, "0,1", versions)
|
|
})
|
|
}
|
|
}
|