github.com/Ali-iotechsys/sqlboiler/v4@v4.0.0-20221208124957-6aec9a5f1f71/drivers/sqlboiler-psql/driver/psql_test.go (about) 1 // These tests assume there is a user sqlboiler_driver_user and a database 2 // by the name of sqlboiler_driver_test that it has full R/W rights to. 3 // In order to create this you can use the following steps from a root 4 // psql account: 5 // 6 // create role sqlboiler_driver_user login nocreatedb nocreaterole nocreateuser password 'sqlboiler'; 7 // create database sqlboiler_driver_test owner = sqlboiler_driver_user; 8 9 package driver 10 11 import ( 12 "bytes" 13 "encoding/json" 14 "flag" 15 "fmt" 16 "os" 17 "os/exec" 18 "testing" 19 20 "github.com/stretchr/testify/require" 21 22 "github.com/volatiletech/sqlboiler/v4/drivers" 23 ) 24 25 var ( 26 flagOverwriteGolden = flag.Bool("overwrite-golden", false, "Overwrite the golden file with the current execution results") 27 28 envHostname = drivers.DefaultEnv("DRIVER_HOSTNAME", "localhost") 29 envPort = drivers.DefaultEnv("DRIVER_PORT", "5432") 30 envUsername = drivers.DefaultEnv("DRIVER_USER", "sqlboiler_driver_user") 31 envPassword = drivers.DefaultEnv("DRIVER_PASS", "sqlboiler") 32 envDatabase = drivers.DefaultEnv("DRIVER_DB", "sqlboiler_driver_test") 33 ) 34 35 func TestAssemble(t *testing.T) { 36 b, err := os.ReadFile("testdatabase.sql") 37 if err != nil { 38 t.Fatal(err) 39 } 40 41 out := &bytes.Buffer{} 42 createDB := exec.Command("psql", "-h", envHostname, "-U", envUsername, envDatabase) 43 createDB.Env = append([]string{fmt.Sprintf("PGPASSWORD=%s", envPassword)}, os.Environ()...) 44 createDB.Stdout = out 45 createDB.Stderr = out 46 createDB.Stdin = bytes.NewReader(b) 47 48 if err := createDB.Run(); err != nil { 49 t.Logf("psql output:\n%s\n", out.Bytes()) 50 t.Fatal(err) 51 } 52 t.Logf("psql output:\n%s\n", out.Bytes()) 53 54 tests := []struct { 55 name string 56 config drivers.Config 57 goldenJson string 58 }{ 59 { 60 name: "default", 61 config: drivers.Config{ 62 "user": envUsername, 63 "pass": envPassword, 64 "dbname": envDatabase, 65 "host": envHostname, 66 "port": envPort, 67 "sslmode": "disable", 68 "schema": "public", 69 }, 70 goldenJson: "psql.golden.json", 71 }, 72 { 73 name: "enum_types", 74 config: drivers.Config{ 75 "user": envUsername, 76 "pass": envPassword, 77 "dbname": envDatabase, 78 "host": envHostname, 79 "port": envPort, 80 "sslmode": "disable", 81 "schema": "public", 82 "add-enum-types": true, 83 }, 84 goldenJson: "psql.golden.enums.json", 85 }, 86 } 87 88 for _, tt := range tests { 89 t.Run(tt.name, func(t *testing.T) { 90 p := PostgresDriver{} 91 info, err := p.Assemble(tt.config) 92 if err != nil { 93 t.Fatal(err) 94 } 95 96 got, err := json.MarshalIndent(info, "", "\t") 97 if err != nil { 98 t.Fatal(err) 99 } 100 101 if *flagOverwriteGolden { 102 if err = os.WriteFile(tt.goldenJson, got, 0664); err != nil { 103 t.Fatal(err) 104 } 105 t.Log("wrote:", string(got)) 106 return 107 } 108 109 want, err := os.ReadFile(tt.goldenJson) 110 if err != nil { 111 t.Fatal(err) 112 } 113 114 require.JSONEq(t, string(want), string(got)) 115 }) 116 } 117 }