github.com/google/go-github/v33@v33.0.0/github/users_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 "reflect" 14 "testing" 15 ) 16 17 func TestUser_marshall(t *testing.T) { 18 testJSONMarshal(t, &User{}, "{}") 19 20 u := &User{ 21 Login: String("l"), 22 ID: Int64(1), 23 URL: String("u"), 24 AvatarURL: String("a"), 25 GravatarID: String("g"), 26 Name: String("n"), 27 Company: String("c"), 28 Blog: String("b"), 29 Location: String("l"), 30 Email: String("e"), 31 Hireable: Bool(true), 32 Bio: String("b"), 33 TwitterUsername: String("t"), 34 PublicRepos: Int(1), 35 Followers: Int(1), 36 Following: Int(1), 37 CreatedAt: &Timestamp{referenceTime}, 38 SuspendedAt: &Timestamp{referenceTime}, 39 } 40 want := `{ 41 "login": "l", 42 "id": 1, 43 "avatar_url": "a", 44 "gravatar_id": "g", 45 "name": "n", 46 "company": "c", 47 "blog": "b", 48 "location": "l", 49 "email": "e", 50 "hireable": true, 51 "bio": "b", 52 "twitter_username": "t", 53 "public_repos": 1, 54 "followers": 1, 55 "following": 1, 56 "created_at": ` + referenceTimeStr + `, 57 "suspended_at": ` + referenceTimeStr + `, 58 "url": "u" 59 }` 60 testJSONMarshal(t, u, want) 61 } 62 63 func TestUsersService_Get_authenticatedUser(t *testing.T) { 64 client, mux, _, teardown := setup() 65 defer teardown() 66 67 mux.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) { 68 testMethod(t, r, "GET") 69 fmt.Fprint(w, `{"id":1}`) 70 }) 71 72 user, _, err := client.Users.Get(context.Background(), "") 73 if err != nil { 74 t.Errorf("Users.Get returned error: %v", err) 75 } 76 77 want := &User{ID: Int64(1)} 78 if !reflect.DeepEqual(user, want) { 79 t.Errorf("Users.Get returned %+v, want %+v", user, want) 80 } 81 } 82 83 func TestUsersService_Get_specifiedUser(t *testing.T) { 84 client, mux, _, teardown := setup() 85 defer teardown() 86 87 mux.HandleFunc("/users/u", func(w http.ResponseWriter, r *http.Request) { 88 testMethod(t, r, "GET") 89 fmt.Fprint(w, `{"id":1}`) 90 }) 91 92 user, _, err := client.Users.Get(context.Background(), "u") 93 if err != nil { 94 t.Errorf("Users.Get returned error: %v", err) 95 } 96 97 want := &User{ID: Int64(1)} 98 if !reflect.DeepEqual(user, want) { 99 t.Errorf("Users.Get returned %+v, want %+v", user, want) 100 } 101 } 102 103 func TestUsersService_Get_invalidUser(t *testing.T) { 104 client, _, _, teardown := setup() 105 defer teardown() 106 107 _, _, err := client.Users.Get(context.Background(), "%") 108 testURLParseError(t, err) 109 } 110 111 func TestUsersService_GetByID(t *testing.T) { 112 client, mux, _, teardown := setup() 113 defer teardown() 114 115 mux.HandleFunc("/user/1", func(w http.ResponseWriter, r *http.Request) { 116 testMethod(t, r, "GET") 117 fmt.Fprint(w, `{"id":1}`) 118 }) 119 120 user, _, err := client.Users.GetByID(context.Background(), 1) 121 if err != nil { 122 t.Fatalf("Users.GetByID returned error: %v", err) 123 } 124 125 want := &User{ID: Int64(1)} 126 if !reflect.DeepEqual(user, want) { 127 t.Errorf("Users.GetByID returned %+v, want %+v", user, want) 128 } 129 } 130 131 func TestUsersService_Edit(t *testing.T) { 132 client, mux, _, teardown := setup() 133 defer teardown() 134 135 input := &User{Name: String("n")} 136 137 mux.HandleFunc("/user", func(w http.ResponseWriter, r *http.Request) { 138 v := new(User) 139 json.NewDecoder(r.Body).Decode(v) 140 141 testMethod(t, r, "PATCH") 142 if !reflect.DeepEqual(v, input) { 143 t.Errorf("Request body = %+v, want %+v", v, input) 144 } 145 146 fmt.Fprint(w, `{"id":1}`) 147 }) 148 149 user, _, err := client.Users.Edit(context.Background(), input) 150 if err != nil { 151 t.Errorf("Users.Edit returned error: %v", err) 152 } 153 154 want := &User{ID: Int64(1)} 155 if !reflect.DeepEqual(user, want) { 156 t.Errorf("Users.Edit returned %+v, want %+v", user, want) 157 } 158 } 159 160 func TestUsersService_GetHovercard(t *testing.T) { 161 client, mux, _, teardown := setup() 162 defer teardown() 163 164 mux.HandleFunc("/users/u/hovercard", func(w http.ResponseWriter, r *http.Request) { 165 testMethod(t, r, "GET") 166 testFormValues(t, r, values{"subject_type": "repository", "subject_id": "20180408"}) 167 fmt.Fprint(w, `{"contexts": [{"message":"Owns this repository", "octicon": "repo"}]}`) 168 }) 169 170 opt := &HovercardOptions{SubjectType: "repository", SubjectID: "20180408"} 171 hovercard, _, err := client.Users.GetHovercard(context.Background(), "u", opt) 172 if err != nil { 173 t.Errorf("Users.GetHovercard returned error: %v", err) 174 } 175 176 want := &Hovercard{Contexts: []*UserContext{{Message: String("Owns this repository"), Octicon: String("repo")}}} 177 if !reflect.DeepEqual(hovercard, want) { 178 t.Errorf("Users.GetHovercard returned %+v, want %+v", hovercard, want) 179 } 180 } 181 182 func TestUsersService_ListAll(t *testing.T) { 183 client, mux, _, teardown := setup() 184 defer teardown() 185 186 mux.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) { 187 testMethod(t, r, "GET") 188 testFormValues(t, r, values{"since": "1", "page": "2"}) 189 fmt.Fprint(w, `[{"id":2}]`) 190 }) 191 192 opt := &UserListOptions{1, ListOptions{Page: 2}} 193 users, _, err := client.Users.ListAll(context.Background(), opt) 194 if err != nil { 195 t.Errorf("Users.Get returned error: %v", err) 196 } 197 198 want := []*User{{ID: Int64(2)}} 199 if !reflect.DeepEqual(users, want) { 200 t.Errorf("Users.ListAll returned %+v, want %+v", users, want) 201 } 202 } 203 204 func TestUsersService_ListInvitations(t *testing.T) { 205 client, mux, _, teardown := setup() 206 defer teardown() 207 208 mux.HandleFunc("/user/repository_invitations", func(w http.ResponseWriter, r *http.Request) { 209 testMethod(t, r, "GET") 210 fmt.Fprintf(w, `[{"id":1}, {"id":2}]`) 211 }) 212 213 got, _, err := client.Users.ListInvitations(context.Background(), nil) 214 if err != nil { 215 t.Errorf("Users.ListInvitations returned error: %v", err) 216 } 217 218 want := []*RepositoryInvitation{{ID: Int64(1)}, {ID: Int64(2)}} 219 if !reflect.DeepEqual(got, want) { 220 t.Errorf("Users.ListInvitations = %+v, want %+v", got, want) 221 } 222 } 223 224 func TestUsersService_ListInvitations_withOptions(t *testing.T) { 225 client, mux, _, teardown := setup() 226 defer teardown() 227 228 mux.HandleFunc("/user/repository_invitations", func(w http.ResponseWriter, r *http.Request) { 229 testMethod(t, r, "GET") 230 testFormValues(t, r, values{ 231 "page": "2", 232 }) 233 fmt.Fprintf(w, `[{"id":1}, {"id":2}]`) 234 }) 235 236 _, _, err := client.Users.ListInvitations(context.Background(), &ListOptions{Page: 2}) 237 if err != nil { 238 t.Errorf("Users.ListInvitations returned error: %v", err) 239 } 240 } 241 func TestUsersService_AcceptInvitation(t *testing.T) { 242 client, mux, _, teardown := setup() 243 defer teardown() 244 245 mux.HandleFunc("/user/repository_invitations/1", func(w http.ResponseWriter, r *http.Request) { 246 testMethod(t, r, "PATCH") 247 w.WriteHeader(http.StatusNoContent) 248 }) 249 250 if _, err := client.Users.AcceptInvitation(context.Background(), 1); err != nil { 251 t.Errorf("Users.AcceptInvitation returned error: %v", err) 252 } 253 } 254 255 func TestUsersService_DeclineInvitation(t *testing.T) { 256 client, mux, _, teardown := setup() 257 defer teardown() 258 259 mux.HandleFunc("/user/repository_invitations/1", func(w http.ResponseWriter, r *http.Request) { 260 testMethod(t, r, "DELETE") 261 w.WriteHeader(http.StatusNoContent) 262 }) 263 264 if _, err := client.Users.DeclineInvitation(context.Background(), 1); err != nil { 265 t.Errorf("Users.DeclineInvitation returned error: %v", err) 266 } 267 }