191 lines
5.8 KiB
Go
191 lines
5.8 KiB
Go
package handler
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"eslogad-be/internal/contract"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/mock"
|
|
)
|
|
|
|
// MockMasterService is a mock implementation of MasterService
|
|
type MockMasterService struct {
|
|
mock.Mock
|
|
}
|
|
|
|
func (m *MockMasterService) CreateLabel(ctx context.Context, req *contract.CreateLabelRequest) (*contract.LabelResponse, error) {
|
|
args := m.Called(ctx, req)
|
|
return args.Get(0).(*contract.LabelResponse), args.Error(1)
|
|
}
|
|
|
|
func (m *MockMasterService) UpdateLabel(ctx context.Context, id uuid.UUID, req *contract.UpdateLabelRequest) (*contract.LabelResponse, error) {
|
|
args := m.Called(ctx, id, req)
|
|
return args.Get(0).(*contract.LabelResponse), args.Error(1)
|
|
}
|
|
|
|
func (m *MockMasterService) DeleteLabel(ctx context.Context, id uuid.UUID) error {
|
|
args := m.Called(ctx, id)
|
|
return args.Error(0)
|
|
}
|
|
|
|
func (m *MockMasterService) ListLabels(ctx context.Context) (*contract.ListLabelsResponse, error) {
|
|
args := m.Called(ctx)
|
|
return args.Get(0).(*contract.ListLabelsResponse), args.Error(1)
|
|
}
|
|
|
|
func (m *MockMasterService) CreatePriority(ctx context.Context, req *contract.CreatePriorityRequest) (*contract.PriorityResponse, error) {
|
|
args := m.Called(ctx, req)
|
|
return args.Get(0).(*contract.PriorityResponse), args.Error(1)
|
|
}
|
|
|
|
func (m *MockMasterService) UpdatePriority(ctx context.Context, id uuid.UUID, req *contract.UpdatePriorityRequest) (*contract.PriorityResponse, error) {
|
|
args := m.Called(ctx, id, req)
|
|
return args.Get(0).(*contract.PriorityResponse), args.Error(1)
|
|
}
|
|
|
|
func (m *MockMasterService) DeletePriority(ctx context.Context, id uuid.UUID) error {
|
|
args := m.Called(ctx, id)
|
|
return args.Error(0)
|
|
}
|
|
|
|
func (m *MockMasterService) ListPriorities(ctx context.Context) (*contract.ListPrioritiesResponse, error) {
|
|
args := m.Called(ctx)
|
|
return args.Get(0).(*contract.ListPrioritiesResponse), args.Error(1)
|
|
}
|
|
|
|
func (m *MockMasterService) CreateInstitution(ctx context.Context, req *contract.CreateInstitutionRequest) (*contract.InstitutionResponse, error) {
|
|
args := m.Called(ctx, req)
|
|
return args.Get(0).(*contract.InstitutionResponse), args.Error(1)
|
|
}
|
|
|
|
func (m *MockMasterService) UpdateInstitution(ctx context.Context, id uuid.UUID, req *contract.UpdateInstitutionRequest) (*contract.InstitutionResponse, error) {
|
|
args := m.Called(ctx, id, req)
|
|
return args.Get(0).(*contract.InstitutionResponse), args.Error(1)
|
|
}
|
|
|
|
func (m *MockMasterService) DeleteInstitution(ctx context.Context, id uuid.UUID) error {
|
|
args := m.Called(ctx, id)
|
|
return args.Error(0)
|
|
}
|
|
|
|
func (m *MockMasterService) ListInstitutions(ctx context.Context, req *contract.ListInstitutionsRequest) (*contract.ListInstitutionsResponse, error) {
|
|
args := m.Called(ctx, req)
|
|
return args.Get(0).(*contract.ListInstitutionsResponse), args.Error(1)
|
|
}
|
|
|
|
func (m *MockMasterService) CreateDispositionAction(ctx context.Context, req *contract.CreateDispositionActionRequest) (*contract.DispositionActionResponse, error) {
|
|
args := m.Called(ctx, req)
|
|
return args.Get(0).(*contract.DispositionActionResponse), args.Error(1)
|
|
}
|
|
|
|
func (m *MockMasterService) UpdateDispositionAction(ctx context.Context, id uuid.UUID, req *contract.UpdateDispositionActionRequest) (*contract.DispositionActionResponse, error) {
|
|
args := m.Called(ctx, id, req)
|
|
return args.Get(0).(*contract.DispositionActionResponse), args.Error(1)
|
|
}
|
|
|
|
func (m *MockMasterService) DeleteDispositionAction(ctx context.Context, id uuid.UUID) error {
|
|
args := m.Called(ctx, id)
|
|
return args.Error(0)
|
|
}
|
|
|
|
func (m *MockMasterService) ListDispositionActions(ctx context.Context) (*contract.ListDispositionActionsResponse, error) {
|
|
args := m.Called(ctx)
|
|
return args.Get(0).(*contract.ListDispositionActionsResponse), args.Error(1)
|
|
}
|
|
|
|
func TestMasterHandler_ListInstitutions_WithSearch(t *testing.T) {
|
|
// Setup
|
|
gin.SetMode(gin.TestMode)
|
|
mockService := new(MockMasterService)
|
|
handler := NewMasterHandler(mockService)
|
|
|
|
// Test data
|
|
searchTerm := "university"
|
|
expectedResponse := &contract.ListInstitutionsResponse{
|
|
Institutions: []contract.InstitutionResponse{
|
|
{
|
|
ID: "123",
|
|
Name: "Test University",
|
|
Type: "university",
|
|
},
|
|
},
|
|
}
|
|
|
|
// Setup mock expectations
|
|
mockService.On("ListInstitutions", mock.Anything, &contract.ListInstitutionsRequest{
|
|
Search: &searchTerm,
|
|
}).Return(expectedResponse, nil)
|
|
|
|
// Create request
|
|
req, _ := http.NewRequest("GET", "/institutions?search="+searchTerm, nil)
|
|
w := httptest.NewRecorder()
|
|
|
|
// Create gin context
|
|
c, _ := gin.CreateTestContext(w)
|
|
c.Request = req
|
|
|
|
// Execute
|
|
handler.ListInstitutions(c)
|
|
|
|
// Assertions
|
|
assert.Equal(t, http.StatusOK, w.Code)
|
|
|
|
var response map[string]interface{}
|
|
err := json.Unmarshal(w.Body.Bytes(), &response)
|
|
assert.NoError(t, err)
|
|
|
|
// Verify mock was called correctly
|
|
mockService.AssertExpectations(t)
|
|
}
|
|
|
|
func TestMasterHandler_ListInstitutions_WithoutSearch(t *testing.T) {
|
|
// Setup
|
|
gin.SetMode(gin.TestMode)
|
|
mockService := new(MockMasterService)
|
|
handler := NewMasterHandler(mockService)
|
|
|
|
// Test data
|
|
expectedResponse := &contract.ListInstitutionsResponse{
|
|
Institutions: []contract.InstitutionResponse{
|
|
{
|
|
ID: "123",
|
|
Name: "Test Institution",
|
|
Type: "company",
|
|
},
|
|
},
|
|
}
|
|
|
|
// Setup mock expectations
|
|
mockService.On("ListInstitutions", mock.Anything, &contract.ListInstitutionsRequest{
|
|
Search: nil,
|
|
}).Return(expectedResponse, nil)
|
|
|
|
// Create request
|
|
req, _ := http.NewRequest("GET", "/institutions", nil)
|
|
w := httptest.NewRecorder()
|
|
|
|
// Create gin context
|
|
c, _ := gin.CreateTestContext(w)
|
|
c.Request = req
|
|
|
|
// Execute
|
|
handler.ListInstitutions(c)
|
|
|
|
// Assertions
|
|
assert.Equal(t, http.StatusOK, w.Code)
|
|
|
|
var response map[string]interface{}
|
|
err := json.Unmarshal(w.Body.Bytes(), &response)
|
|
assert.NoError(t, err)
|
|
|
|
// Verify mock was called correctly
|
|
mockService.AssertExpectations(t)
|
|
}
|