From 12509eaf4445fa10aee8dac4dc3183af19180d39 Mon Sep 17 00:00:00 2001 From: go-jet Date: Fri, 21 Jul 2023 17:10:39 +0200 Subject: [PATCH] Additional generator tests. --- internal/utils/errfmt/errfmt.go | 4 +++ tests/postgres/generator_test.go | 60 +++++++++++++++++++------------- 2 files changed, 40 insertions(+), 24 deletions(-) diff --git a/internal/utils/errfmt/errfmt.go b/internal/utils/errfmt/errfmt.go index 5e5237b..05acac0 100644 --- a/internal/utils/errfmt/errfmt.go +++ b/internal/utils/errfmt/errfmt.go @@ -1,10 +1,14 @@ package errfmt import ( + "github.com/go-jet/jet/v2/internal/utils/is" "strings" ) // Trace returns well formatted wrapped error trace string func Trace(err error) string { + if is.Nil(err) { + return "" + } return "Error trace:\n" + " - " + strings.Replace(err.Error(), ": ", ":\n - ", -1) } diff --git a/tests/postgres/generator_test.go b/tests/postgres/generator_test.go index 2d15ee2..e9ef0e6 100644 --- a/tests/postgres/generator_test.go +++ b/tests/postgres/generator_test.go @@ -19,6 +19,26 @@ import ( "github.com/go-jet/jet/v2/tests/.gentestdata/jetdb/dvds/model" ) +func dsn(host string, port int, dbName, user, password string) string { + return fmt.Sprintf("postgresql://%s:%s@%s:%d/%s?sslmode=disable", + user, + password, + host, + port, + dbName, + ) +} + +func defaultDSN() string { + return dsn( + dbconfig.PgHost, + dbconfig.PgPort, + dbconfig.PgDBName, + dbconfig.PgUser, + dbconfig.PgPassword, + ) +} + func TestGeneratedModel(t *testing.T) { actor := model.Actor{} @@ -73,14 +93,7 @@ func TestCmdGenerator(t *testing.T) { require.NoError(t, err) // Check that connection via DSN works - dsn := fmt.Sprintf("postgresql://%s:%s@%s:%d/%s?sslmode=disable", - dbconfig.PgUser, - dbconfig.PgPassword, - dbconfig.PgHost, - dbconfig.PgPort, - "jetdb", - ) - cmd = exec.Command("jet", "-dsn="+dsn, "-schema=dvds", "-path="+genTestDir2) + cmd = exec.Command("jet", "-dsn="+defaultDSN(), "-schema=dvds", "-path="+genTestDir2) cmd.Stderr = os.Stderr cmd.Stdout = os.Stdout @@ -101,13 +114,7 @@ func TestGeneratorIgnoreTables(t *testing.T) { { name: "with dsn", args: []string{ - "-dsn=" + fmt.Sprintf("postgresql://%s:%s@%s:%d/%s?sslmode=disable", - dbconfig.PgUser, - dbconfig.PgPassword, - dbconfig.PgHost, - dbconfig.PgPort, - "jetdb", - ), + "-dsn=" + defaultDSN(), "-schema=dvds", "-ignore-tables=actor,ADDRESS,country, Film , cITY,", "-ignore-views=Actor_info, FILM_LIST ,staff_list", @@ -191,15 +198,7 @@ func TestGenerator(t *testing.T) { } for i := 0; i < 3; i++ { - dsn := fmt.Sprintf("postgresql://%[1]s:%[2]s@%[3]s:%[4]d/%[5]s?sslmode=disable", - dbconfig.PgUser, - dbconfig.PgPassword, - dbconfig.PgHost, - dbconfig.PgPort, - dbconfig.PgDBName, - ) - err := postgres.GenerateDSN(dsn, "dvds", genTestDir2) - + err := postgres.GenerateDSN(defaultDSN(), "dvds", genTestDir2) require.NoError(t, err) assertGeneratedFiles(t) @@ -226,6 +225,19 @@ func TestGeneratorSpecialCharacters(t *testing.T) { require.NoError(t, err) } +func TestGenerateErrorCases(t *testing.T) { + err := postgres.GenerateDSN("!@#$%&*", "", "") + require.ErrorContains(t, err, "failed to parse as DSN") + err = postgres.GenerateDSN(dsn(dbconfig.PgHost, -1, "!@!#", "", ""), "", "") + require.ErrorContains(t, err, "invalid port") + err = postgres.GenerateDSN(dsn(dbconfig.PgHost, dbconfig.PgPort, "!@!#", "", ""), "", "") + require.ErrorContains(t, err, "failed to open db connection") + err = postgres.GenerateDSN(dsn(dbconfig.PgHost, dbconfig.PgPort, dbconfig.PgDBName, "", ""), "", "") + require.ErrorContains(t, err, "password authentication failed") + err = postgres.GenerateDSN(dsn(dbconfig.PgHost, dbconfig.PgPort, dbconfig.PgDBName, dbconfig.PgUser, ""), "", "") + require.ErrorContains(t, err, "password authentication failed for user \"jet\"") +} + func assertGeneratedFiles(t *testing.T) { // Table SQL Builder files testutils.AssertFileNamesEqual(t, "./.gentestdata2/jetdb/dvds/table",