Refactor mock connection open/close logic
This commit is contained in:
parent
f5319a00fa
commit
36170724dd
@ -1,14 +1,11 @@
|
|||||||
package gorm
|
package gorm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TestHelper is the exported struct used for setting expectations
|
// TestHelper is the exported struct used for setting expectations
|
||||||
type TestHelper struct {
|
type TestHelper struct {
|
||||||
gormDb *DB
|
|
||||||
mockDb *sql.DB
|
|
||||||
adapter Adapter
|
adapter Adapter
|
||||||
asserter Asserter
|
asserter Asserter
|
||||||
}
|
}
|
||||||
@ -29,24 +26,35 @@ func (h *TestHelper) ExpectFind(model interface{}) {
|
|||||||
|
|
||||||
// NewTestHelper returns a fresh TestHelper with an arbitary Adapter
|
// NewTestHelper returns a fresh TestHelper with an arbitary Adapter
|
||||||
func NewTestHelper(adapter Adapter) (error, *DB, *TestHelper) {
|
func NewTestHelper(adapter Adapter) (error, *DB, *TestHelper) {
|
||||||
err, mockDb, gormDb, asserter := adapter.Open()
|
err, asserter := adapter.Open()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err, nil, nil
|
return err, nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, gormDb, &TestHelper{gormDb: gormDb, mockDb: mockDb, adapter: adapter, asserter: asserter}
|
gormDb, err := Open("sqlmock", "mock_gorm_dsn")
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err, nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, gormDb, &TestHelper{adapter: adapter, asserter: asserter}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDefaultTestHelper returns a TestHelper powered by go-sqlmock
|
// NewDefaultTestHelper returns a TestHelper powered by go-sqlmock
|
||||||
func NewDefaultTestHelper() (error, *DB, *TestHelper) {
|
func NewDefaultTestHelper() (error, *DB, *TestHelper) {
|
||||||
adapter := &SqlmockAdapter{}
|
adapter := &SqlmockAdapter{}
|
||||||
err, mockDb, gormDb, asserter := adapter.Open()
|
err, asserter := adapter.Open()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err, nil, nil
|
return err, nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, gormDb, &TestHelper{gormDb: gormDb, mockDb: mockDb, adapter: adapter, asserter: asserter}
|
gormDb, err := Open("sqlmock", "mock_gorm_dsn")
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err, nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, gormDb, &TestHelper{adapter: adapter, asserter: asserter}
|
||||||
}
|
}
|
||||||
|
@ -7,30 +7,28 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Adapter interface {
|
type Adapter interface {
|
||||||
Open() (error, *sql.DB, *DB, Asserter)
|
Open() (error, Asserter)
|
||||||
Close() error
|
Close() error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SqlmockAdapter implemenets the Adapter interface using go-sqlmock
|
||||||
|
// it is the default Adapter
|
||||||
type SqlmockAdapter struct {
|
type SqlmockAdapter struct {
|
||||||
mockDb *sql.DB
|
mockDb *sql.DB
|
||||||
mock *sqlmock.Sqlmock
|
mock *sqlmock.Sqlmock
|
||||||
}
|
}
|
||||||
|
|
||||||
// Open returns the raw sql.DB and a gorm DB instance
|
// Open returns the raw sql.DB instance and an Asserter
|
||||||
func (adapter *SqlmockAdapter) Open() (error, *sql.DB, *DB, Asserter) {
|
func (adapter *SqlmockAdapter) Open() (error, Asserter) {
|
||||||
mockDb, mock, err := sqlmock.NewWithDSN("mock_gorm_dsn")
|
mockDb, mock, err := sqlmock.NewWithDSN("mock_gorm_dsn")
|
||||||
|
|
||||||
if err != nil {
|
adapter.mockDb = mockDb
|
||||||
return err, nil, nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
gormDb, err := Open("sqlmock", "mock_gorm_dsn")
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err, nil, nil, nil
|
return err, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, mockDb, gormDb, &SqlmockAsserter{mock: mock, sqlmockDB: mockDb}
|
return nil, &SqlmockAsserter{mock: mock, sqlmockDB: mockDb}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (adapter *SqlmockAdapter) Close() error {
|
func (adapter *SqlmockAdapter) Close() error {
|
||||||
|
@ -6,21 +6,30 @@ import (
|
|||||||
"github.com/jinzhu/gorm"
|
"github.com/jinzhu/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
var helper *gorm.TestHelper
|
func TestHelperOpen(t *testing.T) {
|
||||||
var mockDb *gorm.DB
|
err, helper, db := gorm.NewTestHelper(&gorm.SqlmockAdapter{})
|
||||||
|
|
||||||
func TestOpenWithSqlmock(t *testing.T) {
|
defer func() {
|
||||||
err, db, h := gorm.NewTestHelper(&gorm.SqlmockAdapter{})
|
helper.Close()
|
||||||
|
db.Close()
|
||||||
|
}()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
helper = h
|
|
||||||
mockDb = db
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestQuery(t *testing.T) {
|
func TestHelperClose(t *testing.T) {
|
||||||
helper.ExpectFirst(&User{}).Return(&User{})
|
err, helper, _ := gorm.NewTestHelper(&gorm.SqlmockAdapter{})
|
||||||
mockDb.First(&User{})
|
|
||||||
|
closeErr := helper.Close()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(closeErr)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// func TestQuery(t *testing.T) {
|
||||||
|
// helper.ExpectFirst(&User{}).Return(&User{})
|
||||||
|
// mockDb.First(&User{})
|
||||||
|
// }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user