github.com/dkishere/pop/v6@v6.103.1/dialect_postgresql_test.go (about) 1 package pop 2 3 import ( 4 "os" 5 "os/user" 6 "testing" 7 8 "github.com/stretchr/testify/require" 9 ) 10 11 func Test_PostgreSQL_Connection_String(t *testing.T) { 12 r := require.New(t) 13 14 url := "host=host port=1234 dbname=database user=user password=pass" 15 cd := &ConnectionDetails{ 16 Dialect: "postgres", 17 URL: url, 18 } 19 err := cd.Finalize() 20 r.NoError(err) 21 22 r.Equal(url, cd.URL) 23 r.Equal("postgres", cd.Dialect) 24 r.Equal("host", cd.Host) 25 r.Equal("pass", cd.Password) 26 r.Equal("1234", cd.Port) 27 r.Equal("user", cd.User) 28 r.Equal("database", cd.Database) 29 } 30 31 func Test_PostgreSQL_Connection_String_Options(t *testing.T) { 32 r := require.New(t) 33 34 url := "host=host port=1234 dbname=database user=user password=pass sslmode=disable fallback_application_name=test_app connect_timeout=10 sslcert=/some/location sslkey=/some/other/location sslrootcert=/root/location" 35 cd := &ConnectionDetails{ 36 Dialect: "postgres", 37 URL: url, 38 } 39 err := cd.Finalize() 40 r.NoError(err) 41 42 r.Equal(url, cd.URL) 43 44 r.Equal("disable", cd.Options["sslmode"]) 45 r.Equal("test_app", cd.Options["fallback_application_name"]) 46 } 47 48 func Test_PostgreSQL_Connection_String_Without_User(t *testing.T) { 49 r := require.New(t) 50 51 url := "dbname=database" 52 cd := &ConnectionDetails{ 53 Dialect: "postgres", 54 URL: url, 55 } 56 err := cd.Finalize() 57 r.NoError(err) 58 59 uc := os.Getenv("PGUSER") 60 if uc == "" { 61 c, err := user.Current() 62 if err == nil { 63 uc = c.Username 64 } 65 } 66 67 r.Equal(url, cd.URL) 68 r.Equal("postgres", cd.Dialect) 69 70 var foundHost bool 71 for _, host := range []string{ 72 "/var/run/postgresql", // Debian 73 "/private/tmp", // OSX - homebrew 74 "/tmp", // standard PostgreSQL 75 "localhost", // Windows does not do sockets 76 } { 77 if cd.Host == host { 78 foundHost = true 79 break 80 } 81 } 82 r.True(foundHost, `Got host: "%s"`, cd.Host) 83 84 r.Equal(os.Getenv("PGPASSWORD"), cd.Password) 85 r.Equal(portPostgreSQL, cd.Port) // fallback 86 r.Equal(uc, cd.User) 87 r.Equal("database", cd.Database) 88 } 89 90 func Test_PostgreSQL_Connection_String_Failure(t *testing.T) { 91 r := require.New(t) 92 93 url := "abc" 94 cd := &ConnectionDetails{ 95 Dialect: "postgres", 96 URL: url, 97 } 98 err := cd.Finalize() 99 r.Error(err) 100 r.Equal("postgres", cd.Dialect) 101 } 102 103 func Test_PostgreSQL_Quotable(t *testing.T) { 104 r := require.New(t) 105 p := postgresql{} 106 107 r.Equal(`"table_name"`, p.Quote("table_name")) 108 r.Equal(`"schema"."table_name"`, p.Quote("schema.table_name")) 109 r.Equal(`"schema"."table name"`, p.Quote(`"schema"."table name"`)) 110 }