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