Files
houston-be/pkg/maverick/maverick_client_test.go
Gullipalli Chetan Kumar f31c75a1fb TP-51771 : Created Maverick Client (#333)
* TP-51771| created maverick client

* TP-51771| added check for empty data response form maverick

* made maverick client generic
2023-12-20 15:12:39 +05:30

124 lines
4.9 KiB
Go

package maverick
import (
"bytes"
"encoding/json"
"errors"
"github.com/spf13/viper"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
"houston/logger"
"houston/mocks"
service "houston/service/request"
"io"
"net/http"
"testing"
)
const TestBaseUrl = "https://maverick.com"
type MaverickClientSuite struct {
suite.Suite
maverickClient *MaverickClient
restClient *mocks.HttpRestClientMock
}
func (suite *MaverickClientSuite) SetupSuite() {
logger.InitLogger()
viper.Set("MAVERICK_BASE_URL", TestBaseUrl)
viper.Set("MAVERICK_CORRELATION_ID", "correlationId")
viper.Set("MAVERICK_AUTHORIZATION_TOKEN", "authorizationToken")
viper.Set("DEFAULT_MAVERICK_TIMEOUT", "5s")
suite.restClient = mocks.NewHttpRestClientMock(suite.T())
suite.maverickClient = &MaverickClient{
RestClient: suite.restClient,
}
}
func TestMaverickClient(t *testing.T) {
suite.Run(t, new(MaverickClientSuite))
}
func (suite *MaverickClientSuite) TestUploadConversationURLs_RestClientFailure() {
suite.restClient.PostWithTimeoutMock.Return(nil, errors.New("error"))
details, configuration := getMockParametersForUploadConversationURLs()
err := suite.maverickClient.UploadConversationURLs(details, configuration)
assert.Error(suite.T(), err)
assert.EqualError(suite.T(), err, "error")
}
func (suite *MaverickClientSuite) TestUploadConversationURLs_StatusCodeFailure() {
suite.restClient.PostWithTimeoutMock.Return(&http.Response{StatusCode: http.StatusBadRequest}, nil)
details, configuration := getMockParametersForUploadConversationURLs()
err := suite.maverickClient.UploadConversationURLs(details, configuration)
assert.EqualError(suite.T(), err, "error while sending payload to GenAI")
}
func (suite *MaverickClientSuite) TestUploadConversationURLs_ResponseFailure() {
genAiResponse := service.GenAiResponse{
Errors: []string{"error"},
}
responseBody, _ := json.Marshal(genAiResponse)
testResponse := http.Response{StatusCode: http.StatusOK, Body: io.NopCloser(bytes.NewBufferString(string(responseBody)))}
suite.restClient.PostWithTimeoutMock.Return(&testResponse, nil)
details, configuration := getMockParametersForUploadConversationURLs()
err := suite.maverickClient.UploadConversationURLs(details, configuration)
assert.EqualError(suite.T(), err, "error occurred in response from GenAI")
}
func (suite *MaverickClientSuite) TestUploadConversationURLs_Success() {
genAiResponse := service.GenAiResponse{
Errors: []string{},
Data: service.Data{
Status: "Accepted",
},
}
responseBody, _ := json.Marshal(genAiResponse)
testResponse := http.Response{StatusCode: http.StatusOK, Body: io.NopCloser(bytes.NewBufferString(string(responseBody)))}
suite.restClient.PostWithTimeoutMock.Return(&testResponse, nil)
details, configuration := getMockParametersForUploadConversationURLs()
err := suite.maverickClient.UploadConversationURLs(details, configuration)
assert.NoError(suite.T(), err)
}
func (suite *MaverickClientSuite) TestUploadConversationURLs_ResponseUnmarshalFailure() {
testResponse := http.Response{StatusCode: http.StatusOK, Body: io.NopCloser(bytes.NewBufferString("invalid response"))}
suite.restClient.PostWithTimeoutMock.Return(&testResponse, nil)
details, configuration := getMockParametersForUploadConversationURLs()
err := suite.maverickClient.UploadConversationURLs(details, configuration)
assert.Error(suite.T(), err)
}
func (suite *MaverickClientSuite) TestUploadConversationURLS_EmptyDataFailure() {
genAiResponse := service.GenAiResponse{}
responseBody, _ := json.Marshal(genAiResponse)
testResponse := http.Response{StatusCode: http.StatusOK, Body: io.NopCloser(bytes.NewBufferString(string(responseBody)))}
suite.restClient.PostWithTimeoutMock.Return(&testResponse, nil)
details, configuration := getMockParametersForUploadConversationURLs()
err := suite.maverickClient.UploadConversationURLs(details, configuration)
assert.EqualError(suite.T(), err, "data in response from GenAI is empty")
}
func (suite *MaverickClientSuite) TestUploadConversationURLs_EmptyStatusFailure() {
genAiResponse := service.GenAiResponse{
Data: service.Data{},
}
responseBody, _ := json.Marshal(genAiResponse)
testResponse := http.Response{StatusCode: http.StatusOK, Body: io.NopCloser(bytes.NewBufferString(string(responseBody)))}
suite.restClient.PostWithTimeoutMock.Return(&testResponse, nil)
details, configuration := getMockParametersForUploadConversationURLs()
err := suite.maverickClient.UploadConversationURLs(details, configuration)
assert.EqualError(suite.T(), err, "data in response from GenAI is empty")
}
func getMockParametersForUploadConversationURLs() (service.IncidentConversationDetails, service.MaverickConfiguration) {
details := service.IncidentConversationDetails{
IncidentId: 1,
SlackUrl: "slackUrl",
TranscriptUrls: []string{},
}
configuration := service.MaverickConfiguration{
ToolName: "toolName",
ConfigurationUrl: "/configurationUrl",
}
return details, configuration
}