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

Function TestForeignKeyConstraints

tests/associations_test.go:73–128  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

71}
72
73func TestForeignKeyConstraints(t *testing.T) {
74 tidbSkip(t, "not support the foreign key feature")
75
76 type Profile struct {
77 ID uint
78 Name string
79 MemberID uint
80 }
81
82 type Member struct {
83 ID uint
84 Refer uint `gorm:"uniqueIndex"`
85 Name string
86 Profile Profile `gorm:"Constraint:OnUpdate:CASCADE,OnDelete:CASCADE;FOREIGNKEY:MemberID;References:Refer"`
87 }
88
89 DB.Migrator().DropTable(&Profile{}, &Member{})
90
91 if err := DB.AutoMigrate(&Profile{}, &Member{}); err != nil {
92 t.Fatalf("Failed to migrate, got error: %v", err)
93 }
94
95 member := Member{Refer: 1, Name: "foreign_key_constraints", Profile: Profile{Name: "my_profile"}}
96
97 DB.Create(&member)
98
99 var profile Profile
100 if err := DB.First(&profile, "id = ?", member.Profile.ID).Error; err != nil {
101 t.Fatalf("failed to find profile, got error: %v", err)
102 } else if profile.MemberID != member.ID {
103 t.Fatalf("member id is not equal: expects: %v, got: %v", member.ID, profile.MemberID)
104 }
105
106 member.Profile = Profile{}
107 DB.Model(&member).Update("Refer", 100)
108
109 var profile2 Profile
110 if err := DB.First(&profile2, "id = ?", profile.ID).Error; err != nil {
111 t.Fatalf("failed to find profile, got error: %v", err)
112 } else if profile2.MemberID != 100 {
113 t.Fatalf("member id is not equal: expects: %v, got: %v", 100, profile2.MemberID)
114 }
115
116 if r := DB.Delete(&member); r.Error != nil || r.RowsAffected != 1 {
117 t.Fatalf("Should delete member, got error: %v, affected: %v", r.Error, r.RowsAffected)
118 }
119
120 var result Member
121 if err := DB.First(&result, member.ID).Error; err == nil {
122 t.Fatalf("Should not find deleted member")
123 }
124
125 if err := DB.First(&profile2, profile.ID).Error; err == nil {
126 t.Fatalf("Should not find deleted profile")
127 }
128}
129
130func TestForeignKeyConstraintsBelongsTo(t *testing.T) {

Callers

nothing calls this directly

Calls 9

tidbSkipFunction · 0.85
ModelMethod · 0.80
DropTableMethod · 0.65
MigratorMethod · 0.65
AutoMigrateMethod · 0.65
CreateMethod · 0.65
FirstMethod · 0.65
UpdateMethod · 0.65
DeleteMethod · 0.65

Tested by

no test coverage detected