* 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
143 lines
3.7 KiB
Go
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)
|
|
}
|