Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 0 additions & 35 deletions internal/handler/task/task_handler_mock.go
Original file line number Diff line number Diff line change
@@ -1,36 +1 @@
package task_handler

import (
"taskflow/internal/dto"
task_service "taskflow/internal/service/task"

"github.com/stretchr/testify/mock"
)

type TaskServiceMock struct {
mock.Mock
}

var _ task_service.TaskServiceInterface = (*TaskServiceMock)(nil)

func (m *TaskServiceMock) CreateTask(taskRequest *dto.CreateTaskRequest) error {

args := m.Called(taskRequest)
return args.Error(0)
}
func (m *TaskServiceMock) GetTask(id int) (dto.GetTaskResponse, error) {
args := m.Called(id)
return args.Get(0).(dto.GetTaskResponse), args.Error(1)
}
func (m *TaskServiceMock) ListTasks() (dto.ListTasksResponse, error) {
args := m.Called()
return args.Get(0).(dto.ListTasksResponse), args.Error(1)
}
func (m *TaskServiceMock) UpdateStatus(id int, status string) error {
args := m.Called(id, status)
return args.Error(0)
}
func (m *TaskServiceMock) Delete(id int) error {
args := m.Called(id)
return args.Error(0)
}
103 changes: 52 additions & 51 deletions internal/handler/task/task_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"taskflow/internal/auth"
"taskflow/internal/common"
"taskflow/internal/dto"
task_service "taskflow/internal/service/task"
"testing"

"github.com/gin-gonic/gin"
Expand All @@ -25,7 +26,7 @@ func TestTaskHandler_CreateTask(t *testing.T) {
tests := []struct {
name string
requestBody any
setupMock func() *TaskServiceMock
setupMock func() *task_service.TaskServiceMock
expectedStatus int
expectedBody any
}{
Expand All @@ -34,8 +35,8 @@ func TestTaskHandler_CreateTask(t *testing.T) {
requestBody: dto.CreateTaskRequest{
Task: "Buy Milk",
},
setupMock: func() *TaskServiceMock {
mockService := new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
mockService := new(task_service.TaskServiceMock)
mockService.On("CreateTask", mock.MatchedBy(func(req *dto.CreateTaskRequest) bool {
return req.Task == "Buy Milk"
})).Return(nil)
Expand All @@ -49,8 +50,8 @@ func TestTaskHandler_CreateTask(t *testing.T) {
{
name: "failure case - invalid JSON",
requestBody: `{"task": }`, // malformed JSON
setupMock: func() *TaskServiceMock {
return new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
return new(task_service.TaskServiceMock)
},
expectedStatus: http.StatusBadRequest,
expectedBody: common.ErrorResponse{
Expand All @@ -62,8 +63,8 @@ func TestTaskHandler_CreateTask(t *testing.T) {
requestBody: dto.CreateTaskRequest{
Task: "", // empty task
},
setupMock: func() *TaskServiceMock {
return new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
return new(task_service.TaskServiceMock)
},
expectedStatus: http.StatusBadRequest,
expectedBody: common.ErrorResponse{
Expand All @@ -75,8 +76,8 @@ func TestTaskHandler_CreateTask(t *testing.T) {
requestBody: dto.CreateTaskRequest{
Task: "Buy Milk",
},
setupMock: func() *TaskServiceMock {
mockService := new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
mockService := new(task_service.TaskServiceMock)
mockService.On("CreateTask", mock.Anything).Return(errors.New("service error"))
return mockService
},
Expand Down Expand Up @@ -142,15 +143,15 @@ func TestTaskHandler_GetTask(t *testing.T) {
tests := []struct {
name string
taskID string
setupMock func() *TaskServiceMock
setupMock func() *task_service.TaskServiceMock
expectedStatus int
expectedBody any
}{
{
name: "success case",
taskID: "1",
setupMock: func() *TaskServiceMock {
mockService := new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
mockService := new(task_service.TaskServiceMock)
mockService.On("GetTask", 1).Return(dto.GetTaskResponse{
ID: 1,
Task: "Buy Milk",
Expand All @@ -168,8 +169,8 @@ func TestTaskHandler_GetTask(t *testing.T) {
{
name: "failure case - invalid ID",
taskID: "invalid",
setupMock: func() *TaskServiceMock {
return new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
return new(task_service.TaskServiceMock)
},
expectedStatus: http.StatusBadRequest,
expectedBody: common.ErrorResponse{
Expand All @@ -179,8 +180,8 @@ func TestTaskHandler_GetTask(t *testing.T) {
{
name: "failure case - ID less than 1",
taskID: "0",
setupMock: func() *TaskServiceMock {
return new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
return new(task_service.TaskServiceMock)
},
expectedStatus: http.StatusBadRequest,
expectedBody: common.ErrorResponse{
Expand All @@ -190,8 +191,8 @@ func TestTaskHandler_GetTask(t *testing.T) {
{
name: "failure case - task not found",
taskID: "999",
setupMock: func() *TaskServiceMock {
mockService := new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
mockService := new(task_service.TaskServiceMock)
mockService.On("GetTask", 999).Return(dto.GetTaskResponse{}, errors.New("not found"))
return mockService
},
Expand Down Expand Up @@ -238,14 +239,14 @@ func TestTaskHandler_GetTask(t *testing.T) {
func TestTaskHandler_ListTasks(t *testing.T) {
tests := []struct {
name string
setupMock func() *TaskServiceMock
setupMock func() *task_service.TaskServiceMock
expectedStatus int
expectedBody any
}{
{
name: "success case - with tasks",
setupMock: func() *TaskServiceMock {
mockService := new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
mockService := new(task_service.TaskServiceMock)
mockService.On("ListTasks").Return(dto.ListTasksResponse{
Tasks: []dto.GetTaskResponse{
{ID: 1, Task: "Buy Milk", Status: "pending"},
Expand All @@ -264,8 +265,8 @@ func TestTaskHandler_ListTasks(t *testing.T) {
},
{
name: "success case - empty list",
setupMock: func() *TaskServiceMock {
mockService := new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
mockService := new(task_service.TaskServiceMock)
mockService.On("ListTasks").Return(dto.ListTasksResponse{
Tasks: []dto.GetTaskResponse{},
}, nil)
Expand All @@ -278,8 +279,8 @@ func TestTaskHandler_ListTasks(t *testing.T) {
},
{
name: "failure case - service error",
setupMock: func() *TaskServiceMock {
mockService := new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
mockService := new(task_service.TaskServiceMock)
mockService.On("ListTasks").Return(dto.ListTasksResponse{}, errors.New("database error"))
return mockService
},
Expand Down Expand Up @@ -328,7 +329,7 @@ func TestTaskHandler_UpdateStatus(t *testing.T) {
name string
taskID string
requestBody any
setupMock func() *TaskServiceMock
setupMock func() *task_service.TaskServiceMock
expectedStatus int
expectedBody any
}{
Expand All @@ -338,8 +339,8 @@ func TestTaskHandler_UpdateStatus(t *testing.T) {
requestBody: dto.UpdateStatusRequest{
Status: "completed",
},
setupMock: func() *TaskServiceMock {
mockService := new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
mockService := new(task_service.TaskServiceMock)
mockService.On("UpdateStatus", 1, "completed").Return(nil)
return mockService
},
Expand All @@ -354,8 +355,8 @@ func TestTaskHandler_UpdateStatus(t *testing.T) {
requestBody: dto.UpdateStatusRequest{
Status: "completed",
},
setupMock: func() *TaskServiceMock {
return new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
return new(task_service.TaskServiceMock)
},
expectedStatus: http.StatusBadRequest,
expectedBody: common.ErrorResponse{
Expand All @@ -368,8 +369,8 @@ func TestTaskHandler_UpdateStatus(t *testing.T) {
requestBody: dto.UpdateStatusRequest{
Status: "completed",
},
setupMock: func() *TaskServiceMock {
return new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
return new(task_service.TaskServiceMock)
},
expectedStatus: http.StatusBadRequest,
expectedBody: common.ErrorResponse{
Expand All @@ -380,8 +381,8 @@ func TestTaskHandler_UpdateStatus(t *testing.T) {
name: "failure case - invalid JSON",
taskID: "1",
requestBody: `{"status": }`, // malformed JSON
setupMock: func() *TaskServiceMock {
return new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
return new(task_service.TaskServiceMock)
},
expectedStatus: http.StatusBadRequest,
expectedBody: common.ErrorResponse{
Expand All @@ -394,8 +395,8 @@ func TestTaskHandler_UpdateStatus(t *testing.T) {
requestBody: dto.UpdateStatusRequest{
Status: "invalid-status",
},
setupMock: func() *TaskServiceMock {
return new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
return new(task_service.TaskServiceMock)
},
expectedStatus: http.StatusBadRequest,
},
Expand All @@ -405,8 +406,8 @@ func TestTaskHandler_UpdateStatus(t *testing.T) {
requestBody: dto.UpdateStatusRequest{
Status: "completed",
},
setupMock: func() *TaskServiceMock {
mockService := new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
mockService := new(task_service.TaskServiceMock)
mockService.On("UpdateStatus", 999, "completed").Return(gorm.ErrRecordNotFound)
return mockService
},
Expand All @@ -421,8 +422,8 @@ func TestTaskHandler_UpdateStatus(t *testing.T) {
requestBody: dto.UpdateStatusRequest{
Status: "completed",
},
setupMock: func() *TaskServiceMock {
mockService := new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
mockService := new(task_service.TaskServiceMock)
mockService.On("UpdateStatus", 1, "completed").Return(errors.New("service error"))
return mockService
},
Expand Down Expand Up @@ -491,15 +492,15 @@ func TestTaskHandler_Delete(t *testing.T) {
tests := []struct {
name string
taskID string
setupMock func() *TaskServiceMock
setupMock func() *task_service.TaskServiceMock
expectedStatus int
expectedBody any
}{
{
name: "success case",
taskID: "1",
setupMock: func() *TaskServiceMock {
mockService := new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
mockService := new(task_service.TaskServiceMock)
mockService.On("Delete", 1).Return(nil)
return mockService
},
Expand All @@ -511,8 +512,8 @@ func TestTaskHandler_Delete(t *testing.T) {
{
name: "failure case - invalid ID",
taskID: "invalid",
setupMock: func() *TaskServiceMock {
return new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
return new(task_service.TaskServiceMock)
},
expectedStatus: http.StatusBadRequest,
expectedBody: common.ErrorResponse{
Expand All @@ -522,8 +523,8 @@ func TestTaskHandler_Delete(t *testing.T) {
{
name: "failure case - ID less than 1",
taskID: "0",
setupMock: func() *TaskServiceMock {
return new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
return new(task_service.TaskServiceMock)
},
expectedStatus: http.StatusBadRequest,
expectedBody: common.ErrorResponse{
Expand All @@ -533,8 +534,8 @@ func TestTaskHandler_Delete(t *testing.T) {
{
name: "failure case - task not found",
taskID: "999",
setupMock: func() *TaskServiceMock {
mockService := new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
mockService := new(task_service.TaskServiceMock)
mockService.On("Delete", 999).Return(gorm.ErrRecordNotFound)
return mockService
},
Expand All @@ -546,8 +547,8 @@ func TestTaskHandler_Delete(t *testing.T) {
{
name: "failure case - service error",
taskID: "1",
setupMock: func() *TaskServiceMock {
mockService := new(TaskServiceMock)
setupMock: func() *task_service.TaskServiceMock {
mockService := new(task_service.TaskServiceMock)
mockService.On("Delete", 1).Return(errors.New("database error"))
return mockService
},
Expand Down
2 changes: 2 additions & 0 deletions internal/handler/user/user_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ func NewUserHandler(s user_service.UserServiceInterface, ua auth.UserAuthInterfa
return &UserHandler{service: s, userAuth: ua}
}

var _ UserHandlerInterface = (*UserHandler)(nil)

// Register godoc
// @Summary Register a new user
// @Description Create a new user account
Expand Down
10 changes: 10 additions & 0 deletions internal/handler/user/user_handler_interface.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package user_handler

import "github.com/gin-gonic/gin"

type UserHandlerInterface interface {
Register(c *gin.Context)
Login(c *gin.Context)
UpdatePassword(c *gin.Context)
DeleteUser(c *gin.Context)
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
package task_service
package gorm_task

import (
"taskflow/internal/domain/task"

"github.com/stretchr/testify/mock"
gg "taskflow/internal/repository/gorm/gorm_task"
)

type TaskRepoMock struct {
mock.Mock
}

var _ gg.TaskRepositoryInterface = (*TaskRepoMock)(nil)
var _ TaskRepositoryInterface = (*TaskRepoMock)(nil)

func (m *TaskRepoMock) Create(task *task.Task) error {
args := m.Called(task)
Expand Down
Loading
Loading