Merge pull request #107 from zrochler/gitlab-job-hook-build-payload
Add handling for job hooks with build payloads
This commit is contained in:
+10
-3
@@ -38,6 +38,7 @@ const (
|
|||||||
objectPush string = "push"
|
objectPush string = "push"
|
||||||
objectTag string = "tag_push"
|
objectTag string = "tag_push"
|
||||||
objectMergeRequest string = "merge_request"
|
objectMergeRequest string = "merge_request"
|
||||||
|
objectBuild string = "build"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Option is a configuration option for the webhook
|
// Option is a configuration option for the webhook
|
||||||
@@ -173,9 +174,15 @@ func eventParsing(gitLabEvent Event, events []Event, payload []byte) (interface{
|
|||||||
err := json.Unmarshal([]byte(payload), &pl)
|
err := json.Unmarshal([]byte(payload), &pl)
|
||||||
return pl, err
|
return pl, err
|
||||||
case JobEvents:
|
case JobEvents:
|
||||||
var p1 JobEventPayload
|
var pl JobEventPayload
|
||||||
err := json.Unmarshal([]byte(payload), &p1)
|
err := json.Unmarshal([]byte(payload), &pl)
|
||||||
return p1, err
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if pl.ObjectKind == objectBuild {
|
||||||
|
return eventParsing(BuildEvents, events, payload)
|
||||||
|
}
|
||||||
|
return pl, nil
|
||||||
|
|
||||||
case SystemHookEvents:
|
case SystemHookEvents:
|
||||||
var pl SystemHookPayload
|
var pl SystemHookPayload
|
||||||
|
|||||||
+54
-2
@@ -231,15 +231,67 @@ func TestWebhooks(t *testing.T) {
|
|||||||
"X-Gitlab-Event": []string{"Build Hook"},
|
"X-Gitlab-Event": []string{"Build Hook"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
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 = tc.headers
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
req.Header.Set("X-Gitlab-Token", "sampleToken!")
|
||||||
|
|
||||||
|
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))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestJobHooks(t *testing.T) {
|
||||||
|
assert := require.New(t)
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
events []Event
|
||||||
|
typ interface{}
|
||||||
|
filename string
|
||||||
|
headers http.Header
|
||||||
|
}{
|
||||||
{
|
{
|
||||||
name: "JobEvent",
|
name: "JobEvent",
|
||||||
event: JobEvents,
|
events: []Event{JobEvents},
|
||||||
typ: JobEventPayload{},
|
typ: JobEventPayload{},
|
||||||
filename: "../testdata/gitlab/job-event.json",
|
filename: "../testdata/gitlab/job-event.json",
|
||||||
headers: http.Header{
|
headers: http.Header{
|
||||||
"X-Gitlab-Event": []string{"Job Hook"},
|
"X-Gitlab-Event": []string{"Job Hook"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "JobEvent",
|
||||||
|
events: []Event{JobEvents, BuildEvents},
|
||||||
|
typ: BuildEventPayload{},
|
||||||
|
filename: "../testdata/gitlab/build-event.json",
|
||||||
|
headers: http.Header{
|
||||||
|
"X-Gitlab-Event": []string{"Job Hook"},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
@@ -256,7 +308,7 @@ func TestWebhooks(t *testing.T) {
|
|||||||
var parseError error
|
var parseError error
|
||||||
var results interface{}
|
var results interface{}
|
||||||
server := newServer(func(w http.ResponseWriter, r *http.Request) {
|
server := newServer(func(w http.ResponseWriter, r *http.Request) {
|
||||||
results, parseError = hook.Parse(r, tc.event)
|
results, parseError = hook.Parse(r, tc.events...)
|
||||||
})
|
})
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
req, err := http.NewRequest(http.MethodPost, server.URL+path, payload)
|
req, err := http.NewRequest(http.MethodPost, server.URL+path, payload)
|
||||||
|
|||||||
Reference in New Issue
Block a user