mirror of https://github.com/VinGarcia/ksql.git
Add more tests to the mocks for codecov
parent
3b7209b115
commit
3613ad769a
230
mocks_test.go
230
mocks_test.go
|
@ -3,6 +3,7 @@ package ksql_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/vingarcia/ksql"
|
"github.com/vingarcia/ksql"
|
||||||
|
@ -142,4 +143,233 @@ func TestMock(t *testing.T) {
|
||||||
tt.AssertEqual(t, executed, true)
|
tt.AssertEqual(t, executed, true)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("should call the user provided behavior correctly", func(t *testing.T) {
|
||||||
|
t.Run("Insert", func(t *testing.T) {
|
||||||
|
ctx := context.WithValue(context.Background(), "key", "value")
|
||||||
|
var capturedArgs struct {
|
||||||
|
ctx context.Context
|
||||||
|
table ksql.Table
|
||||||
|
record interface{}
|
||||||
|
}
|
||||||
|
mock := ksql.Mock{
|
||||||
|
InsertFn: func(ctx context.Context, table ksql.Table, record interface{}) error {
|
||||||
|
capturedArgs.ctx = ctx
|
||||||
|
capturedArgs.table = table
|
||||||
|
capturedArgs.record = record
|
||||||
|
return fmt.Errorf("fake-error")
|
||||||
|
},
|
||||||
|
}
|
||||||
|
err := mock.Insert(ctx, UsersTable, &User{
|
||||||
|
Name: "fake-name",
|
||||||
|
Age: 42,
|
||||||
|
})
|
||||||
|
|
||||||
|
tt.AssertErrContains(t, err, "fake-error")
|
||||||
|
tt.AssertEqual(t, capturedArgs.ctx, ctx)
|
||||||
|
tt.AssertEqual(t, capturedArgs.table, UsersTable)
|
||||||
|
tt.AssertEqual(t, capturedArgs.record, &User{
|
||||||
|
Name: "fake-name",
|
||||||
|
Age: 42,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Update", func(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
var capturedArgs struct {
|
||||||
|
ctx context.Context
|
||||||
|
table ksql.Table
|
||||||
|
record interface{}
|
||||||
|
}
|
||||||
|
mock := ksql.Mock{
|
||||||
|
UpdateFn: func(ctx context.Context, table ksql.Table, record interface{}) error {
|
||||||
|
capturedArgs.ctx = ctx
|
||||||
|
capturedArgs.table = table
|
||||||
|
capturedArgs.record = record
|
||||||
|
return fmt.Errorf("fake-error")
|
||||||
|
},
|
||||||
|
}
|
||||||
|
err := mock.Update(ctx, UsersTable, &User{
|
||||||
|
ID: 4242,
|
||||||
|
Name: "fake-name",
|
||||||
|
Age: 42,
|
||||||
|
})
|
||||||
|
|
||||||
|
tt.AssertErrContains(t, err, "fake-error")
|
||||||
|
tt.AssertEqual(t, capturedArgs.ctx, ctx)
|
||||||
|
tt.AssertEqual(t, capturedArgs.table, UsersTable)
|
||||||
|
tt.AssertEqual(t, capturedArgs.record, &User{
|
||||||
|
ID: 4242,
|
||||||
|
Name: "fake-name",
|
||||||
|
Age: 42,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Delete", func(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
var capturedArgs struct {
|
||||||
|
ctx context.Context
|
||||||
|
table ksql.Table
|
||||||
|
record interface{}
|
||||||
|
}
|
||||||
|
mock := ksql.Mock{
|
||||||
|
DeleteFn: func(ctx context.Context, table ksql.Table, record interface{}) error {
|
||||||
|
capturedArgs.ctx = ctx
|
||||||
|
capturedArgs.table = table
|
||||||
|
capturedArgs.record = record
|
||||||
|
return fmt.Errorf("fake-error")
|
||||||
|
},
|
||||||
|
}
|
||||||
|
err := mock.Delete(ctx, UsersTable, &User{
|
||||||
|
ID: 4242,
|
||||||
|
Name: "fake-name",
|
||||||
|
Age: 42,
|
||||||
|
})
|
||||||
|
|
||||||
|
tt.AssertErrContains(t, err, "fake-error")
|
||||||
|
tt.AssertEqual(t, capturedArgs.ctx, ctx)
|
||||||
|
tt.AssertEqual(t, capturedArgs.table, UsersTable)
|
||||||
|
tt.AssertEqual(t, capturedArgs.record, &User{
|
||||||
|
ID: 4242,
|
||||||
|
Name: "fake-name",
|
||||||
|
Age: 42,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Query", func(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
var capturedArgs struct {
|
||||||
|
ctx context.Context
|
||||||
|
records interface{}
|
||||||
|
query string
|
||||||
|
params []interface{}
|
||||||
|
}
|
||||||
|
mock := ksql.Mock{
|
||||||
|
QueryFn: func(ctx context.Context, records interface{}, query string, params ...interface{}) error {
|
||||||
|
capturedArgs.ctx = ctx
|
||||||
|
capturedArgs.records = records
|
||||||
|
capturedArgs.query = query
|
||||||
|
capturedArgs.params = params
|
||||||
|
return fmt.Errorf("fake-error")
|
||||||
|
},
|
||||||
|
}
|
||||||
|
var users []User
|
||||||
|
err := mock.Query(ctx, &users, "SELECT * FROM user WHERE age = ?", 42)
|
||||||
|
|
||||||
|
tt.AssertErrContains(t, err, "fake-error")
|
||||||
|
tt.AssertEqual(t, capturedArgs.ctx, ctx)
|
||||||
|
tt.AssertEqual(t, capturedArgs.records, &users)
|
||||||
|
tt.AssertEqual(t, capturedArgs.query, "SELECT * FROM user WHERE age = ?")
|
||||||
|
tt.AssertEqual(t, capturedArgs.params, []interface{}{42})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("QueryOne", func(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
var capturedArgs struct {
|
||||||
|
ctx context.Context
|
||||||
|
record interface{}
|
||||||
|
query string
|
||||||
|
params []interface{}
|
||||||
|
}
|
||||||
|
mock := ksql.Mock{
|
||||||
|
QueryOneFn: func(ctx context.Context, record interface{}, query string, params ...interface{}) error {
|
||||||
|
capturedArgs.ctx = ctx
|
||||||
|
capturedArgs.record = record
|
||||||
|
capturedArgs.query = query
|
||||||
|
capturedArgs.params = params
|
||||||
|
return fmt.Errorf("fake-error")
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
var user User
|
||||||
|
err := mock.QueryOne(ctx, &user, "SELECT * FROM user WHERE id = ?", 4242)
|
||||||
|
|
||||||
|
tt.AssertErrContains(t, err, "fake-error")
|
||||||
|
tt.AssertEqual(t, capturedArgs.ctx, ctx)
|
||||||
|
tt.AssertEqual(t, capturedArgs.record, &user)
|
||||||
|
tt.AssertEqual(t, capturedArgs.query, "SELECT * FROM user WHERE id = ?")
|
||||||
|
tt.AssertEqual(t, capturedArgs.params, []interface{}{4242})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("QueryChunks", func(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
var capturedArgs struct {
|
||||||
|
ctx context.Context
|
||||||
|
parser ksql.ChunkParser
|
||||||
|
}
|
||||||
|
mock := ksql.Mock{
|
||||||
|
QueryChunksFn: func(ctx context.Context, parser ksql.ChunkParser) error {
|
||||||
|
capturedArgs.ctx = ctx
|
||||||
|
capturedArgs.parser = parser
|
||||||
|
return fmt.Errorf("fake-error")
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
var users []User
|
||||||
|
chunkParserFunc := func(chunk []User) error {
|
||||||
|
users = append(users, chunk...)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
err := mock.QueryChunks(ctx, ksql.ChunkParser{
|
||||||
|
Query: "SELECT * FROM users WHERE age = ?",
|
||||||
|
Params: []interface{}{
|
||||||
|
4242,
|
||||||
|
},
|
||||||
|
ChunkSize: 10,
|
||||||
|
ForEachChunk: chunkParserFunc,
|
||||||
|
})
|
||||||
|
|
||||||
|
tt.AssertErrContains(t, err, "fake-error")
|
||||||
|
tt.AssertEqual(t, capturedArgs.ctx, ctx)
|
||||||
|
tt.AssertEqual(t, capturedArgs.parser.Query, "SELECT * FROM users WHERE age = ?")
|
||||||
|
tt.AssertEqual(t, capturedArgs.parser.Params, []interface{}{
|
||||||
|
4242,
|
||||||
|
})
|
||||||
|
tt.AssertEqual(t, capturedArgs.parser.ChunkSize, 10)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Exec", func(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
var capturedArgs struct {
|
||||||
|
ctx context.Context
|
||||||
|
query string
|
||||||
|
params []interface{}
|
||||||
|
}
|
||||||
|
mock := ksql.Mock{
|
||||||
|
ExecFn: func(ctx context.Context, query string, params ...interface{}) (rowsAffected int64, _ error) {
|
||||||
|
capturedArgs.ctx = ctx
|
||||||
|
capturedArgs.query = query
|
||||||
|
capturedArgs.params = params
|
||||||
|
return 42, fmt.Errorf("fake-error")
|
||||||
|
},
|
||||||
|
}
|
||||||
|
rowsAffected, err := mock.Exec(ctx, "INSERT INTO users_permissions(user_id, permission_id) VALUES (?, ?)", 4242, 4)
|
||||||
|
|
||||||
|
tt.AssertErrContains(t, err, "fake-error")
|
||||||
|
tt.AssertEqual(t, rowsAffected, int64(42))
|
||||||
|
tt.AssertEqual(t, capturedArgs.ctx, ctx)
|
||||||
|
tt.AssertEqual(t, capturedArgs.query, "INSERT INTO users_permissions(user_id, permission_id) VALUES (?, ?)")
|
||||||
|
tt.AssertEqual(t, capturedArgs.params, []interface{}{4242, 4})
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Transaction", func(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
executingMockedTransaction := false
|
||||||
|
mock := ksql.Mock{
|
||||||
|
TransactionFn: func(ctx context.Context, fn func(db ksql.Provider) error) error {
|
||||||
|
executingMockedTransaction = true
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
executed := false
|
||||||
|
mock.Transaction(ctx, func(db ksql.Provider) error {
|
||||||
|
executed = true
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
tt.AssertEqual(t, executingMockedTransaction, true)
|
||||||
|
tt.AssertEqual(t, executed, false)
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue