delete_test.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package gorm_test
  2. import (
  3. "testing"
  4. "time"
  5. )
  6. func TestDelete(t *testing.T) {
  7. user1, user2 := User{Name: "delete1"}, User{Name: "delete2"}
  8. DB.Save(&user1)
  9. DB.Save(&user2)
  10. if err := DB.Delete(&user1).Error; err != nil {
  11. t.Errorf("No error should happen when delete a record, err=%s", err)
  12. }
  13. if !DB.Where("name = ?", user1.Name).First(&User{}).RecordNotFound() {
  14. t.Errorf("User can't be found after delete")
  15. }
  16. if DB.Where("name = ?", user2.Name).First(&User{}).RecordNotFound() {
  17. t.Errorf("Other users that not deleted should be found-able")
  18. }
  19. }
  20. func TestInlineDelete(t *testing.T) {
  21. user1, user2 := User{Name: "inline_delete1"}, User{Name: "inline_delete2"}
  22. DB.Save(&user1)
  23. DB.Save(&user2)
  24. if DB.Delete(&User{}, user1.Id).Error != nil {
  25. t.Errorf("No error should happen when delete a record")
  26. } else if !DB.Where("name = ?", user1.Name).First(&User{}).RecordNotFound() {
  27. t.Errorf("User can't be found after delete")
  28. }
  29. if err := DB.Delete(&User{}, "name = ?", user2.Name).Error; err != nil {
  30. t.Errorf("No error should happen when delete a record, err=%s", err)
  31. } else if !DB.Where("name = ?", user2.Name).First(&User{}).RecordNotFound() {
  32. t.Errorf("User can't be found after delete")
  33. }
  34. }
  35. func TestSoftDelete(t *testing.T) {
  36. type User struct {
  37. Id int64
  38. Name string
  39. DeletedAt *time.Time
  40. }
  41. DB.AutoMigrate(&User{})
  42. user := User{Name: "soft_delete"}
  43. DB.Save(&user)
  44. DB.Delete(&user)
  45. if DB.First(&User{}, "name = ?", user.Name).Error == nil {
  46. t.Errorf("Can't find a soft deleted record")
  47. }
  48. if err := DB.Unscoped().First(&User{}, "name = ?", user.Name).Error; err != nil {
  49. t.Errorf("Should be able to find soft deleted record with Unscoped, but err=%s", err)
  50. }
  51. DB.Unscoped().Delete(&user)
  52. if !DB.Unscoped().First(&User{}, "name = ?", user.Name).RecordNotFound() {
  53. t.Errorf("Can't find permanently deleted record")
  54. }
  55. }
  56. func TestSoftDeleteWithCustomizedDeletedAtColumnName(t *testing.T) {
  57. creditCard := CreditCard{Number: "411111111234567"}
  58. DB.Save(&creditCard)
  59. DB.Delete(&creditCard)
  60. if deletedAtField, ok := DB.NewScope(&CreditCard{}).FieldByName("DeletedAt"); !ok || deletedAtField.DBName != "deleted_time" {
  61. t.Errorf("CreditCard's DeletedAt's column name should be `deleted_time`")
  62. }
  63. if DB.First(&CreditCard{}, "number = ?", creditCard.Number).Error == nil {
  64. t.Errorf("Can't find a soft deleted record")
  65. }
  66. if err := DB.Unscoped().First(&CreditCard{}, "number = ?", creditCard.Number).Error; err != nil {
  67. t.Errorf("Should be able to find soft deleted record with Unscoped, but err=%s", err)
  68. }
  69. DB.Unscoped().Delete(&creditCard)
  70. if !DB.Unscoped().First(&CreditCard{}, "number = ?", creditCard.Number).RecordNotFound() {
  71. t.Errorf("Can't find permanently deleted record")
  72. }
  73. }