Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ coverage.out
.idea/
vendor/
.DS_Store
.vscode
.vscode
# vim temp files
*.swp
72 changes: 72 additions & 0 deletions github/apps_hooks_deliveries.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
// Copyright 2021 The go-github AUTHORS. All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package github

import (
"context"
"fmt"
)

// ListHookDeliveries lists deliveries of an App webhook.
//
// GitHub API docs: https://docs.github.com/en/rest/reference/apps#list-deliveries-for-an-app-webhook
func (s *AppsService) ListHookDeliveries(ctx context.Context, opts *ListCursorOptions) ([]*HookDelivery, *Response, error) {
u, err := addOptions("app/hook/deliveries", opts)
if err != nil {
return nil, nil, err
}

req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}

deliveries := []*HookDelivery{}
resp, err := s.client.Do(ctx, req, &deliveries)
if err != nil {
return nil, resp, err
}

return deliveries, resp, nil
}

// GetHookDelivery returns the App webhook delivery with the specified ID.
//
// GitHub API docs: https://docs.github.com/en/rest/reference/apps#get-a-delivery-for-an-app-webhook
func (s *AppsService) GetHookDelivery(ctx context.Context, deliveryID int64) (*HookDelivery, *Response, error) {
u := fmt.Sprintf("app/hook/deliveries/%v", deliveryID)
req, err := s.client.NewRequest("GET", u, nil)
if err != nil {
return nil, nil, err
}

h := new(HookDelivery)
resp, err := s.client.Do(ctx, req, h)
if err != nil {
return nil, resp, err
}

return h, resp, nil
}

// RedeliverHookDelivery redelivers a delivery for an App webhook.
//
// GitHub API docs: https://docs.github.com/en/rest/reference/apps#redeliver-a-delivery-for-an-app-webhook
func (s *AppsService) RedeliverHookDelivery(ctx context.Context, deliveryID int64) (*HookDelivery, *Response, error) {
u := fmt.Sprintf("app/hook/deliveries/%v/attempts", deliveryID)
req, err := s.client.NewRequest("POST", u, nil)
if err != nil {
return nil, nil, err
}

h := new(HookDelivery)
resp, err := s.client.Do(ctx, req, h)
if err != nil {
return nil, resp, err
}

return h, resp, nil
}
119 changes: 119 additions & 0 deletions github/apps_hooks_deliveries_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
// Copyright 2021 The go-github AUTHORS. All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package github
Comment thread
pierce-m marked this conversation as resolved.

import (
"context"
"fmt"
"net/http"
"testing"

"github.com/google/go-cmp/cmp"
)

func TestAppsService_ListHookDeliveries(t *testing.T) {
client, mux, _, teardown := setup()
defer teardown()

mux.HandleFunc("/app/hook/deliveries", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
testFormValues(t, r, values{"cursor": "v1_12077215967"})
fmt.Fprint(w, `[{"id":1}, {"id":2}]`)
})

opts := &ListCursorOptions{Cursor: "v1_12077215967"}

ctx := context.Background()

deliveries, _, err := client.Apps.ListHookDeliveries(ctx, opts)
if err != nil {
t.Errorf("Apps.ListHookDeliveries returned error: %v", err)
}

want := []*HookDelivery{{ID: Int64(1)}, {ID: Int64(2)}}
if d := cmp.Diff(deliveries, want); d != "" {
t.Errorf("Apps.ListHooks want (-), got (+):\n%s", d)
}

const methodName = "ListHookDeliveries"
testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Apps.ListHookDeliveries(ctx, opts)
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}

func TestAppsService_GetHookDelivery(t *testing.T) {
client, mux, _, teardown := setup()
defer teardown()

mux.HandleFunc("/app/hook/deliveries/1", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
fmt.Fprint(w, `{"id":1}`)
})

ctx := context.Background()
hook, _, err := client.Apps.GetHookDelivery(ctx, 1)
if err != nil {
t.Errorf("Apps.GetHookDelivery returned error: %v", err)
}

want := &HookDelivery{ID: Int64(1)}
if !cmp.Equal(hook, want) {
t.Errorf("Apps.GetHookDelivery returned %+v, want %+v", hook, want)
}

const methodName = "GetHookDelivery"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Apps.GetHookDelivery(ctx, -1)
return err
})

testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Apps.GetHookDelivery(ctx, 1)
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}

func TestAppsService_RedeliverHookDelivery(t *testing.T) {
client, mux, _, teardown := setup()
defer teardown()

mux.HandleFunc("/app/hook/deliveries/1/attempts", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "POST")
fmt.Fprint(w, `{"id":1}`)
})

ctx := context.Background()
hook, _, err := client.Apps.RedeliverHookDelivery(ctx, 1)
if err != nil {
t.Errorf("Apps.RedeliverHookDelivery returned error: %v", err)
}

want := &HookDelivery{ID: Int64(1)}
if !cmp.Equal(hook, want) {
t.Errorf("Apps.RedeliverHookDelivery returned %+v, want %+v", hook, want)
}

const methodName = "RedeliverHookDelivery"
testBadOptions(t, methodName, func() (err error) {
_, _, err = client.Apps.RedeliverHookDelivery(ctx, -1)
return err
})

testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
got, resp, err := client.Apps.RedeliverHookDelivery(ctx, 1)
if got != nil {
t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
}
return resp, err
})
}