...

Source file src/github.com/cybertec-postgresql/pgwatch/v3/internal/metrics/postgres_schema_test.go

Documentation: github.com/cybertec-postgresql/pgwatch/v3/internal/metrics

     1  package metrics
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	migrator "github.com/cybertec-postgresql/pgx-migrator"
     8  	"github.com/pashagolub/pgxmock/v4"
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  var ctx = context.Background()
    13  
    14  func TestMigrate(t *testing.T) {
    15  	a := assert.New(t)
    16  	conn, err := pgxmock.NewPool()
    17  	a.NoError(err)
    18  
    19  	conn.ExpectExec(`CREATE TABLE IF NOT EXISTS pgwatch\.migration`).WillReturnResult(pgxmock.NewResult("CREATE", 1))
    20  	conn.ExpectQuery(`SELECT count`).WillReturnRows(pgxmock.NewRows([]string{"count"}).AddRow(0))
    21  	conn.ExpectBegin()
    22  	conn.ExpectExec(`INSERT INTO`).WillReturnResult(pgxmock.NewResult("INSERT", 1))
    23  
    24  	dmrw := &dbMetricReaderWriter{ctx, conn}
    25  	err = dmrw.Migrate()
    26  	a.NoError(err)
    27  }
    28  
    29  func TestNeedsMigration(t *testing.T) {
    30  	a := assert.New(t)
    31  	conn, err := pgxmock.NewPool()
    32  	a.NoError(err)
    33  
    34  	conn.ExpectQuery(`SELECT to_regclass`).
    35  		WithArgs("pgwatch.migration").
    36  		WillReturnRows(pgxmock.NewRows([]string{"to_regclass"}).AddRow(true))
    37  	conn.ExpectQuery(`SELECT count`).WillReturnRows(pgxmock.NewRows([]string{"count"}).AddRow(0))
    38  
    39  	dmrw := &dbMetricReaderWriter{ctx, conn}
    40  	needs, err := dmrw.NeedsMigration()
    41  	a.NoError(err)
    42  	a.True(needs)
    43  }
    44  
    45  func TestMigrateFail(t *testing.T) {
    46  	oldInitMigrator := initMigrator
    47  	t.Cleanup(func() {
    48  		initMigrator = oldInitMigrator
    49  	})
    50  	a := assert.New(t)
    51  	dmrw := &dbMetricReaderWriter{}
    52  	initMigrator = func(*dbMetricReaderWriter) (*migrator.Migrator, error) {
    53  		return nil, assert.AnError
    54  	}
    55  	err := dmrw.Migrate()
    56  	a.Error(err)
    57  }
    58  
    59  func TestNeedsMigrationFail(t *testing.T) {
    60  	oldInitMigrator := initMigrator
    61  	t.Cleanup(func() {
    62  		initMigrator = oldInitMigrator
    63  	})
    64  	a := assert.New(t)
    65  	dmrw := &dbMetricReaderWriter{}
    66  	initMigrator = func(*dbMetricReaderWriter) (*migrator.Migrator, error) {
    67  		return nil, assert.AnError
    68  	}
    69  	_, err := dmrw.NeedsMigration()
    70  	a.Error(err)
    71  }
    72