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

Function TestSave

tests/update_test.go:636–724  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

634}
635
636func TestSave(t *testing.T) {
637 user := *GetUser("save", Config{})
638 DB.Create(&user)
639
640 if err := DB.First(&User{}, "name = ?", "save").Error; err != nil {
641 t.Fatalf("failed to find created user")
642 }
643
644 user.Name = "save2"
645 DB.Save(&user)
646
647 var result User
648 if err := DB.First(&result, "name = ?", "save2").Error; err != nil || result.ID != user.ID {
649 t.Fatalf("failed to find updated user")
650 }
651
652 user2 := *GetUser("save2", Config{})
653 DB.Create(&user2)
654
655 time.Sleep(time.Second)
656 user1UpdatedAt := result.UpdatedAt
657 user2UpdatedAt := user2.UpdatedAt
658 users := []*User{&result, &user2}
659 DB.Save(&users)
660
661 if user1UpdatedAt.Format(time.RFC1123Z) == result.UpdatedAt.Format(time.RFC1123Z) {
662 t.Fatalf("user's updated at should be changed, expects: %+v, got: %+v", user1UpdatedAt, result.UpdatedAt)
663 }
664
665 if user2UpdatedAt.Format(time.RFC1123Z) == user2.UpdatedAt.Format(time.RFC1123Z) {
666 t.Fatalf("user's updated at should be changed, expects: %+v, got: %+v", user2UpdatedAt, user2.UpdatedAt)
667 }
668
669 DB.First(&result)
670 if user1UpdatedAt.Format(time.RFC1123Z) == result.UpdatedAt.Format(time.RFC1123Z) {
671 t.Fatalf("user's updated at should be changed after reload, expects: %+v, got: %+v", user1UpdatedAt, result.UpdatedAt)
672 }
673
674 DB.First(&user2)
675 if user2UpdatedAt.Format(time.RFC1123Z) == user2.UpdatedAt.Format(time.RFC1123Z) {
676 t.Fatalf("user2's updated at should be changed after reload, expects: %+v, got: %+v", user2UpdatedAt, user2.UpdatedAt)
677 }
678
679 dryDB := DB.Session(&gorm.Session{DryRun: true})
680 stmt := dryDB.Save(&user).Statement
681 if !regexp.MustCompile(`.users.\..deleted_at. IS NULL`).MatchString(stmt.SQL.String()) {
682 t.Fatalf("invalid updating SQL, got %v", stmt.SQL.String())
683 }
684
685 dryDB = DB.Session(&gorm.Session{DryRun: true})
686 stmt = dryDB.Unscoped().Save(&user).Statement
687 if !regexp.MustCompile(`WHERE .id. = [^ ]+$`).MatchString(stmt.SQL.String()) {
688 t.Fatalf("invalid updating SQL, got %v", stmt.SQL.String())
689 }
690
691 user3 := *GetUser("save3", Config{})
692 DB.Create(&user3)
693

Callers

nothing calls this directly

Calls 8

GetUserFunction · 0.85
SaveMethod · 0.80
SessionMethod · 0.80
ModelMethod · 0.80
CreateMethod · 0.65
FirstMethod · 0.65
StringMethod · 0.45
UnscopedMethod · 0.45

Tested by

no test coverage detected