8000 Add app hook deliveries API by pierce-m · Pull Request #2226 · google/go-github · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Add app hook deliveries API #2226

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Dec 16, 2021
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
8C69
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

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
})
}
0