Skip to content

Commit

Permalink
fix: list_task_test
Browse files Browse the repository at this point in the history
  • Loading branch information
gleaming9 committed Nov 20, 2024
1 parent 1c94503 commit bc329ee
Show file tree
Hide file tree
Showing 13 changed files with 319 additions and 5 deletions.
64 changes: 64 additions & 0 deletions _chapter17/section70/handler/list_task_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package handler

import (
"go_todo_app/entity"
"go_todo_app/store"
"go_todo_app/testutil"
"net/http"
"net/http/httptest"
"testing"
)

func TestListTask(t *testing.T) {
type want struct {
status int
rspFile string
}
tests := map[string]struct {
tasks map[entity.TaskID]*entity.Task
want want
}{
"ok": {
tasks: map[entity.TaskID]*entity.Task{
1: {
ID: 1,
Title: "test1",
Status: "todo",
},
2: {
ID: 2,
Title: "test2",
Status: "done",
},
},
want: want{
status: http.StatusOK,
rspFile: "testdata/list_task/ok_rsp.json.golden",
},
},
"empty": {
tasks: map[entity.TaskID]*entity.Task{},
want: want{
status: http.StatusOK,
rspFile: "testdata/list_task/empty_rsp.json.golden",
},
},
}
for n, tt := range tests {
tt := tt
t.Run(n, func(t *testing.T) {
t.Parallel()

w := httptest.NewRecorder()
r := httptest.NewRequest(http.MethodGet, "/tasks", nil)

sut := ListTask{Store: &store.TaskStore{Tasks: tt.tasks}}
sut.ServeHTTP(w, r)

resp := w.Result()
testutil.AssertResponse(t,
resp, tt.want.status, testutil.LoadFile(t, tt.want.rspFile),
)
})
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
12 changes: 12 additions & 0 deletions _chapter17/section70/handler/testdata/list_task/ok_rsp.json.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[
{
"id" : 1,
"title" : "test1",
"status" : "todo"
},
{
"id" : 2,
"title" : "test2",
"status" : "done"
}
]
64 changes: 64 additions & 0 deletions _chapter18/handler/list_task_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package handler

import (
"go_todo_app/entity"
"go_todo_app/store"
"go_todo_app/testutil"
"net/http"
"net/http/httptest"
"testing"
)

func TestListTask(t *testing.T) {
type want struct {
status int
rspFile string
}
tests := map[string]struct {
tasks map[entity.TaskID]*entity.Task
want want
}{
"ok": {
tasks: map[entity.TaskID]*entity.Task{
1: {
ID: 1,
Title: "test1",
Status: "todo",
},
2: {
ID: 2,
Title: "test2",
Status: "done",
},
},
want: want{
status: http.StatusOK,
rspFile: "testdata/list_task/ok_rsp.json.golden",
},
},
"empty": {
tasks: map[entity.TaskID]*entity.Task{},
want: want{
status: http.StatusOK,
rspFile: "testdata/list_task/empty_rsp.json.golden",
},
},
}
for n, tt := range tests {
tt := tt
t.Run(n, func(t *testing.T) {
t.Parallel()

w := httptest.NewRecorder()
r := httptest.NewRequest(http.MethodGet, "/tasks", nil)

sut := ListTask{Store: &store.TaskStore{Tasks: tt.tasks}}
sut.ServeHTTP(w, r)

resp := w.Result()
testutil.AssertResponse(t,
resp, tt.want.status, testutil.LoadFile(t, tt.want.rspFile),
)
})
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
12 changes: 12 additions & 0 deletions _chapter18/handler/testdata/list_task/ok_rsp.json.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[
{
"id" : 1,
"title" : "test1",
"status" : "todo"
},
{
"id" : 2,
"title" : "test2",
"status" : "done"
}
]
64 changes: 64 additions & 0 deletions _chapter19/section75/handler/list_task_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package handler

import (
"go_todo_app/entity"
"go_todo_app/store"
"go_todo_app/testutil"
"net/http"
"net/http/httptest"
"testing"
)

func TestListTask(t *testing.T) {
type want struct {
status int
rspFile string
}
tests := map[string]struct {
tasks map[entity.TaskID]*entity.Task
want want
}{
"ok": {
tasks: map[entity.TaskID]*entity.Task{
1: {
ID: 1,
Title: "test1",
Status: "todo",
},
2: {
ID: 2,
Title: "test2",
Status: "done",
},
},
want: want{
status: http.StatusOK,
rspFile: "testdata/list_task/ok_rsp.json.golden",
},
},
"empty": {
tasks: map[entity.TaskID]*entity.Task{},
want: want{
status: http.StatusOK,
rspFile: "testdata/list_task/empty_rsp.json.golden",
},
},
}
for n, tt := range tests {
tt := tt
t.Run(n, func(t *testing.T) {
t.Parallel()

w := httptest.NewRecorder()
r := httptest.NewRequest(http.MethodGet, "/tasks", nil)

sut := ListTask{Store: &store.TaskStore{Tasks: tt.tasks}}
sut.ServeHTTP(w, r)

resp := w.Result()
testutil.AssertResponse(t,
resp, tt.want.status, testutil.LoadFile(t, tt.want.rspFile),
)
})
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
12 changes: 12 additions & 0 deletions _chapter19/section75/handler/testdata/list_task/ok_rsp.json.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[
{
"id" : 1,
"title" : "test1",
"status" : "todo"
},
{
"id" : 2,
"title" : "test2",
"status" : "done"
}
]
7 changes: 2 additions & 5 deletions handler/list_task.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
package handler

import (
"github.com/jmoiron/sqlx"
"go_todo_app/entity"
"go_todo_app/store"
"net/http"
)

// 모든 Task를 가져오는 핸들러
type ListTask struct {
DB *sqlx.DB
Repo *store.Repository
Service ListTasksService
}

// task 구조체는 JSON 데이터 형식을 정의
Expand All @@ -24,7 +21,7 @@ func (lt *ListTask) ServeHTTP(w http.ResponseWriter, r *http.Request) {
//요청 컨텍스트를 가져옴
ctx := r.Context()

tasks, err := lt.Repo.ListTasks(ctx, lt.DB)
tasks, err := lt.Service.ListTasks(ctx)
if err != nil {
RespondJSON(ctx, w, &ErrResponse{
Message: err.Error(),
Expand Down
73 changes: 73 additions & 0 deletions handler/list_task_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package handler

import (
"context"
"errors"
"go_todo_app/entity"
"go_todo_app/testutil"
"net/http"
"net/http/httptest"
"testing"
)

func TestListTask(t *testing.T) {
type want struct {
status int
rspFile string
}
tests := map[string]struct {
tasks []*entity.Task
want want
}{
"ok": {
tasks: []*entity.Task{
{
ID: 1,
Title: "test1",
Status: entity.TaskStatusTodo,
},
{
ID: 2,
Title: "test2",
Status: entity.TaskStatusDone,
},
},
want: want{
status: http.StatusOK,
rspFile: "testdata/list_task/ok_rsp.json.golden",
},
},
"empty": {
tasks: []*entity.Task{},
want: want{
status: http.StatusOK,
rspFile: "testdata/list_task/empty_rsp.json.golden",
},
},
}

for n, tt := range tests {
tt := tt
t.Run(n, func(t *testing.T) {
t.Parallel()

w := httptest.NewRecorder()
r := httptest.NewRequest(http.MethodGet, "/tasks", nil)

moq := &ListTasksServiceMock{}
moq.ListTasksFunc = func(ctx context.Context) (entity.Tasks, error) {
if tt.tasks != nil {
return tt.tasks, nil
}
return nil, errors.New("error from mock")
}
sut := ListTask{Service: moq}
sut.ServeHTTP(w, r)

resp := w.Result()
testutil.AssertResponse(t,
resp, tt.want.status, testutil.LoadFile(t, tt.want.rspFile),
)
})
}
}
1 change: 1 addition & 0 deletions handler/testdata/list_task/empty_rsp.json.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
12 changes: 12 additions & 0 deletions handler/testdata/list_task/ok_rsp.json.golden
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[
{
"id" : 1,
"title" : "test1",
"status" : "todo"
},
{
"id" : 2,
"title" : "test2",
"status" : "done"
}
]

0 comments on commit bc329ee

Please sign in to comment.