github.com/google/go-github/v33@v33.0.0/github/pulls_reviewers_test.go (about) 1 // Copyright 2017 The go-github AUTHORS. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 package github 7 8 import ( 9 "context" 10 "fmt" 11 "net/http" 12 "reflect" 13 "testing" 14 "time" 15 ) 16 17 func TestRequestReviewers(t *testing.T) { 18 client, mux, _, teardown := setup() 19 defer teardown() 20 21 mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { 22 testMethod(t, r, "POST") 23 testBody(t, r, `{"reviewers":["octocat","googlebot"],"team_reviewers":["justice-league","injustice-league"]}`+"\n") 24 fmt.Fprint(w, `{"number":1}`) 25 }) 26 27 // This returns a PR, unmarshalling of which is tested elsewhere 28 ctx := context.Background() 29 got, _, err := client.PullRequests.RequestReviewers(ctx, "o", "r", 1, ReviewersRequest{Reviewers: []string{"octocat", "googlebot"}, TeamReviewers: []string{"justice-league", "injustice-league"}}) 30 if err != nil { 31 t.Errorf("PullRequests.RequestReviewers returned error: %v", err) 32 } 33 want := &PullRequest{Number: Int(1)} 34 if !reflect.DeepEqual(got, want) { 35 t.Errorf("PullRequests.RequestReviewers returned %+v, want %+v", got, want) 36 } 37 38 // Test s.client.NewRequest failure 39 client.BaseURL.Path = "" 40 got, resp, err := client.PullRequests.RequestReviewers(ctx, "o", "r", 1, ReviewersRequest{Reviewers: []string{"octocat", "googlebot"}, TeamReviewers: []string{"justice-league", "injustice-league"}}) 41 if got != nil { 42 t.Errorf("client.BaseURL.Path='' RequestReviewers = %#v, want nil", got) 43 } 44 if resp != nil { 45 t.Errorf("client.BaseURL.Path='' RequestReviewers resp = %#v, want nil", resp) 46 } 47 if err == nil { 48 t.Error("client.BaseURL.Path='' RequestReviewers err = nil, want error") 49 } 50 51 // Test s.client.Do failure 52 client.BaseURL.Path = "/api-v3/" 53 client.rateLimits[0].Reset.Time = time.Now().Add(10 * time.Minute) 54 got, resp, err = client.PullRequests.RequestReviewers(ctx, "o", "r", 1, ReviewersRequest{Reviewers: []string{"octocat", "googlebot"}, TeamReviewers: []string{"justice-league", "injustice-league"}}) 55 if got != nil { 56 t.Errorf("rate.Reset.Time > now RequestReviewers = %#v, want nil", got) 57 } 58 if want := http.StatusForbidden; resp == nil || resp.Response.StatusCode != want { 59 t.Errorf("rate.Reset.Time > now RequestReviewers resp = %#v, want StatusCode=%v", resp.Response, want) 60 } 61 if err == nil { 62 t.Error("rate.Reset.Time > now RequestReviewers err = nil, want error") 63 } 64 } 65 66 func TestRemoveReviewers(t *testing.T) { 67 client, mux, _, teardown := setup() 68 defer teardown() 69 70 mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { 71 testMethod(t, r, "DELETE") 72 testBody(t, r, `{"reviewers":["octocat","googlebot"],"team_reviewers":["justice-league"]}`+"\n") 73 }) 74 75 ctx := context.Background() 76 _, err := client.PullRequests.RemoveReviewers(ctx, "o", "r", 1, ReviewersRequest{Reviewers: []string{"octocat", "googlebot"}, TeamReviewers: []string{"justice-league"}}) 77 if err != nil { 78 t.Errorf("PullRequests.RemoveReviewers returned error: %v", err) 79 } 80 81 // Test s.client.NewRequest failure 82 client.BaseURL.Path = "" 83 resp, err := client.PullRequests.RemoveReviewers(ctx, "o", "r", 1, ReviewersRequest{Reviewers: []string{"octocat", "googlebot"}, TeamReviewers: []string{"justice-league"}}) 84 if resp != nil { 85 t.Errorf("client.BaseURL.Path='' RemoveReviewers resp = %#v, want nil", resp) 86 } 87 if err == nil { 88 t.Error("client.BaseURL.Path='' RemoveReviewers err = nil, want error") 89 } 90 } 91 92 func TestListReviewers(t *testing.T) { 93 client, mux, _, teardown := setup() 94 defer teardown() 95 96 mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { 97 testMethod(t, r, "GET") 98 fmt.Fprint(w, `{"users":[{"login":"octocat","id":1}],"teams":[{"id":1,"name":"Justice League"}]}`) 99 }) 100 101 ctx := context.Background() 102 got, _, err := client.PullRequests.ListReviewers(ctx, "o", "r", 1, nil) 103 if err != nil { 104 t.Errorf("PullRequests.ListReviewers returned error: %v", err) 105 } 106 107 want := &Reviewers{ 108 Users: []*User{ 109 { 110 Login: String("octocat"), 111 ID: Int64(1), 112 }, 113 }, 114 Teams: []*Team{ 115 { 116 ID: Int64(1), 117 Name: String("Justice League"), 118 }, 119 }, 120 } 121 if !reflect.DeepEqual(got, want) { 122 t.Errorf("PullRequests.ListReviewers returned %+v, want %+v", got, want) 123 } 124 125 // Test s.client.NewRequest failure 126 client.BaseURL.Path = "" 127 got, resp, err := client.PullRequests.ListReviewers(ctx, "o", "r", 1, nil) 128 if got != nil { 129 t.Errorf("client.BaseURL.Path='' ListReviewers = %#v, want nil", got) 130 } 131 if resp != nil { 132 t.Errorf("client.BaseURL.Path='' ListReviewers resp = %#v, want nil", resp) 133 } 134 if err == nil { 135 t.Error("client.BaseURL.Path='' ListReviewers err = nil, want error") 136 } 137 138 // Test s.client.Do failure 139 client.BaseURL.Path = "/api-v3/" 140 client.rateLimits[0].Reset.Time = time.Now().Add(10 * time.Minute) 141 got, resp, err = client.PullRequests.ListReviewers(ctx, "o", "r", 1, nil) 142 if got != nil { 143 t.Errorf("rate.Reset.Time > now ListReviewers = %#v, want nil", got) 144 } 145 if want := http.StatusForbidden; resp == nil || resp.Response.StatusCode != want { 146 t.Errorf("rate.Reset.Time > now ListReviewers resp = %#v, want StatusCode=%v", resp.Response, want) 147 } 148 if err == nil { 149 t.Error("rate.Reset.Time > now ListReviewers err = nil, want error") 150 } 151 } 152 153 func TestListReviewers_withOptions(t *testing.T) { 154 client, mux, _, teardown := setup() 155 defer teardown() 156 157 mux.HandleFunc("/repos/o/r/pulls/1/requested_reviewers", func(w http.ResponseWriter, r *http.Request) { 158 testMethod(t, r, "GET") 159 testFormValues(t, r, values{ 160 "page": "2", 161 }) 162 fmt.Fprint(w, `{}`) 163 }) 164 165 _, _, err := client.PullRequests.ListReviewers(context.Background(), "o", "r", 1, &ListOptions{Page: 2}) 166 if err != nil { 167 t.Errorf("PullRequests.ListReviewers returned error: %v", err) 168 } 169 170 // Test addOptions failure 171 _, _, err = client.PullRequests.ListReviewers(context.Background(), "\n", "\n", 1, &ListOptions{Page: 2}) 172 if err == nil { 173 t.Error("bad options ListReviewers err = nil, want error") 174 } 175 176 }