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.

api_issue_reaction_test.go 4.7KB

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