github.com/Ali-iotechsys/sqlboiler/v4@v4.0.0-20221208124957-6aec9a5f1f71/drivers/sqlboiler-mysql/driver/mysql_test.go (about) 1 // These tests assume there is a user sqlboiler_test_user and a database 2 // by the name of sqlboiler_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 // mysql account: 5 // 6 // create user sqlboiler_driver_user identified by 'sqlboiler'; 7 // create database sqlboiler_driver_test; 8 // grant all privileges on sqlboiler_driver_test.* to sqlboiler_driver_user; 9 10 package driver 11 12 import ( 13 "bytes" 14 "encoding/json" 15 "flag" 16 "fmt" 17 "os" 18 "os/exec" 19 "testing" 20 21 "github.com/stretchr/testify/require" 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", "3306") 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 TestDriver(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("mysql", "-h", envHostname, "-P", envPort, "-u", envUsername, fmt.Sprintf("-p%s", envPassword), envDatabase) 43 createDB.Stdout = out 44 createDB.Stderr = out 45 createDB.Stdin = bytes.NewReader(b) 46 47 if err := createDB.Run(); err != nil { 48 t.Logf("mysql output:\n%s\n", out.Bytes()) 49 t.Fatal(err) 50 } 51 t.Logf("mysql output:\n%s\n", out.Bytes()) 52 53 tests := []struct { 54 name string 55 config drivers.Config 56 goldenJson string 57 }{ 58 { 59 name: "default", 60 config: drivers.Config{ 61 "user": envUsername, 62 "pass": envPassword, 63 "dbname": envDatabase, 64 "host": envHostname, 65 "port": envPort, 66 "sslmode": "false", 67 "schema": envDatabase, 68 }, 69 goldenJson: "mysql.golden.json", 70 }, 71 { 72 name: "enum_types", 73 config: drivers.Config{ 74 "user": envUsername, 75 "pass": envPassword, 76 "dbname": envDatabase, 77 "host": envHostname, 78 "port": envPort, 79 "sslmode": "false", 80 "schema": envDatabase, 81 "add-enum-types": true, 82 }, 83 goldenJson: "mysql.golden.enums.json", 84 }, 85 } 86 87 for _, tt := range tests { 88 t.Run(tt.name, func(t *testing.T) { 89 p := &MySQLDriver{} 90 info, err := p.Assemble(tt.config) 91 if err != nil { 92 t.Fatal(err) 93 } 94 95 got, err := json.MarshalIndent(info, "", "\t") 96 if err != nil { 97 t.Fatal(err) 98 } 99 100 if *flagOverwriteGolden { 101 if err = os.WriteFile(tt.goldenJson, got, 0664); err != nil { 102 t.Fatal(err) 103 } 104 t.Log("wrote:", string(got)) 105 return 106 } 107 108 want, err := os.ReadFile(tt.goldenJson) 109 if err != nil { 110 t.Fatal(err) 111 } 112 113 require.JSONEq(t, string(want), string(got)) 114 }) 115 } 116 }