github.com/etecs-ru/gnomock@v0.13.2/preset/mysql/preset_test.go (about)

     1  package mysql_test
     2  
     3  import (
     4  	"database/sql"
     5  	"fmt"
     6  	"testing"
     7  
     8  	"github.com/etecs-ru/gnomock"
     9  	"github.com/etecs-ru/gnomock/preset/mysql"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestPreset(t *testing.T) {
    14  	t.Parallel()
    15  
    16  	for _, version := range []string{"8.0.22", "5.7.32"} {
    17  		t.Run(version, testPreset(version))
    18  	}
    19  }
    20  
    21  func testPreset(version string) func(t *testing.T) {
    22  	return func(t *testing.T) {
    23  		queries := `
    24  			insert into t (a) values (1);
    25  			insert into t (a) values (2);
    26  		`
    27  		query := `insert into t (a) values (3);`
    28  		p := mysql.Preset(
    29  			mysql.WithUser("Sherlock", "Holmes"),
    30  			mysql.WithDatabase("books"),
    31  			mysql.WithQueries(queries, query),
    32  			mysql.WithQueriesFile("./testdata/queries.sql"),
    33  			mysql.WithVersion("8.0.22"),
    34  		)
    35  
    36  		container, err := gnomock.Start(p)
    37  
    38  		defer func() { _ = gnomock.Stop(container) }()
    39  
    40  		require.NoError(t, err)
    41  
    42  		addr := container.DefaultAddress()
    43  		connStr := fmt.Sprintf(
    44  			"%s:%s@tcp(%s)/%s",
    45  			"Sherlock", "Holmes", addr, "books",
    46  		)
    47  
    48  		db, err := sql.Open("mysql", connStr)
    49  		require.NoError(t, err)
    50  
    51  		var max, avg, min, count float64
    52  
    53  		rows := db.QueryRow("select max(a), avg(a), min(a), count(a) from t")
    54  
    55  		err = rows.Scan(&max, &avg, &min, &count)
    56  		require.NoError(t, err)
    57  
    58  		require.Equal(t, float64(3), max)
    59  		require.Equal(t, float64(2), avg)
    60  		require.Equal(t, float64(1), min)
    61  		require.Equal(t, float64(3), count)
    62  	}
    63  }
    64  
    65  func TestPreset_withDefaults(t *testing.T) {
    66  	t.Parallel()
    67  
    68  	p := mysql.Preset()
    69  	container, err := gnomock.Start(p)
    70  
    71  	defer func() { _ = gnomock.Stop(container) }()
    72  
    73  	require.NoError(t, err)
    74  
    75  	addr := container.DefaultAddress()
    76  	connStr := fmt.Sprintf(
    77  		"%s:%s@tcp(%s)/%s",
    78  		"gnomock", "gnomock", addr, "mydb",
    79  	)
    80  
    81  	db, err := sql.Open("mysql", connStr)
    82  	require.NoError(t, err)
    83  	require.NoError(t, db.Close())
    84  }
    85  
    86  func TestPreset_wrongQueriesFile(t *testing.T) {
    87  	t.Parallel()
    88  
    89  	p := mysql.Preset(mysql.WithQueriesFile("./invalid"))
    90  	c, err := gnomock.Start(p)
    91  	require.Error(t, err)
    92  	require.Contains(t, err.Error(), "can't read queries file")
    93  	require.NoError(t, gnomock.Stop(c))
    94  }