pilgrim/internal/pilgrim_conf_test/cli_test.go

209 lines
4.6 KiB
Go

package pilgrim_conf_test
import (
"flag"
"fmt"
"testing"
"github.com/stretchr/testify/assert"
"mvvasilev.dev/pilgrim/internal/pilgrim_conf"
)
func Test_CliContext_Url(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (string, bool) { return cli.Url() },
pilgrim_conf.Flag_Url,
"driver://localhost:3306",
)
}
func Test_CliContext_Driver(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (pilgrim_conf.DbDriver, bool) { return cli.Driver() },
pilgrim_conf.Flag_Driver,
"driver",
)
}
func Test_CliContext_Username(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (string, bool) { return cli.Username() },
pilgrim_conf.Flag_Username,
"username",
)
}
func Test_CliContext_Password(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (string, bool) { return cli.Password() },
pilgrim_conf.Flag_Password,
"password",
)
}
func Test_CliContext_Host(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (string, bool) { return cli.Host() },
pilgrim_conf.Flag_Host,
"localhost",
)
}
func Test_CliContext_Port(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (string, bool) { return cli.Port() },
pilgrim_conf.Flag_Port,
"3306",
)
}
func Test_CliContext_Segments(t *testing.T) {
expectedValue := []string{
"segment1", "segment2", "segment3",
}
flag.Set(pilgrim_conf.Flag_Segments, "segment1/segment2/segment3")
value, _ := pilgrim_conf.CliContext().Segments()
assert.Equal(t, expectedValue, value)
}
func Test_CliContext_Args(t *testing.T) {
expectedValue := map[string]string{
"arg1": "val1",
"arg2": "val2",
"arg3": "val3",
}
flag.Set(pilgrim_conf.Flag_Args, "arg1=val1&arg2=val2&arg3=val3")
value, _ := pilgrim_conf.CliContext().Args()
assert.Equal(t, expectedValue, value)
}
func Test_CliContext_Directory(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (string, bool) { return cli.Directory() },
pilgrim_conf.Flag_Directory,
"./custom-migrations",
)
}
func Test_CliContext_Script(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (string, bool) { return cli.Script() },
pilgrim_conf.Flag_Script,
"2024-10-13/1_SomeScript.sql",
)
}
func Test_CliContext_MigrationTable(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (string, bool) { return cli.MigrationTable() },
pilgrim_conf.Flag_Table,
"CustomMigrationsTable",
)
}
func Test_CliContext_MigrationTableSchema(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (string, bool) {
return pilgrim_conf.CliContext().MigrationTableSchema()
},
pilgrim_conf.Flag_Schema,
"public",
)
}
func Test_CliContext_Up(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (bool, bool) { return cli.IsUp() },
pilgrim_conf.Flag_Up,
true,
)
}
func Test_CliContext_Down(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (bool, bool) { return cli.IsDown() },
pilgrim_conf.Flag_Down,
true,
)
}
func Test_CliContext_StrictOrdering(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (bool, bool) {
return pilgrim_conf.CliContext().IsStrictOrderingEnabled()
},
pilgrim_conf.Flag_StrictOrdering,
true,
)
}
func Test_CliContext_DisableChecksumValidation(t *testing.T) {
expectedValue := false
flag.Set(pilgrim_conf.Flag_DisableChecksumValidation, "true")
value, _ := pilgrim_conf.CliContext().IsChecksumValidationEnabled()
assert.Equal(t, expectedValue, value)
}
func Test_CliContext_ValidateChecksums(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (bool, bool) {
return cli.IsValidatingChecksums()
},
pilgrim_conf.Flag_ValidateChecksums,
true,
)
}
func Test_CliContext_ValidateMigrationOrder(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (bool, bool) {
return cli.IsValidatingMigrationOrder()
},
pilgrim_conf.Flag_ValidateMigrationOrder,
true,
)
}
func Test_CliContext_ValidateLatest(t *testing.T) {
test_cliValue(
t,
func(cli pilgrim_conf.CliFlagRetriever) (bool, bool) { return cli.IsValidatingLatest() },
pilgrim_conf.Flag_ValidateLatest,
true,
)
}
func test_cliValue[T string | pilgrim_conf.DbDriver | bool](t *testing.T, cliVal func(cli pilgrim_conf.CliFlagRetriever) (value T, isProvided bool), flagName string, expectedVal T) {
cli := pilgrim_conf.CliContext()
flag.Set(flagName, fmt.Sprintf("%v", expectedVal))
cli.ParseFlags()
value, _ := cliVal(cli)
assert.Equal(t, expectedVal, value)
}