session_delete_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  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
  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: 1})
  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. }
  30. func TestDeleted(t *testing.T) {
  31. assert.NoError(t, prepareEngine())
  32. type Deleted struct {
  33. Id int64 `xorm:"pk"`
  34. Name string
  35. DeletedAt time.Time `xorm:"deleted"`
  36. }
  37. err := testEngine.DropTables(&Deleted{})
  38. assert.NoError(t, err)
  39. err = testEngine.CreateTables(&Deleted{})
  40. assert.NoError(t, err)
  41. _, err = testEngine.InsertOne(&Deleted{Id: 1, Name: "11111"})
  42. assert.NoError(t, err)
  43. _, err = testEngine.InsertOne(&Deleted{Id: 2, Name: "22222"})
  44. assert.NoError(t, err)
  45. _, err = testEngine.InsertOne(&Deleted{Id: 3, Name: "33333"})
  46. assert.NoError(t, err)
  47. // Test normal Find()
  48. var records1 []Deleted
  49. err = testEngine.Where("`"+testEngine.ColumnMapper.Obj2Table("Id")+"` > 0").Find(&records1, &Deleted{})
  50. assert.EqualValues(t, 3, len(records1))
  51. // Test normal Get()
  52. record1 := &Deleted{}
  53. has, err := testEngine.Id(1).Get(record1)
  54. assert.NoError(t, err)
  55. assert.True(t, has)
  56. // Test Delete() with deleted
  57. affected, err := testEngine.Id(1).Delete(&Deleted{})
  58. assert.NoError(t, err)
  59. assert.EqualValues(t, 1, affected)
  60. has, err = testEngine.Id(1).Get(&Deleted{})
  61. assert.NoError(t, err)
  62. assert.False(t, has)
  63. var records2 []Deleted
  64. err = testEngine.Where("`" + testEngine.ColumnMapper.Obj2Table("Id") + "` > 0").Find(&records2)
  65. assert.NoError(t, err)
  66. assert.EqualValues(t, 2, len(records2))
  67. // Test no rows affected after Delete() again.
  68. affected, err = testEngine.Id(1).Delete(&Deleted{})
  69. assert.NoError(t, err)
  70. assert.EqualValues(t, 0, affected)
  71. // Deleted.DeletedAt must not be updated.
  72. affected, err = testEngine.Id(2).Update(&Deleted{Name: "2", DeletedAt: time.Now()})
  73. assert.NoError(t, err)
  74. assert.EqualValues(t, 1, affected)
  75. record2 := &Deleted{}
  76. has, err = testEngine.Id(2).Get(record2)
  77. assert.NoError(t, err)
  78. assert.True(t, record2.DeletedAt.IsZero())
  79. // Test find all records whatever `deleted`.
  80. var unscopedRecords1 []Deleted
  81. err = testEngine.Unscoped().Where("`"+testEngine.ColumnMapper.Obj2Table("Id")+"` > 0").Find(&unscopedRecords1, &Deleted{})
  82. assert.NoError(t, err)
  83. assert.EqualValues(t, 3, len(unscopedRecords1))
  84. // Delete() must really delete a record with Unscoped()
  85. affected, err = testEngine.Unscoped().Id(1).Delete(&Deleted{})
  86. assert.NoError(t, err)
  87. assert.EqualValues(t, 1, affected)
  88. var unscopedRecords2 []Deleted
  89. err = testEngine.Unscoped().Where("`"+testEngine.ColumnMapper.Obj2Table("Id")+"` > 0").Find(&unscopedRecords2, &Deleted{})
  90. assert.NoError(t, err)
  91. assert.EqualValues(t, 2, len(unscopedRecords2))
  92. var records3 []Deleted
  93. err = testEngine.Where("`"+testEngine.ColumnMapper.Obj2Table("Id")+"` > 0").And("`"+testEngine.ColumnMapper.Obj2Table("Id")+"`> 1").
  94. Or("`"+testEngine.ColumnMapper.Obj2Table("Id")+"` = ?", 3).Find(&records3)
  95. assert.NoError(t, err)
  96. assert.EqualValues(t, 2, len(records3))
  97. }