From e4e9dc28e42444e8cb2deba310177007c592a71a Mon Sep 17 00:00:00 2001 From: William Albertus Dembo Date: Wed, 18 Sep 2019 16:10:50 +0700 Subject: [PATCH] [Dembo] Refactor move formatting to message object --- .../slack/client_integration_test.go | 5 +++-- .../slack/message/standard.go | 18 ++++++++++++++--- .../slack/message/standard_test.go | 20 +++++++++++++++++-- .../slack_notification.go | 12 ++--------- .../slack_notification_test.go | 4 ++-- 5 files changed, 40 insertions(+), 19 deletions(-) diff --git a/plugins/slack-notification-plugin/slack/client_integration_test.go b/plugins/slack-notification-plugin/slack/client_integration_test.go index f8185fbd..b19332db 100644 --- a/plugins/slack-notification-plugin/slack/client_integration_test.go +++ b/plugins/slack-notification-plugin/slack/client_integration_test.go @@ -49,7 +49,8 @@ func TestSlackClientIntegration_Publish(t *testing.T) { ctx.setUp(t) defer ctx.tearDown() - messageObject := message.NewStandardMessage("Message from slack plugin integration test with standard message") - err := ctx.instance().slackClient.Publish(messageObject) + messageObject := message.MessageMock{} + messageObject.On("JSON").Return("{\"text\":\"Message from slack plugin integration test with standard message\"}", nil) + err := ctx.instance().slackClient.Publish(&messageObject) assert.NoError(t, err) } diff --git a/plugins/slack-notification-plugin/slack/message/standard.go b/plugins/slack-notification-plugin/slack/message/standard.go index bd748029..5d49ff52 100644 --- a/plugins/slack-notification-plugin/slack/message/standard.go +++ b/plugins/slack-notification-plugin/slack/message/standard.go @@ -1,12 +1,24 @@ package message -import "encoding/json" +import ( + "encoding/json" + "proctor/pkg/notification/event" +) type standardMessage struct { Text string `json:"text"` + evt event.Event } func (messageObject *standardMessage) JSON() (string, error) { + evtDataJSON, err := json.Marshal(messageObject.evt.Content()) + if err != nil { + return "", err + } + textMessage := "User: " + messageObject.evt.User().Email + "\n" + textMessage += "Execute job with detail: " + textMessage += string(evtDataJSON) + messageObject.Text = textMessage byteMessage, err := json.Marshal(messageObject) if err != nil { return "", err @@ -14,8 +26,8 @@ func (messageObject *standardMessage) JSON() (string, error) { return string(byteMessage), nil } -func NewStandardMessage(text string) Message { +func NewStandardMessage(evt event.Event) Message { return &standardMessage{ - Text: text, + evt: evt, } } diff --git a/plugins/slack-notification-plugin/slack/message/standard_test.go b/plugins/slack-notification-plugin/slack/message/standard_test.go index 8d0b861b..4f723cd8 100644 --- a/plugins/slack-notification-plugin/slack/message/standard_test.go +++ b/plugins/slack-notification-plugin/slack/message/standard_test.go @@ -2,12 +2,28 @@ package message import ( "github.com/stretchr/testify/assert" + "proctor/pkg/notification/event" "testing" ) func TestStandardMessage_JSON(t *testing.T) { - messageObject := NewStandardMessage("content") + userData := event.UserData{ + Email: "proctor@example.com", + } + content := map[string]string{ + "ExecutionID": "7", + "JobName": "test-job", + "ImageTag": "test", + "Args": "args", + "Status": "CREATED", + } + evt := event.EventMock{} + evt.On("User").Return(userData) + evt.On("Content").Return(content) + defer evt.AssertExpectations(t) + + messageObject := NewStandardMessage(&evt) result, err := messageObject.JSON() assert.NoError(t, err) - assert.Equal(t, "{\"text\":\"content\"}", result) + assert.NotEmpty(t, result) } diff --git a/plugins/slack-notification-plugin/slack_notification.go b/plugins/slack-notification-plugin/slack_notification.go index 1901e550..782e49c3 100644 --- a/plugins/slack-notification-plugin/slack_notification.go +++ b/plugins/slack-notification-plugin/slack_notification.go @@ -1,7 +1,6 @@ package main import ( - "encoding/json" "github.com/go-resty/resty/v2" "proctor/pkg/notification" "proctor/pkg/notification/event" @@ -14,15 +13,8 @@ type slackNotification struct { } func (notification *slackNotification) OnNotify(evt event.Event) error { - evtDataJSON, err := json.Marshal(evt.Content()) - if err != nil { - return err - } - textMessage := "User: " + evt.User().Email + "\n" - textMessage += "Execute job with detail: " - textMessage += string(evtDataJSON) - messageObject := message.NewStandardMessage(textMessage) - err = notification.slackClient.Publish(messageObject) + messageObject := message.NewStandardMessage(evt) + err := notification.slackClient.Publish(messageObject) return err } diff --git a/plugins/slack-notification-plugin/slack_notification_test.go b/plugins/slack-notification-plugin/slack_notification_test.go index 8fc6bf4e..db1ff6e1 100644 --- a/plugins/slack-notification-plugin/slack_notification_test.go +++ b/plugins/slack-notification-plugin/slack_notification_test.go @@ -61,7 +61,7 @@ func TestSlackNotification_OnNotify(t *testing.T) { evt.On("User").Return(userData) evt.On("Content").Return(content) - messageObject := message.NewStandardMessage("User: proctor@example.com\nExecute job with detail: {\"Args\":\"args\",\"ExecutionID\":\"7\",\"ImageTag\":\"test\",\"JobName\":\"test-job\",\"Status\":\"CREATED\"}") + messageObject := message.NewStandardMessage(evt) ctx.instance().slackClient.On("Publish", messageObject).Return(nil) err := ctx.instance().slackNotification.OnNotify(evt) @@ -90,7 +90,7 @@ func TestSlackNotification_OnNotifyErrorPublish(t *testing.T) { evt.On("User").Return(userData) evt.On("Content").Return(content) - messageObject := message.NewStandardMessage("User: proctor@example.com\nExecute job with detail: {\"Args\":\"args\",\"ExecutionID\":\"7\",\"ImageTag\":\"test\",\"JobName\":\"test-job\",\"Status\":\"CREATED\"}") + messageObject := message.NewStandardMessage(evt) ctx.instance().slackClient.On("Publish", messageObject).Return(errors.New("publish error")) err := ctx.instance().slackNotification.OnNotify(evt)