...

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

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