...
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