MCPcopy
hub / github.com/go-gorm/gorm / TestPreloadWithConds

Function TestPreloadWithConds

tests/preload_test.go:109–165  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

107}
108
109func TestPreloadWithConds(t *testing.T) {
110 users := []User{
111 *GetUser("slice_nested_preload_1", Config{Account: true}),
112 *GetUser("slice_nested_preload_2", Config{Account: false}),
113 *GetUser("slice_nested_preload_3", Config{Account: true}),
114 }
115
116 if err := DB.Create(&users).Error; err != nil {
117 t.Fatalf("errors happened when create: %v", err)
118 }
119
120 var userIDs []uint
121 for _, user := range users {
122 userIDs = append(userIDs, user.ID)
123 }
124
125 var users2 []User
126 DB.Preload("Account", clause.Eq{Column: "number", Value: users[0].Account.Number}).Find(&users2, "id IN ?", userIDs)
127 sort.Slice(users2, func(i, j int) bool {
128 return users2[i].ID < users2[j].ID
129 })
130
131 for idx, user := range users2[1:2] {
132 if user.Account.Number != "" {
133 t.Errorf("No account should found for user %v but got %v", idx+2, user.Account.Number)
134 }
135 }
136
137 CheckUser(t, users2[0], users[0])
138
139 var users3 []User
140 if err := DB.Preload("Account", func(tx *gorm.DB) *gorm.DB {
141 return tx.Table("accounts AS a").Select("a.*")
142 }).Find(&users3, "id IN ?", userIDs).Error; err != nil {
143 t.Errorf("failed to query, got error %v", err)
144 }
145 sort.Slice(users3, func(i, j int) bool {
146 return users2[i].ID < users2[j].ID
147 })
148
149 for i, u := range users3 {
150 CheckUser(t, u, users[i])
151 }
152
153 var user4 User
154 DB.Delete(&users3[0].Account)
155
156 if err := DB.Preload(clause.Associations).Take(&user4, "id = ?", users3[0].ID).Error; err != nil || user4.Account.ID != 0 {
157 t.Errorf("failed to query, got error %v, account: %#v", err, user4.Account)
158 }
159
160 if err := DB.Preload(clause.Associations, func(tx *gorm.DB) *gorm.DB {
161 return tx.Unscoped()
162 }).Take(&user4, "id = ?", users3[0].ID).Error; err != nil || user4.Account.ID == 0 {
163 t.Errorf("failed to query, got error %v, account: %#v", err, user4.Account)
164 }
165}
166

Callers

nothing calls this directly

Calls 10

GetUserFunction · 0.85
CheckUserFunction · 0.85
CreateMethod · 0.65
FindMethod · 0.65
PreloadMethod · 0.65
SelectMethod · 0.65
TableMethod · 0.65
DeleteMethod · 0.65
TakeMethod · 0.65
UnscopedMethod · 0.45

Tested by

no test coverage detected