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