session_delete_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. // Copyright 2017 The Xorm Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package xorm
  5. import (
  6. "testing"
  7. "time"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. func TestDelete(t *testing.T) {
  11. assert.NoError(t, prepareEngine())
  12. type UserinfoDelete struct {
  13. Uid int64 `xorm:"id pk not null autoincr"`
  14. IsMan bool
  15. }
  16. assert.NoError(t, testEngine.Sync2(new(UserinfoDelete)))
  17. user := UserinfoDelete{Uid: 1}
  18. cnt, err := testEngine.Insert(&user)
  19. assert.NoError(t, err)
  20. assert.EqualValues(t, 1, cnt)
  21. cnt, err = testEngine.Delete(&UserinfoDelete{Uid: user.Uid})
  22. assert.NoError(t, err)
  23. assert.EqualValues(t, 1, cnt)
  24. user.Uid = 0
  25. user.IsMan = true
  26. has, err := testEngine.Id(1).Get(&user)
  27. assert.NoError(t, err)
  28. assert.False(t, has)
  29. cnt, err = testEngine.Insert(&user)
  30. assert.NoError(t, err)
  31. assert.EqualValues(t, 1, cnt)
  32. cnt, err = testEngine.Where("id=?", user.Uid).Delete(&UserinfoDelete{})
  33. assert.NoError(t, err)
  34. assert.EqualValues(t, 1, cnt)
  35. user.Uid = 0
  36. user.IsMan = true
  37. has, err = testEngine.Id(2).Get(&user)
  38. assert.NoError(t, err)
  39. assert.False(t, has)
  40. }
  41. func TestDeleted(t *testing.T) {
  42. assert.NoError(t, prepareEngine())
  43. type Deleted struct {
  44. Id int64 `xorm:"pk"`
  45. Name string
  46. DeletedAt time.Time `xorm:"deleted"`
  47. }
  48. err := testEngine.DropTables(&Deleted{})
  49. assert.NoError(t, err)
  50. err = testEngine.CreateTables(&Deleted{})
  51. assert.NoError(t, err)
  52. _, err = testEngine.InsertOne(&Deleted{Id: 1, Name: "11111"})
  53. assert.NoError(t, err)
  54. _, err = testEngine.InsertOne(&Deleted{Id: 2, Name: "22222"})
  55. assert.NoError(t, err)
  56. _, err = testEngine.InsertOne(&Deleted{Id: 3, Name: "33333"})
  57. assert.NoError(t, err)
  58. // Test normal Find()
  59. var records1 []Deleted
  60. err = testEngine.Where("`"+testEngine.ColumnMapper.Obj2Table("Id")+"` > 0").Find(&records1, &Deleted{})
  61. assert.EqualValues(t, 3, len(records1))
  62. // Test normal Get()
  63. record1 := &Deleted{}
  64. has, err := testEngine.Id(1).Get(record1)
  65. assert.NoError(t, err)
  66. assert.True(t, has)
  67. // Test Delete() with deleted
  68. affected, err := testEngine.Id(1).Delete(&Deleted{})
  69. assert.NoError(t, err)
  70. assert.EqualValues(t, 1, affected)
  71. has, err = testEngine.Id(1).Get(&Deleted{})
  72. assert.NoError(t, err)
  73. assert.False(t, has)
  74. var records2 []Deleted
  75. err = testEngine.Where("`" + testEngine.ColumnMapper.Obj2Table("Id") + "` > 0").Find(&records2)
  76. assert.NoError(t, err)
  77. assert.EqualValues(t, 2, len(records2))
  78. // Test no rows affected after Delete() again.
  79. affected, err = testEngine.Id(1).Delete(&Deleted{})
  80. assert.NoError(t, err)
  81. assert.EqualValues(t, 0, affected)
  82. // Deleted.DeletedAt must not be updated.
  83. affected, err = testEngine.Id(2).Update(&Deleted{Name: "2", DeletedAt: time.Now()})
  84. assert.NoError(t, err)
  85. assert.EqualValues(t, 1, affected)
  86. record2 := &Deleted{}
  87. has, err = testEngine.Id(2).Get(record2)
  88. assert.NoError(t, err)
  89. assert.True(t, record2.DeletedAt.IsZero())
  90. // Test find all records whatever `deleted`.
  91. var unscopedRecords1 []Deleted
  92. err = testEngine.Unscoped().Where("`"+testEngine.ColumnMapper.Obj2Table("Id")+"` > 0").Find(&unscopedRecords1, &Deleted{})
  93. assert.NoError(t, err)
  94. assert.EqualValues(t, 3, len(unscopedRecords1))
  95. // Delete() must really delete a record with Unscoped()
  96. affected, err = testEngine.Unscoped().Id(1).Delete(&Deleted{})
  97. assert.NoError(t, err)
  98. assert.EqualValues(t, 1, affected)
  99. var unscopedRecords2 []Deleted
  100. err = testEngine.Unscoped().Where("`"+testEngine.ColumnMapper.Obj2Table("Id")+"` > 0").Find(&unscopedRecords2, &Deleted{})
  101. assert.NoError(t, err)
  102. assert.EqualValues(t, 2, len(unscopedRecords2))
  103. var records3 []Deleted
  104. err = testEngine.Where("`"+testEngine.ColumnMapper.Obj2Table("Id")+"` > 0").And("`"+testEngine.ColumnMapper.Obj2Table("Id")+"`> 1").
  105. Or("`"+testEngine.ColumnMapper.Obj2Table("Id")+"` = ?", 3).Find(&records3)
  106. assert.NoError(t, err)
  107. assert.EqualValues(t, 2, len(records3))
  108. }