Files
houston-be/cmd/app/handler/team_handler_test.go
Gullipalli Chetan Kumar c393b81bbc TP-47335 : Update get teams api to reduce latency by getting user data from database instead of slack (#284)
* TP-47335| created teamservice version 2 for get teams api

* TP-47335| modified the getusers info function to handle nil error

* refactored the structure of team service and created interfaces

* TP-47335| created unit tests

* TP-47335| added unit tests for get teams api

* resolved PR comments

* created custom error types

* made some changes in unit tests

* added unit tests for team handler

* solved merge conflicts

* solved invalid users bug

* resolved merge conflicts

* restricting incident title length to 100 characters

* removed unecessary comments
2023-12-04 15:16:21 +05:30

143 lines
3.7 KiB
Go

package handler
import (
"github.com/gin-gonic/gin"
"github.com/gojuno/minimock/v3"
"github.com/stretchr/testify/suite"
"houston/logger"
"houston/mocks"
"houston/model/customErrors"
service "houston/service/response"
"net/http"
"net/http/httptest"
"testing"
)
type TeamHandlerSuite struct {
suite.Suite
}
func (suite *TeamHandlerSuite) SetupSuite() {
logger.InitLogger()
}
func TestTeamHandler(t *testing.T) {
suite.Run(t, new(TeamHandlerSuite))
}
func (suite *TeamHandlerSuite) TestHandleGetTeamDetailsInvalidTeamId() {
controller := minimock.NewController(suite.T())
suite.T().Cleanup(controller.Finish)
teamService := mocks.NewITeamServiceV2Mock(controller)
handler := NewTeamHandler(nil, teamService)
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
c.Params = gin.Params{
{Key: "id", Value: "invalid"},
}
handler.HandleGetTeamDetails(c)
suite.Equal(http.StatusBadRequest, w.Code)
c.Params = gin.Params{
{Key: "id", Value: "-1"},
}
handler.HandleGetTeamDetails(c)
suite.Equal(http.StatusBadRequest, w.Code)
}
func (suite *TeamHandlerSuite) TestHandleGetTeamDetailsDataAccessError() {
controller := minimock.NewController(suite.T())
suite.T().Cleanup(controller.Finish)
teamService := mocks.NewITeamServiceV2Mock(controller)
teamService.GetTeamDetailsMock.When(1).Then(nil, customErrors.NewDataAccessError("data access error"))
handler := NewTeamHandler(nil, teamService)
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
c.Params = gin.Params{
{Key: "id", Value: "1"},
}
handler.HandleGetTeamDetails(c)
suite.Equal(http.StatusInternalServerError, w.Code)
}
func (suite *TeamHandlerSuite) TestHandleGetTeamDetailsNotFoundError() {
controller := minimock.NewController(suite.T())
suite.T().Cleanup(controller.Finish)
teamService := mocks.NewITeamServiceV2Mock(controller)
teamService.GetTeamDetailsMock.When(2).Then(nil, customErrors.NewNotFoundError("not found error"))
handler := NewTeamHandler(nil, teamService)
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
c.Params = gin.Params{
{Key: "id", Value: "2"},
}
handler.HandleGetTeamDetails(c)
suite.Equal(http.StatusNotFound, w.Code)
}
func (suite *TeamHandlerSuite) TestHandleGetTeamDetailsSuccess() {
controller := minimock.NewController(suite.T())
suite.T().Cleanup(controller.Finish)
teamService := mocks.NewITeamServiceV2Mock(controller)
expectedResponse := &service.TeamResponse{
ID: 1,
Name: "team1",
}
teamService.GetTeamDetailsMock.When(1).Then(expectedResponse, nil)
handler := NewTeamHandler(nil, teamService)
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
c.Params = gin.Params{
{Key: "id", Value: "1"},
}
handler.HandleGetTeamDetails(c)
suite.Equal(http.StatusOK, w.Code)
}
func (suite *TeamHandlerSuite) TestHandleGetAllTeamsFailure() {
controller := minimock.NewController(suite.T())
suite.T().Cleanup(controller.Finish)
teamService := mocks.NewITeamServiceV2Mock(controller)
teamService.GetAllTeamsMock.Expect().Return(nil, customErrors.NewDataAccessError("data access error"))
handler := NewTeamHandler(nil, teamService)
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
handler.HandleGetAllTeams(c)
suite.Equal(http.StatusInternalServerError, w.Code)
}
func (suite *TeamHandlerSuite) TestHandleGetAllTeamsSuccess() {
controller := minimock.NewController(suite.T())
suite.T().Cleanup(controller.Finish)
teamService := mocks.NewITeamServiceV2Mock(controller)
expectedResponse := []service.TeamResponse{
{
ID: 1,
Name: "team1",
},
}
teamService.GetAllTeamsMock.Expect().Return(expectedResponse, nil)
handler := NewTeamHandler(nil, teamService)
w := httptest.NewRecorder()
c, _ := gin.CreateTestContext(w)
handler.HandleGetAllTeams(c)
suite.Equal(http.StatusOK, w.Code)
}