gitea源码

api_issue_lock_test.go 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // Copyright 2025 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package integration
  4. import (
  5. "fmt"
  6. "net/http"
  7. "testing"
  8. auth_model "code.gitea.io/gitea/models/auth"
  9. issues_model "code.gitea.io/gitea/models/issues"
  10. repo_model "code.gitea.io/gitea/models/repo"
  11. "code.gitea.io/gitea/models/unittest"
  12. user_model "code.gitea.io/gitea/models/user"
  13. api "code.gitea.io/gitea/modules/structs"
  14. "code.gitea.io/gitea/tests"
  15. "github.com/stretchr/testify/assert"
  16. )
  17. func TestAPILockIssue(t *testing.T) {
  18. defer tests.PrepareTestEnv(t)()
  19. t.Run("Lock", func(t *testing.T) {
  20. issueBefore := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1})
  21. assert.False(t, issueBefore.IsLocked)
  22. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: issueBefore.RepoID})
  23. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
  24. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/lock", owner.Name, repo.Name, issueBefore.Index)
  25. session := loginUser(t, owner.Name)
  26. token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteIssue)
  27. // check lock issue
  28. req := NewRequestWithJSON(t, "PUT", urlStr, api.LockIssueOption{Reason: "Spam"}).AddTokenAuth(token)
  29. MakeRequest(t, req, http.StatusNoContent)
  30. issueAfter := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1})
  31. assert.True(t, issueAfter.IsLocked)
  32. // check with other user
  33. user34 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 34})
  34. session34 := loginUser(t, user34.Name)
  35. token34 := getTokenForLoggedInUser(t, session34, auth_model.AccessTokenScopeAll)
  36. req = NewRequestWithJSON(t, "PUT", urlStr, api.LockIssueOption{Reason: "Spam"}).AddTokenAuth(token34)
  37. MakeRequest(t, req, http.StatusForbidden)
  38. })
  39. t.Run("Unlock", func(t *testing.T) {
  40. issueBefore := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1})
  41. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: issueBefore.RepoID})
  42. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID})
  43. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/lock", owner.Name, repo.Name, issueBefore.Index)
  44. session := loginUser(t, owner.Name)
  45. token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteIssue)
  46. lockReq := NewRequestWithJSON(t, "PUT", urlStr, api.LockIssueOption{Reason: "Spam"}).AddTokenAuth(token)
  47. MakeRequest(t, lockReq, http.StatusNoContent)
  48. // check unlock issue
  49. req := NewRequest(t, "DELETE", urlStr).AddTokenAuth(token)
  50. MakeRequest(t, req, http.StatusNoContent)
  51. issueAfter := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1})
  52. assert.False(t, issueAfter.IsLocked)
  53. // check with other user
  54. user34 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 34})
  55. session34 := loginUser(t, user34.Name)
  56. token34 := getTokenForLoggedInUser(t, session34, auth_model.AccessTokenScopeAll)
  57. req = NewRequest(t, "DELETE", urlStr).AddTokenAuth(token34)
  58. MakeRequest(t, req, http.StatusForbidden)
  59. })
  60. }