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  }