49 | 49 |
}
|
50 | 50 |
}
|
51 | 51 |
|
52 | |
func getTestUser() User {
|
|
52 |
func getTestUserWithId(id string) User {
|
53 | 53 |
return User{
|
54 | |
ID: "UXXXXXXXX",
|
|
54 |
ID: id,
|
55 | 55 |
Name: "Test User",
|
56 | 56 |
Deleted: false,
|
57 | 57 |
Color: "9f69e7",
|
|
69 | 69 |
Updated: 1555425715,
|
70 | 70 |
Has2FA: false,
|
71 | 71 |
}
|
|
72 |
}
|
|
73 |
|
|
74 |
func getTestUser() User {
|
|
75 |
return getTestUserWithId("UXXXXXXXX")
|
72 | 76 |
}
|
73 | 77 |
|
74 | 78 |
func getUserIdentity(rw http.ResponseWriter, r *http.Request) {
|
|
302 | 306 |
}
|
303 | 307 |
|
304 | 308 |
func TestGetUsers(t *testing.T) {
|
|
309 |
http.DefaultServeMux = new(http.ServeMux)
|
305 | 310 |
http.HandleFunc("/users.list", getUserPage(4))
|
306 | |
expectedUser := getTestUser()
|
307 | 311 |
|
308 | 312 |
once.Do(startServer)
|
309 | 313 |
api := New("testing-token", OptionAPIURL("http://"+serverAddr+"/"))
|
|
314 | 318 |
return
|
315 | 319 |
}
|
316 | 320 |
|
317 | |
if !reflect.DeepEqual([]User{expectedUser, expectedUser, expectedUser, expectedUser}, users) {
|
|
321 |
if !reflect.DeepEqual([]User{
|
|
322 |
getTestUserWithId("U000"),
|
|
323 |
getTestUserWithId("U001"),
|
|
324 |
getTestUserWithId("U002"),
|
|
325 |
getTestUserWithId("U003"),
|
|
326 |
}, users) {
|
318 | 327 |
t.Fatal(ErrIncorrectResponse)
|
319 | 328 |
}
|
320 | 329 |
}
|
|
328 | 337 |
Ok: true,
|
329 | 338 |
}
|
330 | 339 |
members := []User{
|
331 | |
getTestUser(),
|
|
340 |
getTestUserWithId(fmt.Sprintf("U%03d", n)),
|
332 | 341 |
}
|
333 | 342 |
rw.Header().Set("Content-Type", "application/json")
|
334 | 343 |
if cpage = atomic.AddInt64(&n, 1); cpage == max {
|
|
348 | 357 |
}
|
349 | 358 |
}
|
350 | 359 |
|
|
360 |
// returns n pages of users and sends rate limited errors in between successful pages.
|
|
361 |
func getUserPagesWithRateLimitErrors(max int64) func(rw http.ResponseWriter, r *http.Request) {
|
|
362 |
var n int64
|
|
363 |
doRateLimit := false
|
|
364 |
return func(rw http.ResponseWriter, r *http.Request) {
|
|
365 |
defer func() {
|
|
366 |
doRateLimit = !doRateLimit
|
|
367 |
}()
|
|
368 |
if doRateLimit {
|
|
369 |
rw.Header().Set("Retry-After", "1")
|
|
370 |
rw.WriteHeader(http.StatusTooManyRequests)
|
|
371 |
return
|
|
372 |
}
|
|
373 |
var cpage int64
|
|
374 |
sresp := SlackResponse{
|
|
375 |
Ok: true,
|
|
376 |
}
|
|
377 |
members := []User{
|
|
378 |
getTestUserWithId(fmt.Sprintf("U%03d", n)),
|
|
379 |
}
|
|
380 |
rw.Header().Set("Content-Type", "application/json")
|
|
381 |
if cpage = atomic.AddInt64(&n, 1); cpage == max {
|
|
382 |
response, _ := json.Marshal(userResponseFull{
|
|
383 |
SlackResponse: sresp,
|
|
384 |
Members: members,
|
|
385 |
})
|
|
386 |
rw.Write(response)
|
|
387 |
return
|
|
388 |
}
|
|
389 |
response, _ := json.Marshal(userResponseFull{
|
|
390 |
SlackResponse: sresp,
|
|
391 |
Members: members,
|
|
392 |
Metadata: ResponseMetadata{Cursor: strconv.Itoa(int(cpage))},
|
|
393 |
})
|
|
394 |
rw.Write(response)
|
|
395 |
}
|
|
396 |
}
|
|
397 |
|
351 | 398 |
func TestSetUserPhoto(t *testing.T) {
|
352 | 399 |
file, fileContent, teardown := createUserPhoto(t)
|
353 | 400 |
defer teardown()
|
|
552 | 599 |
t.Fatalf(`fields.fields = %v, wanted %v`, fields.fields, m)
|
553 | 600 |
}
|
554 | 601 |
}
|
|
602 |
|
|
603 |
func TestGetUsersHandlesRateLimit(t *testing.T) {
|
|
604 |
http.DefaultServeMux = new(http.ServeMux)
|
|
605 |
http.HandleFunc("/users.list", getUserPagesWithRateLimitErrors(4))
|
|
606 |
|
|
607 |
once.Do(startServer)
|
|
608 |
api := New("testing-token", OptionAPIURL("http://"+serverAddr+"/"))
|
|
609 |
|
|
610 |
users, err := api.GetUsers()
|
|
611 |
if err != nil {
|
|
612 |
t.Errorf("Unexpected error: %s", err)
|
|
613 |
return
|
|
614 |
}
|
|
615 |
|
|
616 |
if !reflect.DeepEqual([]User{
|
|
617 |
getTestUserWithId("U000"),
|
|
618 |
getTestUserWithId("U001"),
|
|
619 |
getTestUserWithId("U002"),
|
|
620 |
getTestUserWithId("U003"),
|
|
621 |
}, users) {
|
|
622 |
t.Fatal(ErrIncorrectResponse)
|
|
623 |
}
|
|
624 |
}
|
|
625 |
|
|
626 |
func TestGetUsersReturnsServerError(t *testing.T) {
|
|
627 |
http.DefaultServeMux = new(http.ServeMux)
|
|
628 |
http.HandleFunc("/users.list", func(w http.ResponseWriter, r *http.Request) {
|
|
629 |
w.WriteHeader(http.StatusInternalServerError)
|
|
630 |
})
|
|
631 |
|
|
632 |
once.Do(startServer)
|
|
633 |
api := New("testing-token", OptionAPIURL("http://"+serverAddr+"/"))
|
|
634 |
|
|
635 |
_, err := api.GetUsers()
|
|
636 |
|
|
637 |
if err == nil {
|
|
638 |
t.Errorf("Expected error but got nil")
|
|
639 |
return
|
|
640 |
}
|
|
641 |
|
|
642 |
expectedErr := "slack server error: 500 Internal Server Error"
|
|
643 |
if err.Error() != expectedErr {
|
|
644 |
t.Errorf("Expected: %s. Got: %s", expectedErr, err.Error())
|
|
645 |
}
|
|
646 |
}
|