| 240 | } |
| 241 | |
| 242 | func TestPolymorphicHasOne(t *testing.T) { |
| 243 | t.Run("Struct", func(t *testing.T) { |
| 244 | pet := Pet{ |
| 245 | Name: "PolymorphicHasOne", |
| 246 | Toy: Toy{Name: "Toy-PolymorphicHasOne"}, |
| 247 | } |
| 248 | |
| 249 | if err := DB.Create(&pet).Error; err != nil { |
| 250 | t.Fatalf("errors happened when create: %v", err) |
| 251 | } |
| 252 | |
| 253 | CheckPet(t, pet, pet) |
| 254 | |
| 255 | var pet2 Pet |
| 256 | DB.Preload("Toy").Find(&pet2, "id = ?", pet.ID) |
| 257 | CheckPet(t, pet2, pet) |
| 258 | }) |
| 259 | |
| 260 | t.Run("Slice", func(t *testing.T) { |
| 261 | pets := []Pet{{ |
| 262 | Name: "PolymorphicHasOne-Slice-1", |
| 263 | Toy: Toy{Name: "Toy-PolymorphicHasOne-Slice-1"}, |
| 264 | }, { |
| 265 | Name: "PolymorphicHasOne-Slice-2", |
| 266 | Toy: Toy{Name: "Toy-PolymorphicHasOne-Slice-2"}, |
| 267 | }, { |
| 268 | Name: "PolymorphicHasOne-Slice-3", |
| 269 | Toy: Toy{Name: "Toy-PolymorphicHasOne-Slice-3"}, |
| 270 | }} |
| 271 | |
| 272 | if err := DB.Create(&pets).Error; err != nil { |
| 273 | t.Fatalf("errors happened when create: %v", err) |
| 274 | } |
| 275 | |
| 276 | var petIDs []uint |
| 277 | for _, pet := range pets { |
| 278 | petIDs = append(petIDs, pet.ID) |
| 279 | CheckPet(t, pet, pet) |
| 280 | } |
| 281 | |
| 282 | var pets2 []Pet |
| 283 | DB.Preload("Toy").Find(&pets2, "id IN ?", petIDs) |
| 284 | for idx, pet := range pets2 { |
| 285 | CheckPet(t, pet, pets[idx]) |
| 286 | } |
| 287 | }) |
| 288 | |
| 289 | t.Run("SliceOfPtr", func(t *testing.T) { |
| 290 | pets := []*Pet{{ |
| 291 | Name: "PolymorphicHasOne-Slice-1", |
| 292 | Toy: Toy{Name: "Toy-PolymorphicHasOne-Slice-1"}, |
| 293 | }, { |
| 294 | Name: "PolymorphicHasOne-Slice-2", |
| 295 | Toy: Toy{Name: "Toy-PolymorphicHasOne-Slice-2"}, |
| 296 | }, { |
| 297 | Name: "PolymorphicHasOne-Slice-3", |
| 298 | Toy: Toy{Name: "Toy-PolymorphicHasOne-Slice-3"}, |
| 299 | }} |