github.com/google/go-github/v49@v49.1.0/github/issues_assignees_test.go (about) 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 6 package github 7 8 import ( 9 "context" 10 "encoding/json" 11 "fmt" 12 "net/http" 13 "testing" 14 15 "github.com/google/go-cmp/cmp" 16 ) 17 18 func TestIssuesService_ListAssignees(t *testing.T) { 19 client, mux, _, teardown := setup() 20 defer teardown() 21 22 mux.HandleFunc("/repos/o/r/assignees", func(w http.ResponseWriter, r *http.Request) { 23 testMethod(t, r, "GET") 24 testFormValues(t, r, values{"page": "2"}) 25 fmt.Fprint(w, `[{"id":1}]`) 26 }) 27 28 opt := &ListOptions{Page: 2} 29 ctx := context.Background() 30 assignees, _, err := client.Issues.ListAssignees(ctx, "o", "r", opt) 31 if err != nil { 32 t.Errorf("Issues.ListAssignees returned error: %v", err) 33 } 34 35 want := []*User{{ID: Int64(1)}} 36 if !cmp.Equal(assignees, want) { 37 t.Errorf("Issues.ListAssignees returned %+v, want %+v", assignees, want) 38 } 39 40 const methodName = "ListAssignees" 41 testBadOptions(t, methodName, func() (err error) { 42 _, _, err = client.Issues.ListAssignees(ctx, "\n", "\n", opt) 43 return err 44 }) 45 46 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 47 got, resp, err := client.Issues.ListAssignees(ctx, "o", "r", opt) 48 if got != nil { 49 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 50 } 51 return resp, err 52 }) 53 } 54 55 func TestIssuesService_ListAssignees_invalidOwner(t *testing.T) { 56 client, _, _, teardown := setup() 57 defer teardown() 58 59 ctx := context.Background() 60 _, _, err := client.Issues.ListAssignees(ctx, "%", "r", nil) 61 testURLParseError(t, err) 62 } 63 64 func TestIssuesService_IsAssignee_true(t *testing.T) { 65 client, mux, _, teardown := setup() 66 defer teardown() 67 68 mux.HandleFunc("/repos/o/r/assignees/u", func(w http.ResponseWriter, r *http.Request) { 69 testMethod(t, r, "GET") 70 }) 71 72 ctx := context.Background() 73 assignee, _, err := client.Issues.IsAssignee(ctx, "o", "r", "u") 74 if err != nil { 75 t.Errorf("Issues.IsAssignee returned error: %v", err) 76 } 77 if want := true; assignee != want { 78 t.Errorf("Issues.IsAssignee returned %+v, want %+v", assignee, want) 79 } 80 81 const methodName = "IsAssignee" 82 testBadOptions(t, methodName, func() (err error) { 83 _, _, err = client.Issues.IsAssignee(ctx, "\n", "\n", "\n") 84 return err 85 }) 86 87 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 88 got, resp, err := client.Issues.IsAssignee(ctx, "o", "r", "u") 89 if got { 90 t.Errorf("testNewRequestAndDoFailure %v = %#v, want false", methodName, got) 91 } 92 return resp, err 93 }) 94 } 95 96 func TestIssuesService_IsAssignee_false(t *testing.T) { 97 client, mux, _, teardown := setup() 98 defer teardown() 99 100 mux.HandleFunc("/repos/o/r/assignees/u", func(w http.ResponseWriter, r *http.Request) { 101 testMethod(t, r, "GET") 102 w.WriteHeader(http.StatusNotFound) 103 }) 104 105 ctx := context.Background() 106 assignee, _, err := client.Issues.IsAssignee(ctx, "o", "r", "u") 107 if err != nil { 108 t.Errorf("Issues.IsAssignee returned error: %v", err) 109 } 110 if want := false; assignee != want { 111 t.Errorf("Issues.IsAssignee returned %+v, want %+v", assignee, want) 112 } 113 114 const methodName = "IsAssignee" 115 testBadOptions(t, methodName, func() (err error) { 116 _, _, err = client.Issues.IsAssignee(ctx, "\n", "\n", "\n") 117 return err 118 }) 119 120 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 121 got, resp, err := client.Issues.IsAssignee(ctx, "o", "r", "u") 122 if got { 123 t.Errorf("testNewRequestAndDoFailure %v = %#v, want false", methodName, got) 124 } 125 return resp, err 126 }) 127 } 128 129 func TestIssuesService_IsAssignee_error(t *testing.T) { 130 client, mux, _, teardown := setup() 131 defer teardown() 132 133 mux.HandleFunc("/repos/o/r/assignees/u", func(w http.ResponseWriter, r *http.Request) { 134 testMethod(t, r, "GET") 135 http.Error(w, "BadRequest", http.StatusBadRequest) 136 }) 137 138 ctx := context.Background() 139 assignee, _, err := client.Issues.IsAssignee(ctx, "o", "r", "u") 140 if err == nil { 141 t.Errorf("Expected HTTP 400 response") 142 } 143 if want := false; assignee != want { 144 t.Errorf("Issues.IsAssignee returned %+v, want %+v", assignee, want) 145 } 146 147 const methodName = "IsAssignee" 148 testBadOptions(t, methodName, func() (err error) { 149 _, _, err = client.Issues.IsAssignee(ctx, "o", "r", "u") 150 return err 151 }) 152 153 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 154 got, resp, err := client.Issues.IsAssignee(ctx, "o", "r", "u") 155 if got { 156 t.Errorf("testNewRequestAndDoFailure %v = %#v, want false", methodName, got) 157 } 158 return resp, err 159 }) 160 } 161 162 func TestIssuesService_IsAssignee_invalidOwner(t *testing.T) { 163 client, _, _, teardown := setup() 164 defer teardown() 165 166 ctx := context.Background() 167 _, _, err := client.Issues.IsAssignee(ctx, "%", "r", "u") 168 testURLParseError(t, err) 169 } 170 171 func TestIssuesService_AddAssignees(t *testing.T) { 172 client, mux, _, teardown := setup() 173 defer teardown() 174 175 mux.HandleFunc("/repos/o/r/issues/1/assignees", func(w http.ResponseWriter, r *http.Request) { 176 var assignees struct { 177 Assignees []string `json:"assignees,omitempty"` 178 } 179 json.NewDecoder(r.Body).Decode(&assignees) 180 181 testMethod(t, r, "POST") 182 want := []string{"user1", "user2"} 183 if !cmp.Equal(assignees.Assignees, want) { 184 t.Errorf("assignees = %+v, want %+v", assignees, want) 185 } 186 fmt.Fprint(w, `{"number":1,"assignees":[{"login":"user1"},{"login":"user2"}]}`) 187 }) 188 189 ctx := context.Background() 190 got, _, err := client.Issues.AddAssignees(ctx, "o", "r", 1, []string{"user1", "user2"}) 191 if err != nil { 192 t.Errorf("Issues.AddAssignees returned error: %v", err) 193 } 194 195 want := &Issue{Number: Int(1), Assignees: []*User{{Login: String("user1")}, {Login: String("user2")}}} 196 if !cmp.Equal(got, want) { 197 t.Errorf("Issues.AddAssignees = %+v, want %+v", got, want) 198 } 199 200 const methodName = "AddAssignees" 201 testBadOptions(t, methodName, func() (err error) { 202 _, _, err = client.Issues.AddAssignees(ctx, "\n", "\n", -1, []string{"\n", "\n"}) 203 return err 204 }) 205 206 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 207 got, resp, err := client.Issues.AddAssignees(ctx, "o", "r", 1, []string{"user1", "user2"}) 208 if got != nil { 209 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 210 } 211 return resp, err 212 }) 213 } 214 215 func TestIssuesService_RemoveAssignees(t *testing.T) { 216 client, mux, _, teardown := setup() 217 defer teardown() 218 219 mux.HandleFunc("/repos/o/r/issues/1/assignees", func(w http.ResponseWriter, r *http.Request) { 220 var assignees struct { 221 Assignees []string `json:"assignees,omitempty"` 222 } 223 json.NewDecoder(r.Body).Decode(&assignees) 224 225 testMethod(t, r, "DELETE") 226 want := []string{"user1", "user2"} 227 if !cmp.Equal(assignees.Assignees, want) { 228 t.Errorf("assignees = %+v, want %+v", assignees, want) 229 } 230 fmt.Fprint(w, `{"number":1,"assignees":[]}`) 231 }) 232 233 ctx := context.Background() 234 got, _, err := client.Issues.RemoveAssignees(ctx, "o", "r", 1, []string{"user1", "user2"}) 235 if err != nil { 236 t.Errorf("Issues.RemoveAssignees returned error: %v", err) 237 } 238 239 want := &Issue{Number: Int(1), Assignees: []*User{}} 240 if !cmp.Equal(got, want) { 241 t.Errorf("Issues.RemoveAssignees = %+v, want %+v", got, want) 242 } 243 244 const methodName = "RemoveAssignees" 245 testBadOptions(t, methodName, func() (err error) { 246 _, _, err = client.Issues.RemoveAssignees(ctx, "\n", "\n", -1, []string{"\n", "\n"}) 247 return err 248 }) 249 250 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 251 got, resp, err := client.Issues.RemoveAssignees(ctx, "o", "r", 1, []string{"user1", "user2"}) 252 if got != nil { 253 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 254 } 255 return resp, err 256 }) 257 }