diff --git a/github/users.go b/github/users.go index 360ec39..63fce80 100644 --- a/github/users.go +++ b/github/users.go @@ -106,47 +106,3 @@ 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 -} diff --git a/github/users_emails.go b/github/users_emails.go new file mode 100644 index 0000000..aa5de1a --- /dev/null +++ b/github/users_emails.go @@ -0,0 +1,50 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +// 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 +} diff --git a/github/users_emails_test.go b/github/users_emails_test.go new file mode 100644 index 0000000..41263c1 --- /dev/null +++ b/github/users_emails_test.go @@ -0,0 +1,85 @@ +// Copyright 2013 The go-github AUTHORS. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package github + +import ( + "encoding/json" + "fmt" + "net/http" + "reflect" + "testing" +) + +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 := new([]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 := new([]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) + } +} diff --git a/github/users_test.go b/github/users_test.go index e6fb569..cdd8a09 100644 --- a/github/users_test.go +++ b/github/users_test.go @@ -108,74 +108,3 @@ 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 := new([]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 := new([]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) - } -}