Skip to content
This repository was archived by the owner on Dec 10, 2024. It is now read-only.

Commit 0f91b06

Browse files
authored
Merge pull request #2046 from smit-modi/trigger-test-hook
Add TriggerTestGroupHook
2 parents e023c2f + 10afd04 commit 0f91b06

3 files changed

Lines changed: 111 additions & 0 deletions

File tree

group_hooks.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,25 @@ func (s *GroupsService) DeleteGroupHook(pid interface{}, hook int, options ...Re
229229
return s.client.Do(req, nil)
230230
}
231231

232+
// TriggerTestGroupHook triggers a test hook for a specified group.
233+
//
234+
// GitLab API docs:
235+
// https://docs.gitlab.com/ee/api/group_webhooks.html#trigger-a-test-group-hook
236+
func (s *GroupsService) TriggerTestGroupHook(pid interface{}, hook int, trigger GroupHookTrigger, options ...RequestOptionFunc) (*Response, error) {
237+
group, err := parseID(pid)
238+
if err != nil {
239+
return nil, err
240+
}
241+
u := fmt.Sprintf("groups/%s/hooks/%d/test/%s", PathEscape(group), hook, trigger)
242+
243+
req, err := s.client.NewRequest(http.MethodPost, u, nil, options)
244+
if err != nil {
245+
return nil, err
246+
}
247+
248+
return s.client.Do(req, nil)
249+
}
250+
232251
// SetGroupCustomHeader creates or updates a group custom webhook header.
233252
//
234253
// GitLab API docs:

group_hooks_test.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,78 @@ func TestEditGroupHook(t *testing.T) {
358358
}
359359
}
360360

361+
func TestTriggerTestGroupHook(t *testing.T) {
362+
mux, client := setup(t)
363+
364+
mux.HandleFunc("/api/v4/groups/1/hooks/1/test/push_events", func(w http.ResponseWriter, r *http.Request) {
365+
testMethod(t, r, http.MethodPost)
366+
w.WriteHeader(http.StatusCreated)
367+
fmt.Fprint(w, `{"message":"201 Created"}`)
368+
})
369+
370+
mux.HandleFunc("/api/v4/groups/1/hooks/1/test/invalid_trigger", func(w http.ResponseWriter, r *http.Request) {
371+
testMethod(t, r, http.MethodPost)
372+
w.WriteHeader(http.StatusBadRequest)
373+
fmt.Fprint(w, `{"error": "trigger does not have a valid value"}`)
374+
})
375+
376+
tests := []struct {
377+
name string
378+
groupID interface{}
379+
hookID int
380+
trigger GroupHookTrigger
381+
wantErr bool
382+
wantStatus int
383+
wantErrMsg string
384+
}{
385+
{
386+
name: "Valid trigger",
387+
groupID: 1,
388+
hookID: 1,
389+
trigger: GroupHookTriggerPush,
390+
wantErr: false,
391+
wantStatus: http.StatusCreated,
392+
},
393+
{
394+
name: "Invalid group ID",
395+
groupID: "invalid",
396+
hookID: 1,
397+
trigger: GroupHookTriggerPush,
398+
wantErr: true,
399+
wantStatus: http.StatusNotFound,
400+
},
401+
{
402+
name: "Invalid trigger type",
403+
groupID: 1,
404+
hookID: 1,
405+
trigger: "invalid_trigger",
406+
wantErr: true,
407+
wantStatus: http.StatusBadRequest,
408+
wantErrMsg: "trigger does not have a valid value",
409+
},
410+
}
411+
412+
for _, tt := range tests {
413+
t.Run(tt.name, func(t *testing.T) {
414+
resp, err := client.Groups.TriggerTestGroupHook(tt.groupID, tt.hookID, tt.trigger)
415+
416+
if tt.wantErr {
417+
assert.Error(t, err)
418+
if tt.wantStatus != 0 {
419+
assert.Equal(t, tt.wantStatus, resp.StatusCode)
420+
}
421+
if tt.wantErrMsg != "" {
422+
assert.Contains(t, err.Error(), tt.wantErrMsg)
423+
}
424+
} else {
425+
assert.NoError(t, err)
426+
assert.NotNil(t, resp)
427+
assert.Equal(t, tt.wantStatus, resp.StatusCode)
428+
}
429+
})
430+
}
431+
}
432+
361433
func TestDeleteGroupHook(t *testing.T) {
362434
mux, client := setup(t)
363435

types.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,26 @@ func GenericPackageStatus(v GenericPackageStatusValue) *GenericPackageStatusValu
440440
return Ptr(v)
441441
}
442442

443+
// GroupHookTrigger represents the type of event to trigger for a group
444+
// hook test.
445+
type GroupHookTrigger string
446+
447+
// List of available group hook trigger types.
448+
const (
449+
GroupHookTriggerPush GroupHookTrigger = "push_events"
450+
GroupHookTriggerTagPush GroupHookTrigger = "tag_push_events"
451+
GroupHookTriggerIssue GroupHookTrigger = "issues_events"
452+
GroupHookTriggerConfidentialIssue GroupHookTrigger = "confidential_issues_events"
453+
GroupHookTriggerNote GroupHookTrigger = "note_events"
454+
GroupHookTriggerMergeRequest GroupHookTrigger = "merge_requests_events"
455+
GroupHookTriggerJob GroupHookTrigger = "job_events"
456+
GroupHookTriggerPipeline GroupHookTrigger = "pipeline_events"
457+
GroupHookTriggerWikiPage GroupHookTrigger = "wiki_page_events"
458+
GroupHookTriggerRelease GroupHookTrigger = "releases_events"
459+
GroupHookTriggerEmoji GroupHookTrigger = "emoji_events"
460+
GroupHookTriggerResourceAccessToken GroupHookTrigger = "resource_access_token_events"
461+
)
462+
443463
// ISOTime represents an ISO 8601 formatted date.
444464
type ISOTime time.Time
445465

0 commit comments

Comments
 (0)