You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

consistency_test.go 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. // Copyright 2021 Gitea. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package models
  5. import (
  6. "testing"
  7. "code.gitea.io/gitea/models/db"
  8. issues_model "code.gitea.io/gitea/models/issues"
  9. repo_model "code.gitea.io/gitea/models/repo"
  10. "code.gitea.io/gitea/models/unittest"
  11. "code.gitea.io/gitea/modules/setting"
  12. "code.gitea.io/gitea/modules/timeutil"
  13. "github.com/stretchr/testify/assert"
  14. )
  15. func TestDeleteOrphanedObjects(t *testing.T) {
  16. assert.NoError(t, unittest.PrepareTestDatabase())
  17. countBefore, err := db.GetEngine(db.DefaultContext).Count(&PullRequest{})
  18. assert.NoError(t, err)
  19. _, err = db.GetEngine(db.DefaultContext).Insert(&PullRequest{IssueID: 1000}, &PullRequest{IssueID: 1001}, &PullRequest{IssueID: 1003})
  20. assert.NoError(t, err)
  21. orphaned, err := CountOrphanedObjects("pull_request", "issue", "pull_request.issue_id=issue.id")
  22. assert.NoError(t, err)
  23. assert.EqualValues(t, 3, orphaned)
  24. err = DeleteOrphanedObjects("pull_request", "issue", "pull_request.issue_id=issue.id")
  25. assert.NoError(t, err)
  26. countAfter, err := db.GetEngine(db.DefaultContext).Count(&PullRequest{})
  27. assert.NoError(t, err)
  28. assert.EqualValues(t, countBefore, countAfter)
  29. }
  30. func TestNewMilestone(t *testing.T) {
  31. assert.NoError(t, unittest.PrepareTestDatabase())
  32. milestone := &issues_model.Milestone{
  33. RepoID: 1,
  34. Name: "milestoneName",
  35. Content: "milestoneContent",
  36. }
  37. assert.NoError(t, issues_model.NewMilestone(milestone))
  38. unittest.AssertExistsAndLoadBean(t, milestone)
  39. unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: milestone.RepoID}, &issues_model.Milestone{})
  40. }
  41. func TestChangeMilestoneStatus(t *testing.T) {
  42. assert.NoError(t, unittest.PrepareTestDatabase())
  43. milestone := unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1}).(*issues_model.Milestone)
  44. assert.NoError(t, issues_model.ChangeMilestoneStatus(milestone, true))
  45. unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1}, "is_closed=1")
  46. unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: milestone.RepoID}, &issues_model.Milestone{})
  47. assert.NoError(t, issues_model.ChangeMilestoneStatus(milestone, false))
  48. unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1}, "is_closed=0")
  49. unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: milestone.RepoID}, &issues_model.Milestone{})
  50. }
  51. func TestDeleteMilestoneByRepoID(t *testing.T) {
  52. assert.NoError(t, unittest.PrepareTestDatabase())
  53. assert.NoError(t, issues_model.DeleteMilestoneByRepoID(1, 1))
  54. unittest.AssertNotExistsBean(t, &issues_model.Milestone{ID: 1})
  55. unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: 1})
  56. assert.NoError(t, issues_model.DeleteMilestoneByRepoID(unittest.NonexistentID, unittest.NonexistentID))
  57. }
  58. func TestUpdateMilestone(t *testing.T) {
  59. assert.NoError(t, unittest.PrepareTestDatabase())
  60. milestone := unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1}).(*issues_model.Milestone)
  61. milestone.Name = " newMilestoneName "
  62. milestone.Content = "newMilestoneContent"
  63. assert.NoError(t, issues_model.UpdateMilestone(milestone, milestone.IsClosed))
  64. milestone = unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1}).(*issues_model.Milestone)
  65. assert.EqualValues(t, "newMilestoneName", milestone.Name)
  66. unittest.CheckConsistencyFor(t, &issues_model.Milestone{})
  67. }
  68. func TestUpdateMilestoneCounters(t *testing.T) {
  69. assert.NoError(t, unittest.PrepareTestDatabase())
  70. issue := unittest.AssertExistsAndLoadBean(t, &Issue{MilestoneID: 1},
  71. "is_closed=0").(*Issue)
  72. issue.IsClosed = true
  73. issue.ClosedUnix = timeutil.TimeStampNow()
  74. _, err := db.GetEngine(db.DefaultContext).ID(issue.ID).Cols("is_closed", "closed_unix").Update(issue)
  75. assert.NoError(t, err)
  76. assert.NoError(t, issues_model.UpdateMilestoneCounters(db.DefaultContext, issue.MilestoneID))
  77. unittest.CheckConsistencyFor(t, &issues_model.Milestone{})
  78. issue.IsClosed = false
  79. issue.ClosedUnix = 0
  80. _, err = db.GetEngine(db.DefaultContext).ID(issue.ID).Cols("is_closed", "closed_unix").Update(issue)
  81. assert.NoError(t, err)
  82. assert.NoError(t, issues_model.UpdateMilestoneCounters(db.DefaultContext, issue.MilestoneID))
  83. unittest.CheckConsistencyFor(t, &issues_model.Milestone{})
  84. }
  85. func TestConsistencyUpdateAction(t *testing.T) {
  86. if !setting.Database.UseSQLite3 {
  87. t.Skip("Test is only for SQLite database.")
  88. }
  89. assert.NoError(t, unittest.PrepareTestDatabase())
  90. id := 8
  91. unittest.AssertExistsAndLoadBean(t, &Action{
  92. ID: int64(id),
  93. })
  94. _, err := db.GetEngine(db.DefaultContext).Exec(`UPDATE action SET created_unix = "" WHERE id = ?`, id)
  95. assert.NoError(t, err)
  96. actions := make([]*Action, 0, 1)
  97. //
  98. // XORM returns an error when created_unix is a string
  99. //
  100. err = db.GetEngine(db.DefaultContext).Where("id = ?", id).Find(&actions)
  101. if assert.Error(t, err) {
  102. assert.Contains(t, err.Error(), "type string to a int64: invalid syntax")
  103. }
  104. //
  105. // Get rid of incorrectly set created_unix
  106. //
  107. count, err := CountActionCreatedUnixString()
  108. assert.NoError(t, err)
  109. assert.EqualValues(t, 1, count)
  110. count, err = FixActionCreatedUnixString()
  111. assert.NoError(t, err)
  112. assert.EqualValues(t, 1, count)
  113. count, err = CountActionCreatedUnixString()
  114. assert.NoError(t, err)
  115. assert.EqualValues(t, 0, count)
  116. count, err = FixActionCreatedUnixString()
  117. assert.NoError(t, err)
  118. assert.EqualValues(t, 0, count)
  119. //
  120. // XORM must be happy now
  121. //
  122. assert.NoError(t, db.GetEngine(db.DefaultContext).Where("id = ?", id).Find(&actions))
  123. unittest.CheckConsistencyFor(t, &Action{})
  124. }