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  }