Browse Source

Add ListEmails, AddEmails, and DeleteEmails for Users service.

This includes tests for relevant methods. Fixes #14.
Akeda Bagus 13 years ago
parent
commit
9f96faa2c2
2 changed files with 118 additions and 0 deletions
  1. +47
    -0
      github/users.go
  2. +71
    -0
      github/users_test.go

+ 47
- 0
github/users.go View File

@ -40,6 +40,9 @@ type User struct {
CreatedAt *time.Time `json:"created_at,omitempty"`
}
// UserEmail represents user's email address
type UserEmail string
// Get fetches a user. Passing the empty string will fetch the authenticated
// user.
//
@ -104,3 +107,47 @@ func (s *UsersService) ListAll(opt *UserListOptions) ([]User, error) {
_, err = s.client.Do(req, users)
return *users, err
}
// ListEmails lists all authenticated user email addresses
//
// GitHub API docs: http://developer.github.com/v3/users/emails/#list-email-addresses-for-a-user
func (s *UsersService) ListEmails() ([]UserEmail, error) {
u := "user/emails"
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, err
}
emails := new([]UserEmail)
_, err = s.client.Do(req, emails)
return *emails, err
}
// AddEmails adds email addresses of authenticated user
//
// GitHub API docs: http://developer.github.com/v3/users/emails/#add-email-addresses
func (s *UsersService) AddEmails(emails *[]UserEmail) (*[]UserEmail, error) {
u := "user/emails"
req, err := s.client.NewRequest("POST", u, emails)
if err != nil {
return nil, err
}
e := new([]UserEmail)
_, err = s.client.Do(req, e)
return e, err
}
// DeleteEmails deletes email addresses from authenticated user
//
// GitHub API docs: http://developer.github.com/v3/users/emails/#delete-email-addresses
func (s *UsersService) DeleteEmails(emails *[]UserEmail) error {
u := "user/emails"
req, err := s.client.NewRequest("DELETE", u, emails)
if err != nil {
return err
}
_, err = s.client.Do(req, nil)
return err
}

+ 71
- 0
github/users_test.go View File

@ -109,3 +109,74 @@ func TestUsersService_ListAll(t *testing.T) {
t.Errorf("Users.ListAll returned %+v, want %+v", users, want)
}
}
func TestUsersService_ListEmails(t *testing.T) {
setup()
defer teardown()
mux.HandleFunc("/user/emails", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `["user@example.com"]`)
})
emails, err := client.Users.ListEmails()
if err != nil {
t.Errorf("Users.ListEmails returned error: %v", err)
}
want := []UserEmail{"user@example.com"}
if !reflect.DeepEqual(emails, want) {
t.Errorf("Users.ListEmails returned %+v, want %+v", emails, want)
}
}
func TestUsersService_AddEmails(t *testing.T) {
setup()
defer teardown()
input := &[]UserEmail{"new@example.com"}
mux.HandleFunc("/user/emails", func(w http.ResponseWriter, r *http.Request) {
v := &[]UserEmail{}
json.NewDecoder(r.Body).Decode(v)
testMethod(t, r, "POST")
if !reflect.DeepEqual(v, input) {
t.Errorf("Request body = %+v, want %+v", v, input)
}
fmt.Fprint(w, `["old@example.com", "new@example.com"]`)
})
emails, err := client.Users.AddEmails(input)
if err != nil {
t.Errorf("Users.AddEmails returned error: %v", err)
}
want := &[]UserEmail{"old@example.com", "new@example.com"}
if !reflect.DeepEqual(emails, want) {
t.Errorf("Users.AddEmails returned %+v, want %+v", emails, want)
}
}
func TestUsersService_DeleteEmails(t *testing.T) {
setup()
defer teardown()
input := &[]UserEmail{"user@example.com"}
mux.HandleFunc("/user/emails", func(w http.ResponseWriter, r *http.Request) {
v := &[]UserEmail{}
json.NewDecoder(r.Body).Decode(v)
testMethod(t, r, "DELETE")
if !reflect.DeepEqual(v, input) {
t.Errorf("Request body = %+v, want %+v", v, input)
}
})
err := client.Users.DeleteEmails(input)
if err != nil {
t.Errorf("Users.DeleteEmails returned error: %v", err)
}
}

Loading…
Cancel
Save