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

Function TestNestedTransactionWithBlock

tests/transaction_test.go:238–299  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

236}
237
238func TestNestedTransactionWithBlock(t *testing.T) {
239 var (
240 user = *GetUser("transaction-nested", Config{})
241 user1 = *GetUser("transaction-nested-1", Config{})
242 user2 = *GetUser("transaction-nested-2", Config{})
243 )
244
245 if err := DB.Transaction(func(tx *gorm.DB) error {
246 tx.Create(&user)
247
248 if err := tx.First(&User{}, "name = ?", user.Name).Error; err != nil {
249 t.Fatalf("Should find saved record")
250 }
251
252 if err := tx.Transaction(func(tx1 *gorm.DB) error {
253 tx1.Create(&user1)
254
255 if err := tx1.First(&User{}, "name = ?", user1.Name).Error; err != nil {
256 t.Fatalf("Should find saved record")
257 }
258
259 return errors.New("rollback")
260 }); err == nil {
261 t.Fatalf("nested transaction should returns error")
262 }
263
264 if err := tx.First(&User{}, "name = ?", user1.Name).Error; err == nil {
265 t.Fatalf("Should not find rollbacked record")
266 }
267
268 if err := tx.Transaction(func(tx2 *gorm.DB) error {
269 tx2.Create(&user2)
270
271 if err := tx2.First(&User{}, "name = ?", user2.Name).Error; err != nil {
272 t.Fatalf("Should find saved record")
273 }
274
275 return nil
276 }); err != nil {
277 t.Fatalf("nested transaction returns error: %v", err)
278 }
279
280 if err := tx.First(&User{}, "name = ?", user2.Name).Error; err != nil {
281 t.Fatalf("Should find saved record")
282 }
283 return nil
284 }); err != nil {
285 t.Fatalf("no error should return, but got %v", err)
286 }
287
288 if err := DB.First(&User{}, "name = ?", user.Name).Error; err != nil {
289 t.Fatalf("Should find saved record")
290 }
291
292 if err := DB.First(&User{}, "name = ?", user1.Name).Error; err == nil {
293 t.Fatalf("Should not find rollbacked record")
294 }
295

Callers

nothing calls this directly

Calls 5

GetUserFunction · 0.85
TransactionMethod · 0.80
CreateMethod · 0.65
FirstMethod · 0.65
NewMethod · 0.65

Tested by

no test coverage detected