您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

api_issue_reaction_test.go 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. // Copyright 2019 The Gitea Authors. 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 integrations
  5. import (
  6. "fmt"
  7. "net/http"
  8. "testing"
  9. "time"
  10. "code.gitea.io/gitea/models"
  11. "code.gitea.io/gitea/models/unittest"
  12. user_model "code.gitea.io/gitea/models/user"
  13. "code.gitea.io/gitea/modules/convert"
  14. api "code.gitea.io/gitea/modules/structs"
  15. "github.com/stretchr/testify/assert"
  16. )
  17. func TestAPIIssuesReactions(t *testing.T) {
  18. defer prepareTestEnv(t)()
  19. issue := unittest.AssertExistsAndLoadBean(t, &models.Issue{ID: 1}).(*models.Issue)
  20. _ = issue.LoadRepo()
  21. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: issue.Repo.OwnerID}).(*user_model.User)
  22. session := loginUser(t, owner.Name)
  23. token := getTokenForLoggedInUser(t, session)
  24. user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
  25. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues/%d/reactions?token=%s",
  26. owner.Name, issue.Repo.Name, issue.Index, token)
  27. //Try to add not allowed reaction
  28. req := NewRequestWithJSON(t, "POST", urlStr, &api.EditReactionOption{
  29. Reaction: "wrong",
  30. })
  31. session.MakeRequest(t, req, http.StatusForbidden)
  32. //Delete not allowed reaction
  33. req = NewRequestWithJSON(t, "DELETE", urlStr, &api.EditReactionOption{
  34. Reaction: "zzz",
  35. })
  36. session.MakeRequest(t, req, http.StatusOK)
  37. //Add allowed reaction
  38. req = NewRequestWithJSON(t, "POST", urlStr, &api.EditReactionOption{
  39. Reaction: "rocket",
  40. })
  41. resp := session.MakeRequest(t, req, http.StatusCreated)
  42. var apiNewReaction api.Reaction
  43. DecodeJSON(t, resp, &apiNewReaction)
  44. //Add existing reaction
  45. session.MakeRequest(t, req, http.StatusForbidden)
  46. //Get end result of reaction list of issue #1
  47. req = NewRequestf(t, "GET", urlStr)
  48. resp = session.MakeRequest(t, req, http.StatusOK)
  49. var apiReactions []*api.Reaction
  50. DecodeJSON(t, resp, &apiReactions)
  51. expectResponse := make(map[int]api.Reaction)
  52. expectResponse[0] = api.Reaction{
  53. User: convert.ToUser(user2, user2),
  54. Reaction: "eyes",
  55. Created: time.Unix(1573248003, 0),
  56. }
  57. expectResponse[1] = apiNewReaction
  58. assert.Len(t, apiReactions, 2)
  59. for i, r := range apiReactions {
  60. assert.Equal(t, expectResponse[i].Reaction, r.Reaction)
  61. assert.Equal(t, expectResponse[i].Created.Unix(), r.Created.Unix())
  62. assert.Equal(t, expectResponse[i].User.ID, r.User.ID)
  63. }
  64. }
  65. func TestAPICommentReactions(t *testing.T) {
  66. defer prepareTestEnv(t)()
  67. comment := unittest.AssertExistsAndLoadBean(t, &models.Comment{ID: 2}).(*models.Comment)
  68. _ = comment.LoadIssue()
  69. issue := comment.Issue
  70. _ = issue.LoadRepo()
  71. owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: issue.Repo.OwnerID}).(*user_model.User)
  72. session := loginUser(t, owner.Name)
  73. token := getTokenForLoggedInUser(t, session)
  74. user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}).(*user_model.User)
  75. user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
  76. urlStr := fmt.Sprintf("/api/v1/repos/%s/%s/issues/comments/%d/reactions?token=%s",
  77. owner.Name, issue.Repo.Name, comment.ID, token)
  78. //Try to add not allowed reaction
  79. req := NewRequestWithJSON(t, "POST", urlStr, &api.EditReactionOption{
  80. Reaction: "wrong",
  81. })
  82. session.MakeRequest(t, req, http.StatusForbidden)
  83. //Delete none existing reaction
  84. req = NewRequestWithJSON(t, "DELETE", urlStr, &api.EditReactionOption{
  85. Reaction: "eyes",
  86. })
  87. session.MakeRequest(t, req, http.StatusOK)
  88. //Add allowed reaction
  89. req = NewRequestWithJSON(t, "POST", urlStr, &api.EditReactionOption{
  90. Reaction: "+1",
  91. })
  92. resp := session.MakeRequest(t, req, http.StatusCreated)
  93. var apiNewReaction api.Reaction
  94. DecodeJSON(t, resp, &apiNewReaction)
  95. //Add existing reaction
  96. session.MakeRequest(t, req, http.StatusForbidden)
  97. //Get end result of reaction list of issue #1
  98. req = NewRequestf(t, "GET", urlStr)
  99. resp = session.MakeRequest(t, req, http.StatusOK)
  100. var apiReactions []*api.Reaction
  101. DecodeJSON(t, resp, &apiReactions)
  102. expectResponse := make(map[int]api.Reaction)
  103. expectResponse[0] = api.Reaction{
  104. User: convert.ToUser(user2, user2),
  105. Reaction: "laugh",
  106. Created: time.Unix(1573248004, 0),
  107. }
  108. expectResponse[1] = api.Reaction{
  109. User: convert.ToUser(user1, user1),
  110. Reaction: "laugh",
  111. Created: time.Unix(1573248005, 0),
  112. }
  113. expectResponse[2] = apiNewReaction
  114. assert.Len(t, apiReactions, 3)
  115. for i, r := range apiReactions {
  116. assert.Equal(t, expectResponse[i].Reaction, r.Reaction)
  117. assert.Equal(t, expectResponse[i].Created.Unix(), r.Created.Unix())
  118. assert.Equal(t, expectResponse[i].User.ID, r.User.ID)
  119. }
  120. }