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"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// 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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user