Support mock has one
This commit is contained in:
parent
8ae27d7ec7
commit
a0b70669e7
@ -5,6 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
|
"github.com/davecgh/go-spew/spew"
|
||||||
sqlmock "gopkg.in/DATA-DOG/go-sqlmock.v1"
|
sqlmock "gopkg.in/DATA-DOG/go-sqlmock.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -69,7 +70,25 @@ func getRelationRows(rVal reflect.Value, fieldName string, relation *Relationshi
|
|||||||
)
|
)
|
||||||
|
|
||||||
switch relation.Kind {
|
switch relation.Kind {
|
||||||
|
case "has_one":
|
||||||
|
// just a plain struct
|
||||||
|
scope := &Scope{Value: rVal.Interface()}
|
||||||
|
|
||||||
|
for _, field := range scope.GetModelStruct().StructFields {
|
||||||
|
if field.IsNormal {
|
||||||
|
columns = append(columns, field.DBName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rows = sqlmock.NewRows(columns)
|
||||||
|
|
||||||
|
// we don't have a slice
|
||||||
|
row := getRowForFields(scope.Fields())
|
||||||
|
rows = rows.AddRow(row...)
|
||||||
|
|
||||||
|
return rows, true
|
||||||
case "has_many", "many_to_many":
|
case "has_many", "many_to_many":
|
||||||
|
// in this case, we're guarnateed to have a slice
|
||||||
elem := rVal.Type().Elem()
|
elem := rVal.Type().Elem()
|
||||||
scope := &Scope{Value: reflect.New(elem).Interface()}
|
scope := &Scope{Value: reflect.New(elem).Interface()}
|
||||||
|
|
||||||
@ -165,6 +184,7 @@ func (q *SqlmockQuery) Returns(out interface{}) ExpectedQuery {
|
|||||||
|
|
||||||
for i, query := range q.queries {
|
for i, query := range q.queries {
|
||||||
query.WillReturnRows(rows[i])
|
query.WillReturnRows(rows[i])
|
||||||
|
spew.Dump(query)
|
||||||
}
|
}
|
||||||
|
|
||||||
return q
|
return q
|
||||||
|
@ -145,6 +145,31 @@ func TestMockPreloadHasMany(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMockPreloadHasOne(t *testing.T) {
|
||||||
|
db, expect, err := gorm.NewDefaultExpecter()
|
||||||
|
defer func() {
|
||||||
|
db.Close()
|
||||||
|
}()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
in := User{Id: 1}
|
||||||
|
out := User{Id: 1, CreditCard: CreditCard{Number: "12345678"}}
|
||||||
|
|
||||||
|
expect.Preload("CreditCard").Find(&in).Returns(out)
|
||||||
|
db.Preload("CreditCard").Find(&in)
|
||||||
|
|
||||||
|
if err := expect.AssertExpectations(); err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !reflect.DeepEqual(in, out) {
|
||||||
|
t.Error("In and out are not equal")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestMockPreloadMany2Many(t *testing.T) {
|
func TestMockPreloadMany2Many(t *testing.T) {
|
||||||
db, expect, err := gorm.NewDefaultExpecter()
|
db, expect, err := gorm.NewDefaultExpecter()
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -166,7 +191,7 @@ func TestMockPreloadMany2Many(t *testing.T) {
|
|||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// if !reflect.DeepEqual(in, out) {
|
// if !reflect.DeepEqual(in, out) {
|
||||||
// t.Error("In and out are not equal")
|
// t.Error("In and out are not equal")
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user