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.5KB

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