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

Function TestCallbacksWithErrors

tests/hooks_test.go:149–213  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

147}
148
149func TestCallbacksWithErrors(t *testing.T) {
150 DB.Migrator().DropTable(&Product{})
151 DB.AutoMigrate(&Product{})
152
153 p := Product{Code: "Invalid", Price: 100}
154 if DB.Save(&p).Error == nil {
155 t.Fatalf("An error from before create callbacks happened when create with invalid value")
156 }
157
158 if DB.Where("code = ?", "Invalid").First(&Product{}).Error == nil {
159 t.Fatalf("Should not save record that have errors")
160 }
161
162 if DB.Save(&Product{Code: "dont_save", Price: 100}).Error == nil {
163 t.Fatalf("An error from after create callbacks happened when create with invalid value")
164 }
165
166 p2 := Product{Code: "update_callback", Price: 100}
167 DB.Save(&p2)
168
169 p2.Code = "dont_update"
170 if DB.Save(&p2).Error == nil {
171 t.Fatalf("An error from before update callbacks happened when update with invalid value")
172 }
173
174 if DB.Where("code = ?", "update_callback").First(&Product{}).Error != nil {
175 t.Fatalf("Record Should not be updated due to errors happened in before update callback")
176 }
177
178 if DB.Where("code = ?", "dont_update").First(&Product{}).Error == nil {
179 t.Fatalf("Record Should not be updated due to errors happened in before update callback")
180 }
181
182 p2.Code = "dont_save"
183 if DB.Save(&p2).Error == nil {
184 t.Fatalf("An error from before save callbacks happened when update with invalid value")
185 }
186
187 p3 := Product{Code: "dont_delete", Price: 100}
188 DB.Save(&p3)
189 if DB.Delete(&p3).Error == nil {
190 t.Fatalf("An error from before delete callbacks happened when delete")
191 }
192
193 if DB.Where("Code = ?", "dont_delete").First(&p3).Error != nil {
194 t.Fatalf("An error from before delete callbacks happened")
195 }
196
197 p4 := Product{Code: "after_save_error", Price: 100}
198 DB.Save(&p4)
199 if err := DB.First(&Product{}, "code = ?", "after_save_error").Error; err == nil {
200 t.Fatalf("Record should be reverted if get an error in after save callback")
201 }
202
203 p5 := Product{Code: "after_delete_error", Price: 100}
204 DB.Save(&p5)
205 if err := DB.First(&Product{}, "code = ?", "after_delete_error").Error; err != nil {
206 t.Fatalf("Record should be found")

Callers

nothing calls this directly

Calls 7

SaveMethod · 0.80
DropTableMethod · 0.65
MigratorMethod · 0.65
AutoMigrateMethod · 0.65
FirstMethod · 0.65
WhereMethod · 0.65
DeleteMethod · 0.65

Tested by

no test coverage detected