Skip to content

Commit

Permalink
Merge pull request #29 from garethjevans/handler-tests
Browse files Browse the repository at this point in the history
chore: added some simple handler tests
  • Loading branch information
garethjevans authored Mar 2, 2021
2 parents 3d5f915 + 63ce52a commit 2dbe659
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 8 deletions.
20 changes: 20 additions & 0 deletions pkg/hook/fake.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package hook

import (
"net/http"

"github.com/pkg/errors"
)

type fakeSender struct {
fail bool
Urls []string
}

func (f *fakeSender) send(forwardURL string, bodyBytes []byte, header http.Header) error {
f.Urls = append(f.Urls, forwardURL)
if f.fail {
return errors.New("simulate a failure")
}
return nil
}
23 changes: 15 additions & 8 deletions pkg/hook/store_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,15 @@ import (
)

type handler struct {
ForwardURL string
InsecureRelay bool
client *http.Client
maxRetryDuration *time.Duration
store store.Store
sender sender
}

type sender interface {
send(forwardURL string, bodyBytes []byte, header http.Header) error
}

func (h *handler) Handle(hook *Hook) error {
Expand All @@ -31,20 +35,23 @@ func (h *handler) Handle(hook *Hook) error {

hook.ID = hookID

if h.sender == nil {
h.sender = h
}
// attempt to send
err = h.send(hook.ForwardURL, hook.Body, hook.Headers)
err = h.sender.send(hook.ForwardURL, hook.Body, hook.Headers)
if err != nil {
// if failed, mark as failed with the error as the message
err = h.store.Error(hookID, err.Error())
if err != nil {
return err
}
}

// if success, mark as successful,
err = h.store.Success(hookID)
if err != nil {
return err
} else {
// if success, mark as successful,
err = h.store.Success(hookID)
if err != nil {
return err
}
}

return nil
Expand Down
50 changes: 50 additions & 0 deletions pkg/hook/store_handler_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package hook

import (
"testing"

"github.com/garethjevans/captain-hook/pkg/store"
"github.com/stretchr/testify/assert"
)

func TestHandle_Success(t *testing.T) {
s := store.FakeStore{}
sender := fakeSender{}
h := handler{
store: &s,
maxRetryDuration: &defaultMaxRetryDuration,
sender: &sender,
}

hook := Hook{
ForwardURL: "http://example.com",
}

err := h.Handle(&hook)
assert.NoError(t, err)

assert.Equal(t, 1, len(s.MessageIDs))
assert.Equal(t, 1, len(s.SuccessMessageIDs))
assert.Equal(t, 0, len(s.ErroredMessageIDs))
}

func TestHandle_Error(t *testing.T) {
s := store.FakeStore{}
sender := fakeSender{fail: true}
h := handler{
store: &s,
maxRetryDuration: &defaultMaxRetryDuration,
sender: &sender,
}

hook := Hook{
ForwardURL: "http://example.com",
}

err := h.Handle(&hook)
assert.NoError(t, err)

assert.Equal(t, 1, len(s.MessageIDs))
assert.Equal(t, 0, len(s.SuccessMessageIDs))
assert.Equal(t, 1, len(s.ErroredMessageIDs))
}
25 changes: 25 additions & 0 deletions pkg/store/fake.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package store

import "github.com/google/uuid"

type FakeStore struct {
MessageIDs []string
SuccessMessageIDs []string
ErroredMessageIDs []string
}

func (s *FakeStore) StoreHook(forwardURL string, body []byte, header map[string][]string) (string, error) {
messageID := uuid.New().String()
s.MessageIDs = append(s.MessageIDs, messageID)
return messageID, nil
}

func (s *FakeStore) Success(id string) error {
s.SuccessMessageIDs = append(s.SuccessMessageIDs, id)
return nil
}

func (s *FakeStore) Error(id string, message string) error {
s.ErroredMessageIDs = append(s.ErroredMessageIDs, id)
return nil
}

0 comments on commit 2dbe659

Please sign in to comment.