diff --git a/gitea/pull_review.go b/gitea/pull_review.go index 9fa0ec7..e8545d5 100644 --- a/gitea/pull_review.go +++ b/gitea/pull_review.go @@ -97,6 +97,11 @@ type SubmitPullReviewOptions struct { Body string `json:"body"` } +// DismissPullReviewOptions are options to dismiss a pull review +type DismissPullReviewOptions struct { + Message string `json:"message"` +} + // ListPullReviewsOptions options for listing PullReviews type ListPullReviewsOptions struct { ListOptions @@ -221,3 +226,31 @@ func (c *Client) SubmitPullReview(owner, repo string, index, id int64, opt Submi jsonHeader, bytes.NewReader(body), r) return r, resp, err } + +// DismissPullReview dismiss a review for a pull request +func (c *Client) DismissPullReview(owner, repo string, index, id int64, opt DismissPullReviewOptions) (*Response, error) { + if err := c.checkServerVersionGreaterThanOrEqual(version1_14_0); err != nil { + return nil, err + } + body, err := json.Marshal(&opt) + if err != nil { + return nil, err + } + + _, resp, err := c.getResponse("POST", + fmt.Sprintf("/repos/%s/%s/pulls/%d/reviews/%d/dismissals", owner, repo, index, id), + jsonHeader, bytes.NewReader(body)) + return resp, err +} + +// UnDismissPullReview cancel to dismiss a review for a pull request +func (c *Client) UnDismissPullReview(owner, repo string, index, id int64) (*Response, error) { + if err := c.checkServerVersionGreaterThanOrEqual(version1_14_0); err != nil { + return nil, err + } + + _, resp, err := c.getResponse("POST", + fmt.Sprintf("/repos/%s/%s/pulls/%d/reviews/%d/undismissals", owner, repo, index, id), + jsonHeader, nil) + return resp, err +} diff --git a/gitea/pull_review_test.go b/gitea/pull_review_test.go index 13e6a09..988fa74 100644 --- a/gitea/pull_review_test.go +++ b/gitea/pull_review_test.go @@ -89,7 +89,7 @@ func TestPullReview(t *testing.T) { // SubmitPullReview c.SetSudo("") - r4, _, err := c.CreatePullReview(repo.Owner.UserName, repo.Name, pull.Index, CreatePullReviewOptions{ + r4, resp, err := c.CreatePullReview(repo.Owner.UserName, repo.Name, pull.Index, CreatePullReviewOptions{ Body: "...", Comments: []CreatePullReviewComment{{ Path: "WOW-file", @@ -99,6 +99,7 @@ func TestPullReview(t *testing.T) { }, }) assert.NoError(t, err) + assert.NotNil(t, resp) r5, _, err := c.CreatePullReview(repo.Owner.UserName, repo.Name, pull.Index, CreatePullReviewOptions{ Body: "...", Comments: []CreatePullReviewComment{{ @@ -133,6 +134,27 @@ func TestPullReview(t *testing.T) { } } + r, _, err = c.GetPullReview(repo.Owner.UserName, repo.Name, pull.Index, r.ID) + assert.NoError(t, err) + assert.False(t, r.Dismissed) + + // DismissPullReview + resp, err = c.DismissPullReview(repo.Owner.UserName, repo.Name, pull.Index, r.ID, DismissPullReviewOptions{Message: "stale"}) + assert.NoError(t, err) + if assert.NotNil(t, resp) { + assert.EqualValues(t, 200, resp.StatusCode) + } + r, _, _ = c.GetPullReview(repo.Owner.UserName, repo.Name, pull.Index, r.ID) + assert.True(t, r.Dismissed) + + // UnDismissPullReview + resp, err = c.UnDismissPullReview(repo.Owner.UserName, repo.Name, pull.Index, r.ID) + assert.NoError(t, err) + if assert.NotNil(t, resp) { + assert.EqualValues(t, 200, resp.StatusCode) + } + r, _, _ = c.GetPullReview(repo.Owner.UserName, repo.Name, pull.Index, r.ID) + assert.False(t, r.Dismissed) } func preparePullReviewTest(t *testing.T, c *Client, repoName string) (*Repository, *PullRequest, *User, *User, bool) {