From 45bb0e91064d0a30730974a03f9b814775d3840b Mon Sep 17 00:00:00 2001 From: Somtochi Onyekwere Date: Wed, 25 Aug 2021 23:19:02 +0100 Subject: [PATCH] Add test Signed-off-by: Somtochi Onyekwere --- internal/notifier/factory.go | 2 +- internal/notifier/lark.go | 10 ++++++++-- internal/notifier/lark_test.go | 31 +++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 internal/notifier/lark_test.go diff --git a/internal/notifier/factory.go b/internal/notifier/factory.go index a7df613a7..bf945059a 100644 --- a/internal/notifier/factory.go +++ b/internal/notifier/factory.go @@ -80,7 +80,7 @@ func (f Factory) Notifier(provider string) (Interface, error) { case v1beta1.TelegramProvider: n, err = NewTelegram(f.Channel, f.Token) case v1beta1.LarkProvider: - n = NewLark(f.URL) + n, err = NewLark(f.URL) default: err = fmt.Errorf("provider %s not supported", provider) } diff --git a/internal/notifier/lark.go b/internal/notifier/lark.go index a8f755358..71bc9d7ff 100644 --- a/internal/notifier/lark.go +++ b/internal/notifier/lark.go @@ -2,6 +2,7 @@ package notifier import ( "fmt" + "net/url" "strings" "github.com/fluxcd/pkg/runtime/events" @@ -48,10 +49,15 @@ type LarkText struct { Content string `json:"content"` } -func NewLark(address string) *Lark { +func NewLark(address string) (*Lark, error) { + _, err := url.ParseRequestURI(address) + if err != nil { + return nil, fmt.Errorf("invalid Slack hook URL %s", address) + } + return &Lark{ URL: address, - } + }, nil } func (l *Lark) Post(event events.Event) error { diff --git a/internal/notifier/lark_test.go b/internal/notifier/lark_test.go new file mode 100644 index 000000000..ba0de7afe --- /dev/null +++ b/internal/notifier/lark_test.go @@ -0,0 +1,31 @@ +package notifier + +import ( + "encoding/json" + "io/ioutil" + "net/http" + "net/http/httptest" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestLark_Post(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b, err := ioutil.ReadAll(r.Body) + require.NoError(t, err) + var payload LarkPayload + err = json.Unmarshal(b, &payload) + require.NoError(t, err) + + require.Equal(t, "💫 gitrepository/webapp.gitops-system", payload.Card.Header.Title.Content) + require.Equal(t, "turquoise", payload.Card.Header.Template) + })) + defer ts.Close() + + lark, err := NewLark(ts.URL) + require.NoError(t, err) + + err = lark.Post(testEvent()) + require.NoError(t, err) +}