github.com/paweljw/pop/v5@v5.4.6/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  }