2025-03-15 19:03:22 +02:00
|
|
|
package pilgrim_conf_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
pilgrim_mock "mvvasilev.dev/pilgrim/internal/mocks"
|
|
|
|
"mvvasilev.dev/pilgrim/internal/pilgrim_conf"
|
|
|
|
)
|
|
|
|
|
|
|
|
const CliUrlValue = "postgres://cli_host:5432/cli_segment1/cli_segment2?cli_arg1=cli_val1&cli_arg2=cli_val2"
|
|
|
|
const CliDriverValue = pilgrim_conf.DbDriver_Postgres
|
|
|
|
|
2025-03-16 23:13:00 +02:00
|
|
|
func setupMockDefaults(
|
|
|
|
env *pilgrim_mock.EnvVarRetriever,
|
|
|
|
cli *pilgrim_mock.CliFlagRetriever,
|
2025-03-15 19:03:22 +02:00
|
|
|
) {
|
|
|
|
env.EXPECT().Url().Return("", false)
|
|
|
|
env.EXPECT().Driver().Return(pilgrim_conf.DbDriver_Postgres, false)
|
|
|
|
env.EXPECT().Username().Return("", false)
|
|
|
|
env.EXPECT().Password().Return("", false)
|
|
|
|
env.EXPECT().Host().Return("", false)
|
|
|
|
env.EXPECT().Port().Return("", false)
|
|
|
|
env.EXPECT().Segments().Return([]string{}, false)
|
|
|
|
env.EXPECT().Args().Return(map[string]string{}, false)
|
|
|
|
env.EXPECT().Directory().Return("", false)
|
|
|
|
env.EXPECT().MigrationTable().Return("", false)
|
|
|
|
env.EXPECT().MigrationTableSchema().Return("", false)
|
|
|
|
|
|
|
|
cli.EXPECT().Url().Return("", false)
|
|
|
|
cli.EXPECT().Driver().Return(pilgrim_conf.DbDriver_Postgres, false)
|
|
|
|
cli.EXPECT().Username().Return("", false)
|
|
|
|
cli.EXPECT().Password().Return("", false)
|
|
|
|
cli.EXPECT().Host().Return("", false)
|
|
|
|
cli.EXPECT().Port().Return("", false)
|
|
|
|
cli.EXPECT().Segments().Return([]string{}, false)
|
|
|
|
cli.EXPECT().Args().Return(map[string]string{}, false)
|
|
|
|
cli.EXPECT().Directory().Return("", false)
|
|
|
|
cli.EXPECT().IsUp().Return(false, false)
|
|
|
|
cli.EXPECT().IsDown().Return(false, false)
|
|
|
|
cli.EXPECT().Script().Return("", false)
|
|
|
|
cli.EXPECT().MigrationTable().Return("", false)
|
|
|
|
cli.EXPECT().MigrationTableSchema().Return("", false)
|
|
|
|
cli.EXPECT().IsChecksumValidationEnabled().Return(false, false)
|
|
|
|
cli.EXPECT().IsStrictOrderingEnabled().Return(false, false)
|
|
|
|
cli.EXPECT().IsValidatingMigrationOrder().Return(false, false)
|
|
|
|
cli.EXPECT().IsValidatingLatest().Return(false, false)
|
|
|
|
cli.EXPECT().IsValidatingChecksums().Return(false, false)
|
2025-03-16 23:13:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func runTest(
|
|
|
|
setupMocks func(
|
|
|
|
env *pilgrim_mock.EnvVarRetriever,
|
|
|
|
cli *pilgrim_mock.CliFlagRetriever,
|
|
|
|
),
|
|
|
|
test func(
|
|
|
|
env *pilgrim_mock.EnvVarRetriever,
|
|
|
|
cli *pilgrim_mock.CliFlagRetriever,
|
|
|
|
),
|
|
|
|
) {
|
|
|
|
env, cli := new(pilgrim_mock.EnvVarRetriever), new(pilgrim_mock.CliFlagRetriever)
|
|
|
|
|
|
|
|
setupMocks(env, cli)
|
|
|
|
|
|
|
|
setupMockDefaults(env, cli)
|
2025-03-15 19:03:22 +02:00
|
|
|
|
|
|
|
test(env, cli)
|
|
|
|
}
|
|
|
|
|
|
|
|
func Test_PilgrimContext_CliDriverOverridesCliUrlDriver(t *testing.T) {
|
|
|
|
runTest(
|
|
|
|
func(env *pilgrim_mock.EnvVarRetriever, cli *pilgrim_mock.CliFlagRetriever) {
|
|
|
|
env.EXPECT().Driver().Return(pilgrim_conf.DbDriver_MSSQL, true)
|
|
|
|
cli.EXPECT().Driver().Return(pilgrim_conf.DbDriver_MySQL, true) // This should be of highest priority
|
|
|
|
cli.EXPECT().Url().Return("postgres://cli_host:5432/cli_segment1/cli_segment2?cli_arg1=cli_val1&cli_arg2=cli_val2", true)
|
|
|
|
},
|
|
|
|
func(env *pilgrim_mock.EnvVarRetriever, cli *pilgrim_mock.CliFlagRetriever) {
|
|
|
|
ctx := pilgrim_conf.NewPilgrimContext(cli, env)
|
|
|
|
|
|
|
|
assert.Equal(t, pilgrim_conf.DbDriver_MySQL, ctx.UrlParts().Driver)
|
|
|
|
},
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2025-03-15 19:36:11 +02:00
|
|
|
func Test_PilgrimContext_EnvDriverOverridesEnvUrlDriver(t *testing.T) {
|
|
|
|
runTest(
|
|
|
|
func(env *pilgrim_mock.EnvVarRetriever, cli *pilgrim_mock.CliFlagRetriever) {
|
|
|
|
env.EXPECT().Driver().Return(pilgrim_conf.DbDriver_MSSQL, true) // This should be highest priority
|
|
|
|
env.EXPECT().Url().Return("postgres://env_host:5432", true)
|
|
|
|
},
|
|
|
|
func(env *pilgrim_mock.EnvVarRetriever, cli *pilgrim_mock.CliFlagRetriever) {
|
|
|
|
ctx := pilgrim_conf.NewPilgrimContext(cli, env)
|
|
|
|
|
|
|
|
assert.Equal(t, pilgrim_conf.DbDriver_MSSQL, ctx.UrlParts().Driver)
|
|
|
|
},
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2025-03-18 21:03:00 +02:00
|
|
|
func Test_PilgrimContext_CliUrlDriverOverridesEnvDriver(t *testing.T) {
|
|
|
|
runTest(
|
|
|
|
func(env *pilgrim_mock.EnvVarRetriever, cli *pilgrim_mock.CliFlagRetriever) {
|
|
|
|
env.EXPECT().Driver().Return(pilgrim_conf.DbDriver_Postgres, true)
|
|
|
|
cli.EXPECT().Url().Return("mssql://cli_host:1433", true)
|
|
|
|
},
|
|
|
|
func(env *pilgrim_mock.EnvVarRetriever, cli *pilgrim_mock.CliFlagRetriever) {
|
|
|
|
ctx := pilgrim_conf.NewPilgrimContext(cli, env)
|
|
|
|
|
|
|
|
assert.Equal(t, pilgrim_conf.DbDriver_MSSQL, ctx.UrlParts().Driver)
|
|
|
|
},
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
func Test_PilgrimContext_CliDriverOverridesEnvDriver(t *testing.T) {
|
|
|
|
runTest(
|
|
|
|
func(env *pilgrim_mock.EnvVarRetriever, cli *pilgrim_mock.CliFlagRetriever) {
|
|
|
|
env.EXPECT().Driver().Return(pilgrim_conf.DbDriver_MSSQL, true)
|
|
|
|
cli.EXPECT().Driver().Return(pilgrim_conf.DbDriver_MariaDB, true)
|
|
|
|
},
|
|
|
|
func(env *pilgrim_mock.EnvVarRetriever, cli *pilgrim_mock.CliFlagRetriever) {
|
|
|
|
ctx := pilgrim_conf.NewPilgrimContext(cli, env)
|
|
|
|
|
|
|
|
assert.Equal(t, pilgrim_conf.DbDriver_MariaDB, ctx.UrlParts().Driver)
|
|
|
|
},
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
func Test_PilgrimContext_EnvDriverIsUsedIfNoCliDriverProvided(t *testing.T) {
|
|
|
|
runTest(
|
|
|
|
func(env *pilgrim_mock.EnvVarRetriever, cli *pilgrim_mock.CliFlagRetriever) {
|
|
|
|
env.EXPECT().Driver().Return(pilgrim_conf.DbDriver_MSSQL, true)
|
|
|
|
},
|
|
|
|
func(env *pilgrim_mock.EnvVarRetriever, cli *pilgrim_mock.CliFlagRetriever) {
|
|
|
|
ctx := pilgrim_conf.NewPilgrimContext(cli, env)
|
|
|
|
|
|
|
|
assert.Equal(t, pilgrim_conf.DbDriver_MSSQL, ctx.UrlParts().Driver)
|
|
|
|
},
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
func Test_PilgrimContext_EnvUrlDriverIsNotUsedIfCliDriverOverrideProvided(t *testing.T) {
|
|
|
|
runTest(
|
|
|
|
func(env *pilgrim_mock.EnvVarRetriever, cli *pilgrim_mock.CliFlagRetriever) {
|
|
|
|
env.EXPECT().Url().Return("mysql://localhost:3306", true)
|
|
|
|
cli.EXPECT().Driver().Return(pilgrim_conf.DbDriver_MariaDB, true)
|
|
|
|
},
|
|
|
|
func(env *pilgrim_mock.EnvVarRetriever, cli *pilgrim_mock.CliFlagRetriever) {
|
|
|
|
ctx := pilgrim_conf.NewPilgrimContext(cli, env)
|
|
|
|
|
|
|
|
assert.Equal(t, pilgrim_conf.DbDriver_MariaDB, ctx.UrlParts().Driver)
|
|
|
|
},
|
|
|
|
)
|
|
|
|
}
|