INFRA-2816 : Slack Service UT - Channel Operations (#364)
This commit is contained in:
@@ -5,8 +5,12 @@ import (
|
||||
"fmt"
|
||||
"github.com/slack-go/slack"
|
||||
"github.com/stretchr/testify/suite"
|
||||
"houston/common/util"
|
||||
"houston/logger"
|
||||
"houston/mocks"
|
||||
"houston/model/incident"
|
||||
"houston/model/severity"
|
||||
"houston/model/team"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@@ -307,6 +311,333 @@ func (suite *SlackServiceSuite) Test_GetUsersInfo_UsersMoreThanSplitSize() {
|
||||
suite.Equal(uint64(3), suite.SocketModeClientWrapper.GetUsersInfoAfterCounter(), "GetUsersInfo must be called thrice")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_CreateSlackChannel() {
|
||||
suite.SocketModeClientWrapper.CreateConversationMock.Return(GetMockChannel(), nil)
|
||||
|
||||
channel, err := suite.SlackService.CreateSlackChannel(1)
|
||||
suite.NoError(err, "service must not throw error")
|
||||
suite.NotNil(channel, "channel must not be nil")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_UploadFilesToChannel_AllSuccess() {
|
||||
filePaths := []string{GetMockFilePath(), GetMockFilePath(), GetMockFilePath()}
|
||||
suite.SocketModeClientWrapper.UploadFileMock.Return(&slack.File{}, nil)
|
||||
|
||||
suite.SlackService.UploadFilesToChannel(filePaths, GetMockChannelID())
|
||||
suite.Equal(uint64(len(filePaths)), suite.SocketModeClientWrapper.UploadFileAfterCounter(), "UploadFile must be called thrice")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_UploadFilesToChannel_AllError() {
|
||||
filePaths := []string{GetMockFilePath() + "1", GetMockFilePath() + "2", GetMockFilePath() + "3"}
|
||||
channelId := GetMockChannelID()
|
||||
suite.SocketModeClientWrapper.UploadFileMock.When(slack.FileUploadParameters{
|
||||
File: filePaths[0],
|
||||
Channels: []string{channelId},
|
||||
}).Then(nil, GetMockSlackError())
|
||||
suite.SocketModeClientWrapper.UploadFileMock.When(slack.FileUploadParameters{
|
||||
File: filePaths[1],
|
||||
Channels: []string{channelId},
|
||||
}).Then(nil, GetMockSlackError())
|
||||
suite.SocketModeClientWrapper.UploadFileMock.When(slack.FileUploadParameters{
|
||||
File: filePaths[2],
|
||||
Channels: []string{channelId},
|
||||
}).Then(nil, GetMockSlackError())
|
||||
|
||||
suite.SlackService.UploadFilesToChannel(filePaths, channelId)
|
||||
suite.Equal(uint64(len(filePaths)), suite.SocketModeClientWrapper.UploadFileAfterCounter(), "UploadFile must be called thrice")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_UploadFilesToChannel_PartialSuccessPartialError() {
|
||||
filePaths := []string{GetMockFilePath() + "1", GetMockFilePath() + "2", GetMockFilePath() + "3"}
|
||||
channelId := GetMockChannelID()
|
||||
suite.SocketModeClientWrapper.UploadFileMock.When(slack.FileUploadParameters{
|
||||
File: filePaths[0],
|
||||
Channels: []string{channelId},
|
||||
}).Then(&slack.File{}, nil)
|
||||
suite.SocketModeClientWrapper.UploadFileMock.When(slack.FileUploadParameters{
|
||||
File: filePaths[1],
|
||||
Channels: []string{channelId},
|
||||
}).Then(nil, GetMockSlackError())
|
||||
suite.SocketModeClientWrapper.UploadFileMock.When(slack.FileUploadParameters{
|
||||
File: filePaths[2],
|
||||
Channels: []string{channelId},
|
||||
}).Then(&slack.File{}, nil)
|
||||
|
||||
suite.SlackService.UploadFilesToChannel(filePaths, channelId)
|
||||
suite.Equal(uint64(len(filePaths)), suite.SocketModeClientWrapper.UploadFileAfterCounter(), "UploadFile must be called thrice")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_AddBookmark_FailureCase() {
|
||||
suite.SocketModeClientWrapper.AddBookmarkMock.Return(slack.Bookmark{}, GetMockSlackError())
|
||||
|
||||
suite.SlackService.AddBookmark(GetMockMessageText(), GetMockChannelID(), GetMockMessageText())
|
||||
suite.Equal(uint64(1), suite.SocketModeClientWrapper.AddBookmarkAfterCounter(), "AddBookmark must be called once")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_AddBookmark_SuccessCase() {
|
||||
suite.SocketModeClientWrapper.AddBookmarkMock.Return(slack.Bookmark{}, nil)
|
||||
|
||||
suite.SlackService.AddBookmark(GetMockMessageText(), GetMockChannelID(), GetMockMessageText())
|
||||
suite.Equal(uint64(1), suite.SocketModeClientWrapper.AddBookmarkAfterCounter(), "AddBookmark must be called once")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetConversationReplies_FailureCase() {
|
||||
suite.SocketModeClientWrapper.GetConversationRepliesMock.Return(nil, false, "", GetMockSlackError())
|
||||
|
||||
msg, hasMore, nextCursor, err := suite.SlackService.GetConversationReplies(GetMockChannelID(), GetMockTimeStamp(), 1)
|
||||
suite.Error(err, "service must throw error")
|
||||
suite.Nil(msg, "msg must be nil")
|
||||
suite.False(hasMore, "hasMore must be false")
|
||||
suite.Empty(nextCursor, "nextCursor must be empty")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetConversationReplies_SuccessCase() {
|
||||
suite.SocketModeClientWrapper.GetConversationRepliesMock.Return([]slack.Message{}, false, "", nil)
|
||||
|
||||
msg, _, _, err := suite.SlackService.GetConversationReplies(GetMockChannelID(), GetMockTimeStamp(), 1)
|
||||
suite.NoError(err, "service must not throw error")
|
||||
suite.NotNil(msg, "msg must not be nil")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_SetChannelTopic_FailureCase() {
|
||||
suite.SocketModeClientWrapper.SetTopicOfConversationMock.Return(nil, GetMockSlackError())
|
||||
|
||||
err := suite.SlackService.SetChannelTopic(GetMockChannel(), &team.TeamEntity{}, &severity.SeverityEntity{}, &incident.IncidentEntity{})
|
||||
suite.Error(err, "service must throw error")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_SetChannelTopic_SuccessCase() {
|
||||
suite.SocketModeClientWrapper.SetTopicOfConversationMock.Return(GetMockChannel(), nil)
|
||||
|
||||
err := suite.SlackService.SetChannelTopic(GetMockChannel(), &team.TeamEntity{}, &severity.SeverityEntity{}, &incident.IncidentEntity{})
|
||||
suite.NoError(err, "service must not throw error")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_JoinConversation_FailureCase() {
|
||||
suite.SocketModeClientWrapper.JoinConversationMock.Return(nil, "", nil, GetMockSlackError())
|
||||
|
||||
channel, warning, warnings, err := suite.SlackService.JoinConversation(GetMockChannelID())
|
||||
suite.Error(err, "service must throw error")
|
||||
suite.Nil(channel, "channel must be nil")
|
||||
suite.Empty(warning, "warning must be empty")
|
||||
suite.Empty(warnings, "warnings must be empty")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_JoinConversation_SuccessCase() {
|
||||
suite.SocketModeClientWrapper.JoinConversationMock.Return(GetMockChannel(), "", nil, nil)
|
||||
|
||||
channel, _, _, err := suite.SlackService.JoinConversation(GetMockChannelID())
|
||||
suite.NoError(err, "service must not throw error")
|
||||
suite.NotNil(channel, "channel must not be nil")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetAllUsersInConversation_FailureCase() {
|
||||
suite.SocketModeClientWrapper.GetUsersInConversationMock.Return(nil, "", GetMockSlackError())
|
||||
|
||||
users, err := suite.SlackService.GetAllUsersInConversation(GetMockChannelID())
|
||||
suite.Error(err, "service must throw error")
|
||||
suite.Nil(users, "users must be nil")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetAllUsersInConversation_SuccessCase() {
|
||||
suite.SocketModeClientWrapper.GetUsersInConversationMock.Return(GetMockUserIds(2), "", nil)
|
||||
|
||||
users, err := suite.SlackService.GetAllUsersInConversation(GetMockChannelID())
|
||||
suite.NoError(err, "service must not throw error")
|
||||
suite.NotNil(users, "users must not be nil")
|
||||
suite.NotEmpty(users, "users must not be empty")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_CheckUserInConversation_FailureCase() {
|
||||
suite.SocketModeClientWrapper.GetUsersInConversationMock.Return(nil, "", GetMockSlackError())
|
||||
|
||||
result, err := suite.SlackService.CheckUserInConversation(GetMockUserID(), GetMockChannelID())
|
||||
suite.Error(err, "service must throw error")
|
||||
suite.False(result, "result must be false")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_CheckUserInConversation_NilUsersCase() {
|
||||
suite.SocketModeClientWrapper.GetUsersInConversationMock.Return(nil, "", nil)
|
||||
|
||||
result, err := suite.SlackService.CheckUserInConversation(GetMockUserID(), GetMockChannelID())
|
||||
suite.Nil(err, "service must not throw error")
|
||||
suite.False(result, "result must be false")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_CheckUserInConversation_EmptyUsersCase() {
|
||||
suite.SocketModeClientWrapper.GetUsersInConversationMock.Return(GetMockUserIds(0), "", nil)
|
||||
|
||||
result, err := suite.SlackService.CheckUserInConversation(GetMockUserID(), GetMockChannelID())
|
||||
suite.Nil(err, "service must not throw error")
|
||||
suite.False(result, "result must be false")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_CheckUserInConversation_NonExistenceCase() {
|
||||
suite.SocketModeClientWrapper.GetUsersInConversationMock.Return(GetMockUserIds(2), "", nil)
|
||||
|
||||
result, err := suite.SlackService.CheckUserInConversation(GetMockUserID(), GetMockChannelID())
|
||||
suite.Nil(err, "service must not throw error")
|
||||
suite.False(result, "result must be false")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_CheckUserInConversation_ExistenceCase() {
|
||||
suite.SocketModeClientWrapper.GetUsersInConversationMock.Return(GetMockUserIds(2), "", nil)
|
||||
|
||||
result, err := suite.SlackService.CheckUserInConversation(GetMockUserIds(1)[0], GetMockChannelID())
|
||||
suite.Nil(err, "service must not throw error")
|
||||
suite.True(result, "result must be true")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetConversationInfo_FailureCase() {
|
||||
suite.SocketModeClientWrapper.GetConversationInfoMock.Return(nil, GetMockSlackError())
|
||||
|
||||
channel, err := suite.SlackService.GetConversationInfo(GetMockChannelID())
|
||||
suite.Error(err, "service must throw error")
|
||||
suite.Nil(channel, "channel must be nil")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetConversationInfo_SuccessCase() {
|
||||
suite.SocketModeClientWrapper.GetConversationInfoMock.Return(GetMockChannel(), nil)
|
||||
|
||||
channel, err := suite.SlackService.GetConversationInfo(GetMockChannelID())
|
||||
suite.NoError(err, "service must not throw error")
|
||||
suite.NotNil(channel, "channel must not be nil")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_InviteUsersToConversation_UserInfoFetchingFailure() {
|
||||
userIds := GetMockUserIds(3)
|
||||
suite.SocketModeClientWrapper.GetUsersInfoMock.Return(nil, GetMockSlackError())
|
||||
|
||||
err := suite.SlackService.InviteUsersToConversation(GetMockChannelID(), userIds...)
|
||||
suite.Error(err, "service must throw error")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_InviteUsersToConversation_InviteUsersFailure() {
|
||||
userIds := GetMockUserIds(3)
|
||||
suite.SocketModeClientWrapper.GetUsersInfoMock.Return(GetMockUsers(3), nil)
|
||||
suite.SocketModeClientWrapper.InviteUsersToConversationMock.Return(nil, GetMockSlackError())
|
||||
|
||||
err := suite.SlackService.InviteUsersToConversation(GetMockChannelID(), userIds...)
|
||||
suite.Error(err, "service must throw error")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_InviteUsersToConversation_SuccessCase() {
|
||||
userIds := GetMockUserIds(3)
|
||||
suite.SocketModeClientWrapper.GetUsersInfoMock.Return(GetMockUsers(3), nil)
|
||||
suite.SocketModeClientWrapper.InviteUsersToConversationMock.Return(GetMockChannel(), nil)
|
||||
|
||||
err := suite.SlackService.InviteUsersToConversation(GetMockChannelID(), userIds...)
|
||||
suite.NoError(err, "service must not throw error")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetNonBotUsersInConversation_GetUserInConversationFailure() {
|
||||
suite.SocketModeClientWrapper.GetUsersInConversationMock.Return(nil, "", GetMockSlackError())
|
||||
|
||||
users, err := suite.SlackService.GetNonBotUsersInConversation(GetMockChannelID())
|
||||
suite.Error(err, "service must throw error")
|
||||
suite.Nil(users, "users must be nil")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetNonBotUsersInConversation_GetUsersInfoFailure() {
|
||||
suite.SocketModeClientWrapper.GetUsersInConversationMock.Return(GetMockUserIds(3), "", nil)
|
||||
suite.SocketModeClientWrapper.GetUsersInfoMock.Return(nil, GetMockSlackError())
|
||||
|
||||
users, _ := suite.SlackService.GetNonBotUsersInConversation(GetMockChannelID())
|
||||
suite.Nil(users, "users must be nil")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetNonBotUsersInConversation_SuccessCase() {
|
||||
mockUsers := GetMockUsers(3)
|
||||
(*mockUsers)[0].IsBot = true
|
||||
|
||||
suite.SocketModeClientWrapper.GetUsersInConversationMock.Return(GetMockUserIds(3), "", nil)
|
||||
suite.SocketModeClientWrapper.GetUsersInfoMock.Return(mockUsers, nil)
|
||||
|
||||
users, err := suite.SlackService.GetNonBotUsersInConversation(GetMockChannelID())
|
||||
suite.NoError(err, "service must not throw error")
|
||||
suite.NotNil(users, "users must not be nil")
|
||||
suite.Len(users, 2, "users length must be equal")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetChannelConversationHistory_GetConversationHistoryGenericError() {
|
||||
suite.SocketModeClientWrapper.GetConversationHistoryMock.Return(nil, GetMockSlackError())
|
||||
|
||||
messages, err := suite.SlackService.GetChannelConversationHistory(GetMockChannelID())
|
||||
suite.Error(err, "service must throw error")
|
||||
suite.Nil(messages, "messages must be nil")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetChannelConversationHistory_NotInChannelErrorJoinConversationFailure() {
|
||||
suite.SocketModeClientWrapper.GetConversationHistoryMock.Return(nil, GetMockSlackError_NotInChannel())
|
||||
suite.SocketModeClientWrapper.JoinConversationMock.Return(nil, "", nil, GetMockSlackError())
|
||||
|
||||
suite.SlackService.GetChannelConversationHistory(GetMockChannelID())
|
||||
suite.Equal(uint64(1), suite.SocketModeClientWrapper.GetConversationHistoryAfterCounter(), "GetConversationHistory must be called once")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetChannelConversationHistory_NotInChannelErrorJoinConversationSuccess() {
|
||||
suite.SocketModeClientWrapper.GetConversationHistoryMock.Return(nil, GetMockSlackError_NotInChannel())
|
||||
suite.SocketModeClientWrapper.JoinConversationMock.Return(GetMockChannel(), "", nil, nil)
|
||||
|
||||
suite.SlackService.GetChannelConversationHistory(GetMockChannelID())
|
||||
suite.Equal(uint64(2), suite.SocketModeClientWrapper.GetConversationHistoryAfterCounter(), "GetConversationHistory must be called twice")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetChannelConversationHistory_SuccessCase() {
|
||||
suite.SocketModeClientWrapper.GetConversationHistoryMock.Return(GetMockConversationHistory(), nil)
|
||||
|
||||
messages, err := suite.SlackService.GetChannelConversationHistory(GetMockChannelID())
|
||||
suite.NoError(err, "service must not throw error")
|
||||
suite.NotNil(messages, "messages must not be nil")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetSlackConversationHistoryWithReplies_GetChannelConversationHistoryError() {
|
||||
suite.SocketModeClientWrapper.GetConversationHistoryMock.Return(nil, GetMockSlackError())
|
||||
|
||||
messages, err := suite.SlackService.GetSlackConversationHistoryWithReplies(GetMockChannelID())
|
||||
suite.Error(err, "service must throw error")
|
||||
suite.Nil(messages, "messages must be nil")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetSlackConversationHistoryWithReplies_GetAllUsersInConversationError() {
|
||||
suite.SocketModeClientWrapper.GetConversationHistoryMock.Return(GetMockConversationHistory(), nil)
|
||||
suite.SocketModeClientWrapper.GetUsersInConversationMock.Return(nil, "", GetMockSlackError())
|
||||
|
||||
messages, err := suite.SlackService.GetSlackConversationHistoryWithReplies(GetMockChannelID())
|
||||
suite.Error(err, "service must throw error")
|
||||
suite.Nil(messages, "messages must be nil")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetSlackConversationHistoryWithReplies_GetUsersInfoError() {
|
||||
suite.SocketModeClientWrapper.GetConversationHistoryMock.Return(GetMockConversationHistory(), nil)
|
||||
suite.SocketModeClientWrapper.GetUsersInConversationMock.Return(GetMockUserIds(3), "", nil)
|
||||
suite.SocketModeClientWrapper.GetUsersInfoMock.Return(nil, GetMockSlackError())
|
||||
|
||||
messages, _ := suite.SlackService.GetSlackConversationHistoryWithReplies(GetMockChannelID())
|
||||
suite.NotNil(messages, "messages must not be nil")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetSlackConversationHistoryWithReplies_GetConversationRepliesError() {
|
||||
suite.SocketModeClientWrapper.GetConversationHistoryMock.Return(GetMockConversationHistory(), nil)
|
||||
suite.SocketModeClientWrapper.GetUsersInConversationMock.Return(GetMockUserIds(3), "", nil)
|
||||
suite.SocketModeClientWrapper.GetUsersInfoMock.Return(GetMockUsers(3), nil)
|
||||
suite.SocketModeClientWrapper.GetConversationRepliesMock.Return(nil, false, "", GetMockSlackError())
|
||||
|
||||
messages, _ := suite.SlackService.GetSlackConversationHistoryWithReplies(GetMockChannelID())
|
||||
suite.NotNil(messages, "messages must not be nil")
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) Test_GetSlackConversationHistoryWithReplies_SuccessCase() {
|
||||
suite.SocketModeClientWrapper.GetConversationHistoryMock.Return(GetMockConversationHistory(), nil)
|
||||
suite.SocketModeClientWrapper.GetUsersInConversationMock.Return(GetMockUserIds(3), "", nil)
|
||||
suite.SocketModeClientWrapper.GetUsersInfoMock.Return(GetMockUsers(3), nil)
|
||||
suite.SocketModeClientWrapper.GetConversationRepliesMock.Return(GetMockSlackMessages(), false, "", nil)
|
||||
|
||||
messages, err := suite.SlackService.GetSlackConversationHistoryWithReplies(GetMockChannelID())
|
||||
suite.NoError(err, "service must not throw error")
|
||||
suite.NotNil(messages, "messages must not be nil")
|
||||
}
|
||||
|
||||
func GetMockMessageText() string {
|
||||
return "Hello World!"
|
||||
}
|
||||
@@ -331,6 +662,10 @@ func GetMockSlackError() error {
|
||||
return errors.New("failed to send message")
|
||||
}
|
||||
|
||||
func GetMockSlackError_NotInChannel() error {
|
||||
return errors.New(util.NotInChannelError)
|
||||
}
|
||||
|
||||
func GetMockFilePath() string {
|
||||
return "mock/file/path"
|
||||
}
|
||||
@@ -385,6 +720,19 @@ func GetMockChannel() *slack.Channel {
|
||||
}
|
||||
}
|
||||
|
||||
func GetMockConversationHistory() *slack.GetConversationHistoryResponse {
|
||||
return &slack.GetConversationHistoryResponse{
|
||||
Messages: GetMockSlackMessages(),
|
||||
}
|
||||
}
|
||||
|
||||
func GetMockSlackMessages() []slack.Message {
|
||||
return []slack.Message{
|
||||
{Msg: slack.Msg{User: "U1", Text: "Hello World!"}},
|
||||
{Msg: slack.Msg{User: "U2", Text: "Hello World!"}},
|
||||
}
|
||||
}
|
||||
|
||||
func (suite *SlackServiceSuite) SetupTest() {
|
||||
logger.InitLogger()
|
||||
suite.SocketModeClientWrapper = *mocks.NewISocketModeClientWrapperMock(suite.T())
|
||||
|
||||
Reference in New Issue
Block a user