forked from mirror/gorm
Test preload with conds
This commit is contained in:
parent
e60a8d54ff
commit
1c39ac921b
|
@ -1,9 +1,11 @@
|
||||||
package tests_test
|
package tests_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/jinzhu/gorm/clause"
|
||||||
. "github.com/jinzhu/gorm/tests"
|
. "github.com/jinzhu/gorm/tests"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -55,4 +57,82 @@ func TestNestedPreloadForSlice(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPreloadWithConds(t *testing.T) {
|
func TestPreloadWithConds(t *testing.T) {
|
||||||
|
var users = []User{
|
||||||
|
*GetUser("slice_nested_preload_1", Config{Account: true}),
|
||||||
|
*GetUser("slice_nested_preload_2", Config{Account: false}),
|
||||||
|
*GetUser("slice_nested_preload_3", Config{Account: true}),
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := DB.Create(&users).Error; err != nil {
|
||||||
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var userIDs []uint
|
||||||
|
for _, user := range users {
|
||||||
|
userIDs = append(userIDs, user.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
var users2 []User
|
||||||
|
DB.Preload("Account", clause.Eq{Column: "number", Value: users[0].Account.Number}).Find(&users2, "id IN ?", userIDs)
|
||||||
|
sort.Slice(users2, func(i, j int) bool {
|
||||||
|
return users2[i].ID < users2[j].ID
|
||||||
|
})
|
||||||
|
|
||||||
|
for idx, user := range users2[1:2] {
|
||||||
|
if user.Account.Number != "" {
|
||||||
|
t.Errorf("No account should found for user %v but got %v", idx+2, user.Account.Number)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CheckUser(t, users2[0], users[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNestedPreloadWithConds(t *testing.T) {
|
||||||
|
var users = []User{
|
||||||
|
*GetUser("slice_nested_preload_1", Config{Pets: 2}),
|
||||||
|
*GetUser("slice_nested_preload_2", Config{Pets: 0}),
|
||||||
|
*GetUser("slice_nested_preload_3", Config{Pets: 3}),
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, user := range users {
|
||||||
|
for idx, pet := range user.Pets {
|
||||||
|
pet.Toy = Toy{Name: user.Name + "_toy_nested_preload_" + strconv.Itoa(idx+1)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := DB.Create(&users).Error; err != nil {
|
||||||
|
t.Fatalf("errors happened when create: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var userIDs []uint
|
||||||
|
for _, user := range users {
|
||||||
|
userIDs = append(userIDs, user.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
var users2 []User
|
||||||
|
DB.Preload("Pets.Toy", "name like ?", `%preload_3`).Find(&users2, "id IN ?", userIDs)
|
||||||
|
|
||||||
|
for idx, user := range users2[0:2] {
|
||||||
|
for _, pet := range user.Pets {
|
||||||
|
if pet.Toy.Name != "" {
|
||||||
|
t.Errorf("No toy should for user %v's pet %v but got %v", idx+1, pet.Name, pet.Toy.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(users2[2].Pets) != 3 {
|
||||||
|
t.Errorf("Invalid pet toys found for user 3 got %v", len(users2[2].Pets))
|
||||||
|
} else {
|
||||||
|
sort.Slice(users2[2].Pets, func(i, j int) bool {
|
||||||
|
return users2[2].Pets[i].ID < users2[2].Pets[j].ID
|
||||||
|
})
|
||||||
|
|
||||||
|
for _, pet := range users2[2].Pets[0:2] {
|
||||||
|
if pet.Toy.Name != "" {
|
||||||
|
t.Errorf("No toy should for user %v's pet %v but got %v", 3, pet.Name, pet.Toy.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CheckPet(t, *users2[2].Pets[2], *users[2].Pets[2])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue