github.com/Ali-iotechsys/sqlboiler/v4@v4.0.0-20221208124957-6aec9a5f1f71/drivers/sqlboiler-sqlite3/driver/sqlite3_test.go (about)

     1  package driver
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"flag"
     7  	"fmt"
     8  	"math/rand"
     9  	"os"
    10  	"os/exec"
    11  	"path/filepath"
    12  	"testing"
    13  	"time"
    14  
    15  	"github.com/stretchr/testify/require"
    16  	"github.com/volatiletech/sqlboiler/v4/drivers"
    17  	_ "modernc.org/sqlite"
    18  )
    19  
    20  var (
    21  	flagOverwriteGolden = flag.Bool("overwrite-golden", false, "Overwrite the golden file with the current execution results")
    22  )
    23  
    24  func TestDriver(t *testing.T) {
    25  	rand.Seed(time.Now().Unix())
    26  	b, err := os.ReadFile("testdatabase.sql")
    27  	if err != nil {
    28  		t.Fatal(err)
    29  	}
    30  
    31  	tmpName := filepath.Join(os.TempDir(), fmt.Sprintf("sqlboiler-sqlite3-%d.sql", rand.Int()))
    32  
    33  	out := &bytes.Buffer{}
    34  	createDB := exec.Command("sqlite3", tmpName)
    35  	createDB.Stdout = out
    36  	createDB.Stderr = out
    37  	createDB.Stdin = bytes.NewReader(b)
    38  
    39  	t.Log("sqlite file:", tmpName)
    40  	if err := createDB.Run(); err != nil {
    41  		t.Logf("sqlite output:\n%s\n", out.Bytes())
    42  		t.Fatal(err)
    43  	}
    44  	t.Logf("sqlite output:\n%s\n", out.Bytes())
    45  
    46  	tests := []struct {
    47  		name       string
    48  		config     drivers.Config
    49  		goldenJson string
    50  	}{
    51  		{
    52  			name: "default",
    53  			config: drivers.Config{
    54  				"dbname": tmpName,
    55  			},
    56  			goldenJson: "sqlite3.golden.json",
    57  		},
    58  	}
    59  
    60  	for _, tt := range tests {
    61  		t.Run(tt.name, func(t *testing.T) {
    62  			s := &SQLiteDriver{}
    63  			info, err := s.Assemble(tt.config)
    64  			if err != nil {
    65  				t.Fatal(err)
    66  			}
    67  
    68  			got, err := json.MarshalIndent(info, "", "\t")
    69  			if err != nil {
    70  				t.Fatal(err)
    71  			}
    72  
    73  			if *flagOverwriteGolden {
    74  				if err = os.WriteFile(tt.goldenJson, got, 0664); err != nil {
    75  					t.Fatal(err)
    76  				}
    77  				t.Log("wrote:", string(got))
    78  				return
    79  			}
    80  
    81  			want, err := os.ReadFile(tt.goldenJson)
    82  			if err != nil {
    83  				t.Fatal(err)
    84  			}
    85  
    86  			require.JSONEq(t, string(want), string(got))
    87  		})
    88  	}
    89  
    90  }