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, err := os.Open("../testdata/github/commit-comment.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/create.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/delete.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/deployment.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/deployment-status.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/fork.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/gollum.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/installation.json") Equal(t, err, nil) 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, 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=2058cf6cc28570710afbc638e669f5c67305a2db") 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, err := os.Open("../testdata/github/integration-installation.json") Equal(t, err, nil) 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, 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=bb2769f05f1a11af3a1edf8f9fac11bae7402a1e") 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, err := os.Open("../testdata/github/issue-comment.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/issues.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/label.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/member.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/membership.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/milestone.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/organization.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/org-block.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/page-build.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/ping.json") Equal(t, err, nil) 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, 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=f80e1cfc04245b65228b86612119ab5c894133c2") 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, err := os.Open("../testdata/github/project-card.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/project-column.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/project.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/public.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/pull-request.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/pull-request-review.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/pull-request-review-comment.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/push.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/release.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/repository.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/status.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/team.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/team-add.json") Equal(t, err, nil) 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, 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, err := os.Open("../testdata/github/watch.json") Equal(t, err, nil) 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, 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) }