Add gitlab system hook parsing

If you use gitlab system hooks you can now send push/tag_push/merge_request events
This commit is contained in:
Martin Treml
2018-12-20 17:09:12 +01:00
parent 80aa7fa2fe
commit 1b9fe11c1f
3 changed files with 113 additions and 17 deletions
+61 -4
View File
@@ -2,15 +2,13 @@ package gitlab
import (
"bytes"
"io"
"log"
"net/http"
"net/http/httptest"
"os"
"testing"
"io"
"reflect"
"testing"
"github.com/stretchr/testify/require"
)
@@ -266,3 +264,62 @@ func TestWebhooks(t *testing.T) {
})
}
}
func TestSystemHooks(t *testing.T) {
assert := require.New(t)
tests := []struct {
name string
event Event
typ interface{}
filename string
}{
{
name: "PushEvent",
event: PushEvents,
typ: PushEventPayload{},
filename: "../testdata/gitlab/push-event.json",
},
{
name: "TagEvent",
event: TagEvents,
typ: TagEventPayload{},
filename: "../testdata/gitlab/tag-event.json",
},
{
name: "MergeRequestEvent",
event: MergeRequestEvents,
typ: MergeRequestEventPayload{},
filename: "../testdata/gitlab/merge-request-event.json",
},
}
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)
assert.NoError(err)
defer func() {
_ = payload.Close()
}()
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.Set("Content-Type", "application/json")
req.Header.Set("X-Gitlab-Token", "sampleToken!")
req.Header.Set("X-Gitlab-Event", "System Hook")
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))
})
}
}