From 8664943d1f8d6d651d2c02b9ab61a4873135783f Mon Sep 17 00:00:00 2001 From: Will Norris Date: Wed, 9 Apr 2014 17:13:27 -0700 Subject: [PATCH] fix AddEmails return type and finish email tests The GitHub docs don't make it completely clear that AddEmails is also switching to the new v3 response format, but new integration tests verify that it is. --- github/users_emails.go | 4 +-- github/users_emails_test.go | 7 ++-- tests/integration/users_test.go | 60 ++++++++++++++++++++++++++++++++- 3 files changed, 66 insertions(+), 5 deletions(-) diff --git a/github/users_emails.go b/github/users_emails.go index 6695550..051ed5e 100644 --- a/github/users_emails.go +++ b/github/users_emails.go @@ -34,14 +34,14 @@ func (s *UsersService) ListEmails() ([]UserEmail, *Response, error) { // AddEmails adds email addresses of the authenticated user. // // GitHub API docs: http://developer.github.com/v3/users/emails/#add-email-addresses -func (s *UsersService) AddEmails(emails []string) ([]string, *Response, error) { +func (s *UsersService) AddEmails(emails []string) ([]UserEmail, *Response, error) { u := "user/emails" req, err := s.client.NewRequest("POST", u, emails) if err != nil { return nil, nil, err } - e := new([]string) + e := new([]UserEmail) resp, err := s.client.Do(req, e) if err != nil { return nil, resp, err diff --git a/github/users_emails_test.go b/github/users_emails_test.go index e2ca373..b3009c0 100644 --- a/github/users_emails_test.go +++ b/github/users_emails_test.go @@ -52,7 +52,7 @@ func TestUsersService_AddEmails(t *testing.T) { t.Errorf("Request body = %+v, want %+v", *v, input) } - fmt.Fprint(w, `["old@example.com", "new@example.com"]`) + fmt.Fprint(w, `[{"email":"old@example.com"}, {"email":"new@example.com"}]`) }) emails, _, err := client.Users.AddEmails(input) @@ -60,7 +60,10 @@ func TestUsersService_AddEmails(t *testing.T) { t.Errorf("Users.AddEmails returned error: %v", err) } - want := []string{"old@example.com", "new@example.com"} + want := []UserEmail{ + {Email: String("old@example.com")}, + {Email: String("new@example.com")}, + } if !reflect.DeepEqual(emails, want) { t.Errorf("Users.AddEmails returned %+v, want %+v", emails, want) } diff --git a/tests/integration/users_test.go b/tests/integration/users_test.go index e315ac5..acb5c7f 100644 --- a/tests/integration/users_test.go +++ b/tests/integration/users_test.go @@ -5,7 +5,11 @@ package tests -import "testing" +import ( + "fmt" + "math/rand" + "testing" +) func TestUsers_List(t *testing.T) { u, _, err := client.Users.ListAll(nil) @@ -57,4 +61,58 @@ func TestUsers_Emails(t *testing.T) { if err != nil { t.Fatalf("Users.ListEmails() returned error: %v", err) } + + // create random address not currently in user's emails + var email string + for { + email = fmt.Sprintf("test-%d@example.com", rand.Int()) + for _, e := range emails { + if e.Email != nil && *e.Email == email { + continue + } + } + break + } + + // Add new address + _, _, err = client.Users.AddEmails([]string{email}) + if err != nil { + t.Fatalf("Users.AddEmails() returned error: %v", err) + } + + // List emails again and verify new email is present + emails, _, err = client.Users.ListEmails() + if err != nil { + t.Fatalf("Users.ListEmails() returned error: %v", err) + } + + var found bool + for _, e := range emails { + if e.Email != nil && *e.Email == email { + found = true + break + } + } + + if !found { + t.Fatalf("Users.ListEmails() does not contain new addres: %v", email) + } + + // Remove new address + _, err = client.Users.DeleteEmails([]string{email}) + if err != nil { + t.Fatalf("Users.DeleteEmails() returned error: %v", err) + } + + // List emails again and verify new email was removed + emails, _, err = client.Users.ListEmails() + if err != nil { + t.Fatalf("Users.ListEmails() returned error: %v", err) + } + + for _, e := range emails { + if e.Email != nil && *e.Email == email { + t.Fatalf("Users.ListEmails() still contains address %v after removing it", email) + } + } }