| 179 | } |
| 180 | |
| 181 | func TestTransactionWithSavePoint(t *testing.T) { |
| 182 | tx := DB.Begin() |
| 183 | |
| 184 | user := *GetUser("transaction-save-point", Config{}) |
| 185 | tx.Create(&user) |
| 186 | |
| 187 | if err := tx.First(&User{}, "name = ?", user.Name).Error; err != nil { |
| 188 | t.Fatalf("Should find saved record") |
| 189 | } |
| 190 | |
| 191 | if err := tx.SavePoint("save_point1").Error; err != nil { |
| 192 | t.Fatalf("Failed to save point, got error %v", err) |
| 193 | } |
| 194 | |
| 195 | user1 := *GetUser("transaction-save-point-1", Config{}) |
| 196 | tx.Create(&user1) |
| 197 | |
| 198 | if err := tx.First(&User{}, "name = ?", user1.Name).Error; err != nil { |
| 199 | t.Fatalf("Should find saved record") |
| 200 | } |
| 201 | |
| 202 | if err := tx.RollbackTo("save_point1").Error; err != nil { |
| 203 | t.Fatalf("Failed to save point, got error %v", err) |
| 204 | } |
| 205 | |
| 206 | if err := tx.First(&User{}, "name = ?", user1.Name).Error; err == nil { |
| 207 | t.Fatalf("Should not find rollbacked record") |
| 208 | } |
| 209 | |
| 210 | if err := tx.SavePoint("save_point2").Error; err != nil { |
| 211 | t.Fatalf("Failed to save point, got error %v", err) |
| 212 | } |
| 213 | |
| 214 | user2 := *GetUser("transaction-save-point-2", Config{}) |
| 215 | tx.Create(&user2) |
| 216 | |
| 217 | if err := tx.First(&User{}, "name = ?", user2.Name).Error; err != nil { |
| 218 | t.Fatalf("Should find saved record") |
| 219 | } |
| 220 | |
| 221 | if err := tx.Commit().Error; err != nil { |
| 222 | t.Fatalf("Failed to commit, got error %v", err) |
| 223 | } |
| 224 | |
| 225 | if err := DB.First(&User{}, "name = ?", user.Name).Error; err != nil { |
| 226 | t.Fatalf("Should find saved record") |
| 227 | } |
| 228 | |
| 229 | if err := DB.First(&User{}, "name = ?", user1.Name).Error; err == nil { |
| 230 | t.Fatalf("Should not find rollbacked record") |
| 231 | } |
| 232 | |
| 233 | if err := DB.First(&User{}, "name = ?", user2.Name).Error; err != nil { |
| 234 | t.Fatalf("Should find saved record") |
| 235 | } |
| 236 | } |
| 237 | |
| 238 | func TestNestedTransactionWithBlock(t *testing.T) { |