github.com/goravel/framework@v1.13.9/testing/docker/postgresql.go (about) 1 package docker 2 3 import ( 4 "fmt" 5 6 "github.com/ory/dockertest/v3" 7 "github.com/spf13/cast" 8 9 contractsconfig "github.com/goravel/framework/contracts/config" 10 "github.com/goravel/framework/contracts/database/orm" 11 "github.com/goravel/framework/contracts/testing" 12 ) 13 14 type Postgresql struct { 15 config contractsconfig.Config 16 connection string 17 } 18 19 func NewPostgresql(config contractsconfig.Config, connection string) *Postgresql { 20 return &Postgresql{ 21 config: config, 22 connection: connection, 23 } 24 } 25 26 func (receiver *Postgresql) Config(resource *dockertest.Resource) testing.Config { 27 return testing.Config{ 28 Host: "127.0.0.1", 29 Port: cast.ToInt(resource.GetPort("5432/tcp")), 30 Database: receiver.config.GetString(fmt.Sprintf("database.connections.%s.database", receiver.connection)), 31 Username: receiver.config.GetString(fmt.Sprintf("database.connections.%s.username", receiver.connection)), 32 Password: receiver.config.GetString(fmt.Sprintf("database.connections.%s.password", receiver.connection)), 33 } 34 } 35 36 func (receiver *Postgresql) Clear(pool *dockertest.Pool, resource *dockertest.Resource) error { 37 return pool.Purge(resource) 38 } 39 40 func (receiver *Postgresql) Name() orm.Driver { 41 return orm.DriverPostgresql 42 } 43 44 func (receiver *Postgresql) Image() *dockertest.RunOptions { 45 database := receiver.config.GetString(fmt.Sprintf("database.connections.%s.database", receiver.connection)) 46 username := receiver.config.GetString(fmt.Sprintf("database.connections.%s.username", receiver.connection)) 47 password := receiver.config.GetString(fmt.Sprintf("database.connections.%s.password", receiver.connection)) 48 49 return &dockertest.RunOptions{ 50 Repository: "postgres", 51 Tag: "latest", 52 Env: []string{ 53 "POSTGRES_USER=" + username, 54 "POSTGRES_PASSWORD=" + password, 55 "POSTGRES_DB=" + database, 56 "listen_addresses = '*'", 57 }, 58 } 59 }