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

     1  package postgres_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/postgres"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestPreset(t *testing.T) {
    14  	t.Parallel()
    15  
    16  	for _, version := range []string{"10.15", "11.10", "12.5", "13.1"} {
    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 := postgres.Preset(
    29  			postgres.WithUser("gnomock", "gnomick"),
    30  			postgres.WithDatabase("mydb"),
    31  			postgres.WithQueries(queries, query),
    32  			postgres.WithQueriesFile("./testdata/queries.sql"),
    33  			postgres.WithVersion(version),
    34  		)
    35  
    36  		container, err := gnomock.Start(p)
    37  		require.NoError(t, err)
    38  
    39  		defer func() { require.NoError(t, gnomock.Stop(container)) }()
    40  
    41  		connStr := fmt.Sprintf(
    42  			"host=%s port=%d user=%s password=%s  dbname=%s sslmode=disable",
    43  			container.Host, container.DefaultPort(),
    44  			"gnomock", "gnomick", "mydb",
    45  		)
    46  
    47  		db, err := sql.Open("postgres", connStr)
    48  		require.NoError(t, err)
    49  
    50  		var max, avg, min, count float64
    51  
    52  		rows := db.QueryRow("select max(a), avg(a), min(a), count(a) from t")
    53  		require.NoError(t, rows.Scan(&max, &avg, &min, &count))
    54  
    55  		require.Equal(t, float64(3), max)
    56  		require.Equal(t, float64(2), avg)
    57  		require.Equal(t, float64(1), min)
    58  		require.Equal(t, float64(3), count)
    59  	}
    60  }
    61  
    62  func TestPreset_withDefaults(t *testing.T) {
    63  	t.Parallel()
    64  
    65  	p := postgres.Preset()
    66  	container, err := gnomock.Start(p)
    67  	require.NoError(t, err)
    68  
    69  	defer func() { require.NoError(t, gnomock.Stop(container)) }()
    70  
    71  	connStr := fmt.Sprintf(
    72  		"host=%s port=%d user=%s password=%s  dbname=%s sslmode=disable",
    73  		container.Host, container.DefaultPort(),
    74  		"gnomock", "gnomick", "mydb",
    75  	)
    76  
    77  	db, err := sql.Open("postgres", connStr)
    78  	require.NoError(t, err)
    79  	require.NoError(t, db.Close())
    80  }
    81  
    82  func TestPreset_wrongQueriesFile(t *testing.T) {
    83  	t.Parallel()
    84  
    85  	p := postgres.Preset(
    86  		postgres.WithQueriesFile("./invalid"),
    87  	)
    88  	c, err := gnomock.Start(p)
    89  	require.Error(t, err)
    90  	require.Contains(t, err.Error(), "can't read queries file")
    91  	require.NoError(t, gnomock.Stop(c))
    92  }