From c940114f2fb5ba55511b9c7d066594794c5f73b6 Mon Sep 17 00:00:00 2001 From: Sevki Date: Sat, 18 Feb 2017 20:53:56 +0100 Subject: [PATCH 01/15] Add requestreviewers this commit adds the RequestReviewers function as described here https://developer.github.com/v3/pulls/review_requests/#create-a-review-request --- github/pulls_reviews_request.go | 40 +++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 github/pulls_reviews_request.go diff --git a/github/pulls_reviews_request.go b/github/pulls_reviews_request.go new file mode 100644 index 00000000000..2e4f58c27e7 --- /dev/null +++ b/github/pulls_reviews_request.go @@ -0,0 +1,40 @@ +// Copyright 2017 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import "fmt" + +// PullRequestReview represents a review of a pull request. +type PullRequestReviewerRequest struct { + Reviewers []string `json:"reviewers,omitempty"` +} + +func (p PullRequestReviewerRequest) String() string { + return Stringify(p) +} + +// RequestReviewers submits a set of logins to be potential reviewers on a PR. +// +// GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#create-a-review-request +func (s *PullRequestsService) RequestReviewers(owner, repo string, number int, reviewers *PullRequestReviewerRequest) (*PullRequest, *Response, error) { + u := fmt.Sprintf("repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, number) + + req, err := s.client.NewRequest("POST", u, reviewers) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypePullRequestReviewsPreview) + + r := new(PullRequest) + resp, err := s.client.Do(req, r) + if err != nil { + return nil, resp, err + } + + return r, resp, nil +} \ No newline at end of file From eead94883617d487447053c4a31a254076da982f Mon Sep 17 00:00:00 2001 From: Sevki Date: Sat, 18 Feb 2017 21:03:24 +0100 Subject: [PATCH 02/15] add missing new line --- github/pulls_reviews_request.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/pulls_reviews_request.go b/github/pulls_reviews_request.go index 2e4f58c27e7..fc89b5c5f3b 100644 --- a/github/pulls_reviews_request.go +++ b/github/pulls_reviews_request.go @@ -37,4 +37,4 @@ func (s *PullRequestsService) RequestReviewers(owner, repo string, number int, r } return r, resp, nil -} \ No newline at end of file +} From 3d66e9c35d3bddde0385284828c87b65af3f28fe Mon Sep 17 00:00:00 2001 From: Sevki Date: Sat, 25 Feb 2017 23:08:09 +0100 Subject: [PATCH 03/15] request reviewers list and delete functions --- github/pulls_reviews_request.go | 64 ++++++++++++++++++++++++++------- 1 file changed, 52 insertions(+), 12 deletions(-) diff --git a/github/pulls_reviews_request.go b/github/pulls_reviews_request.go index fc89b5c5f3b..d1369999fa4 100644 --- a/github/pulls_reviews_request.go +++ b/github/pulls_reviews_request.go @@ -7,22 +7,17 @@ package github import "fmt" -// PullRequestReview represents a review of a pull request. -type PullRequestReviewerRequest struct { - Reviewers []string `json:"reviewers,omitempty"` -} - -func (p PullRequestReviewerRequest) String() string { - return Stringify(p) -} - // RequestReviewers submits a set of logins to be potential reviewers on a PR. // // GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#create-a-review-request -func (s *PullRequestsService) RequestReviewers(owner, repo string, number int, reviewers *PullRequestReviewerRequest) (*PullRequest, *Response, error) { +func (s *PullRequestsService) RequestReviewers(owner, repo string, number int, logins []string) (*PullRequest, *Response, error) { u := fmt.Sprintf("repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, number) - - req, err := s.client.NewRequest("POST", u, reviewers) + reviewers := struct { + Reviewers []string `json:"reviewers,omitempty"` + }{ + Reviewers: logins, + } + req, err := s.client.NewRequest("POST", u, &reviewers) if err != nil { return nil, nil, err } @@ -38,3 +33,48 @@ func (s *PullRequestsService) RequestReviewers(owner, repo string, number int, r return r, resp, nil } + +// ListReviewers lists users whose reviews have been requested on the specified pull request. +// +// GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#list-review-requests +func (s *PullRequestsService) ListReviewers(owner, repo string, number int) (*[]User, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/pulls/%d/requested_reviewers", owner, repo, number) + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypePullRequestReviewsPreview) + + var users []User + resp, err := s.client.Do(req, &users) + if err != nil { + return nil, resp, err + } + + return &users, resp, nil +} + +// RemoveReviewers removes the review request for the provided GitHub users for the specified pull request. +// +// GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#delete-a-review-request +func (s *PullRequestsService) RemoveReviewers(owner, repo string, number int, logins []string) (*Response, error) { + u := fmt.Sprintf("repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, number) + + reviewers := struct { + Reviewers []string `json:"reviewers,omitempty"` + }{ + Reviewers: logins, + } + req, err := s.client.NewRequest("DELETE", u, &reviewers) + if err != nil { + return nil, err + } + + // TODO: remove custom Accept header when this API fully launches + req.Header.Set("Accept", mediaTypePullRequestReviewsPreview) + + return s.client.Do(req, reviewers) +} From d122ebf4f21176dc0189c5059b414268389a9bde Mon Sep 17 00:00:00 2001 From: Sevki Date: Sun, 26 Feb 2017 11:20:44 +0100 Subject: [PATCH 04/15] add ctx --- github/pulls_reviews_request.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/github/pulls_reviews_request.go b/github/pulls_reviews_request.go index d1369999fa4..06cae54b672 100644 --- a/github/pulls_reviews_request.go +++ b/github/pulls_reviews_request.go @@ -5,12 +5,15 @@ package github -import "fmt" +import ( + "context" + "fmt" +) // RequestReviewers submits a set of logins to be potential reviewers on a PR. // // GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#create-a-review-request -func (s *PullRequestsService) RequestReviewers(owner, repo string, number int, logins []string) (*PullRequest, *Response, error) { +func (s *PullRequestsService) RequestReviewers(ctx context.Context, owner, repo string, number int, logins []string) (*PullRequest, *Response, error) { u := fmt.Sprintf("repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, number) reviewers := struct { Reviewers []string `json:"reviewers,omitempty"` @@ -26,7 +29,7 @@ func (s *PullRequestsService) RequestReviewers(owner, repo string, number int, l req.Header.Set("Accept", mediaTypePullRequestReviewsPreview) r := new(PullRequest) - resp, err := s.client.Do(req, r) + resp, err := s.client.Do(ctx, req, r) if err != nil { return nil, resp, err } @@ -37,7 +40,7 @@ func (s *PullRequestsService) RequestReviewers(owner, repo string, number int, l // ListReviewers lists users whose reviews have been requested on the specified pull request. // // GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#list-review-requests -func (s *PullRequestsService) ListReviewers(owner, repo string, number int) (*[]User, *Response, error) { +func (s *PullRequestsService) ListReviewers(ctx context.Context, owner, repo string, number int) (*[]User, *Response, error) { u := fmt.Sprintf("repos/%v/%v/pulls/%d/requested_reviewers", owner, repo, number) req, err := s.client.NewRequest("GET", u, nil) @@ -49,7 +52,7 @@ func (s *PullRequestsService) ListReviewers(owner, repo string, number int) (*[] req.Header.Set("Accept", mediaTypePullRequestReviewsPreview) var users []User - resp, err := s.client.Do(req, &users) + resp, err := s.client.Do(ctx, req, &users) if err != nil { return nil, resp, err } @@ -60,7 +63,7 @@ func (s *PullRequestsService) ListReviewers(owner, repo string, number int) (*[] // RemoveReviewers removes the review request for the provided GitHub users for the specified pull request. // // GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#delete-a-review-request -func (s *PullRequestsService) RemoveReviewers(owner, repo string, number int, logins []string) (*Response, error) { +func (s *PullRequestsService) RemoveReviewers(ctx context.Context, owner, repo string, number int, logins []string) (*Response, error) { u := fmt.Sprintf("repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, number) reviewers := struct { @@ -76,5 +79,5 @@ func (s *PullRequestsService) RemoveReviewers(owner, repo string, number int, lo // TODO: remove custom Accept header when this API fully launches req.Header.Set("Accept", mediaTypePullRequestReviewsPreview) - return s.client.Do(req, reviewers) + return s.client.Do(ctx, req, reviewers) } From 397748226ee1bee27f33cf528aa3010f7a82d2ee Mon Sep 17 00:00:00 2001 From: Sevki Date: Sun, 26 Feb 2017 14:22:28 +0100 Subject: [PATCH 05/15] add request reviewers tests --- github/pulls_reviews_request_test.go | 122 +++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 github/pulls_reviews_request_test.go diff --git a/github/pulls_reviews_request_test.go b/github/pulls_reviews_request_test.go new file mode 100644 index 00000000000..24862431c6b --- /dev/null +++ b/github/pulls_reviews_request_test.go @@ -0,0 +1,122 @@ +// Copyright 2017 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "context" + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "reflect" + "testing" +) + +func TestRequestReviewers(t *testing.T) { + setup() + defer teardown() + + type reviewers struct { + Reviewers []string `json:"reviewers,omitempty"` + } + have := reviewers{} + mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "POST") + testHeader(t, r, "Accept", mediaTypePullRequestReviewsPreview) + b, err := ioutil.ReadAll(r.Body) + if err != nil { + t.Errorf("TestReviewerRequest couldn't read request body: %v", err) + } + if err := json.Unmarshal(b, &have); err != nil { + return + } + }) + logins := []string{"octocat", "googlebot"} + + // This returns a PR, unmarshalling of which is tested elsewhere + _, _, err := client.PullRequests.RequestReviewers(context.Background(), "o", "r", 1, logins) + if err != nil { + t.Errorf("PullRequests.RequestReviewers returned error: %v", err) + } + + want := reviewers{ + Reviewers: logins, + } + if !reflect.DeepEqual(have, want) { + t.Errorf("PullRequests.ListReviews returned %+v, want %+v", have, want) + } +} + +func TestRemoveReviewers(t *testing.T) { + setup() + defer teardown() + + type reviewers struct { + Reviewers []string `json:"reviewers,omitempty"` + } + have := reviewers{} + mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "DELETE") + testHeader(t, r, "Accept", mediaTypePullRequestReviewsPreview) + b, err := ioutil.ReadAll(r.Body) + if err != nil { + t.Errorf("TestReviewerRequest couldn't read request body: %v", err) + } + if err := json.Unmarshal(b, &have); err != nil { + return + } + }) + logins := []string{"octocat", "googlebot"} + + // This returns a PR, unmarshalling of which is tested elsewhere + _, err := client.PullRequests.RemoveReviewers(context.Background(), "o", "r", 1, logins) + if err != nil { + t.Errorf("PullRequests.RequestReviewers returned error: %v", err) + } + + want := reviewers{ + Reviewers: logins, + } + if !reflect.DeepEqual(have, want) { + t.Errorf("PullRequests.ListReviews returned %+v, want %+v", have, want) + } +} + +func TestListReviewers(t *testing.T) { + setup() + defer teardown() + + sampleResponse := `[ + { + "login": "octocat", + "id": 1 + } +]` + + mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + testHeader(t, r, "Accept", mediaTypePullRequestReviewsPreview) + fmt.Fprintf(w, sampleResponse) + }) + + // This returns a PR, unmarshalling of which is tested elsewhere + have, _, err := client.PullRequests.ListReviewers(context.Background(), "o", "r", 1) + if err != nil { + t.Errorf("PullRequests.RequestReviewers returned error: %v", err) + } + _login := "octocat" + _id := 1 + + want := []User{ + User{ + Login: &_login, + ID: &_id, + }, + } + if !reflect.DeepEqual(have, &want) { + t.Errorf("PullRequests.ListReviews returned %+v, want %+v", have, want) + } +} \ No newline at end of file From df46fa8b83d5f32726e51dfae19903196d7cca91 Mon Sep 17 00:00:00 2001 From: Sevki Date: Sun, 26 Feb 2017 14:24:55 +0100 Subject: [PATCH 06/15] pulls_reviews_request -> pulls_reviewers --- github/{pulls_reviews_request.go => pulls_reviewers.go} | 0 github/{pulls_reviews_request_test.go => pulls_reviewers_test.go} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename github/{pulls_reviews_request.go => pulls_reviewers.go} (100%) rename github/{pulls_reviews_request_test.go => pulls_reviewers_test.go} (100%) diff --git a/github/pulls_reviews_request.go b/github/pulls_reviewers.go similarity index 100% rename from github/pulls_reviews_request.go rename to github/pulls_reviewers.go diff --git a/github/pulls_reviews_request_test.go b/github/pulls_reviewers_test.go similarity index 100% rename from github/pulls_reviews_request_test.go rename to github/pulls_reviewers_test.go From e9ab56b0ccb21e248231e2c4d3d5e4f8e8ca6376 Mon Sep 17 00:00:00 2001 From: Sevki Date: Sun, 26 Feb 2017 14:27:47 +0100 Subject: [PATCH 07/15] add missing new line at the end --- github/pulls_reviewers_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/pulls_reviewers_test.go b/github/pulls_reviewers_test.go index 24862431c6b..62e71464a3a 100644 --- a/github/pulls_reviewers_test.go +++ b/github/pulls_reviewers_test.go @@ -119,4 +119,4 @@ func TestListReviewers(t *testing.T) { if !reflect.DeepEqual(have, &want) { t.Errorf("PullRequests.ListReviews returned %+v, want %+v", have, want) } -} \ No newline at end of file +} From 4a5d8979b20b312536c5afa1b5edee4e93a9a2c4 Mon Sep 17 00:00:00 2001 From: Sevki Date: Sun, 26 Feb 2017 14:32:58 +0100 Subject: [PATCH 08/15] simplify code according to gofmt --- github/pulls_reviewers_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/pulls_reviewers_test.go b/github/pulls_reviewers_test.go index 62e71464a3a..75b266bb070 100644 --- a/github/pulls_reviewers_test.go +++ b/github/pulls_reviewers_test.go @@ -111,7 +111,7 @@ func TestListReviewers(t *testing.T) { _id := 1 want := []User{ - User{ + { Login: &_login, ID: &_id, }, From e1d953453f6f84ab07af63678fe891435f29f443 Mon Sep 17 00:00:00 2001 From: Sevki Date: Sun, 26 Feb 2017 15:05:38 +0100 Subject: [PATCH 09/15] fix comments and formatting --- github/pulls_reviewers_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/github/pulls_reviewers_test.go b/github/pulls_reviewers_test.go index 75b266bb070..f5ded90c2b5 100644 --- a/github/pulls_reviewers_test.go +++ b/github/pulls_reviewers_test.go @@ -34,6 +34,7 @@ func TestRequestReviewers(t *testing.T) { return } }) + logins := []string{"octocat", "googlebot"} // This returns a PR, unmarshalling of which is tested elsewhere @@ -69,9 +70,9 @@ func TestRemoveReviewers(t *testing.T) { return } }) + logins := []string{"octocat", "googlebot"} - // This returns a PR, unmarshalling of which is tested elsewhere _, err := client.PullRequests.RemoveReviewers(context.Background(), "o", "r", 1, logins) if err != nil { t.Errorf("PullRequests.RequestReviewers returned error: %v", err) From 7540355ceed76bd7d4753b4484c3d4e5fe965a79 Mon Sep 17 00:00:00 2001 From: Sevki Date: Mon, 27 Feb 2017 23:07:35 +0100 Subject: [PATCH 10/15] fix PR issues - changed have to reviewers, to do that I have declared a reviewersRequest type but it's scope is limited to the test package - checking requests are now performed inside the mux functions --- github/pulls_reviewers.go | 2 +- github/pulls_reviewers_test.go | 70 ++++++++++++++++------------------ 2 files changed, 34 insertions(+), 38 deletions(-) diff --git a/github/pulls_reviewers.go b/github/pulls_reviewers.go index 06cae54b672..9a7adf83f9a 100644 --- a/github/pulls_reviewers.go +++ b/github/pulls_reviewers.go @@ -10,7 +10,7 @@ import ( "fmt" ) -// RequestReviewers submits a set of logins to be potential reviewers on a PR. +// RequestReviewers creates a review request for the provided GitHub users for the specified pull request. // // GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#create-a-review-request func (s *PullRequestsService) RequestReviewers(ctx context.Context, owner, repo string, number int, logins []string) (*PullRequest, *Response, error) { diff --git a/github/pulls_reviewers_test.go b/github/pulls_reviewers_test.go index f5ded90c2b5..423d1cc5d84 100644 --- a/github/pulls_reviewers_test.go +++ b/github/pulls_reviewers_test.go @@ -15,14 +15,16 @@ import ( "testing" ) +type reviewersRequest struct { + Reviewers []string `json:"reviewers,omitempty"` +} + func TestRequestReviewers(t *testing.T) { setup() defer teardown() - type reviewers struct { - Reviewers []string `json:"reviewers,omitempty"` - } - have := reviewers{} + logins := []string{"octocat", "googlebot"} + mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "POST") testHeader(t, r, "Accept", mediaTypePullRequestReviewsPreview) @@ -30,35 +32,31 @@ func TestRequestReviewers(t *testing.T) { if err != nil { t.Errorf("TestReviewerRequest couldn't read request body: %v", err) } - if err := json.Unmarshal(b, &have); err != nil { + + reviewers := reviewersRequest{} + if err := json.Unmarshal(b, &reviewers); err != nil { return } + want := reviewersRequest{ + Reviewers: logins, + } + if !reflect.DeepEqual(reviewers, want) { + t.Errorf("PullRequests.RequestReviewers returned %+v, want %+v", reviewers, want) + } }) - logins := []string{"octocat", "googlebot"} - // This returns a PR, unmarshalling of which is tested elsewhere _, _, err := client.PullRequests.RequestReviewers(context.Background(), "o", "r", 1, logins) if err != nil { t.Errorf("PullRequests.RequestReviewers returned error: %v", err) } - - want := reviewers{ - Reviewers: logins, - } - if !reflect.DeepEqual(have, want) { - t.Errorf("PullRequests.ListReviews returned %+v, want %+v", have, want) - } } func TestRemoveReviewers(t *testing.T) { setup() defer teardown() + logins := []string{"octocat", "googlebot"} - type reviewers struct { - Reviewers []string `json:"reviewers,omitempty"` - } - have := reviewers{} mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "DELETE") testHeader(t, r, "Accept", mediaTypePullRequestReviewsPreview) @@ -66,24 +64,25 @@ func TestRemoveReviewers(t *testing.T) { if err != nil { t.Errorf("TestReviewerRequest couldn't read request body: %v", err) } - if err := json.Unmarshal(b, &have); err != nil { + + reviewers := reviewersRequest{} + if err := json.Unmarshal(b, &reviewers); err != nil { return } - }) - logins := []string{"octocat", "googlebot"} + want := reviewersRequest{ + Reviewers: logins, + } + if !reflect.DeepEqual(reviewers, want) { + t.Errorf("PullRequests.RemoveReviewers returned %+v, want %+v", reviewers, want) + } + }) _, err := client.PullRequests.RemoveReviewers(context.Background(), "o", "r", 1, logins) if err != nil { t.Errorf("PullRequests.RequestReviewers returned error: %v", err) } - want := reviewers{ - Reviewers: logins, - } - if !reflect.DeepEqual(have, want) { - t.Errorf("PullRequests.ListReviews returned %+v, want %+v", have, want) - } } func TestListReviewers(t *testing.T) { @@ -103,21 +102,18 @@ func TestListReviewers(t *testing.T) { fmt.Fprintf(w, sampleResponse) }) - // This returns a PR, unmarshalling of which is tested elsewhere - have, _, err := client.PullRequests.ListReviewers(context.Background(), "o", "r", 1) + reviewers, _, err := client.PullRequests.ListReviewers(context.Background(), "o", "r", 1) if err != nil { - t.Errorf("PullRequests.RequestReviewers returned error: %v", err) + t.Errorf("PullRequests.ListReviewers error: %v", err) } - _login := "octocat" - _id := 1 - want := []User{ + want := &[]User{ { - Login: &_login, - ID: &_id, + Login: String("octocat"), + ID: Int(1), }, } - if !reflect.DeepEqual(have, &want) { - t.Errorf("PullRequests.ListReviews returned %+v, want %+v", have, want) + if !reflect.DeepEqual(reviewers, want) { + t.Errorf("PullRequests.ListReviews returned %+v, want %+v", reviewers, want) } } From 56eee95a1563ec3b93a595fb1fa55e3113877c7c Mon Sep 17 00:00:00 2001 From: Sevki Date: Tue, 28 Feb 2017 20:04:17 +0100 Subject: [PATCH 11/15] another round of PR fixes - use testBody() - inline logins - fix formatting --- github/pulls_reviewers.go | 1 + github/pulls_reviewers_test.go | 61 ++++++---------------------------- 2 files changed, 11 insertions(+), 51 deletions(-) diff --git a/github/pulls_reviewers.go b/github/pulls_reviewers.go index 9a7adf83f9a..9e18d57c05b 100644 --- a/github/pulls_reviewers.go +++ b/github/pulls_reviewers.go @@ -15,6 +15,7 @@ import ( // GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#create-a-review-request func (s *PullRequestsService) RequestReviewers(ctx context.Context, owner, repo string, number int, logins []string) (*PullRequest, *Response, error) { u := fmt.Sprintf("repos/%s/%s/pulls/%d/requested_reviewers", owner, repo, number) + reviewers := struct { Reviewers []string `json:"reviewers,omitempty"` }{ diff --git a/github/pulls_reviewers_test.go b/github/pulls_reviewers_test.go index 423d1cc5d84..0a3ab421509 100644 --- a/github/pulls_reviewers_test.go +++ b/github/pulls_reviewers_test.go @@ -7,99 +7,58 @@ package github import ( "context" - "encoding/json" "fmt" - "io/ioutil" "net/http" "reflect" "testing" ) -type reviewersRequest struct { - Reviewers []string `json:"reviewers,omitempty"` -} - func TestRequestReviewers(t *testing.T) { setup() defer teardown() - logins := []string{"octocat", "googlebot"} - mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "POST") testHeader(t, r, "Accept", mediaTypePullRequestReviewsPreview) - b, err := ioutil.ReadAll(r.Body) - if err != nil { - t.Errorf("TestReviewerRequest couldn't read request body: %v", err) - } - - reviewers := reviewersRequest{} - if err := json.Unmarshal(b, &reviewers); err != nil { - return - } - want := reviewersRequest{ - Reviewers: logins, - } - if !reflect.DeepEqual(reviewers, want) { - t.Errorf("PullRequests.RequestReviewers returned %+v, want %+v", reviewers, want) - } + testBody(t, r, `{"reviewers":["octocat","googlebot"]}`) + fmt.Fprint(w, `{"number":1}`) }) // This returns a PR, unmarshalling of which is tested elsewhere - _, _, err := client.PullRequests.RequestReviewers(context.Background(), "o", "r", 1, logins) + pull, _, err := client.PullRequests.RequestReviewers(context.Background(), "o", "r", 1, []string{"octocat", "googlebot"}) if err != nil { t.Errorf("PullRequests.RequestReviewers returned error: %v", err) } + want := &PullRequest{Number: Int(1)} + if !reflect.DeepEqual(pull, want) { + t.Errorf("PullRequests.RequestReviewers returned %+v, want %+v", pull, want) + } } func TestRemoveReviewers(t *testing.T) { setup() defer teardown() - logins := []string{"octocat", "googlebot"} mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "DELETE") testHeader(t, r, "Accept", mediaTypePullRequestReviewsPreview) - b, err := ioutil.ReadAll(r.Body) - if err != nil { - t.Errorf("TestReviewerRequest couldn't read request body: %v", err) - } - - reviewers := reviewersRequest{} - if err := json.Unmarshal(b, &reviewers); err != nil { - return - } - - want := reviewersRequest{ - Reviewers: logins, - } - if !reflect.DeepEqual(reviewers, want) { - t.Errorf("PullRequests.RemoveReviewers returned %+v, want %+v", reviewers, want) - } + testBody(t, r, `{"reviewers":["octocat","googlebot"]}`) }) - _, err := client.PullRequests.RemoveReviewers(context.Background(), "o", "r", 1, logins) + _, err := client.PullRequests.RemoveReviewers(context.Background(), "o", "r", 1, []string{"octocat", "googlebot"}) if err != nil { t.Errorf("PullRequests.RequestReviewers returned error: %v", err) } - } func TestListReviewers(t *testing.T) { setup() defer teardown() - sampleResponse := `[ - { - "login": "octocat", - "id": 1 - } -]` - mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "GET") testHeader(t, r, "Accept", mediaTypePullRequestReviewsPreview) - fmt.Fprintf(w, sampleResponse) + fmt.Fprint(w, `[{"login": "octocat","id": 1 }]`) }) reviewers, _, err := client.PullRequests.ListReviewers(context.Background(), "o", "r", 1) From 4f9f8e34f3ebf9421d6424d588fb0a71929ffd25 Mon Sep 17 00:00:00 2001 From: Sevki Date: Tue, 28 Feb 2017 20:53:47 +0100 Subject: [PATCH 12/15] fix PR issues - fix some typos - add new line to test body --- github/pulls_reviewers_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/github/pulls_reviewers_test.go b/github/pulls_reviewers_test.go index 0a3ab421509..9f7fa778c39 100644 --- a/github/pulls_reviewers_test.go +++ b/github/pulls_reviewers_test.go @@ -20,7 +20,7 @@ func TestRequestReviewers(t *testing.T) { mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "POST") testHeader(t, r, "Accept", mediaTypePullRequestReviewsPreview) - testBody(t, r, `{"reviewers":["octocat","googlebot"]}`) + testBody(t, r, `{"reviewers":["octocat","googlebot"]}`+"\n") fmt.Fprint(w, `{"number":1}`) }) @@ -42,12 +42,12 @@ func TestRemoveReviewers(t *testing.T) { mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "DELETE") testHeader(t, r, "Accept", mediaTypePullRequestReviewsPreview) - testBody(t, r, `{"reviewers":["octocat","googlebot"]}`) + testBody(t, r, `{"reviewers":["octocat","googlebot"]}`+"\n") }) _, err := client.PullRequests.RemoveReviewers(context.Background(), "o", "r", 1, []string{"octocat", "googlebot"}) if err != nil { - t.Errorf("PullRequests.RequestReviewers returned error: %v", err) + t.Errorf("PullRequests.RemoveReviewers returned error: %v", err) } } @@ -58,12 +58,12 @@ func TestListReviewers(t *testing.T) { mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "GET") testHeader(t, r, "Accept", mediaTypePullRequestReviewsPreview) - fmt.Fprint(w, `[{"login": "octocat","id": 1 }]`) + fmt.Fprint(w, `[{"login": "octocat","id":1}]`) }) reviewers, _, err := client.PullRequests.ListReviewers(context.Background(), "o", "r", 1) if err != nil { - t.Errorf("PullRequests.ListReviewers error: %v", err) + t.Errorf("PullRequests.ListReviewers returned error: %v", err) } want := &[]User{ @@ -73,6 +73,6 @@ func TestListReviewers(t *testing.T) { }, } if !reflect.DeepEqual(reviewers, want) { - t.Errorf("PullRequests.ListReviews returned %+v, want %+v", reviewers, want) + t.Errorf("PullRequests.ListReviewers returned %+v, want %+v", reviewers, want) } } From b74bcf813783289f65458dc7ff75026f3567613d Mon Sep 17 00:00:00 2001 From: Sevki Date: Tue, 28 Feb 2017 20:59:47 +0100 Subject: [PATCH 13/15] make spaces consistent --- github/pulls_reviewers_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/pulls_reviewers_test.go b/github/pulls_reviewers_test.go index 9f7fa778c39..0d7405f2579 100644 --- a/github/pulls_reviewers_test.go +++ b/github/pulls_reviewers_test.go @@ -58,7 +58,7 @@ func TestListReviewers(t *testing.T) { mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, "GET") testHeader(t, r, "Accept", mediaTypePullRequestReviewsPreview) - fmt.Fprint(w, `[{"login": "octocat","id":1}]`) + fmt.Fprint(w, `[{"login":"octocat","id":1}]`) }) reviewers, _, err := client.PullRequests.ListReviewers(context.Background(), "o", "r", 1) From 08a381308a23c9cdffc31b5a589774cc76322d22 Mon Sep 17 00:00:00 2001 From: Sevki Date: Wed, 1 Mar 2017 10:14:46 +0100 Subject: [PATCH 14/15] fix pointer issues --- github/pulls_reviewers.go | 6 +++--- github/pulls_reviewers_test.go | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/github/pulls_reviewers.go b/github/pulls_reviewers.go index 9e18d57c05b..efa3888964a 100644 --- a/github/pulls_reviewers.go +++ b/github/pulls_reviewers.go @@ -41,7 +41,7 @@ func (s *PullRequestsService) RequestReviewers(ctx context.Context, owner, repo // ListReviewers lists users whose reviews have been requested on the specified pull request. // // GitHub API docs: https://developer.github.com/v3/pulls/review_requests/#list-review-requests -func (s *PullRequestsService) ListReviewers(ctx context.Context, owner, repo string, number int) (*[]User, *Response, error) { +func (s *PullRequestsService) ListReviewers(ctx context.Context, owner, repo string, number int) ([]*User, *Response, error) { u := fmt.Sprintf("repos/%v/%v/pulls/%d/requested_reviewers", owner, repo, number) req, err := s.client.NewRequest("GET", u, nil) @@ -52,13 +52,13 @@ func (s *PullRequestsService) ListReviewers(ctx context.Context, owner, repo str // TODO: remove custom Accept header when this API fully launches req.Header.Set("Accept", mediaTypePullRequestReviewsPreview) - var users []User + var users []*User resp, err := s.client.Do(ctx, req, &users) if err != nil { return nil, resp, err } - return &users, resp, nil + return users, resp, nil } // RemoveReviewers removes the review request for the provided GitHub users for the specified pull request. diff --git a/github/pulls_reviewers_test.go b/github/pulls_reviewers_test.go index 0d7405f2579..e7065d3d0e3 100644 --- a/github/pulls_reviewers_test.go +++ b/github/pulls_reviewers_test.go @@ -66,8 +66,8 @@ func TestListReviewers(t *testing.T) { t.Errorf("PullRequests.ListReviewers returned error: %v", err) } - want := &[]User{ - { + want := []*User{ + &User{ Login: String("octocat"), ID: Int(1), }, From 9ec6c3da8b79446a4c02738d25d7b99a60928f6c Mon Sep 17 00:00:00 2001 From: Sevki Date: Wed, 1 Mar 2017 20:11:42 +0100 Subject: [PATCH 15/15] gofmt simplyify --- github/pulls_reviewers_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github/pulls_reviewers_test.go b/github/pulls_reviewers_test.go index e7065d3d0e3..36b461c5662 100644 --- a/github/pulls_reviewers_test.go +++ b/github/pulls_reviewers_test.go @@ -67,7 +67,7 @@ func TestListReviewers(t *testing.T) { } want := []*User{ - &User{ + { Login: String("octocat"), ID: Int(1), },