goose/tests/gomigrations/register/register_test.go

114 lines
3.0 KiB
Go

package register_test
import (
"math"
"path/filepath"
"testing"
"github.com/pressly/goose/v3"
_ "github.com/pressly/goose/v3/tests/gomigrations/register/testdata"
"github.com/stretchr/testify/require"
)
func TestAddFunctions(t *testing.T) {
goMigrations, err := goose.CollectMigrations("testdata", 0, math.MaxInt64)
require.NoError(t, err)
require.Equal(t, len(goMigrations), 4)
checkMigration(t, goMigrations[0], &goose.Migration{
Version: 1,
Next: 2,
Previous: -1,
Source: "001_addmigration.go",
Registered: true,
UseTx: true,
})
checkMigration(t, goMigrations[1], &goose.Migration{
Version: 2,
Next: 3,
Previous: 1,
Source: "002_addmigrationnotx.go",
Registered: true,
UseTx: false,
})
checkMigration(t, goMigrations[2], &goose.Migration{
Version: 3,
Next: 4,
Previous: 2,
Source: "003_addmigrationcontext.go",
Registered: true,
UseTx: true,
})
checkMigration(t, goMigrations[3], &goose.Migration{
Version: 4,
Next: -1,
Previous: 3,
Source: "004_addmigrationnotxcontext.go",
Registered: true,
UseTx: false,
})
}
func checkMigration(t *testing.T, got *goose.Migration, want *goose.Migration) {
t.Helper()
require.Equal(t, got.Version, want.Version)
require.Equal(t, got.Next, want.Next)
require.Equal(t, got.Previous, want.Previous)
require.Equal(t, filepath.Base(got.Source), want.Source)
require.Equal(t, got.Registered, want.Registered)
require.Equal(t, got.UseTx, want.UseTx)
checkFunctions(t, got)
}
func checkFunctions(t *testing.T, m *goose.Migration) {
t.Helper()
switch filepath.Base(m.Source) {
case "001_addmigration.go":
// With transaction
require.NotNil(t, m.UpFn)
require.NotNil(t, m.DownFn)
require.NotNil(t, m.UpFnContext)
require.NotNil(t, m.DownFnContext)
// No transaction
require.Nil(t, m.UpFnNoTx)
require.Nil(t, m.DownFnNoTx)
require.Nil(t, m.UpFnNoTxContext)
require.Nil(t, m.DownFnNoTxContext)
case "002_addmigrationnotx.go":
// With transaction
require.Nil(t, m.UpFn)
require.Nil(t, m.DownFn)
require.Nil(t, m.UpFnContext)
require.Nil(t, m.DownFnContext)
// No transaction
require.NotNil(t, m.UpFnNoTx)
require.NotNil(t, m.DownFnNoTx)
require.NotNil(t, m.UpFnNoTxContext)
require.NotNil(t, m.DownFnNoTxContext)
case "003_addmigrationcontext.go":
// With transaction
require.NotNil(t, m.UpFn)
require.NotNil(t, m.DownFn)
require.NotNil(t, m.UpFnContext)
require.NotNil(t, m.DownFnContext)
// No transaction
require.Nil(t, m.UpFnNoTx)
require.Nil(t, m.DownFnNoTx)
require.Nil(t, m.UpFnNoTxContext)
require.Nil(t, m.DownFnNoTxContext)
case "004_addmigrationnotxcontext.go":
// With transaction
require.Nil(t, m.UpFn)
require.Nil(t, m.DownFn)
require.Nil(t, m.UpFnContext)
require.Nil(t, m.DownFnContext)
// No transaction
require.NotNil(t, m.UpFnNoTx)
require.NotNil(t, m.DownFnNoTx)
require.NotNil(t, m.UpFnNoTxContext)
require.NotNil(t, m.DownFnNoTxContext)
default:
t.Fatalf("unexpected migration: %s", filepath.Base(m.Source))
}
}