github.com/Ali-iotechsys/sqlboiler/v4@v4.0.0-20221208124957-6aec9a5f1f71/drivers/sqlboiler-mssql/driver/mssql_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 // mssql account: 5 // 6 // create database sqlboiler_driver_test; 7 // go 8 // use sqlboiler_driver_test; 9 // go 10 // create user sqlboiler_driver_user with password = 'sqlboiler'; 11 // go 12 // exec sp_configure 'contained database authentication', 1; 13 // go 14 // reconfigure 15 // go 16 // alter database sqlboiler_driver_test set containment = partial; 17 // go 18 // create user sqlboiler_driver_user with password = 'Sqlboiler@1234'; 19 // go 20 // grant alter, control to sqlboiler_driver_user; 21 // go 22 23 package driver 24 25 import ( 26 "bytes" 27 "encoding/json" 28 "flag" 29 "os" 30 "os/exec" 31 "regexp" 32 "testing" 33 34 "github.com/volatiletech/sqlboiler/v4/drivers" 35 ) 36 37 var ( 38 flagOverwriteGolden = flag.Bool("overwrite-golden", false, "Overwrite the golden file with the current execution results") 39 40 envHostname = drivers.DefaultEnv("DRIVER_HOSTNAME", "localhost") 41 envPort = drivers.DefaultEnv("DRIVER_PORT", "1433") 42 envUsername = drivers.DefaultEnv("DRIVER_USER", "sqlboiler_driver_user") 43 envPassword = drivers.DefaultEnv("DRIVER_PASS", "Sqlboiler@1234") 44 envDatabase = drivers.DefaultEnv("DRIVER_DB", "sqlboiler_driver_test") 45 46 rgxKeyIDs = regexp.MustCompile(`__[A-F0-9]+$`) 47 ) 48 49 func TestDriver(t *testing.T) { 50 out := &bytes.Buffer{} 51 createDB := exec.Command("sqlcmd", "-S", envHostname, "-U", envUsername, "-P", envPassword, "-d", envDatabase, "-b", "-i", "testdatabase.sql") 52 createDB.Stdout = out 53 createDB.Stderr = out 54 55 if err := createDB.Run(); err != nil { 56 t.Logf("mssql output:\n%s\n", out.Bytes()) 57 t.Fatal(err) 58 } 59 t.Logf("mssql output:\n%s\n", out.Bytes()) 60 61 config := drivers.Config{ 62 "user": envUsername, 63 "pass": envPassword, 64 "dbname": envDatabase, 65 "host": envHostname, 66 "port": envPort, 67 "sslmode": "disable", 68 "schema": "dbo", 69 } 70 71 p := &MSSQLDriver{} 72 info, err := p.Assemble(config) 73 if err != nil { 74 t.Fatal(err) 75 } 76 77 for _, t := range info.Tables { 78 if t.IsView { 79 continue 80 } 81 82 t.PKey.Name = rgxKeyIDs.ReplaceAllString(t.PKey.Name, "") 83 for i := range t.FKeys { 84 t.FKeys[i].Name = rgxKeyIDs.ReplaceAllString(t.FKeys[i].Name, "") 85 } 86 } 87 88 got, err := json.MarshalIndent(info, "", "\t") 89 if err != nil { 90 t.Fatal(err) 91 } 92 93 if *flagOverwriteGolden { 94 if err = os.WriteFile("mssql.golden.json", got, 0664); err != nil { 95 t.Fatal(err) 96 } 97 t.Log("wrote:", string(got)) 98 return 99 } 100 101 want, err := os.ReadFile("mssql.golden.json") 102 if err != nil { 103 t.Fatal(err) 104 } 105 106 if bytes.Compare(want, got) != 0 { 107 t.Errorf("want:\n%s\ngot:\n%s\n", want, got) 108 } 109 }