* TP-51771| created maverick client * TP-51771| added check for empty data response form maverick * made maverick client generic
124 lines
4.9 KiB
Go
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
|
|
}
|