From 16a6e9e30793c7cee4a04f0c4b73178ca45d7999 Mon Sep 17 00:00:00 2001 From: Dean Karn Date: Fri, 3 Aug 2018 21:42:16 -0700 Subject: [PATCH] parallelize bitbucket tests --- bitbucket/bitbucket_test.go | 939 ++++++++++++------------------------ 1 file changed, 304 insertions(+), 635 deletions(-) diff --git a/bitbucket/bitbucket_test.go b/bitbucket/bitbucket_test.go index ca85e03..0520a6e 100644 --- a/bitbucket/bitbucket_test.go +++ b/bitbucket/bitbucket_test.go @@ -8,6 +8,11 @@ import ( "os" "testing" + "io" + + "reflect" + + "github.com/stretchr/testify/require" . "gopkg.in/go-playground/assert.v1" ) @@ -47,646 +52,310 @@ func newServer(handler http.HandlerFunc) *httptest.Server { return httptest.NewServer(mux) } -func TestUUIDMissingEvent(t *testing.T) { - payload := "{}" - var parseError error - server := newServer(func(w http.ResponseWriter, r *http.Request) { - _, parseError = hook.Parse(r, RepoPushEvent) - }) - defer server.Close() +func TestBadRequests(t *testing.T) { + assert := require.New(t) + tests := []struct { + name string + event Event + payload io.Reader + headers http.Header + }{ + { + name: "UUIDMissingEvent", + event: RepoPushEvent, + payload: bytes.NewBuffer([]byte("{}")), + headers: http.Header{ + "X-Event-Key": []string{"noneexistant_event"}, + }, + }, + { + name: "UUIDDoesNotMatchEvent", + event: RepoPushEvent, + payload: bytes.NewBuffer([]byte("{}")), + headers: http.Header{ + "X-Hook-UUID": []string{"THIS_DOES_NOT_MATCH"}, + "X-Event-Key": []string{"repo:push"}, + }, + }, + { + name: "BadNoEventHeader", + event: RepoPushEvent, + payload: bytes.NewBuffer([]byte("{}")), + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + }, + }, + { + name: "BadBody", + event: RepoPushEvent, + payload: bytes.NewBuffer([]byte("")), + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"repo:push"}, + }, + }, + { + name: "UnsubscribedEvent", + event: RepoPushEvent, + payload: bytes.NewBuffer([]byte("")), + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"noneexistant_event"}, + }, + }, + } - req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) - Equal(t, err, nil) + for _, tt := range tests { + tc := tt + client := &http.Client{} + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + var parseError error + server := newServer(func(w http.ResponseWriter, r *http.Request) { + _, parseError = hook.Parse(r, tc.event) + }) + defer server.Close() + req, err := http.NewRequest(http.MethodPost, server.URL+path, tc.payload) + assert.NoError(err) + req.Header = tc.headers + req.Header.Set("Content-Type", "application/json") - req.Header.Set("Content-Type", "application/json") - req.Header.Set("X-Event-Key", "noneexistant_event") - - 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, ErrMissingHookUUIDHeader) + resp, err := client.Do(req) + assert.NoError(err) + assert.Equal(http.StatusOK, resp.StatusCode) + assert.Error(parseError) + }) + } } -func TestUUIDDoesNotMatchEvent(t *testing.T) { - payload := "{}" +func TestWebhooks(t *testing.T) { + assert := require.New(t) + tests := []struct { + name string + event Event + typ interface{} + filename string + headers http.Header + }{ + { + name: "RepoPush", + event: RepoPushEvent, + typ: RepoPushPayload{}, + filename: "../testdata/bitbucket/repo-push.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"repo:push"}, + }, + }, + { + name: "RepoFork", + event: RepoForkEvent, + typ: RepoForkPayload{}, + filename: "../testdata/bitbucket/repo-fork.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"repo:fork"}, + }, + }, + { + name: "RepoUpdated", + event: RepoUpdatedEvent, + typ: RepoUpdatedPayload{}, + filename: "../testdata/bitbucket/repo-updated.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"repo:updated"}, + }, + }, + { + name: "RepoCommitCommentCreated", + event: RepoCommitCommentCreatedEvent, + typ: RepoCommitCommentCreatedPayload{}, + filename: "../testdata/bitbucket/commit-comment-created.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"repo:commit_comment_created"}, + }, + }, + { + name: "RepoCommitStatusCreated", + event: RepoCommitStatusCreatedEvent, + typ: RepoCommitStatusCreatedPayload{}, + filename: "../testdata/bitbucket/repo-commit-status-created.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"repo:commit_status_created"}, + }, + }, + { + name: "RepoCommitStatusUpdated", + event: RepoCommitStatusUpdatedEvent, + typ: RepoCommitStatusUpdatedPayload{}, + filename: "../testdata/bitbucket/repo-commit-status-updated.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"repo:commit_status_updated"}, + }, + }, + { + name: "IssueCreated", + event: IssueCreatedEvent, + typ: IssueCreatedPayload{}, + filename: "../testdata/bitbucket/issue-created.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"issue:created"}, + }, + }, + { + name: "IssueUpdated", + event: IssueUpdatedEvent, + typ: IssueUpdatedPayload{}, + filename: "../testdata/bitbucket/issue-updated.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"issue:updated"}, + }, + }, + { + name: "IssueUpdated", + event: IssueUpdatedEvent, + typ: IssueUpdatedPayload{}, + filename: "../testdata/bitbucket/issue-updated.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"issue:updated"}, + }, + }, + { + name: "IssueCommentCreated", + event: IssueCommentCreatedEvent, + typ: IssueCommentCreatedPayload{}, + filename: "../testdata/bitbucket/issue-comment-created.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"issue:comment_created"}, + }, + }, + { + name: "PullRequestCreated", + event: PullRequestCreatedEvent, + typ: PullRequestCreatedPayload{}, + filename: "../testdata/bitbucket/pull-request-created.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"pullrequest:created"}, + }, + }, + { + name: "PullRequestUpdated", + event: PullRequestUpdatedEvent, + typ: PullRequestUpdatedPayload{}, + filename: "../testdata/bitbucket/pull-request-updated.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"pullrequest:updated"}, + }, + }, + { + name: "PullRequestApproved", + event: PullRequestApprovedEvent, + typ: PullRequestApprovedPayload{}, + filename: "../testdata/bitbucket/pull-request-approved.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"pullrequest:approved"}, + }, + }, + { + name: "PullRequestApprovalRemoved", + event: PullRequestUnapprovedEvent, + typ: PullRequestUnapprovedPayload{}, + filename: "../testdata/bitbucket/pull-request-approval-removed.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"pullrequest:unapproved"}, + }, + }, + { + name: "PullRequestMerged", + event: PullRequestMergedEvent, + typ: PullRequestMergedPayload{}, + filename: "../testdata/bitbucket/pull-request-merged.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"pullrequest:fulfilled"}, + }, + }, + { + name: "PullRequestDeclined", + event: PullRequestDeclinedEvent, + typ: PullRequestDeclinedPayload{}, + filename: "../testdata/bitbucket/pull-request-declined.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"pullrequest:rejected"}, + }, + }, + { + name: "PullRequestCommentCreated", + event: PullRequestCommentCreatedEvent, + typ: PullRequestCommentCreatedPayload{}, + filename: "../testdata/bitbucket/pull-request-comment-created.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"pullrequest:comment_created"}, + }, + }, + { + name: "PullRequestCommentUpdated", + event: PullRequestCommentUpdatedEvent, + typ: PullRequestCommentUpdatedPayload{}, + filename: "../testdata/bitbucket/pull-request-comment-updated.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"pullrequest:comment_updated"}, + }, + }, + { + name: "PullRequestCommentDeleted", + event: PullRequestCommentDeletedEvent, + typ: PullRequestCommentDeletedPayload{}, + filename: "../testdata/bitbucket/pull-request-comment-deleted.json", + headers: http.Header{ + "X-Hook-UUID": []string{"MY_UUID"}, + "X-Event-Key": []string{"pullrequest:comment_deleted"}, + }, + }, + } - var parseError error - server := newServer(func(w http.ResponseWriter, r *http.Request) { - _, parseError = hook.Parse(r, RepoPushEvent) - }) - defer server.Close() + for _, tt := range tests { + tc := tt + client := &http.Client{} + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + payload, err := os.Open(tc.filename) + Equal(t, err, nil) + defer func() { + _ = payload.Close() + }() - req, err := http.NewRequest(http.MethodPost, server.URL+path, bytes.NewBuffer([]byte(payload))) - Equal(t, err, nil) + var parseError error + var results interface{} + server := newServer(func(w http.ResponseWriter, r *http.Request) { + results, parseError = hook.Parse(r, tc.event) + }) + defer server.Close() + req, err := http.NewRequest(http.MethodPost, server.URL+path, payload) + assert.NoError(err) + req.Header = tc.headers + req.Header.Set("Content-Type", "application/json") - req.Header.Set("Content-Type", "application/json") - req.Header.Set("X-Hook-UUID", "THIS_DOES_NOT_MATCH") - req.Header.Set("X-Event-Key", "repo:push") - - 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, ErrUUIDVerificationFailed) -} - -func TestBadNoEventHeader(t *testing.T) { - payload := "{}" - - var parseError error - server := newServer(func(w http.ResponseWriter, r *http.Request) { - _, parseError = hook.Parse(r, RepoPushEvent) - }) - 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-Hook-UUID", "MY_UUID") - - 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, ErrMissingEventKeyHeader) -} - -func TestBadBody(t *testing.T) { - payload := "" - - var parseError error - server := newServer(func(w http.ResponseWriter, r *http.Request) { - _, parseError = hook.Parse(r, RepoPushEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "repo:push") - - 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 TestUnsubscribedEvent(t *testing.T) { - payload := "{}" - - var parseError error - server := newServer(func(w http.ResponseWriter, r *http.Request) { - _, parseError = hook.Parse(r, RepoPushEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "noneexistant_event") - - 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, ErrEventNotFound) -} - -func TestRepoPush(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/repo-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, RepoPushEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "repo:push") - - 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.(RepoPushPayload) - Equal(t, ok, true) -} - -func TestRepoFork(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/repo-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, RepoForkEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "repo:fork") - - 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.(RepoForkPayload) - Equal(t, ok, true) -} - -func TestRepoUpdated(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/repo-updated.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, RepoUpdatedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "repo:updated") - - 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.(RepoUpdatedPayload) - Equal(t, ok, true) -} - -func TestRepoCommitCommentCreated(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/commit-comment-created.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, RepoCommitCommentCreatedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "repo:commit_comment_created") - - 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.(RepoCommitCommentCreatedPayload) - Equal(t, ok, true) -} - -func TestRepoCommitStatusCreated(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/repo-commit-status-created.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, RepoCommitStatusCreatedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "repo:commit_status_created") - - 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.(RepoCommitStatusCreatedPayload) - Equal(t, ok, true) -} - -func TestRepoCommitStatusUpdated(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/repo-commit-status-updated.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, RepoCommitStatusUpdatedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "repo:commit_status_updated") - - 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.(RepoCommitStatusUpdatedPayload) - Equal(t, ok, true) -} - -func TestIssueCreated(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/issue-created.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, IssueCreatedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "issue:created") - - 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.(IssueCreatedPayload) - Equal(t, ok, true) -} - -func TestIssueUpdated(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/issue-updated.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, IssueUpdatedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "issue:updated") - - 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.(IssueUpdatedPayload) - Equal(t, ok, true) -} - -func TestIssueCommentCreated(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/issue-comment-created.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, IssueCommentCreatedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "issue:comment_created") - - 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.(IssueCommentCreatedPayload) - Equal(t, ok, true) -} - -func TestPullRequestCreated(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/pull-request-created.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, PullRequestCreatedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "pullrequest:created") - - 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.(PullRequestCreatedPayload) - Equal(t, ok, true) -} - -func TestPullRequestUpdated(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/pull-request-updated.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, PullRequestUpdatedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "pullrequest:updated") - - 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.(PullRequestUpdatedPayload) - Equal(t, ok, true) -} - -func TestPullRequestApproved(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/pull-request-approved.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, PullRequestApprovedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "pullrequest:approved") - - 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.(PullRequestApprovedPayload) - Equal(t, ok, true) -} - -func TestPullRequestApprovalRemoved(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/pull-request-approval-removed.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, PullRequestUnapprovedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "pullrequest:unapproved") - - 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.(PullRequestUnapprovedPayload) - Equal(t, ok, true) -} - -func TestPullRequestMerged(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/pull-request-merged.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, PullRequestMergedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "pullrequest:fulfilled") - - 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.(PullRequestMergedPayload) - Equal(t, ok, true) -} - -func TestPullRequestDeclined(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/pull-request-declined.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, PullRequestDeclinedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "pullrequest:rejected") - - 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.(PullRequestDeclinedPayload) - Equal(t, ok, true) -} - -func TestPullRequestCommentCreated(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/pull-request-comment-created.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, PullRequestCommentCreatedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "pullrequest:comment_created") - - 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.(PullRequestCommentCreatedPayload) - Equal(t, ok, true) -} - -func TestPullRequestCommentUpdated(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/pull-request-comment-updated.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, PullRequestCommentUpdatedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "pullrequest:comment_updated") - - 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.(PullRequestCommentUpdatedPayload) - Equal(t, ok, true) -} - -func TestPullRequestCommentDeleted(t *testing.T) { - - payload, err := os.Open("../testdata/bitbucket/pull-request-comment-deleted.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, PullRequestCommentDeletedEvent) - }) - 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-Hook-UUID", "MY_UUID") - req.Header.Set("X-Event-Key", "pullrequest:comment_deleted") - - 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.(PullRequestCommentDeletedPayload) - Equal(t, ok, true) + resp, err := client.Do(req) + assert.NoError(err) + assert.Equal(http.StatusOK, resp.StatusCode) + assert.NoError(parseError) + assert.Equal(reflect.TypeOf(tc.typ), reflect.TypeOf(results)) + }) + } }