github.com/Accefy/pop@v0.0.0-20230428174248-e9f677eab5b9/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_ConnectionDetails_Values_Finalize(t *testing.T) { 12 r := require.New(t) 13 14 cd := &ConnectionDetails{ 15 Dialect: "postgres", 16 Database: "database", 17 Host: "host", 18 Port: "1234", 19 User: "user", 20 Password: "pass#", 21 } 22 err := cd.Finalize() 23 r.NoError(err) 24 25 p := &postgresql{commonDialect: commonDialect{ConnectionDetails: cd}} 26 27 r.Equal("postgres://user:pass%23@host:1234/database?", p.URL()) 28 } 29 30 func Test_PostgreSQL_Connection_String(t *testing.T) { 31 r := require.New(t) 32 33 url := "host=host port=1234 dbname=database user=user password=pass#" 34 cd := &ConnectionDetails{ 35 Dialect: "postgres", 36 URL: url, 37 } 38 err := cd.Finalize() 39 r.NoError(err) 40 41 r.Equal(url, cd.URL) 42 r.Equal("postgres", cd.Dialect) 43 r.Equal("host", cd.Host) 44 r.Equal("pass#", cd.Password) 45 r.Equal("1234", cd.Port) 46 r.Equal("user", cd.User) 47 r.Equal("database", cd.Database) 48 } 49 50 func Test_PostgreSQL_Connection_String_Options(t *testing.T) { 51 r := require.New(t) 52 53 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" 54 cd := &ConnectionDetails{ 55 Dialect: "postgres", 56 URL: url, 57 } 58 err := cd.Finalize() 59 r.NoError(err) 60 61 r.Equal(url, cd.URL) 62 63 r.Equal("disable", cd.Options["sslmode"]) 64 r.Equal("test_app", cd.Options["fallback_application_name"]) 65 } 66 67 func Test_PostgreSQL_Connection_String_Without_User(t *testing.T) { 68 r := require.New(t) 69 70 url := "dbname=database" 71 cd := &ConnectionDetails{ 72 Dialect: "postgres", 73 URL: url, 74 } 75 err := cd.Finalize() 76 r.NoError(err) 77 78 uc := os.Getenv("PGUSER") 79 if uc == "" { 80 c, err := user.Current() 81 if err == nil { 82 uc = c.Username 83 } 84 } 85 86 r.Equal(url, cd.URL) 87 r.Equal("postgres", cd.Dialect) 88 89 var foundHost bool 90 for _, host := range []string{ 91 "/var/run/postgresql", // Debian 92 "/private/tmp", // OSX - homebrew 93 "/tmp", // standard PostgreSQL 94 "localhost", // Windows does not do sockets 95 } { 96 if cd.Host == host { 97 foundHost = true 98 break 99 } 100 } 101 r.True(foundHost, `Got host: "%s"`, cd.Host) 102 103 r.Equal(os.Getenv("PGPASSWORD"), cd.Password) 104 r.Equal(portPostgreSQL, cd.Port) // fallback 105 r.Equal(uc, cd.User) 106 r.Equal("database", cd.Database) 107 } 108 109 func Test_PostgreSQL_Connection_String_Failure(t *testing.T) { 110 r := require.New(t) 111 112 url := "abc" 113 cd := &ConnectionDetails{ 114 Dialect: "postgres", 115 URL: url, 116 } 117 err := cd.Finalize() 118 r.Error(err) 119 r.Equal("postgres", cd.Dialect) 120 } 121 122 func Test_PostgreSQL_Quotable(t *testing.T) { 123 r := require.New(t) 124 p := postgresql{} 125 126 r.Equal(`"table_name"`, p.Quote("table_name")) 127 r.Equal(`"schema"."table_name"`, p.Quote("schema.table_name")) 128 r.Equal(`"schema"."table name"`, p.Quote(`"schema"."table name"`)) 129 }