diff --git a/expecter.go b/expecter.go index b3ee12c9..057377e7 100644 --- a/expecter.go +++ b/expecter.go @@ -4,23 +4,19 @@ import ( "fmt" ) -// Expecter is the exported struct used for setting expectations -type Expecter struct { - adapter Adapter -} - // AdapterFactory is a generic interface for arbitrary adapters that satisfy // the interface. variadic args are passed to gorm.Open. type AdapterFactory func(dialect string, args ...interface{}) (error, *DB, Adapter) -func (h *Expecter) ExpectFirst(model interface{}) ExpectedQuery { - fmt.Printf("Expecting query: %s", "some query\n") - return h.adapter.ExpectQuery("some sql") -} +// Expecter is the exported struct used for setting expectations +type Expecter struct { + Value interface{} + adapter Adapter + search *search + values map[string]interface{} -func (h *Expecter) ExpectFind(model interface{}) ExpectedQuery { - fmt.Println("Expecting query: %s", "some query involving Find") - return h.adapter.ExpectQuery("some find condition") + // globally scoped expecter + root *Expecter } // NewDefaultExpecter returns a Expecter powered by go-sqlmock @@ -44,3 +40,30 @@ func NewExpecter(fn AdapterFactory, dialect string, args ...interface{}) (error, return nil, gormDb, &Expecter{adapter: adapter} } + +/* PUBLIC METHODS */ + +func (h *Expecter) ExpectFirst(model interface{}) ExpectedQuery { + fmt.Printf("Expecting query: %s", "some query\n") + return h.adapter.ExpectQuery("some sql") +} + +func (h *Expecter) ExpectFind(model interface{}) ExpectedQuery { + fmt.Println("Expecting query: %s", "some query involving Find") + return h.adapter.ExpectQuery("some find condition") +} + +/* PRIVATE METHODS */ + +// clone is similar to DB.clone, and ensures that the root Expecter is not +// polluted with subsequent search constraints +func (h *Expecter) clone() *Expecter { + expecterCopy := &Expecter{ + adapter: h.adapter, + root: h.root, + values: map[string]interface{}{}, + Value: h.Value, + } + + return expecterCopy +}