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

Function TestGenericsNestedPreloads

tests/generics_test.go:658–707  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

656}
657
658func TestGenericsNestedPreloads(t *testing.T) {
659 user := *GetUser("generics_nested_preload", Config{Pets: 2})
660 user.Friends = []*User{GetUser("generics_nested_preload", Config{Pets: 5})}
661
662 ctx := context.Background()
663 db := gorm.G[User](DB)
664
665 for idx, pet := range user.Pets {
666 pet.Toy = Toy{Name: "toy_nested_preload_" + strconv.Itoa(idx+1)}
667 }
668
669 if err := db.Create(ctx, &user); err != nil {
670 t.Fatalf("errors happened when create: %v", err)
671 }
672
673 user2, err := db.Preload("Pets.Toy", nil).Preload("Friends.Pets", func(db gorm.PreloadBuilder) error {
674 return nil
675 }).Where(user.ID).Take(ctx)
676 if err != nil {
677 t.Errorf("failed to nested preload user")
678 }
679 CheckUser(t, user2, user)
680 if len(user.Pets) == 0 || len(user.Friends) == 0 || len(user.Friends[0].Pets) == 0 {
681 t.Fatalf("failed to nested preload")
682 }
683
684 if DB.Dialector.Name() == "mysql" {
685 // mysql 5.7 doesn't support row_number()
686 if strings.HasPrefix(DB.Dialector.(*mysql.Dialector).ServerVersion, "5.7") {
687 return
688 }
689 }
690 if DB.Dialector.Name() == "sqlserver" {
691 // sqlserver doesn't support order by in subquery
692 return
693 }
694
695 user3, err := db.Preload("Pets.Toy", nil).Preload("Friends.Pets", func(db gorm.PreloadBuilder) error {
696 db.LimitPerRecord(3)
697 return nil
698 }).Where(user.ID).Take(ctx)
699 if err != nil {
700 t.Errorf("failed to nested preload user")
701 }
702 CheckUser(t, user3, user)
703
704 if len(user3.Friends) != 1 || len(user3.Friends[0].Pets) != 3 {
705 t.Errorf("failed to nested preload with limit per record")
706 }
707}
708
709func TestGenericsDistinct(t *testing.T) {
710 ctx := context.Background()

Callers

nothing calls this directly

Calls 8

GetUserFunction · 0.85
CheckUserFunction · 0.85
CreateMethod · 0.65
TakeMethod · 0.65
WhereMethod · 0.65
PreloadMethod · 0.65
NameMethod · 0.65
LimitPerRecordMethod · 0.65

Tested by

no test coverage detected