diff --git a/github/activity_events.go b/github/activity_events.go index 64aa960..c595244 100644 --- a/github/activity_events.go +++ b/github/activity_events.go @@ -58,6 +58,116 @@ type PushEventCommit struct { Distinct bool `json:"distinct"` } +// List public events. +// +// GitHub API docs: http://developer.github.com/v3/activity/events/#list-public-events +func (s *ActivityService) ListPublicEvents(opt *ListOptions) ([]Event, *Response, error) { + u := "events" + if opt != nil { + params := url.Values{ + "page": []string{strconv.Itoa(opt.Page)}, + } + u += "?" + params.Encode() + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + events := new([]Event) + resp, err := s.client.Do(req, events) + return *events, resp, err +} + +// List repository events. +// +// GitHub API docs: http://developer.github.com/v3/activity/events/#list-repository-events +func (s *ActivityService) ListRepositoryEvents(owner, repo string, opt *ListOptions) ([]Event, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/events", owner, repo) + if opt != nil { + params := url.Values{ + "page": []string{strconv.Itoa(opt.Page)}, + } + u += "?" + params.Encode() + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + events := new([]Event) + resp, err := s.client.Do(req, events) + return *events, resp, err +} + +// List issue events for a repository. +// +// GitHub API docs: http://developer.github.com/v3/activity/events/#list-issue-events-for-a-repository +func (s *ActivityService) ListIssueEventsForRepository(owner, repo string, opt *ListOptions) ([]Event, *Response, error) { + u := fmt.Sprintf("repos/%v/%v/issues/events", owner, repo) + if opt != nil { + params := url.Values{ + "page": []string{strconv.Itoa(opt.Page)}, + } + u += "?" + params.Encode() + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + events := new([]Event) + resp, err := s.client.Do(req, events) + return *events, resp, err +} + +// List public events for a network of repositories +// +// GitHub API docs: http://developer.github.com/v3/activity/events/#list-public-events-for-a-network-of-repositories +func (s *ActivityService) ListEventsForRepoNetwork(owner, repo string, opt *ListOptions) ([]Event, *Response, error) { + u := fmt.Sprintf("networks/%v/%v/events", owner, repo) + if opt != nil { + params := url.Values{ + "page": []string{strconv.Itoa(opt.Page)}, + } + u += "?" + params.Encode() + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + events := new([]Event) + resp, err := s.client.Do(req, events) + return *events, resp, err +} + +// List public events for an organization +// +// GitHub API docs: http://developer.github.com/v3/activity/events/#list-public-events-for-an-organization +func (s *ActivityService) ListPublicEventsForOrganization(org string, opt *ListOptions) ([]Event, *Response, error) { + u := fmt.Sprintf("orgs/%v/events", org) + if opt != nil { + params := url.Values{ + "page": []string{strconv.Itoa(opt.Page)}, + } + u += "?" + params.Encode() + } + + req, err := s.client.NewRequest("GET", u, nil) + if err != nil { + return nil, nil, err + } + + events := new([]Event) + resp, err := s.client.Do(req, events) + return *events, resp, err +} + // ListEventsPerformedByUser lists the events performed by a user. If publicOnly is // true, only public events will be returned. // @@ -116,11 +226,11 @@ func (s *ActivityService) ListEventsRecievedByUser(user string, publicOnly bool, return *events, resp, err } -// ListEventsForOrganization provides the user’s organization dashboard. You +// ListUserEventsForOrganization provides the user’s organization dashboard. You // must be authenticated as the user to view this. // // GitHub API docs: http://developer.github.com/v3/activity/events/#list-events-for-an-organization -func (s *ActivityService) ListEventsForOrganization(org, user string, opt *ListOptions) ([]Event, *Response, error) { +func (s *ActivityService) ListUserEventsForOrganization(org, user string, opt *ListOptions) ([]Event, *Response, error) { u := fmt.Sprintf("users/%v/events/orgs/%v", user, org) if opt != nil { params := url.Values{ diff --git a/github/activity_events_test.go b/github/activity_events_test.go index 853d09e..f5eb747 100644 --- a/github/activity_events_test.go +++ b/github/activity_events_test.go @@ -13,6 +13,126 @@ import ( "testing" ) +func TestActivityService_ListPublicEvents(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/events", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + testFormValues(t, r, values{ + "page": "2", + }) + fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) + }) + + opt := &ListOptions{Page: 2} + events, _, err := client.Activity.ListPublicEvents(opt) + if err != nil { + t.Errorf("Activities.ListPublicEvents returned error: %v", err) + } + + want := []Event{{ID: "1"}, {ID: "2"}} + if !reflect.DeepEqual(events, want) { + t.Errorf("Activities.ListPublicEvents returned %+v, want %+v", events, want) + } +} + +func TestActivityService_ListRepositoryEvents(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/repos/o/r/events", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + testFormValues(t, r, values{ + "page": "2", + }) + fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) + }) + + opt := &ListOptions{Page: 2} + events, _, err := client.Activity.ListRepositoryEvents("o", "r", opt) + if err != nil { + t.Errorf("Activities.ListRepositoryEvents returned error: %v", err) + } + + want := []Event{{ID: "1"}, {ID: "2"}} + if !reflect.DeepEqual(events, want) { + t.Errorf("Activities.ListRepositoryEvents returned %+v, want %+v", events, want) + } +} + +func TestActivityService_ListIssueEventsForRepository(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/repos/o/r/issues/events", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + testFormValues(t, r, values{ + "page": "2", + }) + fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) + }) + + opt := &ListOptions{Page: 2} + events, _, err := client.Activity.ListIssueEventsForRepository("o", "r", opt) + if err != nil { + t.Errorf("Activities.ListIssueEventsForRepository returned error: %v", err) + } + + want := []Event{{ID: "1"}, {ID: "2"}} + if !reflect.DeepEqual(events, want) { + t.Errorf("Activities.ListIssueEventsForRepository returned %+v, want %+v", events, want) + } +} + +func TestActivityService_ListEventsForRepoNetwork(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/networks/o/r/events", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + testFormValues(t, r, values{ + "page": "2", + }) + fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) + }) + + opt := &ListOptions{Page: 2} + events, _, err := client.Activity.ListEventsForRepoNetwork("o", "r", opt) + if err != nil { + t.Errorf("Activities.ListEventsForRepoNetwork returned error: %v", err) + } + + want := []Event{{ID: "1"}, {ID: "2"}} + if !reflect.DeepEqual(events, want) { + t.Errorf("Activities.ListEventsForRepoNetwork returned %+v, want %+v", events, want) + } +} + +func TestActivityService_ListPublicEventsForOrganization(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/orgs/o/events", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "GET") + testFormValues(t, r, values{ + "page": "2", + }) + fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) + }) + + opt := &ListOptions{Page: 2} + events, _, err := client.Activity.ListPublicEventsForOrganization("o", opt) + if err != nil { + t.Errorf("Activities.ListPublicEventsForOrganization returned error: %v", err) + } + + want := []Event{{ID: "1"}, {ID: "2"}} + if !reflect.DeepEqual(events, want) { + t.Errorf("Activities.ListPublicEventsForOrganization returned %+v, want %+v", events, want) + } +} + func TestActivityService_ListEventsPerformedByUser_all(t *testing.T) { setup() defer teardown() @@ -101,7 +221,7 @@ func TestActivityService_ListEventsRecievedByUser_publicOnly(t *testing.T) { } } -func TestActivityService_ListEventsForOrganization(t *testing.T) { +func TestActivityService_ListUserEventsForOrganization(t *testing.T) { setup() defer teardown() @@ -110,14 +230,14 @@ func TestActivityService_ListEventsForOrganization(t *testing.T) { fmt.Fprint(w, `[{"id":"1"},{"id":"2"}]`) }) - events, _, err := client.Activity.ListEventsForOrganization("o", "u", nil) + events, _, err := client.Activity.ListUserEventsForOrganization("o", "u", nil) if err != nil { - t.Errorf("Activities.ListEventsForOrganization returned error: %v", err) + t.Errorf("Activities.ListUserEventsForOrganization returned error: %v", err) } want := []Event{{ID: "1"}, {ID: "2"}} if !reflect.DeepEqual(events, want) { - t.Errorf("Activities.ListEventsForOrganization returned %+v, want %+v", events, want) + t.Errorf("Activities.ListUserEventsForOrganization returned %+v, want %+v", events, want) } }