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

Function TestForeignKeyConstraintsBelongsTo

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

Source from the content-addressed store, hash-verified

128}
129
130func TestForeignKeyConstraintsBelongsTo(t *testing.T) {
131 tidbSkip(t, "not support the foreign key feature")
132
133 type Profile struct {
134 ID uint
135 Name string
136 Refer uint `gorm:"uniqueIndex"`
137 }
138
139 type Member struct {
140 ID uint
141 Name string
142 ProfileID uint
143 Profile Profile `gorm:"Constraint:OnUpdate:CASCADE,OnDelete:CASCADE;FOREIGNKEY:ProfileID;References:Refer"`
144 }
145
146 DB.Migrator().DropTable(&Profile{}, &Member{})
147
148 if err := DB.AutoMigrate(&Profile{}, &Member{}); err != nil {
149 t.Fatalf("Failed to migrate, got error: %v", err)
150 }
151
152 member := Member{Name: "foreign_key_constraints_belongs_to", Profile: Profile{Name: "my_profile_belongs_to", Refer: 1}}
153
154 DB.Create(&member)
155
156 var profile Profile
157 if err := DB.First(&profile, "id = ?", member.Profile.ID).Error; err != nil {
158 t.Fatalf("failed to find profile, got error: %v", err)
159 } else if profile.Refer != member.ProfileID {
160 t.Fatalf("member id is not equal: expects: %v, got: %v", profile.Refer, member.ProfileID)
161 }
162
163 DB.Model(&profile).Update("Refer", 100)
164
165 var member2 Member
166 if err := DB.First(&member2, "id = ?", member.ID).Error; err != nil {
167 t.Fatalf("failed to find member, got error: %v", err)
168 } else if member2.ProfileID != 100 {
169 t.Fatalf("member id is not equal: expects: %v, got: %v", 100, member2.ProfileID)
170 }
171
172 if r := DB.Delete(&profile); r.Error != nil || r.RowsAffected != 1 {
173 t.Fatalf("Should delete member, got error: %v, affected: %v", r.Error, r.RowsAffected)
174 }
175
176 var result Member
177 if err := DB.First(&result, member.ID).Error; err == nil {
178 t.Fatalf("Should not find deleted member")
179 }
180
181 if err := DB.First(&profile, profile.ID).Error; err == nil {
182 t.Fatalf("Should not find deleted profile")
183 }
184}
185
186func TestFullSaveAssociations(t *testing.T) {
187 coupon := &Coupon{

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