41 lines
682 B
Go
41 lines
682 B
Go
package sqltest
|
|
|
|
import (
|
|
"database/sql/driver"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/DATA-DOG/go-sqlmock"
|
|
"github.com/jmoiron/sqlx"
|
|
_ "modernc.org/sqlite" // used for running tests without same import in "god object"
|
|
)
|
|
|
|
type Time struct{}
|
|
|
|
func (Time) Match(v driver.Value) bool {
|
|
_, ok := v.(time.Time)
|
|
|
|
return ok
|
|
}
|
|
|
|
// Open creates a new InMemory sqlite3 database for testing.
|
|
func Open(tb testing.TB) (*sqlx.DB, sqlmock.Sqlmock, func()) {
|
|
tb.Helper()
|
|
|
|
db, mock, err := sqlmock.New()
|
|
if err != nil {
|
|
tb.Fatal(err)
|
|
}
|
|
|
|
xdb := sqlx.NewDb(db, "sqlite")
|
|
if err = xdb.Ping(); err != nil {
|
|
_ = db.Close()
|
|
|
|
tb.Fatal(err)
|
|
}
|
|
|
|
return xdb, mock, func() {
|
|
_ = db.Close()
|
|
}
|
|
}
|