package github import ( "bytes" "log" "net/http" "net/http/httptest" "os" "testing" . "gopkg.in/go-playground/assert.v1" ) // NOTES: // - Run "go test" to run tests // - Run "gocov test | gocov report" to report on test converage by file // - Run "gocov test | gocov annotate -" to report on all code and functions, those ,marked with "MISS" were never called // // or // // -- may be a good idea to change to output path to somewherelike /tmp // go test -coverprofile cover.out && go tool cover -html=cover.out -o cover.html // const ( path = "/webhooks" ) var hook *Webhook func TestMain(m *testing.M) { // setup var err error hook, err = New(Options.Secret("IsWishesWereHorsesWedAllBeEatingSteak!")) if err != nil { log.Fatal(err) } os.Exit(m.Run()) // teardown } func newServer(handler http.HandlerFunc) *httptest.Server { mux := http.NewServeMux() mux.HandleFunc(path, handler) return httptest.NewServer(mux) } func TestBadNoEventHeader(t *testing.T) { payload := "{}" var parseError error server := newServer(func(w http.ResponseWriter, r *http.Request) { _, parseError = hook.Parse(r, CreateEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, ErrMissingGithubEventHeader) } func TestUnsubscribedEvent(t *testing.T) { payload := "{}" var parseError error server := newServer(func(w http.ResponseWriter, r *http.Request) { _, parseError = hook.Parse(r, CreateEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "noneexistant_event") client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, ErrEventNotFound) } func TestBadBody(t *testing.T) { payload := "" var parseError error server := newServer(func(w http.ResponseWriter, r *http.Request) { _, parseError = hook.Parse(r, CommitCommentEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "commit_comment") req.Header.Set("X-Hub-Signature", "sha1=156404ad5f721c53151147f3d3d302329f95a3ab") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, ErrParsingPayload) } func TestBadSignatureLength(t *testing.T) { payload := "{}" var parseError error server := newServer(func(w http.ResponseWriter, r *http.Request) { _, parseError = hook.Parse(r, CommitCommentEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "commit_comment") req.Header.Set("X-Hub-Signature", "") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, ErrMissingHubSignatureHeader) } func TestBadSignatureMatch(t *testing.T) { payload := "{}" var parseError error server := newServer(func(w http.ResponseWriter, r *http.Request) { _, parseError = hook.Parse(r, CommitCommentEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "commit_comment") req.Header.Set("X-Hub-Signature", "sha1=111") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, ErrHMACVerificationFailed) } func TestCommitCommentEvent(t *testing.T) { payload := `{ "action": "created", "comment": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/comments/11056394", "html_url": "https://github.com/baxterthehacker/public-repo/commit/9049f1265b7d61be4a8904a9a27120d2064dab3b#commitcomment-11056394", "id": 11056394, "user": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "position": null, "line": null, "path": null, "commit_id": "9049f1265b7d61be4a8904a9a27120d2064dab3b", "created_at": "2015-05-05T23:40:29Z", "updated_at": "2015-05-05T23:40:29Z", "body": "This is a really good change! :+1:" }, "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:12Z", "pushed_at": "2015-05-05T23:40:27Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 2, "forks": 0, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, CommitCommentEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "commit_comment") req.Header.Set("X-Hub-Signature", "sha1=156404ad5f721c53151147f3d3d302329f95a3ab") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(CommitCommentPayload) Equal(t, ok, true) } func TestCreateEvent(t *testing.T) { payload := `{ "ref": "0.0.1", "ref_type": "tag", "master_branch": "master", "description": "", "pusher_type": "user", "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:30Z", "pushed_at": "2015-05-05T23:40:38Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 2, "forks": 0, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, CreateEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "create") req.Header.Set("X-Hub-Signature", "sha1=77ff16ca116034bbeed77ebfce83b36572a9cbaf") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(CreatePayload) Equal(t, ok, true) } func TestDeleteEvent(t *testing.T) { payload := `{ "ref": "simple-tag", "ref_type": "tag", "pusher_type": "user", "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:30Z", "pushed_at": "2015-05-05T23:40:40Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 2, "forks": 0, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, DeleteEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "delete") req.Header.Set("X-Hub-Signature", "sha1=4ddef04fd05b504c7041e294fca3ad1804bc7be1") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(DeletePayload) Equal(t, ok, true) } func TestDeploymentEvent(t *testing.T) { payload := `{ "deployment": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692", "id": 710692, "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b", "ref": "master", "task": "deploy", "payload": { }, "environment": "production", "description": null, "creator": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "created_at": "2015-05-05T23:40:38Z", "updated_at": "2015-05-05T23:40:38Z", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692/statuses", "repository_url": "https://api.github.com/repos/baxterthehacker/public-repo" }, "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:30Z", "pushed_at": "2015-05-05T23:40:38Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 2, "forks": 0, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, DeploymentEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "deployment") req.Header.Set("X-Hub-Signature", "sha1=bb47dc63ceb764a6b1f14fe123e299e5b814c67c") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(DeploymentPayload) Equal(t, ok, true) } func TestDeploymentStatusEvent(t *testing.T) { payload := `{ "deployment_status": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692/statuses/1115122", "id": 1115122, "state": "success", "creator": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "description": null, "target_url": null, "created_at": "2015-05-05T23:40:39Z", "updated_at": "2015-05-05T23:40:39Z", "deployment_url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692", "repository_url": "https://api.github.com/repos/baxterthehacker/public-repo" }, "deployment": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692", "id": 710692, "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b", "ref": "master", "task": "deploy", "payload": { }, "environment": "production", "description": null, "creator": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "created_at": "2015-05-05T23:40:38Z", "updated_at": "2015-05-05T23:40:38Z", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692/statuses", "repository_url": "https://api.github.com/repos/baxterthehacker/public-repo" }, "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:30Z", "pushed_at": "2015-05-05T23:40:38Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 2, "forks": 0, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, DeploymentStatusEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "deployment_status") req.Header.Set("X-Hub-Signature", "sha1=1b2ce08e0c3487fdf22bed12c63dc734cf6dc8a4") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(DeploymentStatusPayload) Equal(t, ok, true) } func TestForkEvent(t *testing.T) { payload := `{ "forkee": { "id": 35129393, "name": "public-repo", "full_name": "baxterandthehackers/public-repo", "owner": { "login": "baxterandthehackers", "id": 7649605, "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterandthehackers", "html_url": "https://github.com/baxterandthehackers", "followers_url": "https://api.github.com/users/baxterandthehackers/followers", "following_url": "https://api.github.com/users/baxterandthehackers/following{/other_user}", "gists_url": "https://api.github.com/users/baxterandthehackers/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterandthehackers/subscriptions", "organizations_url": "https://api.github.com/users/baxterandthehackers/orgs", "repos_url": "https://api.github.com/users/baxterandthehackers/repos", "events_url": "https://api.github.com/users/baxterandthehackers/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterandthehackers/received_events", "type": "Organization", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterandthehackers/public-repo", "description": "", "fork": true, "url": "https://api.github.com/repos/baxterandthehackers/public-repo", "forks_url": "https://api.github.com/repos/baxterandthehackers/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterandthehackers/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterandthehackers/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterandthehackers/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterandthehackers/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterandthehackers/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterandthehackers/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterandthehackers/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterandthehackers/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterandthehackers/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterandthehackers/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterandthehackers/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterandthehackers/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterandthehackers/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterandthehackers/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterandthehackers/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterandthehackers/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterandthehackers/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterandthehackers/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterandthehackers/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterandthehackers/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterandthehackers/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterandthehackers/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterandthehackers/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterandthehackers/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterandthehackers/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterandthehackers/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:30Z", "updated_at": "2015-05-05T23:40:30Z", "pushed_at": "2015-05-05T23:40:27Z", "git_url": "git://github.com/baxterandthehackers/public-repo.git", "ssh_url": "git@github.com:baxterandthehackers/public-repo.git", "clone_url": "https://github.com/baxterandthehackers/public-repo.git", "svn_url": "https://github.com/baxterandthehackers/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": false, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 0, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master", "public": true }, "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:30Z", "pushed_at": "2015-05-05T23:40:27Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 1, "mirror_url": null, "open_issues_count": 2, "forks": 1, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterandthehackers", "id": 7649605, "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterandthehackers", "html_url": "https://github.com/baxterandthehackers", "followers_url": "https://api.github.com/users/baxterandthehackers/followers", "following_url": "https://api.github.com/users/baxterandthehackers/following{/other_user}", "gists_url": "https://api.github.com/users/baxterandthehackers/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterandthehackers/subscriptions", "organizations_url": "https://api.github.com/users/baxterandthehackers/orgs", "repos_url": "https://api.github.com/users/baxterandthehackers/repos", "events_url": "https://api.github.com/users/baxterandthehackers/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterandthehackers/received_events", "type": "Organization", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, ForkEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "fork") req.Header.Set("X-Hub-Signature", "sha1=cec5f8fb7c383514c622d3eb9e121891dfcca848") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(ForkPayload) Equal(t, ok, true) } func TestGollumEvent(t *testing.T) { payload := `{ "pages": [ { "page_name": "Home", "title": "Home", "summary": null, "action": "created", "sha": "91ea1bd42aa2ba166b86e8aefe049e9837214e67", "html_url": "https://github.com/baxterthehacker/public-repo/wiki/Home" } ], "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:12Z", "pushed_at": "2015-05-05T23:40:17Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 0, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, "sender": { "login": "jasonrudolph", "id": 2988, "avatar_url": "https://avatars.githubusercontent.com/u/2988?v=3", "gravatar_id": "", "url": "https://api.github.com/users/jasonrudolph", "html_url": "https://github.com/jasonrudolph", "followers_url": "https://api.github.com/users/jasonrudolph/followers", "following_url": "https://api.github.com/users/jasonrudolph/following{/other_user}", "gists_url": "https://api.github.com/users/jasonrudolph/gists{/gist_id}", "starred_url": "https://api.github.com/users/jasonrudolph/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/jasonrudolph/subscriptions", "organizations_url": "https://api.github.com/users/jasonrudolph/orgs", "repos_url": "https://api.github.com/users/jasonrudolph/repos", "events_url": "https://api.github.com/users/jasonrudolph/events{/privacy}", "received_events_url": "https://api.github.com/users/jasonrudolph/received_events", "type": "User", "site_admin": true } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, GollumEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "gollum") req.Header.Set("X-Hub-Signature", "sha1=a375a6dc8ceac7231ee022211f8eb85e2a84a5b9") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(GollumPayload) Equal(t, ok, true) } func TestInstallationEvent(t *testing.T) { payload := `{ "action": "created", "installation": { "id": 80429, "account": { "login": "PombeirP", "id": 138074, "avatar_url": "https://avatars1.githubusercontent.com/u/138074?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PombeirP", "html_url": "https://github.com/PombeirP", "followers_url": "https://api.github.com/users/PombeirP/followers", "following_url": "https://api.github.com/users/PombeirP/following{/other_user}", "gists_url": "https://api.github.com/users/PombeirP/gists{/gist_id}", "starred_url": "https://api.github.com/users/PombeirP/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PombeirP/subscriptions", "organizations_url": "https://api.github.com/users/PombeirP/orgs", "repos_url": "https://api.github.com/users/PombeirP/repos", "events_url": "https://api.github.com/users/PombeirP/events{/privacy}", "received_events_url": "https://api.github.com/users/PombeirP/received_events", "type": "User", "site_admin": false }, "repository_selection": "selected", "access_tokens_url": "https://api.github.com/installations/80429/access_tokens", "repositories_url": "https://api.github.com/installation/repositories", "html_url": "https://github.com/settings/installations/80429", "app_id": 8157, "target_id": 138074, "target_type": "User", "permissions": { "repository_projects": "write", "issues": "read", "metadata": "read", "pull_requests": "read" }, "events": [ "pull_request" ], "created_at": 1516025475, "updated_at": 1516025475, "single_file_name": null }, "repositories": [ { "id": 117381220, "name": "status-github-bot", "full_name": "PombeirP/status-github-bot" } ], "sender": { "login": "PombeirP", "id": 138074, "avatar_url": "https://avatars1.githubusercontent.com/u/138074?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PombeirP", "html_url": "https://github.com/PombeirP", "followers_url": "https://api.github.com/users/PombeirP/followers", "following_url": "https://api.github.com/users/PombeirP/following{/other_user}", "gists_url": "https://api.github.com/users/PombeirP/gists{/gist_id}", "starred_url": "https://api.github.com/users/PombeirP/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PombeirP/subscriptions", "organizations_url": "https://api.github.com/users/PombeirP/orgs", "repos_url": "https://api.github.com/users/PombeirP/repos", "events_url": "https://api.github.com/users/PombeirP/events{/privacy}", "received_events_url": "https://api.github.com/users/PombeirP/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, InstallationEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "installation") req.Header.Set("X-Hub-Signature", "sha1=987338c6e5c21794ab6c258abe51284f9b1df728") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(InstallationPayload) Equal(t, ok, true) } func TestIntegrationInstallationEvent(t *testing.T) { payload := `{ "action": "created", "installation": { "id": 80429, "account": { "login": "PombeirP", "id": 138074, "avatar_url": "https://avatars1.githubusercontent.com/u/138074?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PombeirP", "html_url": "https://github.com/PombeirP", "followers_url": "https://api.github.com/users/PombeirP/followers", "following_url": "https://api.github.com/users/PombeirP/following{/other_user}", "gists_url": "https://api.github.com/users/PombeirP/gists{/gist_id}", "starred_url": "https://api.github.com/users/PombeirP/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PombeirP/subscriptions", "organizations_url": "https://api.github.com/users/PombeirP/orgs", "repos_url": "https://api.github.com/users/PombeirP/repos", "events_url": "https://api.github.com/users/PombeirP/events{/privacy}", "received_events_url": "https://api.github.com/users/PombeirP/received_events", "type": "User", "site_admin": false }, "repository_selection": "selected", "access_tokens_url": "https://api.github.com/installations/80429/access_tokens", "repositories_url": "https://api.github.com/installation/repositories", "html_url": "https://github.com/settings/installations/80429", "app_id": 8157, "target_id": 138074, "target_type": "User", "permissions": { "repository_projects": "write", "issues": "read", "metadata": "read", "pull_requests": "read" }, "events": [ "pull_request" ], "created_at": 1516025475, "updated_at": 1516025475, "single_file_name": null }, "repositories": [ { "id": 117381220, "name": "status-github-bot", "full_name": "PombeirP/status-github-bot" } ], "sender": { "login": "PombeirP", "id": 138074, "avatar_url": "https://avatars1.githubusercontent.com/u/138074?v=4", "gravatar_id": "", "url": "https://api.github.com/users/PombeirP", "html_url": "https://github.com/PombeirP", "followers_url": "https://api.github.com/users/PombeirP/followers", "following_url": "https://api.github.com/users/PombeirP/following{/other_user}", "gists_url": "https://api.github.com/users/PombeirP/gists{/gist_id}", "starred_url": "https://api.github.com/users/PombeirP/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/PombeirP/subscriptions", "organizations_url": "https://api.github.com/users/PombeirP/orgs", "repos_url": "https://api.github.com/users/PombeirP/repos", "events_url": "https://api.github.com/users/PombeirP/events{/privacy}", "received_events_url": "https://api.github.com/users/PombeirP/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, IntegrationInstallationEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "integration_installation") req.Header.Set("X-Hub-Signature", "sha1=987338c6e5c21794ab6c258abe51284f9b1df728") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(InstallationPayload) Equal(t, ok, true) } func TestIssueCommentEvent(t *testing.T) { payload := `{ "action": "created", "issue": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/labels{/name}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/comments", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/events", "html_url": "https://github.com/baxterthehacker/public-repo/issues/2", "id": 73464126, "number": 2, "title": "Spelling error in the README file", "user": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "labels": [ { "url": "https://api.github.com/repos/baxterthehacker/public-repo/labels/bug", "name": "bug", "color": "fc2929" } ], "state": "open", "locked": false, "assignee": null, "milestone": null, "comments": 1, "created_at": "2015-05-05T23:40:28Z", "updated_at": "2015-05-05T23:40:28Z", "closed_at": null, "body": "It looks like you accidently spelled 'commit' with two 't's." }, "comment": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments/99262140", "html_url": "https://github.com/baxterthehacker/public-repo/issues/2#issuecomment-99262140", "issue_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2", "id": 99262140, "user": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "created_at": "2015-05-05T23:40:28Z", "updated_at": "2015-05-05T23:40:28Z", "body": "You are totally right! I'll get this fixed right away." }, "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:12Z", "pushed_at": "2015-05-05T23:40:27Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 2, "forks": 0, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, IssueCommentEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "issue_comment") req.Header.Set("X-Hub-Signature", "sha1=e724c9f811fcf5f511aac32e4251b08ab1a0fd87") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(IssueCommentPayload) Equal(t, ok, true) } func TestIssuesEvent(t *testing.T) { payload := `{ "action": "opened", "issue": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/labels{/name}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/comments", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/events", "html_url": "https://github.com/baxterthehacker/public-repo/issues/2", "id": 73464126, "number": 2, "title": "Spelling error in the README file", "user": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "labels": [ { "id": 208045946, "url": "https://api.github.com/repos/baxterthehacker/public-repo/labels/bug", "name": "bug", "color": "fc2929", "default": true } ], "state": "open", "locked": false, "assignee": null, "milestone": null, "comments": 0, "created_at": "2015-05-05T23:40:28Z", "updated_at": "2015-05-05T23:40:28Z", "closed_at": null, "body": "It looks like you accidently spelled 'commit' with two 't's." }, "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:12Z", "pushed_at": "2015-05-05T23:40:27Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 2, "forks": 0, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, IssuesEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "issues") req.Header.Set("X-Hub-Signature", "sha1=dfc9a3428f3df86e4ecd78e34b41c55bba5d0b21") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(IssuesPayload) Equal(t, ok, true) } func TestLabelEvent(t *testing.T) { payload := `{ "action":"created", "label":{ "url":"https://api.github.com/repos/baxterandthehackers/public-repo/labels/blocked", "name":"blocked", "color":"ff0000" }, "repository":{ "id":67075329, "name":"public-repo", "full_name":"baxterandthehackers/public-repo", "owner":{ "login":"baxterandthehackers", "id":4312013, "avatar_url":"https://avatars.githubusercontent.com/u/4312013?v=3", "gravatar_id":"", "url":"https://api.github.com/users/baxterandthehackers", "html_url":"https://github.com/baxterandthehackers", "followers_url":"https://api.github.com/users/baxterandthehackers/followers", "following_url":"https://api.github.com/users/baxterandthehackers/following{/other_user}", "gists_url":"https://api.github.com/users/baxterandthehackers/gists{/gist_id}", "starred_url":"https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}", "subscriptions_url":"https://api.github.com/users/baxterandthehackers/subscriptions", "organizations_url":"https://api.github.com/users/baxterandthehackers/orgs", "repos_url":"https://api.github.com/users/baxterandthehackers/repos", "events_url":"https://api.github.com/users/baxterandthehackers/events{/privacy}", "received_events_url":"https://api.github.com/users/baxterandthehackers/received_events", "type":"Organization", "site_admin":false }, "private":true, "html_url":"https://github.com/baxterandthehackers/public-repo", "description":null, "fork":false, "url":"https://api.github.com/repos/baxterandthehackers/public-repo", "forks_url":"https://api.github.com/repos/baxterandthehackers/public-repo/forks", "keys_url":"https://api.github.com/repos/baxterandthehackers/public-repo/keys{/key_id}", "collaborators_url":"https://api.github.com/repos/baxterandthehackers/public-repo/collaborators{/collaborator}", "teams_url":"https://api.github.com/repos/baxterandthehackers/public-repo/teams", "hooks_url":"https://api.github.com/repos/baxterandthehackers/public-repo/hooks", "issue_events_url":"https://api.github.com/repos/baxterandthehackers/public-repo/issues/events{/number}", "events_url":"https://api.github.com/repos/baxterandthehackers/public-repo/events", "assignees_url":"https://api.github.com/repos/baxterandthehackers/public-repo/assignees{/user}", "branches_url":"https://api.github.com/repos/baxterandthehackers/public-repo/branches{/branch}", "tags_url":"https://api.github.com/repos/baxterandthehackers/public-repo/tags", "blobs_url":"https://api.github.com/repos/baxterandthehackers/public-repo/git/blobs{/sha}", "git_tags_url":"https://api.github.com/repos/baxterandthehackers/public-repo/git/tags{/sha}", "git_refs_url":"https://api.github.com/repos/baxterandthehackers/public-repo/git/refs{/sha}", "trees_url":"https://api.github.com/repos/baxterandthehackers/public-repo/git/trees{/sha}", "statuses_url":"https://api.github.com/repos/baxterandthehackers/public-repo/statuses/{sha}", "languages_url":"https://api.github.com/repos/baxterandthehackers/public-repo/languages", "stargazers_url":"https://api.github.com/repos/baxterandthehackers/public-repo/stargazers", "contributors_url":"https://api.github.com/repos/baxterandthehackers/public-repo/contributors", "subscribers_url":"https://api.github.com/repos/baxterandthehackers/public-repo/subscribers", "subscription_url":"https://api.github.com/repos/baxterandthehackers/public-repo/subscription", "commits_url":"https://api.github.com/repos/baxterandthehackers/public-repo/commits{/sha}", "git_commits_url":"https://api.github.com/repos/baxterandthehackers/public-repo/git/commits{/sha}", "comments_url":"https://api.github.com/repos/baxterandthehackers/public-repo/comments{/number}", "issue_comment_url":"https://api.github.com/repos/baxterandthehackers/public-repo/issues/comments{/number}", "contents_url":"https://api.github.com/repos/baxterandthehackers/public-repo/contents/{+path}", "compare_url":"https://api.github.com/repos/baxterandthehackers/public-repo/compare/{base}...{head}", "merges_url":"https://api.github.com/repos/baxterandthehackers/public-repo/merges", "archive_url":"https://api.github.com/repos/baxterandthehackers/public-repo/{archive_format}{/ref}", "downloads_url":"https://api.github.com/repos/baxterandthehackers/public-repo/downloads", "issues_url":"https://api.github.com/repos/baxterandthehackers/public-repo/issues{/number}", "pulls_url":"https://api.github.com/repos/baxterandthehackers/public-repo/pulls{/number}", "milestones_url":"https://api.github.com/repos/baxterandthehackers/public-repo/milestones{/number}", "notifications_url":"https://api.github.com/repos/baxterandthehackers/public-repo/notifications{?since,all,participating}", "labels_url":"https://api.github.com/repos/baxterandthehackers/public-repo/labels{/name}", "releases_url":"https://api.github.com/repos/baxterandthehackers/public-repo/releases{/id}", "deployments_url":"https://api.github.com/repos/baxterandthehackers/public-repo/deployments", "created_at":"2016-08-31T21:38:51Z", "updated_at":"2016-08-31T21:38:51Z", "pushed_at":"2016-08-31T21:38:51Z", "git_url":"git://github.com/baxterandthehackers/public-repo.git", "ssh_url":"git@github.com:baxterandthehackers/public-repo.git", "clone_url":"https://github.com/baxterandthehackers/public-repo.git", "svn_url":"https://github.com/baxterandthehackers/public-repo", "homepage":null, "size":0, "stargazers_count":0, "watchers_count":0, "language":null, "has_issues":true, "has_downloads":true, "has_wiki":true, "has_pages":false, "forks_count":0, "mirror_url":null, "open_issues_count":2, "forks":0, "open_issues":2, "watchers":0, "default_branch":"master" }, "organization":{ "login":"baxterandthehackers", "id":4312013, "url":"https://api.github.com/orgs/baxterandthehackers", "repos_url":"https://api.github.com/orgs/baxterandthehackers/repos", "events_url":"https://api.github.com/orgs/baxterandthehackers/events", "hooks_url":"https://api.github.com/orgs/baxterandthehackers/hooks", "issues_url":"https://api.github.com/orgs/baxterandthehackers/issues", "members_url":"https://api.github.com/orgs/baxterandthehackers/members{/member}", "public_members_url":"https://api.github.com/orgs/baxterandthehackers/public_members{/member}", "avatar_url":"https://avatars.githubusercontent.com/u/4312013?v=3", "description":"" }, "sender":{ "login":"baxterthehacker", "id":7649605, "avatar_url":"https://avatars.githubusercontent.com/u/7649605?v=3", "gravatar_id":"", "url":"https://api.github.com/users/baxterthehacker", "html_url":"https://github.com/baxterthehacker", "followers_url":"https://api.github.com/users/baxterthehacker/followers", "following_url":"https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url":"https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url":"https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url":"https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url":"https://api.github.com/users/baxterthehacker/orgs", "repos_url":"https://api.github.com/users/baxterthehacker/repos", "events_url":"https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url":"https://api.github.com/users/baxterthehacker/received_events", "type":"User", "site_admin":true } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, LabelEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "label") req.Header.Set("X-Hub-Signature", "sha1=efc13e7ad816235222e4a6b3f96d3fd1e162dbd4") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(LabelPayload) Equal(t, ok, true) } func TestMemberEvent(t *testing.T) { payload := `{ "action": "added", "member": { "login": "octocat", "id": 583231, "avatar_url": "https://avatars.githubusercontent.com/u/583231?v=3", "gravatar_id": "", "url": "https://api.github.com/users/octocat", "html_url": "https://github.com/octocat", "followers_url": "https://api.github.com/users/octocat/followers", "following_url": "https://api.github.com/users/octocat/following{/other_user}", "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", "organizations_url": "https://api.github.com/users/octocat/orgs", "repos_url": "https://api.github.com/users/octocat/repos", "events_url": "https://api.github.com/users/octocat/events{/privacy}", "received_events_url": "https://api.github.com/users/octocat/received_events", "type": "User", "site_admin": false }, "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:30Z", "pushed_at": "2015-05-05T23:40:40Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 2, "forks": 0, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, MemberEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "member") req.Header.Set("X-Hub-Signature", "sha1=597e7d6627a6636d4c3283e36631983fbd57bdd0") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(MemberPayload) Equal(t, ok, true) } func TestMembershipEvent(t *testing.T) { payload := `{ "action": "added", "scope": "team", "member": { "login": "kdaigle", "id": 2501, "avatar_url": "https://avatars.githubusercontent.com/u/2501?v=3", "gravatar_id": "", "url": "https://api.github.com/users/kdaigle", "html_url": "https://github.com/kdaigle", "followers_url": "https://api.github.com/users/kdaigle/followers", "following_url": "https://api.github.com/users/kdaigle/following{/other_user}", "gists_url": "https://api.github.com/users/kdaigle/gists{/gist_id}", "starred_url": "https://api.github.com/users/kdaigle/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/kdaigle/subscriptions", "organizations_url": "https://api.github.com/users/kdaigle/orgs", "repos_url": "https://api.github.com/users/kdaigle/repos", "events_url": "https://api.github.com/users/kdaigle/events{/privacy}", "received_events_url": "https://api.github.com/users/kdaigle/received_events", "type": "User", "site_admin": true }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=2", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "team": { "name": "Contractors", "id": 123456, "slug": "contractors", "permission": "admin", "url": "https://api.github.com/teams/123456", "members_url": "https://api.github.com/teams/123456/members{/member}", "repositories_url": "https://api.github.com/teams/123456/repos" }, "organization": { "login": "baxterandthehackers", "id": 7649605, "url": "https://api.github.com/orgs/baxterandthehackers", "repos_url": "https://api.github.com/orgs/baxterandthehackers/repos", "events_url": "https://api.github.com/orgs/baxterandthehackers/events", "members_url": "https://api.github.com/orgs/baxterandthehackers/members{/member}", "public_members_url": "https://api.github.com/orgs/baxterandthehackers/public_members{/member}", "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=2" } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, MembershipEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "membership") req.Header.Set("X-Hub-Signature", "sha1=16928c947b3707b0efcf8ceb074a5d5dedc9c76e") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(MembershipPayload) Equal(t, ok, true) } func TestMilestoneEvent(t *testing.T) { payload := `{ "action":"created", "milestone":{ "url":"https://api.github.com/repos/baxterandthehackers/public-repo/milestones/3", "html_url":"https://github.com/baxterandthehackers/public-repo/milestones/Test%20milestone%20creation%20webhook%20from%20command%20line2", "labels_url":"https://api.github.com/repos/baxterandthehackers/public-repo/milestones/3/labels", "id":2055681, "number":3, "title":"I am a milestone", "description":null, "creator":{ "login":"baxterthehacker", "id":7649605, "avatar_url":"https://avatars.githubusercontent.com/u/7649605?v=3", "gravatar_id":"", "url":"https://api.github.com/users/baxterthehacker", "html_url":"https://github.com/baxterthehacker", "followers_url":"https://api.github.com/users/baxterthehacker/followers", "following_url":"https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url":"https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url":"https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url":"https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url":"https://api.github.com/users/baxterthehacker/orgs", "repos_url":"https://api.github.com/users/baxterthehacker/repos", "events_url":"https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url":"https://api.github.com/users/baxterthehacker/received_events", "type":"User", "site_admin":true }, "open_issues":0, "closed_issues":0, "state":"open", "created_at":"2016-10-07T19:26:08Z", "updated_at":"2016-10-07T19:26:08Z", "due_on":null, "closed_at":null }, "repository":{ "id":70275481, "name":"public-repo", "full_name":"baxterandthehackers/public-repo", "owner":{ "login":"baxterandthehackers", "id":4312013, "avatar_url":"https://avatars.githubusercontent.com/u/4312013?v=3", "gravatar_id":"", "url":"https://api.github.com/users/baxterandthehackers", "html_url":"https://github.com/baxterandthehackers", "followers_url":"https://api.github.com/users/baxterandthehackers/followers", "following_url":"https://api.github.com/users/baxterandthehackers/following{/other_user}", "gists_url":"https://api.github.com/users/baxterandthehackers/gists{/gist_id}", "starred_url":"https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}", "subscriptions_url":"https://api.github.com/users/baxterandthehackers/subscriptions", "organizations_url":"https://api.github.com/users/baxterandthehackers/orgs", "repos_url":"https://api.github.com/users/baxterandthehackers/repos", "events_url":"https://api.github.com/users/baxterandthehackers/events{/privacy}", "received_events_url":"https://api.github.com/users/baxterandthehackers/received_events", "type":"Organization", "site_admin":false }, "private":true, "html_url":"https://github.com/baxterandthehackers/public-repo", "description":null, "fork":false, "url":"https://api.github.com/repos/baxterandthehackers/public-repo", "forks_url":"https://api.github.com/repos/baxterandthehackers/public-repo/forks", "keys_url":"https://api.github.com/repos/baxterandthehackers/public-repo/keys{/key_id}", "collaborators_url":"https://api.github.com/repos/baxterandthehackers/public-repo/collaborators{/collaborator}", "teams_url":"https://api.github.com/repos/baxterandthehackers/public-repo/teams", "hooks_url":"https://api.github.com/repos/baxterandthehackers/public-repo/hooks", "issue_events_url":"https://api.github.com/repos/baxterandthehackers/public-repo/issues/events{/number}", "events_url":"https://api.github.com/repos/baxterandthehackers/public-repo/events", "assignees_url":"https://api.github.com/repos/baxterandthehackers/public-repo/assignees{/user}", "branches_url":"https://api.github.com/repos/baxterandthehackers/public-repo/branches{/branch}", "tags_url":"https://api.github.com/repos/baxterandthehackers/public-repo/tags", "blobs_url":"https://api.github.com/repos/baxterandthehackers/public-repo/git/blobs{/sha}", "git_tags_url":"https://api.github.com/repos/baxterandthehackers/public-repo/git/tags{/sha}", "git_refs_url":"https://api.github.com/repos/baxterandthehackers/public-repo/git/refs{/sha}", "trees_url":"https://api.github.com/repos/baxterandthehackers/public-repo/git/trees{/sha}", "statuses_url":"https://api.github.com/repos/baxterandthehackers/public-repo/statuses/{sha}", "languages_url":"https://api.github.com/repos/baxterandthehackers/public-repo/languages", "stargazers_url":"https://api.github.com/repos/baxterandthehackers/public-repo/stargazers", "contributors_url":"https://api.github.com/repos/baxterandthehackers/public-repo/contributors", "subscribers_url":"https://api.github.com/repos/baxterandthehackers/public-repo/subscribers", "subscription_url":"https://api.github.com/repos/baxterandthehackers/public-repo/subscription", "commits_url":"https://api.github.com/repos/baxterandthehackers/public-repo/commits{/sha}", "git_commits_url":"https://api.github.com/repos/baxterandthehackers/public-repo/git/commits{/sha}", "comments_url":"https://api.github.com/repos/baxterandthehackers/public-repo/comments{/number}", "issue_comment_url":"https://api.github.com/repos/baxterandthehackers/public-repo/issues/comments{/number}", "contents_url":"https://api.github.com/repos/baxterandthehackers/public-repo/contents/{+path}", "compare_url":"https://api.github.com/repos/baxterandthehackers/public-repo/compare/{base}...{head}", "merges_url":"https://api.github.com/repos/baxterandthehackers/public-repo/merges", "archive_url":"https://api.github.com/repos/baxterandthehackers/public-repo/{archive_format}{/ref}", "downloads_url":"https://api.github.com/repos/baxterandthehackers/public-repo/downloads", "issues_url":"https://api.github.com/repos/baxterandthehackers/public-repo/issues{/number}", "pulls_url":"https://api.github.com/repos/baxterandthehackers/public-repo/pulls{/number}", "milestones_url":"https://api.github.com/repos/baxterandthehackers/public-repo/milestones{/number}", "notifications_url":"https://api.github.com/repos/baxterandthehackers/public-repo/notifications{?since,all,participating}", "labels_url":"https://api.github.com/repos/baxterandthehackers/public-repo/labels{/name}", "releases_url":"https://api.github.com/repos/baxterandthehackers/public-repo/releases{/id}", "deployments_url":"https://api.github.com/repos/baxterandthehackers/public-repo/deployments", "created_at":"2016-10-07T19:10:12Z", "updated_at":"2016-10-07T19:10:12Z", "pushed_at":"2016-10-07T19:10:13Z", "git_url":"git://github.com/baxterandthehackers/public-repo.git", "ssh_url":"git@github.com:baxterandthehackers/public-repo.git", "clone_url":"https://github.com/baxterandthehackers/public-repo.git", "svn_url":"https://github.com/baxterandthehackers/public-repo", "homepage":null, "size":0, "stargazers_count":0, "watchers_count":0, "language":null, "has_issues":true, "has_downloads":true, "has_wiki":true, "has_pages":false, "forks_count":0, "mirror_url":null, "open_issues_count":0, "forks":0, "open_issues":0, "watchers":0, "default_branch":"master" }, "organization":{ "login":"baxterandthehackers", "id":4312013, "url":"https://api.github.com/orgs/baxterandthehackers", "repos_url":"https://api.github.com/orgs/baxterandthehackers/repos", "events_url":"https://api.github.com/orgs/baxterandthehackers/events", "hooks_url":"https://api.github.com/orgs/baxterandthehackers/hooks", "issues_url":"https://api.github.com/orgs/baxterandthehackers/issues", "members_url":"https://api.github.com/orgs/baxterandthehackers/members{/member}", "public_members_url":"https://api.github.com/orgs/baxterandthehackers/public_members{/member}", "avatar_url":"https://avatars.githubusercontent.com/u/4312013?v=3", "description":"" }, "sender":{ "login":"baxterthehacker", "id":7649605, "avatar_url":"https://avatars.githubusercontent.com/u/7649605?v=3", "gravatar_id":"", "url":"https://api.github.com/users/baxterthehacker", "html_url":"https://github.com/baxterthehacker", "followers_url":"https://api.github.com/users/baxterthehacker/followers", "following_url":"https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url":"https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url":"https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url":"https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url":"https://api.github.com/users/baxterthehacker/orgs", "repos_url":"https://api.github.com/users/baxterthehacker/repos", "events_url":"https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url":"https://api.github.com/users/baxterthehacker/received_events", "type":"User", "site_admin":true } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, MilestoneEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "milestone") req.Header.Set("X-Hub-Signature", "sha1=8b63f58ea58e6a59dcfc5ecbaea0d1741a6bf9ec") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(MilestonePayload) Equal(t, ok, true) } func TestOrganizationEvent(t *testing.T) { payload := `{ "action": "member_invited", "invitation": { "id": 3294302, "login": "baxterthehacker", "email": null, "role": "direct_member" }, "membership": { "url": "https://api.github.com/orgs/baxterandthehackers/memberships/baxterthehacker", "state": "active", "role": "member", "organization_url": "https://api.github.com/orgs/baxterandthehackers", "user": { "login": "baxterthehacker", "id": 7649605, "avatar_url": "https://avatars.githubusercontent.com/u/17085448?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } }, "organization": { "login": "baxterandthehackers", "id": 4312013, "url": "https://api.github.com/orgs/baxterandthehackers", "repos_url": "https://api.github.com/orgs/baxterandthehackers/repos", "events_url": "https://api.github.com/orgs/baxterandthehackers/events", "hooks_url": "https://api.github.com/orgs/baxterandthehackers/hooks", "issues_url": "https://api.github.com/orgs/baxterandthehackers/issues", "members_url": "https://api.github.com/orgs/baxterandthehackers/members{/member}", "public_members_url": "https://api.github.com/orgs/baxterandthehackers/public_members{/member}", "avatar_url": "https://avatars.githubusercontent.com/u/4312013?v=3", "description": "" }, "sender":{ "login":"baxterthehacker", "id":7649605, "avatar_url":"https://avatars.githubusercontent.com/u/7649605?v=3", "gravatar_id":"", "url":"https://api.github.com/users/baxterthehacker", "html_url":"https://github.com/baxterthehacker", "followers_url":"https://api.github.com/users/baxterthehacker/followers", "following_url":"https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url":"https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url":"https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url":"https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url":"https://api.github.com/users/baxterthehacker/orgs", "repos_url":"https://api.github.com/users/baxterthehacker/repos", "events_url":"https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url":"https://api.github.com/users/baxterthehacker/received_events", "type":"User", "site_admin":true } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, OrganizationEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "organization") req.Header.Set("X-Hub-Signature", "sha1=7e5ad88557be0a05fb89e86c7893d987386aa0d5") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(OrganizationPayload) Equal(t, ok, true) } func TestOrgBlockEvent(t *testing.T) { payload := `{ "action": "blocked", "blocked_user": { "login": "octocat", "id": 583231, "avatar_url": "https://avatars.githubusercontent.com/u/583231?v=3", "gravatar_id": "", "url": "https://api.github.com/users/octocat", "html_url": "https://github.com/octocat", "followers_url": "https://api.github.com/users/octocat/followers", "following_url": "https://api.github.com/users/octocat/following{/other_user}", "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", "organizations_url": "https://api.github.com/users/octocat/orgs", "repos_url": "https://api.github.com/users/octocat/repos", "events_url": "https://api.github.com/users/octocat/events{/privacy}", "received_events_url": "https://api.github.com/users/octocat/received_events", "type": "User", "site_admin": false }, "organization": { "login": "github", "id": 4366038, "url": "https://api.github.com/orgs/github", "repos_url": "https://api.github.com/orgs/github/repos", "events_url": "https://api.github.com/orgs/github/events", "hooks_url": "https://api.github.com/orgs/github/hooks", "issues_url": "https://api.github.com/orgs/github/issues", "members_url": "https://api.github.com/orgs/github/members{/member}", "public_members_url": "https://api.github.com/orgs/github/public_members{/member}", "avatar_url": "https://avatars.githubusercontent.com/u/4366038?v=3", "description": "" }, "sender": { "login": "octodocs", "id": 25781999, "avatar_url": "https://avatars.githubusercontent.com/u/25781999?v=3", "gravatar_id": "", "url": "https://api.github.com/users/octodocs", "html_url": "https://github.com/octodocs", "followers_url": "https://api.github.com/users/octodocs/followers", "following_url": "https://api.github.com/users/octodocs/following{/other_user}", "gists_url": "https://api.github.com/users/octodocs/gists{/gist_id}", "starred_url": "https://api.github.com/users/octodocs/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/octodocs/subscriptions", "organizations_url": "https://api.github.com/users/octodocs/orgs", "repos_url": "https://api.github.com/users/octodocs/repos", "events_url": "https://api.github.com/users/octodocs/events{/privacy}", "received_events_url": "https://api.github.com/users/octodocs/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, OrgBlockEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "org_block") req.Header.Set("X-Hub-Signature", "sha1=21fe61da3f014c011edb60b0b9dfc9aa7059a24b") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(OrgBlockPayload) Equal(t, ok, true) } func TestPageBuildEvent(t *testing.T) { payload := `{ "id": 15995382, "build": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/pages/builds/15995382", "status": "built", "error": { "message": null }, "pusher": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "commit": "053b99542c83021d6b202d1a1f5ecd5ef7084e55", "duration": 3790, "created_at": "2015-05-05T23:40:13Z", "updated_at": "2015-05-05T23:40:17Z" }, "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:12Z", "pushed_at": "2015-05-05T23:40:17Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 0, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, PageBuildEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "page_build") req.Header.Set("X-Hub-Signature", "sha1=b3abad8f9c1b3fc0b01c4eb107447800bb5000f9") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(PageBuildPayload) Equal(t, ok, true) } func TestPingEvent(t *testing.T) { payload := `{ "zen": "Keep it logically awesome.", "hook_id": 20081052, "hook": { "type": "App", "id": 20081052, "name": "web", "active": true, "events": [ "pull_request" ], "config": { "content_type": "json", "insecure_ssl": "0", "secret": "********", "url": "https://ngrok.io/webhook" }, "updated_at": "2018-01-15T10:48:54Z", "created_at": "2018-01-15T10:48:54Z", "app_id": 8157 } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, PingEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "ping") req.Header.Set("X-Hub-Signature", "sha1=f82267eb5c6408d5986209da906747f57c11b33b") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(PingPayload) Equal(t, ok, true) } func TestProjectCardEvent(t *testing.T) { payload := `{ "action": "created", "project_card": { "url": "https://api.github.com/projects/columns/cards/1266091", "column_url": "https://api.github.com/projects/columns/515520", "column_id": 515520, "id": 1266091, "note": null, "creator": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=2", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "created_at": 1483569391, "updated_at": 1483569391, "content_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2" }, "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:12Z", "pushed_at": "2015-05-05T23:40:27Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 2, "forks": 0, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "organization": { "login": "baxterandthehackers", "id": 7649605, "url": "https://api.github.com/orgs/baxterandthehackers", "repos_url": "https://api.github.com/orgs/baxterandthehackers/repos", "events_url": "https://api.github.com/orgs/baxterandthehackers/events", "members_url": "https://api.github.com/orgs/baxterandthehackers/members{/member}", "public_members_url": "https://api.github.com/orgs/baxterandthehackers/public_members{/member}", "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=2" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=2", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, ProjectCardEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "project_card") req.Header.Set("X-Hub-Signature", "sha1=495dec0d6449d16b71f2ddcd37d595cb9b04b1d8") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(ProjectCardPayload) Equal(t, ok, true) } func TestProjectColumnEvent(t *testing.T) { payload := `{ "action": "created", "project_column": { "url": "https://api.github.com/projects/columns/515520", "project_url": "https://api.github.com/projects/288065", "cards_url": "https://api.github.com/projects/columns/515520/cards", "id": 515520, "name": "High Priority", "created_at": 1483569138, "updated_at": 1483569138 }, "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:12Z", "pushed_at": "2015-05-05T23:40:27Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 2, "forks": 0, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "organization": { "login": "baxterandthehackers", "id": 7649605, "url": "https://api.github.com/orgs/baxterandthehackers", "repos_url": "https://api.github.com/orgs/baxterandthehackers/repos", "events_url": "https://api.github.com/orgs/baxterandthehackers/events", "members_url": "https://api.github.com/orgs/baxterandthehackers/members{/member}", "public_members_url": "https://api.github.com/orgs/baxterandthehackers/public_members{/member}", "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=2" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=2", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, ProjectColumnEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "project_column") req.Header.Set("X-Hub-Signature", "sha1=7d5dd49d9863e982a4f577170717ea8350a69db0") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(ProjectColumnPayload) Equal(t, ok, true) } func TestProjectEvent(t *testing.T) { payload := `{ "action": "created", "project": { "owner_url": "https://api.github.com/repos/baxterthehacker/public-repo", "url": "https://api.github.com/projects/288065", "columns_url": "https://api.github.com/projects/288065/columns", "id": 288065, "name": "2017", "body": "Roadmap for work to be done in 2017", "number": 10, "state": "open", "creator": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=2", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "created_at": 1483567089, "updated_at": 1483567089 }, "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:12Z", "pushed_at": "2015-05-05T23:40:27Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 2, "forks": 0, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "organization": { "login": "baxterandthehackers", "id": 7649605, "url": "https://api.github.com/orgs/baxterandthehackers", "repos_url": "https://api.github.com/orgs/baxterandthehackers/repos", "events_url": "https://api.github.com/orgs/baxterandthehackers/events", "members_url": "https://api.github.com/orgs/baxterandthehackers/members{/member}", "public_members_url": "https://api.github.com/orgs/baxterandthehackers/public_members{/member}", "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=2" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=2", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, ProjectEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "project") req.Header.Set("X-Hub-Signature", "sha1=7295ab4f205434208f1b86edf2b55adae34c6c92") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(ProjectPayload) Equal(t, ok, true) } func TestPublicEvent(t *testing.T) { payload := `{ "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:41Z", "pushed_at": "2015-05-05T23:40:40Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 2, "forks": 0, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, PublicEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "public") req.Header.Set("X-Hub-Signature", "sha1=73edb2a8c69c1ac35efb797ede3dc2cde618c10c") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(PublicPayload) Equal(t, ok, true) } func TestPullRequestEvent(t *testing.T) { payload := `{ "action": "opened", "number": 1, "pull_request": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1", "id": 34778301, "html_url": "https://github.com/baxterthehacker/public-repo/pull/1", "diff_url": "https://github.com/baxterthehacker/public-repo/pull/1.diff", "patch_url": "https://github.com/baxterthehacker/public-repo/pull/1.patch", "issue_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1", "number": 1, "state": "open", "locked": false, "title": "Update the README with new information", "user": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "body": "This is a pretty simple change that we need to pull into master.", "created_at": "2015-05-05T23:40:27Z", "updated_at": "2015-05-05T23:40:27Z", "closed_at": null, "merged_at": null, "merge_commit_sha": null, "assignee": null, "milestone": null, "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/commits", "review_comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/comments", "review_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1/comments", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c", "head": { "label": "baxterthehacker:changes", "ref": "changes", "sha": "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c", "user": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "repo": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:12Z", "pushed_at": "2015-05-05T23:40:26Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 1, "forks": 0, "open_issues": 1, "watchers": 0, "default_branch": "master" } }, "base": { "label": "baxterthehacker:master", "ref": "master", "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b", "user": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "repo": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:12Z", "pushed_at": "2015-05-05T23:40:26Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 1, "forks": 0, "open_issues": 1, "watchers": 0, "default_branch": "master" } }, "_links": { "self": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1" }, "html": { "href": "https://github.com/baxterthehacker/public-repo/pull/1" }, "issue": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1" }, "comments": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1/comments" }, "review_comments": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/comments" }, "review_comment": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}" }, "commits": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/commits" }, "statuses": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c" } }, "merged": false, "mergeable": null, "mergeable_state": "unknown", "merged_by": null, "comments": 0, "review_comments": 0, "commits": 1, "additions": 1, "deletions": 1, "changed_files": 1 }, "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:12Z", "pushed_at": "2015-05-05T23:40:26Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 1, "forks": 0, "open_issues": 1, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "installation": { "id": 234 } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, PullRequestEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "pull_request") req.Header.Set("X-Hub-Signature", "sha1=35712c8d2bc197b7d07621dcf20d2fb44620508f") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(PullRequestPayload) Equal(t, ok, true) } func TestPullRequestReviewEvent(t *testing.T) { payload := `{ "action": "submitted", "review": { "id": 2626884, "user": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "body": "Looks great!", "submitted_at": "2016-10-03T23:39:09Z", "state": "approved", "html_url": "https://github.com/baxterthehacker/public-repo/pull/8#pullrequestreview-2626884", "pull_request_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8", "_links": { "html": { "href": "https://github.com/baxterthehacker/public-repo/pull/8#pullrequestreview-2626884" }, "pull_request": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8" } } }, "pull_request": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8", "id": 87811438, "html_url": "https://github.com/baxterthehacker/public-repo/pull/8", "diff_url": "https://github.com/baxterthehacker/public-repo/pull/8.diff", "patch_url": "https://github.com/baxterthehacker/public-repo/pull/8.patch", "issue_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/8", "number": 8, "state": "open", "locked": false, "title": "Add a README description", "user": { "login": "skalnik", "id": 2546, "avatar_url": "https://avatars.githubusercontent.com/u/2546?v=3", "gravatar_id": "", "url": "https://api.github.com/users/skalnik", "html_url": "https://github.com/skalnik", "followers_url": "https://api.github.com/users/skalnik/followers", "following_url": "https://api.github.com/users/skalnik/following{/other_user}", "gists_url": "https://api.github.com/users/skalnik/gists{/gist_id}", "starred_url": "https://api.github.com/users/skalnik/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/skalnik/subscriptions", "organizations_url": "https://api.github.com/users/skalnik/orgs", "repos_url": "https://api.github.com/users/skalnik/repos", "events_url": "https://api.github.com/users/skalnik/events{/privacy}", "received_events_url": "https://api.github.com/users/skalnik/received_events", "type": "User", "site_admin": true }, "body": "Just a few more details", "created_at": "2016-10-03T23:37:43Z", "updated_at": "2016-10-03T23:39:09Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "faea154a7decef6819754aab0f8c0e232e6c8b4f", "assignee": null, "assignees": [], "milestone": null, "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8/commits", "review_comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8/comments", "review_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/8/comments", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/b7a1f9c27caa4e03c14a88feb56e2d4f7500aa63", "head": { "label": "skalnik:patch-2", "ref": "patch-2", "sha": "b7a1f9c27caa4e03c14a88feb56e2d4f7500aa63", "user": { "login": "skalnik", "id": 2546, "avatar_url": "https://avatars.githubusercontent.com/u/2546?v=3", "gravatar_id": "", "url": "https://api.github.com/users/skalnik", "html_url": "https://github.com/skalnik", "followers_url": "https://api.github.com/users/skalnik/followers", "following_url": "https://api.github.com/users/skalnik/following{/other_user}", "gists_url": "https://api.github.com/users/skalnik/gists{/gist_id}", "starred_url": "https://api.github.com/users/skalnik/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/skalnik/subscriptions", "organizations_url": "https://api.github.com/users/skalnik/orgs", "repos_url": "https://api.github.com/users/skalnik/repos", "events_url": "https://api.github.com/users/skalnik/events{/privacy}", "received_events_url": "https://api.github.com/users/skalnik/received_events", "type": "User", "site_admin": true }, "repo": { "id": 69919152, "name": "public-repo", "full_name": "skalnik/public-repo", "owner": { "login": "skalnik", "id": 2546, "avatar_url": "https://avatars.githubusercontent.com/u/2546?v=3", "gravatar_id": "", "url": "https://api.github.com/users/skalnik", "html_url": "https://github.com/skalnik", "followers_url": "https://api.github.com/users/skalnik/followers", "following_url": "https://api.github.com/users/skalnik/following{/other_user}", "gists_url": "https://api.github.com/users/skalnik/gists{/gist_id}", "starred_url": "https://api.github.com/users/skalnik/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/skalnik/subscriptions", "organizations_url": "https://api.github.com/users/skalnik/orgs", "repos_url": "https://api.github.com/users/skalnik/repos", "events_url": "https://api.github.com/users/skalnik/events{/privacy}", "received_events_url": "https://api.github.com/users/skalnik/received_events", "type": "User", "site_admin": true }, "private": false, "html_url": "https://github.com/skalnik/public-repo", "description": null, "fork": true, "url": "https://api.github.com/repos/skalnik/public-repo", "forks_url": "https://api.github.com/repos/skalnik/public-repo/forks", "keys_url": "https://api.github.com/repos/skalnik/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/skalnik/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/skalnik/public-repo/teams", "hooks_url": "https://api.github.com/repos/skalnik/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/skalnik/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/skalnik/public-repo/events", "assignees_url": "https://api.github.com/repos/skalnik/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/skalnik/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/skalnik/public-repo/tags", "blobs_url": "https://api.github.com/repos/skalnik/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/skalnik/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/skalnik/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/skalnik/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/skalnik/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/skalnik/public-repo/languages", "stargazers_url": "https://api.github.com/repos/skalnik/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/skalnik/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/skalnik/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/skalnik/public-repo/subscription", "commits_url": "https://api.github.com/repos/skalnik/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/skalnik/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/skalnik/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/skalnik/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/skalnik/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/skalnik/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/skalnik/public-repo/merges", "archive_url": "https://api.github.com/repos/skalnik/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/skalnik/public-repo/downloads", "issues_url": "https://api.github.com/repos/skalnik/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/skalnik/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/skalnik/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/skalnik/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/skalnik/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/skalnik/public-repo/releases{/id}", "deployments_url": "https://api.github.com/repos/skalnik/public-repo/deployments", "created_at": "2016-10-03T23:23:31Z", "updated_at": "2016-08-15T17:19:01Z", "pushed_at": "2016-10-03T23:36:52Z", "git_url": "git://github.com/skalnik/public-repo.git", "ssh_url": "git@github.com:skalnik/public-repo.git", "clone_url": "https://github.com/skalnik/public-repo.git", "svn_url": "https://github.com/skalnik/public-repo", "homepage": null, "size": 233, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": false, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "open_issues_count": 0, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" } }, "base": { "label": "baxterthehacker:master", "ref": "master", "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b", "user": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "repo": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "deployments_url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2016-08-15T17:19:01Z", "pushed_at": "2016-10-03T23:37:43Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 233, "stargazers_count": 2, "watchers_count": 2, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 2, "mirror_url": null, "open_issues_count": 5, "forks": 2, "open_issues": 5, "watchers": 2, "default_branch": "master" } }, "_links": { "self": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8" }, "html": { "href": "https://github.com/baxterthehacker/public-repo/pull/8" }, "issue": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/issues/8" }, "comments": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/issues/8/comments" }, "review_comments": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8/comments" }, "review_comment": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}" }, "commits": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8/commits" }, "statuses": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/b7a1f9c27caa4e03c14a88feb56e2d4f7500aa63" } } }, "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "deployments_url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2016-08-15T17:19:01Z", "pushed_at": "2016-10-03T23:37:43Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 233, "stargazers_count": 2, "watchers_count": 2, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 2, "mirror_url": null, "open_issues_count": 5, "forks": 2, "open_issues": 5, "watchers": 2, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, PullRequestReviewEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "pull_request_review") req.Header.Set("X-Hub-Signature", "sha1=55345ce92be7849f97d39b9426b95261d4bd4465") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(PullRequestReviewPayload) Equal(t, ok, true) } func TestPullRequestReviewCommentEvent(t *testing.T) { payload := `{ "action": "created", "comment": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments/29724692", "id": 29724692, "diff_hunk": "@@ -1 +1 @@\n-# public-repo", "path": "README.md", "position": 1, "original_position": 1, "commit_id": "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c", "original_commit_id": "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c", "user": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "body": "Maybe you should use more emojji on this line.", "created_at": "2015-05-05T23:40:27Z", "updated_at": "2015-05-05T23:40:27Z", "html_url": "https://github.com/baxterthehacker/public-repo/pull/1#discussion_r29724692", "pull_request_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1", "_links": { "self": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments/29724692" }, "html": { "href": "https://github.com/baxterthehacker/public-repo/pull/1#discussion_r29724692" }, "pull_request": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1" } } }, "pull_request": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1", "id": 34778301, "html_url": "https://github.com/baxterthehacker/public-repo/pull/1", "diff_url": "https://github.com/baxterthehacker/public-repo/pull/1.diff", "patch_url": "https://github.com/baxterthehacker/public-repo/pull/1.patch", "issue_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1", "number": 1, "state": "open", "locked": false, "title": "Update the README with new information", "user": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "body": "This is a pretty simple change that we need to pull into master.", "created_at": "2015-05-05T23:40:27Z", "updated_at": "2015-05-05T23:40:27Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "18721552ba489fb84e12958c1b5694b5475f7991", "assignee": null, "milestone": null, "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/commits", "review_comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/comments", "review_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1/comments", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c", "head": { "label": "baxterthehacker:changes", "ref": "changes", "sha": "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c", "user": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "repo": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:12Z", "pushed_at": "2015-05-05T23:40:27Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 1, "forks": 0, "open_issues": 1, "watchers": 0, "default_branch": "master" } }, "base": { "label": "baxterthehacker:master", "ref": "master", "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b", "user": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "repo": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:12Z", "pushed_at": "2015-05-05T23:40:27Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 1, "forks": 0, "open_issues": 1, "watchers": 0, "default_branch": "master" } }, "_links": { "self": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1" }, "html": { "href": "https://github.com/baxterthehacker/public-repo/pull/1" }, "issue": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1" }, "comments": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1/comments" }, "review_comments": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/comments" }, "review_comment": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}" }, "commits": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/commits" }, "statuses": { "href": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c" } } }, "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:12Z", "pushed_at": "2015-05-05T23:40:27Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 1, "forks": 0, "open_issues": 1, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, PullRequestReviewCommentEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "pull_request_review_comment") req.Header.Set("X-Hub-Signature", "sha1=a9ece15dbcbb85fa5f00a0bf409494af2cbc5b60") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(PullRequestReviewCommentPayload) Equal(t, ok, true) } func TestPushEvent(t *testing.T) { payload := `{ "ref": "refs/heads/master", "before": "737d38c599c1b2991664dfc6155d6bf516fcce36", "after": "fd489864e7642b48eaad6e3f155c10e46810ec72", "created": false, "deleted": false, "forced": false, "base_ref": null, "compare": "https://github.com/binkkatal/sample_app/compare/737d38c599c1...fd489864e764", "commits": [ { "id": "fd489864e7642b48eaad6e3f155c10e46810ec72", "tree_id": "55e08136e14d5168b699038f88c73e175ddffd3b", "distinct": true, "message": "test a push event", "timestamp": "2018-06-29T19:34:13+05:30", "url": "https://github.com/binkkatal/sample_app/commit/fd489864e7642b48eaad6e3f155c10e46810ec72", "author": { "name": "binkkatal", "email": "binkkatal.r@gmail.com", "username": "binkkatal" }, "committer": { "name": "binkkatal", "email": "binkkatal.r@gmail.com", "username": "binkkatal" }, "added": [ ".razorops.yaml" ], "removed": [ ], "modified": [ "app/controllers/application_controller.rb" ] } ], "head_commit": { "id": "fd489864e7642b48eaad6e3f155c10e46810ec72", "tree_id": "55e08136e14d5168b699038f88c73e175ddffd3b", "distinct": true, "message": "test a push event", "timestamp": "2018-06-29T19:34:13+05:30", "url": "https://github.com/binkkatal/sample_app/commit/fd489864e7642b48eaad6e3f155c10e46810ec72", "author": { "name": "binkkatal", "email": "binkkatal.r@gmail.com", "username": "binkkatal" }, "committer": { "name": "binkkatal", "email": "binkkatal.r@gmail.com", "username": "binkkatal" }, "added": [ ".razorops.yaml" ], "removed": [ ], "modified": [ "app/controllers/application_controller.rb" ] }, "repository": { "id": 63933911, "node_id": "MDEwOlJlcG9zaXRvcnk2MzkzMzkxMQ==", "name": "sample_app", "full_name": "binkkatal/sample_app", "owner": { "name": "binkkatal", "email": "binkkatal.r@gmail.com", "login": "binkkatal", "id": 13351472, "node_id": "MDQ6VXNlcjEzMzUxNDcy", "avatar_url": "https://avatars3.githubusercontent.com/u/13351472?v=4", "gravatar_id": "", "url": "https://api.github.com/users/binkkatal", "html_url": "https://github.com/binkkatal", "followers_url": "https://api.github.com/users/binkkatal/followers", "following_url": "https://api.github.com/users/binkkatal/following{/other_user}", "gists_url": "https://api.github.com/users/binkkatal/gists{/gist_id}", "starred_url": "https://api.github.com/users/binkkatal/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/binkkatal/subscriptions", "organizations_url": "https://api.github.com/users/binkkatal/orgs", "repos_url": "https://api.github.com/users/binkkatal/repos", "events_url": "https://api.github.com/users/binkkatal/events{/privacy}", "received_events_url": "https://api.github.com/users/binkkatal/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/binkkatal/sample_app", "description": null, "fork": false, "url": "https://github.com/binkkatal/sample_app", "forks_url": "https://api.github.com/repos/binkkatal/sample_app/forks", "keys_url": "https://api.github.com/repos/binkkatal/sample_app/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/binkkatal/sample_app/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/binkkatal/sample_app/teams", "hooks_url": "https://api.github.com/repos/binkkatal/sample_app/hooks", "issue_events_url": "https://api.github.com/repos/binkkatal/sample_app/issues/events{/number}", "events_url": "https://api.github.com/repos/binkkatal/sample_app/events", "assignees_url": "https://api.github.com/repos/binkkatal/sample_app/assignees{/user}", "branches_url": "https://api.github.com/repos/binkkatal/sample_app/branches{/branch}", "tags_url": "https://api.github.com/repos/binkkatal/sample_app/tags", "blobs_url": "https://api.github.com/repos/binkkatal/sample_app/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/binkkatal/sample_app/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/binkkatal/sample_app/git/refs{/sha}", "trees_url": "https://api.github.com/repos/binkkatal/sample_app/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/binkkatal/sample_app/statuses/{sha}", "languages_url": "https://api.github.com/repos/binkkatal/sample_app/languages", "stargazers_url": "https://api.github.com/repos/binkkatal/sample_app/stargazers", "contributors_url": "https://api.github.com/repos/binkkatal/sample_app/contributors", "subscribers_url": "https://api.github.com/repos/binkkatal/sample_app/subscribers", "subscription_url": "https://api.github.com/repos/binkkatal/sample_app/subscription", "commits_url": "https://api.github.com/repos/binkkatal/sample_app/commits{/sha}", "git_commits_url": "https://api.github.com/repos/binkkatal/sample_app/git/commits{/sha}", "comments_url": "https://api.github.com/repos/binkkatal/sample_app/comments{/number}", "issue_comment_url": "https://api.github.com/repos/binkkatal/sample_app/issues/comments{/number}", "contents_url": "https://api.github.com/repos/binkkatal/sample_app/contents/{+path}", "compare_url": "https://api.github.com/repos/binkkatal/sample_app/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/binkkatal/sample_app/merges", "archive_url": "https://api.github.com/repos/binkkatal/sample_app/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/binkkatal/sample_app/downloads", "issues_url": "https://api.github.com/repos/binkkatal/sample_app/issues{/number}", "pulls_url": "https://api.github.com/repos/binkkatal/sample_app/pulls{/number}", "milestones_url": "https://api.github.com/repos/binkkatal/sample_app/milestones{/number}", "notifications_url": "https://api.github.com/repos/binkkatal/sample_app/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/binkkatal/sample_app/labels{/name}", "releases_url": "https://api.github.com/repos/binkkatal/sample_app/releases{/id}", "deployments_url": "https://api.github.com/repos/binkkatal/sample_app/deployments", "created_at": 1469173225, "updated_at": "2016-07-22T07:48:39Z", "pushed_at": 1530281075, "git_url": "git://github.com/binkkatal/sample_app.git", "ssh_url": "git@github.com:binkkatal/sample_app.git", "clone_url": "https://github.com/binkkatal/sample_app.git", "svn_url": "https://github.com/binkkatal/sample_app", "homepage": null, "size": 23, "stargazers_count": 0, "watchers_count": 0, "language": "Ruby", "has_issues": true, "has_projects": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "archived": false, "open_issues_count": 0, "license": null, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master", "stargazers": 0, "master_branch": "master" }, "pusher": { "name": "binkkatal", "email": "binkkatal.r@gmail.com" }, "sender": { "login": "binkkatal", "id": 13351472, "node_id": "MDQ6VXNlcjEzMzUxNDcy", "avatar_url": "https://avatars3.githubusercontent.com/u/13351472?v=4", "gravatar_id": "", "url": "https://api.github.com/users/binkkatal", "html_url": "https://github.com/binkkatal", "followers_url": "https://api.github.com/users/binkkatal/followers", "following_url": "https://api.github.com/users/binkkatal/following{/other_user}", "gists_url": "https://api.github.com/users/binkkatal/gists{/gist_id}", "starred_url": "https://api.github.com/users/binkkatal/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/binkkatal/subscriptions", "organizations_url": "https://api.github.com/users/binkkatal/orgs", "repos_url": "https://api.github.com/users/binkkatal/repos", "events_url": "https://api.github.com/users/binkkatal/events{/privacy}", "received_events_url": "https://api.github.com/users/binkkatal/received_events", "type": "User", "site_admin": false } }` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, PushEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "push") req.Header.Set("X-Hub-Signature", "sha1=0534736f52c2fc5896ef1bd5a043127b20d233ba") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(PushPayload) Equal(t, ok, true) } func TestReleaseEvent(t *testing.T) { payload := `{ "action": "published", "release": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/releases/1261438", "assets_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases/1261438/assets", "upload_url": "https://uploads.github.com/repos/baxterthehacker/public-repo/releases/1261438/assets{?name}", "html_url": "https://github.com/baxterthehacker/public-repo/releases/tag/0.0.1", "id": 1261438, "tag_name": "0.0.1", "target_commitish": "master", "name": null, "draft": false, "author": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "prerelease": false, "created_at": "2015-05-05T23:40:12Z", "published_at": "2015-05-05T23:40:38Z", "assets": [ ], "tarball_url": "https://api.github.com/repos/baxterthehacker/public-repo/tarball/0.0.1", "zipball_url": "https://api.github.com/repos/baxterthehacker/public-repo/zipball/0.0.1", "body": null }, "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:30Z", "pushed_at": "2015-05-05T23:40:38Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 2, "forks": 0, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, ReleaseEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "release") req.Header.Set("X-Hub-Signature", "sha1=e62bb4c51bc7dde195b9525971c2e3aecb394390") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(ReleasePayload) Equal(t, ok, true) } func TestRepositoryEvent(t *testing.T) { payload := `{ "action": "created", "repository": { "id": 27496774, "name": "new-repository", "full_name": "baxterandthehackers/new-repository", "owner": { "login": "baxterandthehackers", "id": 7649605, "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterandthehackers", "html_url": "https://github.com/baxterandthehackers", "followers_url": "https://api.github.com/users/baxterandthehackers/followers", "following_url": "https://api.github.com/users/baxterandthehackers/following{/other_user}", "gists_url": "https://api.github.com/users/baxterandthehackers/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterandthehackers/subscriptions", "organizations_url": "https://api.github.com/users/baxterandthehackers/orgs", "repos_url": "https://api.github.com/users/baxterandthehackers/repos", "events_url": "https://api.github.com/users/baxterandthehackers/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterandthehackers/received_events", "type": "Organization", "site_admin": false }, "private": true, "html_url": "https://github.com/baxterandthehackers/new-repository", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterandthehackers/new-repository", "forks_url": "https://api.github.com/repos/baxterandthehackers/new-repository/forks", "keys_url": "https://api.github.com/repos/baxterandthehackers/new-repository/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterandthehackers/new-repository/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterandthehackers/new-repository/teams", "hooks_url": "https://api.github.com/repos/baxterandthehackers/new-repository/hooks", "issue_events_url": "https://api.github.com/repos/baxterandthehackers/new-repository/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterandthehackers/new-repository/events", "assignees_url": "https://api.github.com/repos/baxterandthehackers/new-repository/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterandthehackers/new-repository/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterandthehackers/new-repository/tags", "blobs_url": "https://api.github.com/repos/baxterandthehackers/new-repository/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterandthehackers/new-repository/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterandthehackers/new-repository/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterandthehackers/new-repository/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterandthehackers/new-repository/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterandthehackers/new-repository/languages", "stargazers_url": "https://api.github.com/repos/baxterandthehackers/new-repository/stargazers", "contributors_url": "https://api.github.com/repos/baxterandthehackers/new-repository/contributors", "subscribers_url": "https://api.github.com/repos/baxterandthehackers/new-repository/subscribers", "subscription_url": "https://api.github.com/repos/baxterandthehackers/new-repository/subscription", "commits_url": "https://api.github.com/repos/baxterandthehackers/new-repository/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterandthehackers/new-repository/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterandthehackers/new-repository/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterandthehackers/new-repository/issues/comments/{number}", "contents_url": "https://api.github.com/repos/baxterandthehackers/new-repository/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterandthehackers/new-repository/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterandthehackers/new-repository/merges", "archive_url": "https://api.github.com/repos/baxterandthehackers/new-repository/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterandthehackers/new-repository/downloads", "issues_url": "https://api.github.com/repos/baxterandthehackers/new-repository/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterandthehackers/new-repository/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterandthehackers/new-repository/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterandthehackers/new-repository/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterandthehackers/new-repository/labels{/name}", "releases_url": "https://api.github.com/repos/baxterandthehackers/new-repository/releases{/id}", "created_at": "2014-12-03T16:39:25Z", "updated_at": "2014-12-03T16:39:25Z", "pushed_at": "2014-12-03T16:39:25Z", "git_url": "git://github.com/baxterandthehackers/new-repository.git", "ssh_url": "git@github.com:baxterandthehackers/new-repository.git", "clone_url": "https://github.com/baxterandthehackers/new-repository.git", "svn_url": "https://github.com/baxterandthehackers/new-repository", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": false, "forks_count": 0, "mirror_url": null, "open_issues_count": 0, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, "organization": { "login": "baxterandthehackers", "id": 7649605, "url": "https://api.github.com/orgs/baxterandthehackers", "repos_url": "https://api.github.com/orgs/baxterandthehackers/repos", "events_url": "https://api.github.com/orgs/baxterandthehackers/events", "members_url": "https://api.github.com/orgs/baxterandthehackers/members{/member}", "public_members_url": "https://api.github.com/orgs/baxterandthehackers/public_members{/member}", "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=2" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=2", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, RepositoryEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "repository") req.Header.Set("X-Hub-Signature", "sha1=df442a8af41edd2d42ccdd997938d1d111b0f94e") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(RepositoryPayload) Equal(t, ok, true) } func TestStatusEvent(t *testing.T) { payload := `{ "id": 214015194, "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b", "name": "baxterthehacker/public-repo", "target_url": null, "context": "default", "description": null, "state": "success", "commit": { "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b", "commit": { "author": { "name": "baxterthehacker", "email": "baxterthehacker@users.noreply.github.com", "date": "2015-05-05T23:40:12Z" }, "committer": { "name": "baxterthehacker", "email": "baxterthehacker@users.noreply.github.com", "date": "2015-05-05T23:40:12Z" }, "message": "Initial commit", "tree": { "sha": "02b49ad0ba4f1acd9f06531b21e16a4ac5d341d0", "url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees/02b49ad0ba4f1acd9f06531b21e16a4ac5d341d0" }, "url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits/9049f1265b7d61be4a8904a9a27120d2064dab3b", "comment_count": 1 }, "url": "https://api.github.com/repos/baxterthehacker/public-repo/commits/9049f1265b7d61be4a8904a9a27120d2064dab3b", "html_url": "https://github.com/baxterthehacker/public-repo/commit/9049f1265b7d61be4a8904a9a27120d2064dab3b", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits/9049f1265b7d61be4a8904a9a27120d2064dab3b/comments", "author": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "committer": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "parents": [ ] }, "branches": [ { "name": "master", "commit": { "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b", "url": "https://api.github.com/repos/baxterthehacker/public-repo/commits/9049f1265b7d61be4a8904a9a27120d2064dab3b" } }, { "name": "changes", "commit": { "sha": "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c", "url": "https://api.github.com/repos/baxterthehacker/public-repo/commits/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c" } }, { "name": "gh-pages", "commit": { "sha": "b11bb7545ac14abafc6191a0481b0d961e7793c6", "url": "https://api.github.com/repos/baxterthehacker/public-repo/commits/b11bb7545ac14abafc6191a0481b0d961e7793c6" } } ], "created_at": "2015-05-05T23:40:39Z", "updated_at": "2015-05-05T23:40:39Z", "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:30Z", "pushed_at": "2015-05-05T23:40:39Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 2, "forks": 0, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, StatusEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "status") req.Header.Set("X-Hub-Signature", "sha1=3caa5f062a2deb7cce1482314bb9b4c99bf0ab45") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(StatusPayload) Equal(t, ok, true) } func TestTeamEvent(t *testing.T) { payload := `{ "action":"created", "team":{ "name":"team baxter", "id":2175394, "slug":"team-baxter", "description":"", "privacy":"secret", "url":"https:/api.github.com/teams/2175394", "members_url":"https:/api.github.com/teams/2175394/members{/member}", "repositories_url":"https:/api.github.com/teams/2175394/repos", "permission":"pull" }, "organization":{ "login":"baxterandthehackers", "id":4312013, "url":"https://api.github.com/orgs/baxterandthehackers", "repos_url":"https://api.github.com/orgs/baxterandthehackers/repos", "events_url":"https://api.github.com/orgs/baxterandthehackers/events", "hooks_url":"https://api.github.com/orgs/baxterandthehackers/hooks", "issues_url":"https://api.github.com/orgs/baxterandthehackers/issues", "members_url":"https://api.github.com/orgs/baxterandthehackers/members{/member}", "public_members_url":"https://api.github.com/orgs/baxterandthehackers/public_members{/member}", "avatar_url":"https://avatars.githubusercontent.com/u/4312013?v=3", "description":"" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, TeamEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "team") req.Header.Set("X-Hub-Signature", "sha1=ff5b5d58faec10bd40fc96834148df408e7a4608") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(TeamPayload) Equal(t, ok, true) } func TestTeamAddEvent(t *testing.T) { payload := `{ "team": { "name": "github", "id": 836012, "slug": "github", "description": "", "permission": "pull", "url": "https://api.github.com/teams/836012", "members_url": "https://api.github.com/teams/836012/members{/member}", "repositories_url": "https://api.github.com/teams/836012/repos" }, "repository": { "id": 35129393, "name": "public-repo", "full_name": "baxterandthehackers/public-repo", "owner": { "login": "baxterandthehackers", "id": 7649605, "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterandthehackers", "html_url": "https://github.com/baxterandthehackers", "followers_url": "https://api.github.com/users/baxterandthehackers/followers", "following_url": "https://api.github.com/users/baxterandthehackers/following{/other_user}", "gists_url": "https://api.github.com/users/baxterandthehackers/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterandthehackers/subscriptions", "organizations_url": "https://api.github.com/users/baxterandthehackers/orgs", "repos_url": "https://api.github.com/users/baxterandthehackers/repos", "events_url": "https://api.github.com/users/baxterandthehackers/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterandthehackers/received_events", "type": "Organization", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterandthehackers/public-repo", "description": "", "fork": true, "url": "https://api.github.com/repos/baxterandthehackers/public-repo", "forks_url": "https://api.github.com/repos/baxterandthehackers/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterandthehackers/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterandthehackers/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterandthehackers/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterandthehackers/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterandthehackers/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterandthehackers/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterandthehackers/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterandthehackers/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterandthehackers/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterandthehackers/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterandthehackers/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterandthehackers/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterandthehackers/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterandthehackers/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterandthehackers/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterandthehackers/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterandthehackers/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterandthehackers/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterandthehackers/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterandthehackers/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterandthehackers/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterandthehackers/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterandthehackers/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterandthehackers/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterandthehackers/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterandthehackers/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:30Z", "updated_at": "2015-05-05T23:40:30Z", "pushed_at": "2015-05-05T23:40:27Z", "git_url": "git://github.com/baxterandthehackers/public-repo.git", "ssh_url": "git@github.com:baxterandthehackers/public-repo.git", "clone_url": "https://github.com/baxterandthehackers/public-repo.git", "svn_url": "https://github.com/baxterandthehackers/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": false, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 0, "forks": 0, "open_issues": 0, "watchers": 0, "default_branch": "master" }, "organization": { "login": "baxterandthehackers", "id": 7649605, "url": "https://api.github.com/orgs/baxterandthehackers", "repos_url": "https://api.github.com/orgs/baxterandthehackers/repos", "events_url": "https://api.github.com/orgs/baxterandthehackers/events", "members_url": "https://api.github.com/orgs/baxterandthehackers/members{/member}", "public_members_url": "https://api.github.com/orgs/baxterandthehackers/public_members{/member}", "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3", "description": null }, "sender": { "login": "baxterandthehackers", "id": 7649605, "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterandthehackers", "html_url": "https://github.com/baxterandthehackers", "followers_url": "https://api.github.com/users/baxterandthehackers/followers", "following_url": "https://api.github.com/users/baxterandthehackers/following{/other_user}", "gists_url": "https://api.github.com/users/baxterandthehackers/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterandthehackers/subscriptions", "organizations_url": "https://api.github.com/users/baxterandthehackers/orgs", "repos_url": "https://api.github.com/users/baxterandthehackers/repos", "events_url": "https://api.github.com/users/baxterandthehackers/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterandthehackers/received_events", "type": "Organization", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, TeamAddEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "team_add") req.Header.Set("X-Hub-Signature", "sha1=5f3953476e270b79cc6763780346110da880609a") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(TeamAddPayload) Equal(t, ok, true) } func TestWatchEvent(t *testing.T) { payload := `{ "action": "started", "repository": { "id": 35129377, "name": "public-repo", "full_name": "baxterthehacker/public-repo", "owner": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false }, "private": false, "html_url": "https://github.com/baxterthehacker/public-repo", "description": "", "fork": false, "url": "https://api.github.com/repos/baxterthehacker/public-repo", "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks", "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}", "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}", "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams", "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks", "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}", "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events", "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}", "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}", "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags", "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}", "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}", "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}", "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}", "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}", "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages", "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers", "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors", "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers", "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription", "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}", "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}", "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}", "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}", "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}", "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}", "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges", "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}", "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads", "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}", "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}", "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}", "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}", "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}", "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}", "created_at": "2015-05-05T23:40:12Z", "updated_at": "2015-05-05T23:40:30Z", "pushed_at": "2015-05-05T23:40:27Z", "git_url": "git://github.com/baxterthehacker/public-repo.git", "ssh_url": "git@github.com:baxterthehacker/public-repo.git", "clone_url": "https://github.com/baxterthehacker/public-repo.git", "svn_url": "https://github.com/baxterthehacker/public-repo", "homepage": null, "size": 0, "stargazers_count": 0, "watchers_count": 0, "language": null, "has_issues": true, "has_downloads": true, "has_wiki": true, "has_pages": true, "forks_count": 0, "mirror_url": null, "open_issues_count": 2, "forks": 0, "open_issues": 2, "watchers": 0, "default_branch": "master" }, "sender": { "login": "baxterthehacker", "id": 6752317, "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3", "gravatar_id": "", "url": "https://api.github.com/users/baxterthehacker", "html_url": "https://github.com/baxterthehacker", "followers_url": "https://api.github.com/users/baxterthehacker/followers", "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}", "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}", "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions", "organizations_url": "https://api.github.com/users/baxterthehacker/orgs", "repos_url": "https://api.github.com/users/baxterthehacker/repos", "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}", "received_events_url": "https://api.github.com/users/baxterthehacker/received_events", "type": "User", "site_admin": false } } ` var parseError error var results interface{} server := newServer(func(w http.ResponseWriter, r *http.Request) { results, parseError = hook.Parse(r, WatchEvent) }) defer server.Close() req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) Equal(t, err, nil) req.Header.Set("Content-Type", "application/json") req.Header.Set("X-Github-Event", "watch") req.Header.Set("X-Hub-Signature", "sha1=a317bcfe69ccb8bece74c20c7378e5413c4772f1") Equal(t, err, nil) client := &http.Client{} resp, err := client.Do(req) Equal(t, err, nil) Equal(t, resp.StatusCode, http.StatusOK) Equal(t, parseError, nil) _, ok := results.(WatchPayload) Equal(t, ok, true) }