1// Copyright 2013 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 TestIssuesService_ListLabels(t *testing.T) { 18 client, mux, _, teardown := setup() 19 defer teardown() 20 21 mux.HandleFunc("/repos/o/r/labels", func(w http.ResponseWriter, r *http.Request) { 22 testMethod(t, r, "GET") 23 testHeader(t, r, "Accept", mediaTypeGraphQLNodeIDPreview) 24 testFormValues(t, r, values{"page": "2"}) 25 fmt.Fprint(w, `[{"name": "a"},{"name": "b"}]`) 26 }) 27 28 opt := &ListOptions{Page: 2} 29 labels, _, err := client.Issues.ListLabels(context.Background(), "o", "r", opt) 30 if err != nil { 31 t.Errorf("Issues.ListLabels returned error: %v", err) 32 } 33 34 want := []*Label{{Name: String("a")}, {Name: String("b")}} 35 if !reflect.DeepEqual(labels, want) { 36 t.Errorf("Issues.ListLabels returned %+v, want %+v", labels, want) 37 } 38} 39 40func TestIssuesService_ListLabels_invalidOwner(t *testing.T) { 41 client, _, _, teardown := setup() 42 defer teardown() 43 44 _, _, err := client.Issues.ListLabels(context.Background(), "%", "%", nil) 45 testURLParseError(t, err) 46} 47 48func TestIssuesService_GetLabel(t *testing.T) { 49 client, mux, _, teardown := setup() 50 defer teardown() 51 52 mux.HandleFunc("/repos/o/r/labels/n", func(w http.ResponseWriter, r *http.Request) { 53 testMethod(t, r, "GET") 54 testHeader(t, r, "Accept", mediaTypeGraphQLNodeIDPreview) 55 fmt.Fprint(w, `{"url":"u", "name": "n", "color": "c"}`) 56 }) 57 58 label, _, err := client.Issues.GetLabel(context.Background(), "o", "r", "n") 59 if err != nil { 60 t.Errorf("Issues.GetLabel returned error: %v", err) 61 } 62 63 want := &Label{URL: String("u"), Name: String("n"), Color: String("c")} 64 if !reflect.DeepEqual(label, want) { 65 t.Errorf("Issues.GetLabel returned %+v, want %+v", label, want) 66 } 67} 68 69func TestIssuesService_GetLabel_invalidOwner(t *testing.T) { 70 client, _, _, teardown := setup() 71 defer teardown() 72 73 _, _, err := client.Issues.GetLabel(context.Background(), "%", "%", "%") 74 testURLParseError(t, err) 75} 76 77func TestIssuesService_CreateLabel(t *testing.T) { 78 client, mux, _, teardown := setup() 79 defer teardown() 80 81 input := &Label{Name: String("n")} 82 83 mux.HandleFunc("/repos/o/r/labels", func(w http.ResponseWriter, r *http.Request) { 84 v := new(Label) 85 json.NewDecoder(r.Body).Decode(v) 86 87 testMethod(t, r, "POST") 88 testHeader(t, r, "Accept", mediaTypeGraphQLNodeIDPreview) 89 if !reflect.DeepEqual(v, input) { 90 t.Errorf("Request body = %+v, want %+v", v, input) 91 } 92 93 fmt.Fprint(w, `{"url":"u"}`) 94 }) 95 96 label, _, err := client.Issues.CreateLabel(context.Background(), "o", "r", input) 97 if err != nil { 98 t.Errorf("Issues.CreateLabel returned error: %v", err) 99 } 100 101 want := &Label{URL: String("u")} 102 if !reflect.DeepEqual(label, want) { 103 t.Errorf("Issues.CreateLabel returned %+v, want %+v", label, want) 104 } 105} 106 107func TestIssuesService_CreateLabel_invalidOwner(t *testing.T) { 108 client, _, _, teardown := setup() 109 defer teardown() 110 111 _, _, err := client.Issues.CreateLabel(context.Background(), "%", "%", nil) 112 testURLParseError(t, err) 113} 114 115func TestIssuesService_EditLabel(t *testing.T) { 116 client, mux, _, teardown := setup() 117 defer teardown() 118 119 input := &Label{Name: String("z")} 120 121 mux.HandleFunc("/repos/o/r/labels/n", func(w http.ResponseWriter, r *http.Request) { 122 v := new(Label) 123 json.NewDecoder(r.Body).Decode(v) 124 125 testMethod(t, r, "PATCH") 126 testHeader(t, r, "Accept", mediaTypeGraphQLNodeIDPreview) 127 if !reflect.DeepEqual(v, input) { 128 t.Errorf("Request body = %+v, want %+v", v, input) 129 } 130 131 fmt.Fprint(w, `{"url":"u"}`) 132 }) 133 134 label, _, err := client.Issues.EditLabel(context.Background(), "o", "r", "n", input) 135 if err != nil { 136 t.Errorf("Issues.EditLabel returned error: %v", err) 137 } 138 139 want := &Label{URL: String("u")} 140 if !reflect.DeepEqual(label, want) { 141 t.Errorf("Issues.EditLabel returned %+v, want %+v", label, want) 142 } 143} 144 145func TestIssuesService_EditLabel_invalidOwner(t *testing.T) { 146 client, _, _, teardown := setup() 147 defer teardown() 148 149 _, _, err := client.Issues.EditLabel(context.Background(), "%", "%", "%", nil) 150 testURLParseError(t, err) 151} 152 153func TestIssuesService_DeleteLabel(t *testing.T) { 154 client, mux, _, teardown := setup() 155 defer teardown() 156 157 mux.HandleFunc("/repos/o/r/labels/n", func(w http.ResponseWriter, r *http.Request) { 158 testMethod(t, r, "DELETE") 159 }) 160 161 _, err := client.Issues.DeleteLabel(context.Background(), "o", "r", "n") 162 if err != nil { 163 t.Errorf("Issues.DeleteLabel returned error: %v", err) 164 } 165} 166 167func TestIssuesService_DeleteLabel_invalidOwner(t *testing.T) { 168 client, _, _, teardown := setup() 169 defer teardown() 170 171 _, err := client.Issues.DeleteLabel(context.Background(), "%", "%", "%") 172 testURLParseError(t, err) 173} 174 175func TestIssuesService_ListLabelsByIssue(t *testing.T) { 176 client, mux, _, teardown := setup() 177 defer teardown() 178 179 mux.HandleFunc("/repos/o/r/issues/1/labels", func(w http.ResponseWriter, r *http.Request) { 180 testMethod(t, r, "GET") 181 testHeader(t, r, "Accept", mediaTypeGraphQLNodeIDPreview) 182 testFormValues(t, r, values{"page": "2"}) 183 fmt.Fprint(w, `[{"name":"a","id":1},{"name":"b","id":2}]`) 184 }) 185 186 opt := &ListOptions{Page: 2} 187 labels, _, err := client.Issues.ListLabelsByIssue(context.Background(), "o", "r", 1, opt) 188 if err != nil { 189 t.Errorf("Issues.ListLabelsByIssue returned error: %v", err) 190 } 191 192 want := []*Label{ 193 {Name: String("a"), ID: Int64(1)}, 194 {Name: String("b"), ID: Int64(2)}, 195 } 196 if !reflect.DeepEqual(labels, want) { 197 t.Errorf("Issues.ListLabelsByIssue returned %+v, want %+v", labels, want) 198 } 199} 200 201func TestIssuesService_ListLabelsByIssue_invalidOwner(t *testing.T) { 202 client, _, _, teardown := setup() 203 defer teardown() 204 205 _, _, err := client.Issues.ListLabelsByIssue(context.Background(), "%", "%", 1, nil) 206 testURLParseError(t, err) 207} 208 209func TestIssuesService_AddLabelsToIssue(t *testing.T) { 210 client, mux, _, teardown := setup() 211 defer teardown() 212 213 input := []string{"a", "b"} 214 215 mux.HandleFunc("/repos/o/r/issues/1/labels", func(w http.ResponseWriter, r *http.Request) { 216 var v []string 217 json.NewDecoder(r.Body).Decode(&v) 218 219 testMethod(t, r, "POST") 220 testHeader(t, r, "Accept", mediaTypeGraphQLNodeIDPreview) 221 if !reflect.DeepEqual(v, input) { 222 t.Errorf("Request body = %+v, want %+v", v, input) 223 } 224 225 fmt.Fprint(w, `[{"url":"u"}]`) 226 }) 227 228 labels, _, err := client.Issues.AddLabelsToIssue(context.Background(), "o", "r", 1, input) 229 if err != nil { 230 t.Errorf("Issues.AddLabelsToIssue returned error: %v", err) 231 } 232 233 want := []*Label{{URL: String("u")}} 234 if !reflect.DeepEqual(labels, want) { 235 t.Errorf("Issues.AddLabelsToIssue returned %+v, want %+v", labels, want) 236 } 237} 238 239func TestIssuesService_AddLabelsToIssue_invalidOwner(t *testing.T) { 240 client, _, _, teardown := setup() 241 defer teardown() 242 243 _, _, err := client.Issues.AddLabelsToIssue(context.Background(), "%", "%", 1, nil) 244 testURLParseError(t, err) 245} 246 247func TestIssuesService_RemoveLabelForIssue(t *testing.T) { 248 client, mux, _, teardown := setup() 249 defer teardown() 250 251 mux.HandleFunc("/repos/o/r/issues/1/labels/l", func(w http.ResponseWriter, r *http.Request) { 252 testMethod(t, r, "DELETE") 253 }) 254 255 _, err := client.Issues.RemoveLabelForIssue(context.Background(), "o", "r", 1, "l") 256 if err != nil { 257 t.Errorf("Issues.RemoveLabelForIssue returned error: %v", err) 258 } 259} 260 261func TestIssuesService_RemoveLabelForIssue_invalidOwner(t *testing.T) { 262 client, _, _, teardown := setup() 263 defer teardown() 264 265 _, err := client.Issues.RemoveLabelForIssue(context.Background(), "%", "%", 1, "%") 266 testURLParseError(t, err) 267} 268 269func TestIssuesService_ReplaceLabelsForIssue(t *testing.T) { 270 client, mux, _, teardown := setup() 271 defer teardown() 272 273 input := []string{"a", "b"} 274 275 mux.HandleFunc("/repos/o/r/issues/1/labels", func(w http.ResponseWriter, r *http.Request) { 276 var v []string 277 json.NewDecoder(r.Body).Decode(&v) 278 279 testMethod(t, r, "PUT") 280 testHeader(t, r, "Accept", mediaTypeGraphQLNodeIDPreview) 281 if !reflect.DeepEqual(v, input) { 282 t.Errorf("Request body = %+v, want %+v", v, input) 283 } 284 285 fmt.Fprint(w, `[{"url":"u"}]`) 286 }) 287 288 labels, _, err := client.Issues.ReplaceLabelsForIssue(context.Background(), "o", "r", 1, input) 289 if err != nil { 290 t.Errorf("Issues.ReplaceLabelsForIssue returned error: %v", err) 291 } 292 293 want := []*Label{{URL: String("u")}} 294 if !reflect.DeepEqual(labels, want) { 295 t.Errorf("Issues.ReplaceLabelsForIssue returned %+v, want %+v", labels, want) 296 } 297} 298 299func TestIssuesService_ReplaceLabelsForIssue_invalidOwner(t *testing.T) { 300 client, _, _, teardown := setup() 301 defer teardown() 302 303 _, _, err := client.Issues.ReplaceLabelsForIssue(context.Background(), "%", "%", 1, nil) 304 testURLParseError(t, err) 305} 306 307func TestIssuesService_RemoveLabelsForIssue(t *testing.T) { 308 client, mux, _, teardown := setup() 309 defer teardown() 310 311 mux.HandleFunc("/repos/o/r/issues/1/labels", func(w http.ResponseWriter, r *http.Request) { 312 testMethod(t, r, "DELETE") 313 }) 314 315 _, err := client.Issues.RemoveLabelsForIssue(context.Background(), "o", "r", 1) 316 if err != nil { 317 t.Errorf("Issues.RemoveLabelsForIssue returned error: %v", err) 318 } 319} 320 321func TestIssuesService_RemoveLabelsForIssue_invalidOwner(t *testing.T) { 322 client, _, _, teardown := setup() 323 defer teardown() 324 325 _, err := client.Issues.RemoveLabelsForIssue(context.Background(), "%", "%", 1) 326 testURLParseError(t, err) 327} 328 329func TestIssuesService_ListLabelsForMilestone(t *testing.T) { 330 client, mux, _, teardown := setup() 331 defer teardown() 332 333 mux.HandleFunc("/repos/o/r/milestones/1/labels", func(w http.ResponseWriter, r *http.Request) { 334 testMethod(t, r, "GET") 335 testHeader(t, r, "Accept", mediaTypeGraphQLNodeIDPreview) 336 testFormValues(t, r, values{"page": "2"}) 337 fmt.Fprint(w, `[{"name": "a"},{"name": "b"}]`) 338 }) 339 340 opt := &ListOptions{Page: 2} 341 labels, _, err := client.Issues.ListLabelsForMilestone(context.Background(), "o", "r", 1, opt) 342 if err != nil { 343 t.Errorf("Issues.ListLabelsForMilestone returned error: %v", err) 344 } 345 346 want := []*Label{{Name: String("a")}, {Name: String("b")}} 347 if !reflect.DeepEqual(labels, want) { 348 t.Errorf("Issues.ListLabelsForMilestone returned %+v, want %+v", labels, want) 349 } 350} 351 352func TestIssuesService_ListLabelsForMilestone_invalidOwner(t *testing.T) { 353 client, _, _, teardown := setup() 354 defer teardown() 355 356 _, _, err := client.Issues.ListLabelsForMilestone(context.Background(), "%", "%", 1, nil) 357 testURLParseError(t, err) 358} 359