Implement private clone method to support fluent API
This commit is contained in:
parent
b9fc77cb77
commit
90528be927
47
expecter.go
47
expecter.go
@ -4,23 +4,19 @@ import (
|
|||||||
"fmt"
|
"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
|
// AdapterFactory is a generic interface for arbitrary adapters that satisfy
|
||||||
// the interface. variadic args are passed to gorm.Open.
|
// the interface. variadic args are passed to gorm.Open.
|
||||||
type AdapterFactory func(dialect string, args ...interface{}) (error, *DB, Adapter)
|
type AdapterFactory func(dialect string, args ...interface{}) (error, *DB, Adapter)
|
||||||
|
|
||||||
func (h *Expecter) ExpectFirst(model interface{}) ExpectedQuery {
|
// Expecter is the exported struct used for setting expectations
|
||||||
fmt.Printf("Expecting query: %s", "some query\n")
|
type Expecter struct {
|
||||||
return h.adapter.ExpectQuery("some sql")
|
Value interface{}
|
||||||
}
|
adapter Adapter
|
||||||
|
search *search
|
||||||
|
values map[string]interface{}
|
||||||
|
|
||||||
func (h *Expecter) ExpectFind(model interface{}) ExpectedQuery {
|
// globally scoped expecter
|
||||||
fmt.Println("Expecting query: %s", "some query involving Find")
|
root *Expecter
|
||||||
return h.adapter.ExpectQuery("some find condition")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDefaultExpecter returns a Expecter powered by go-sqlmock
|
// 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}
|
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
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user