Skip to content

Commit

Permalink
iter12 features
Browse files Browse the repository at this point in the history
  • Loading branch information
ex0rcist committed Aug 6, 2024
1 parent 00a8547 commit 5644869
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 17 deletions.
1 change: 0 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ require (
github.com/go-chi/chi/v5 v5.1.0
github.com/golang-migrate/migrate/v4 v4.17.1
github.com/jackc/pgx/v5 v5.6.0
github.com/pashagolub/pgxmock/v4 v4.2.0
github.com/rs/zerolog v1.33.0
github.com/satori/go.uuid v1.2.0
github.com/spf13/pflag v1.0.5
Expand Down
2 changes: 0 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,6 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM=
github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
github.com/pashagolub/pgxmock/v4 v4.2.0 h1:6+yl/lVzHZzg7kbasWvNQn4x3t4fEMBMeSlBXLy5ylw=
github.com/pashagolub/pgxmock/v4 v4.2.0/go.mod h1:s5gowkVFapy2T2InymLOXE5hO9ug5JUmC8ybqSAtTcM=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
Expand Down
24 changes: 10 additions & 14 deletions internal/storage/database_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,33 +8,29 @@ import (
"github.com/ex0rcist/metflix/internal/metrics"
"github.com/jackc/pgx/v5/pgconn"

"github.com/pashagolub/pgxmock/v4"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
)

func TestDatabaseStorage_Push(t *testing.T) {
mockPool, err := pgxmock.NewPool()
require.NoError(t, err)
defer mockPool.Close()

mockPool := NewPGXPoolMock()
storage := DatabaseStorage{Pool: mockPool}

ctx := context.Background()
record := Record{Name: "testName", Value: metrics.Counter(123)}
key := record.CalculateRecordID()

mockPool.ExpectBegin()
mockPool.ExpectExec("INSERT INTO metrics").WithArgs(key, record.Name, record.Value.Kind(), record.Value.String()).WillReturnResult(pgxmock.NewResult("INSERT", 1))
mockPool.ExpectCommit()
txMock := new(PGXTxMock)
mockPool.On("Begin", mock.Anything).Return(txMock, nil)
txMock.
On("Exec", mock.Anything, mock.Anything, key, record.Name, record.Value.Kind(), record.Value.String()).
Return(pgconn.CommandTag{}, nil)

err = storage.Push(ctx, key, record)
require.NoError(t, err)
txMock.On("Commit", mock.Anything).Return(nil)

if err := mockPool.ExpectationsWereMet(); err != nil {
t.Errorf("there were unfulfilled expectations: %s", err)
err := storage.Push(ctx, key, record)
if err != nil {
t.Fatalf("expected no error on Push, got: %v", err)
}
}

Expand Down
59 changes: 59 additions & 0 deletions internal/storage/pgx_pool_mock.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,3 +144,62 @@ func (m *PGXRowsMock) Conn() *pgx.Conn {
mArgs := m.Called()
return mArgs.Get(0).(*pgx.Conn)
}

// ************** PGXTxMock ************** //

type PGXTxMock struct {
mock.Mock
}

func (m *PGXTxMock) Begin(ctx context.Context) (pgx.Tx, error) {
mArgs := m.Called(ctx)
return mArgs.Get(0).(pgx.Tx), mArgs.Error(1)
}

func (m *PGXTxMock) Commit(ctx context.Context) error {
mArgs := m.Called(ctx)
return mArgs.Error(0)
}

func (m *PGXTxMock) Rollback(ctx context.Context) error {
mArgs := m.Called(ctx)
return mArgs.Error(0)
}

func (m *PGXTxMock) CopyFrom(ctx context.Context, tableName pgx.Identifier, columnNames []string, rowSrc pgx.CopyFromSource) (int64, error) {
mArgs := m.Called(ctx, tableName)
return mArgs.Get(0).(int64), mArgs.Error(1)
}

func (m *PGXTxMock) SendBatch(ctx context.Context, b *pgx.Batch) pgx.BatchResults {
mArgs := m.Called(ctx, b)
return mArgs.Get(0).(pgx.BatchResults)
}

func (m *PGXTxMock) LargeObjects() pgx.LargeObjects {
mArgs := m.Called()
return mArgs.Get(0).(pgx.LargeObjects)
}

func (m *PGXTxMock) Prepare(ctx context.Context, name, sql string) (*pgconn.StatementDescription, error) {
mArgs := m.Called(ctx, name, sql)
return mArgs.Get(0).(*pgconn.StatementDescription), mArgs.Error(1)
}

func (m *PGXTxMock) Exec(ctx context.Context, sql string, args ...any) (commandTag pgconn.CommandTag, err error) {
varargs := append([]any{ctx, sql}, args...)
mArgs := m.Called(varargs...)
return mArgs.Get(0).(pgconn.CommandTag), mArgs.Error(1)
}
func (m *PGXTxMock) Query(ctx context.Context, sql string, args ...any) (pgx.Rows, error) {
mArgs := m.Called(ctx, sql, args)
return mArgs.Get(0).(pgx.Rows), mArgs.Error(1)
}
func (m *PGXTxMock) QueryRow(ctx context.Context, sql string, args ...any) pgx.Row {
mArgs := m.Called(ctx, sql, args)
return mArgs.Get(0).(pgx.Row)
}
func (m *PGXTxMock) Conn() *pgx.Conn {
mArgs := m.Called()
return mArgs.Get(0).(*pgx.Conn)
}

0 comments on commit 5644869

Please sign in to comment.