1// Copyright 2016 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 6package github 7 8import ( 9 "context" 10 "encoding/json" 11 "fmt" 12 "net/http" 13 "reflect" 14 "testing" 15) 16 17func TestPullRequestsService_ListReviews(t *testing.T) { 18 client, mux, _, teardown := setup() 19 defer teardown() 20 21 mux.HandleFunc("/repos/o/r/pulls/1/reviews", func(w http.ResponseWriter, r *http.Request) { 22 testMethod(t, r, "GET") 23 testFormValues(t, r, values{ 24 "page": "2", 25 }) 26 fmt.Fprint(w, `[{"id":1},{"id":2}]`) 27 }) 28 29 opt := &ListOptions{Page: 2} 30 reviews, _, err := client.PullRequests.ListReviews(context.Background(), "o", "r", 1, opt) 31 if err != nil { 32 t.Errorf("PullRequests.ListReviews returned error: %v", err) 33 } 34 35 want := []*PullRequestReview{ 36 {ID: Int64(1)}, 37 {ID: Int64(2)}, 38 } 39 if !reflect.DeepEqual(reviews, want) { 40 t.Errorf("PullRequests.ListReviews returned %+v, want %+v", reviews, want) 41 } 42} 43 44func TestPullRequestsService_ListReviews_invalidOwner(t *testing.T) { 45 client, _, _, teardown := setup() 46 defer teardown() 47 48 _, _, err := client.PullRequests.ListReviews(context.Background(), "%", "r", 1, nil) 49 testURLParseError(t, err) 50} 51 52func TestPullRequestsService_GetReview(t *testing.T) { 53 client, mux, _, teardown := setup() 54 defer teardown() 55 56 mux.HandleFunc("/repos/o/r/pulls/1/reviews/1", func(w http.ResponseWriter, r *http.Request) { 57 testMethod(t, r, "GET") 58 fmt.Fprint(w, `{"id":1}`) 59 }) 60 61 review, _, err := client.PullRequests.GetReview(context.Background(), "o", "r", 1, 1) 62 if err != nil { 63 t.Errorf("PullRequests.GetReview returned error: %v", err) 64 } 65 66 want := &PullRequestReview{ID: Int64(1)} 67 if !reflect.DeepEqual(review, want) { 68 t.Errorf("PullRequests.GetReview returned %+v, want %+v", review, want) 69 } 70} 71 72func TestPullRequestsService_GetReview_invalidOwner(t *testing.T) { 73 client, _, _, teardown := setup() 74 defer teardown() 75 76 _, _, err := client.PullRequests.GetReview(context.Background(), "%", "r", 1, 1) 77 testURLParseError(t, err) 78} 79 80func TestPullRequestsService_DeletePendingReview(t *testing.T) { 81 client, mux, _, teardown := setup() 82 defer teardown() 83 84 mux.HandleFunc("/repos/o/r/pulls/1/reviews/1", func(w http.ResponseWriter, r *http.Request) { 85 testMethod(t, r, "DELETE") 86 fmt.Fprint(w, `{"id":1}`) 87 }) 88 89 review, _, err := client.PullRequests.DeletePendingReview(context.Background(), "o", "r", 1, 1) 90 if err != nil { 91 t.Errorf("PullRequests.DeletePendingReview returned error: %v", err) 92 } 93 94 want := &PullRequestReview{ID: Int64(1)} 95 if !reflect.DeepEqual(review, want) { 96 t.Errorf("PullRequests.DeletePendingReview returned %+v, want %+v", review, want) 97 } 98} 99 100func TestPullRequestsService_DeletePendingReview_invalidOwner(t *testing.T) { 101 client, _, _, teardown := setup() 102 defer teardown() 103 104 _, _, err := client.PullRequests.DeletePendingReview(context.Background(), "%", "r", 1, 1) 105 testURLParseError(t, err) 106} 107 108func TestPullRequestsService_ListReviewComments(t *testing.T) { 109 client, mux, _, teardown := setup() 110 defer teardown() 111 112 mux.HandleFunc("/repos/o/r/pulls/1/reviews/1/comments", func(w http.ResponseWriter, r *http.Request) { 113 testMethod(t, r, "GET") 114 fmt.Fprint(w, `[{"id":1},{"id":2}]`) 115 }) 116 117 comments, _, err := client.PullRequests.ListReviewComments(context.Background(), "o", "r", 1, 1, nil) 118 if err != nil { 119 t.Errorf("PullRequests.ListReviewComments returned error: %v", err) 120 } 121 122 want := []*PullRequestComment{ 123 {ID: Int64(1)}, 124 {ID: Int64(2)}, 125 } 126 if !reflect.DeepEqual(comments, want) { 127 t.Errorf("PullRequests.ListReviewComments returned %+v, want %+v", comments, want) 128 } 129} 130 131func TestPullRequestsService_ListReviewComments_withOptions(t *testing.T) { 132 client, mux, _, teardown := setup() 133 defer teardown() 134 135 mux.HandleFunc("/repos/o/r/pulls/1/reviews/1/comments", func(w http.ResponseWriter, r *http.Request) { 136 testMethod(t, r, "GET") 137 testFormValues(t, r, values{ 138 "page": "2", 139 }) 140 fmt.Fprint(w, `[]`) 141 }) 142 143 _, _, err := client.PullRequests.ListReviewComments(context.Background(), "o", "r", 1, 1, &ListOptions{Page: 2}) 144 if err != nil { 145 t.Errorf("PullRequests.ListReviewComments returned error: %v", err) 146 } 147} 148 149func TestPullRequestsService_ListReviewComments_invalidOwner(t *testing.T) { 150 client, _, _, teardown := setup() 151 defer teardown() 152 153 _, _, err := client.PullRequests.ListReviewComments(context.Background(), "%", "r", 1, 1, nil) 154 testURLParseError(t, err) 155} 156 157func TestPullRequestsService_CreateReview(t *testing.T) { 158 client, mux, _, teardown := setup() 159 defer teardown() 160 161 input := &PullRequestReviewRequest{ 162 CommitID: String("commit_id"), 163 Body: String("b"), 164 Event: String("APPROVE"), 165 } 166 167 mux.HandleFunc("/repos/o/r/pulls/1/reviews", func(w http.ResponseWriter, r *http.Request) { 168 v := new(PullRequestReviewRequest) 169 json.NewDecoder(r.Body).Decode(v) 170 171 testMethod(t, r, "POST") 172 if !reflect.DeepEqual(v, input) { 173 t.Errorf("Request body = %+v, want %+v", v, input) 174 } 175 176 fmt.Fprint(w, `{"id":1}`) 177 }) 178 179 review, _, err := client.PullRequests.CreateReview(context.Background(), "o", "r", 1, input) 180 if err != nil { 181 t.Errorf("PullRequests.CreateReview returned error: %v", err) 182 } 183 184 want := &PullRequestReview{ID: Int64(1)} 185 if !reflect.DeepEqual(review, want) { 186 t.Errorf("PullRequests.CreateReview returned %+v, want %+v", review, want) 187 } 188} 189 190func TestPullRequestsService_CreateReview_invalidOwner(t *testing.T) { 191 client, _, _, teardown := setup() 192 defer teardown() 193 194 _, _, err := client.PullRequests.CreateReview(context.Background(), "%", "r", 1, &PullRequestReviewRequest{}) 195 testURLParseError(t, err) 196} 197 198func TestPullRequestsService_UpdateReview(t *testing.T) { 199 client, mux, _, teardown := setup() 200 defer teardown() 201 202 mux.HandleFunc("/repos/o/r/pulls/1/reviews/1", func(w http.ResponseWriter, r *http.Request) { 203 testMethod(t, r, "PUT") 204 fmt.Fprintf(w, `{"id":1}`) 205 }) 206 207 got, _, err := client.PullRequests.UpdateReview(context.Background(), "o", "r", 1, 1, "updated_body") 208 if err != nil { 209 t.Errorf("PullRequests.UpdateReview returned error: %v", err) 210 } 211 212 want := &PullRequestReview{ID: Int64(1)} 213 if !reflect.DeepEqual(got, want) { 214 t.Errorf("PullRequests.UpdateReview = %+v, want %+v", got, want) 215 } 216} 217 218func TestPullRequestsService_SubmitReview(t *testing.T) { 219 client, mux, _, teardown := setup() 220 defer teardown() 221 222 input := &PullRequestReviewRequest{ 223 Body: String("b"), 224 Event: String("APPROVE"), 225 } 226 227 mux.HandleFunc("/repos/o/r/pulls/1/reviews/1/events", func(w http.ResponseWriter, r *http.Request) { 228 v := new(PullRequestReviewRequest) 229 json.NewDecoder(r.Body).Decode(v) 230 231 testMethod(t, r, "POST") 232 if !reflect.DeepEqual(v, input) { 233 t.Errorf("Request body = %+v, want %+v", v, input) 234 } 235 236 fmt.Fprint(w, `{"id":1}`) 237 }) 238 239 review, _, err := client.PullRequests.SubmitReview(context.Background(), "o", "r", 1, 1, input) 240 if err != nil { 241 t.Errorf("PullRequests.SubmitReview returned error: %v", err) 242 } 243 244 want := &PullRequestReview{ID: Int64(1)} 245 if !reflect.DeepEqual(review, want) { 246 t.Errorf("PullRequests.SubmitReview returned %+v, want %+v", review, want) 247 } 248} 249 250func TestPullRequestsService_SubmitReview_invalidOwner(t *testing.T) { 251 client, _, _, teardown := setup() 252 defer teardown() 253 254 _, _, err := client.PullRequests.SubmitReview(context.Background(), "%", "r", 1, 1, &PullRequestReviewRequest{}) 255 testURLParseError(t, err) 256} 257 258func TestPullRequestsService_DismissReview(t *testing.T) { 259 client, mux, _, teardown := setup() 260 defer teardown() 261 262 input := &PullRequestReviewDismissalRequest{Message: String("m")} 263 264 mux.HandleFunc("/repos/o/r/pulls/1/reviews/1/dismissals", func(w http.ResponseWriter, r *http.Request) { 265 v := new(PullRequestReviewDismissalRequest) 266 json.NewDecoder(r.Body).Decode(v) 267 268 testMethod(t, r, "PUT") 269 if !reflect.DeepEqual(v, input) { 270 t.Errorf("Request body = %+v, want %+v", v, input) 271 } 272 273 fmt.Fprint(w, `{"id":1}`) 274 }) 275 276 review, _, err := client.PullRequests.DismissReview(context.Background(), "o", "r", 1, 1, input) 277 if err != nil { 278 t.Errorf("PullRequests.DismissReview returned error: %v", err) 279 } 280 281 want := &PullRequestReview{ID: Int64(1)} 282 if !reflect.DeepEqual(review, want) { 283 t.Errorf("PullRequests.DismissReview returned %+v, want %+v", review, want) 284 } 285} 286 287func TestPullRequestsService_DismissReview_invalidOwner(t *testing.T) { 288 client, _, _, teardown := setup() 289 defer teardown() 290 291 _, _, err := client.PullRequests.DismissReview(context.Background(), "%", "r", 1, 1, &PullRequestReviewDismissalRequest{}) 292 testURLParseError(t, err) 293} 294