TP-56017 : Slack Service UT - Messaging Operations (#362)

This commit is contained in:
Vijay Joshi
2024-02-05 12:28:13 +05:30
committed by GitHub
parent 34596e9a38
commit 4f139abc85

View File

@@ -0,0 +1,216 @@
package slack
import (
"errors"
"github.com/slack-go/slack"
"github.com/stretchr/testify/suite"
"houston/logger"
"houston/mocks"
"testing"
)
type SlackServiceSuite struct {
suite.Suite
SlackService *SlackService
SocketModeClientWrapper mocks.ISocketModeClientWrapperMock
}
func (suite *SlackServiceSuite) Test_SendDM_FailureCase() {
suite.SocketModeClientWrapper.PostMessageMock.Return("", "", GetMockSlackError())
err := suite.SlackService.SendDM(GetMockRecipientID(), GetMockMessageText())
suite.Error(err, "service must throw error")
}
func (suite *SlackServiceSuite) Test_SendDM_SuccessCase() {
suite.SocketModeClientWrapper.PostMessageMock.Return(GetMockChannelID(), GetMockTimeStamp(), nil)
err := suite.SlackService.SendDM(GetMockRecipientID(), GetMockMessageText())
suite.NoError(err, "service must not throw error")
}
func (suite *SlackServiceSuite) Test_PostMessage_FailureCase() {
suite.SocketModeClientWrapper.PostMessageMock.Return("", "", GetMockSlackError())
timeStamp, err := suite.SlackService.PostMessage(GetMockMessageText(), false, GetMockChannel())
suite.Error(err, "service must throw error")
suite.Empty(timeStamp, "timeStamp must be empty")
}
func (suite *SlackServiceSuite) Test_PostMessage_SuccessCase() {
suite.SocketModeClientWrapper.PostMessageMock.Return(GetMockChannelID(), GetMockTimeStamp(), nil)
timeStamp, err := suite.SlackService.PostMessage(GetMockMessageText(), false, GetMockChannel())
suite.NoError(err, "service must not throw error")
suite.NotEmpty(timeStamp, "timeStamp must not be empty")
}
func (suite *SlackServiceSuite) Test_PostMessageOption_FailureCase() {
suite.SocketModeClientWrapper.PostMessageMock.Return("", "", GetMockSlackError())
timeStamp, err := suite.SlackService.PostMessageOption(GetMockChannelID(), GetMockMessageOption())
suite.Error(err, "service must throw error")
suite.Empty(timeStamp, "timeStamp must be empty")
}
func (suite *SlackServiceSuite) Test_PostMessageOption_SuccessCase() {
suite.SocketModeClientWrapper.PostMessageMock.Return(GetMockChannelID(), GetMockTimeStamp(), nil)
timeStamp, err := suite.SlackService.PostMessageOption(GetMockChannelID(), GetMockMessageOption())
suite.NoError(err, "service must not throw error")
suite.NotEmpty(timeStamp, "timeStamp must not be empty")
}
func (suite *SlackServiceSuite) Test_UploadFileByPath_FailureCase() {
suite.SocketModeClientWrapper.UploadFileMock.Return(nil, GetMockSlackError())
file, err := suite.SlackService.UploadFileByPath(GetMockFilePath(), GetMockChannelID())
suite.Error(err, "service must throw error")
suite.Nil(file, "file must be nil")
}
func (suite *SlackServiceSuite) Test_UploadFileByPath_SuccessCase() {
suite.SocketModeClientWrapper.UploadFileMock.Return(&slack.File{}, nil)
file, err := suite.SlackService.UploadFileByPath(GetMockFilePath(), GetMockChannelID())
suite.NoError(err, "service must not throw error")
suite.NotNil(file, "file must not be nil")
}
func (suite *SlackServiceSuite) Test_PostMessageByChannelID_FailureCase() {
suite.SocketModeClientWrapper.PostMessageMock.Return("", "", GetMockSlackError())
timeStamp, err := suite.SlackService.PostMessageByChannelID(GetMockMessageText(), false, GetMockChannelID())
suite.Error(err, "service must throw error")
suite.Empty(timeStamp, "timeStamp must be empty")
}
func (suite *SlackServiceSuite) Test_PostMessageByChannelID_SuccessCase() {
suite.SocketModeClientWrapper.PostMessageMock.Return(GetMockChannelID(), GetMockTimeStamp(), nil)
timeStamp, err := suite.SlackService.PostMessageByChannelID(GetMockMessageText(), false, GetMockChannelID())
suite.NoError(err, "service must not throw error")
suite.NotEmpty(timeStamp, "timeStamp must not be empty")
}
func (suite *SlackServiceSuite) Test_PostMessageWithAttachments_FailureCase() {
suite.SocketModeClientWrapper.PostMessageMock.Return("", "", GetMockSlackError())
timeStamp, err := suite.SlackService.PostMessageWithAttachments(GetMockChannelID(), GetMockAttachment())
suite.Error(err, "service must throw error")
suite.Empty(timeStamp, "timeStamp must be empty")
}
func (suite *SlackServiceSuite) Test_PostMessageWithAttachments_SuccessCase() {
suite.SocketModeClientWrapper.PostMessageMock.Return(GetMockChannelID(), GetMockTimeStamp(), nil)
timeStamp, err := suite.SlackService.PostMessageWithAttachments(GetMockChannelID(), GetMockAttachment())
suite.NoError(err, "service must not throw error")
suite.NotEmpty(timeStamp, "timeStamp must not be empty")
}
func (suite *SlackServiceSuite) Test_UpdateMessageWithAttachments_FailureCase() {
suite.SocketModeClientWrapper.UpdateMessageMock.Return("", "", "", GetMockSlackError())
err := suite.SlackService.UpdateMessageWithAttachments(GetMockChannelID(), GetMockTimeStamp(), GetMockAttachment())
suite.Error(err, "service must throw error")
}
func (suite *SlackServiceSuite) Test_UpdateMessageWithAttachments_SuccessCase() {
suite.SocketModeClientWrapper.UpdateMessageMock.Return("", "", "", nil)
err := suite.SlackService.UpdateMessageWithAttachments(GetMockChannelID(), GetMockTimeStamp(), GetMockAttachment())
suite.NoError(err, "service must not throw error")
}
func (suite *SlackServiceSuite) Test_PostEphemeralByChannelID_FailureCase() {
suite.SocketModeClientWrapper.PostEphemeralMock.Return("", GetMockSlackError())
err := suite.SlackService.PostEphemeralByChannelID(GetMockMessageText(), GetMockRecipientID(), false, GetMockChannelID())
suite.Error(err, "service must throw error")
}
func (suite *SlackServiceSuite) Test_PostEphemeralByChannelID_SuccessCase() {
suite.SocketModeClientWrapper.PostEphemeralMock.Return(GetMockTimeStamp(), nil)
err := suite.SlackService.PostEphemeralByChannelID(GetMockMessageText(), GetMockRecipientID(), false, GetMockChannelID())
suite.NoError(err, "service must not throw error")
}
func (suite *SlackServiceSuite) Test_PostMessageBlocks_FailureCase() {
suite.SocketModeClientWrapper.PostMessageMock.Return("", "", GetMockSlackError())
timeStamp, err := suite.SlackService.PostMessageBlocks(GetMockChannelID(), GetMockBlock(), GetMockColor())
suite.Error(err, "service must throw error")
suite.Empty(timeStamp, "timeStamp must be empty")
}
func (suite *SlackServiceSuite) Test_PostMessageBlocks_SuccessCase() {
suite.SocketModeClientWrapper.PostMessageMock.Return(GetMockChannelID(), GetMockTimeStamp(), nil)
timeStamp, err := suite.SlackService.PostMessageBlocks(GetMockChannelID(), GetMockBlock(), GetMockColor())
suite.NoError(err, "service must not throw error")
suite.NotEmpty(timeStamp, "timeStamp must not be empty")
}
func GetMockMessageText() string {
return "Hello World!"
}
func GetMockMessageOption() slack.MsgOption {
return slack.MsgOptionText(GetMockMessageText(), false)
}
func GetMockChannelID() string {
return "C123"
}
func GetMockRecipientID() string {
return "U123"
}
func GetMockTimeStamp() string {
return "1234"
}
func GetMockSlackError() error {
return errors.New("failed to send message")
}
func GetMockFilePath() string {
return "mock/file/path"
}
func GetMockAttachment() slack.Attachment {
return slack.Attachment{}
}
func GetMockBlock() slack.Blocks {
return slack.Blocks{}
}
func GetMockColor() string {
return "red"
}
func GetMockChannel() *slack.Channel {
return &slack.Channel{
GroupConversation: slack.GroupConversation{},
IsChannel: true,
IsGeneral: true,
IsMember: true,
Locale: "",
}
}
func (suite *SlackServiceSuite) SetupSuite() {
logger.InitLogger()
suite.SocketModeClientWrapper = *mocks.NewISocketModeClientWrapperMock(suite.T())
suite.SlackService = &SlackService{
SocketModeClientWrapper: &suite.SocketModeClientWrapper,
}
}
func TestSlackServiceSuite(t *testing.T) {
suite.Run(t, new(SlackServiceSuite))
}