From 53bfffee59731ae571bf1669a096ba0bb20865a2 Mon Sep 17 00:00:00 2001 From: ookura keisuke Date: Thu, 16 Apr 2020 22:33:29 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=E8=AA=B2=E9=A1=8C1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../database/user_local_repository.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/interface/api/interfaces/database/user_local_repository.go b/interface/api/interfaces/database/user_local_repository.go index bc9af06..c7b9b69 100644 --- a/interface/api/interfaces/database/user_local_repository.go +++ b/interface/api/interfaces/database/user_local_repository.go @@ -2,6 +2,7 @@ package database import ( "sync" + "sort" "github.com/jmoiron/sqlx" @@ -40,5 +41,19 @@ func (r *onMemoryUserRepository) Store(db *sqlx.DB, u domain.User) (int, error) // 実装は課題 // 出来ればuser_id昇順で返す func (r *onMemoryUserRepository) FindAll(db *sqlx.DB) (domain.Users, error) { - return nil, nil + //r.usersをid順にソートする + userIds := make([]int, len(r.users)) + index := 0 + for userId := range r.users { + userIds[index] = userId + index++ + } + sort.Ints(userIds) + + users := domain.Users{} + for _, id := range userIds { + users = append(users, r.users[id]) + } + + return users, nil } From 58276c30bc8b3bb1264df6a18073e0c0b1b07b92 Mon Sep 17 00:00:00 2001 From: ookura keisuke Date: Thu, 16 Apr 2020 22:34:15 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=E8=AA=B2=E9=A1=8C2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/user_controller_test.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/interface/api/interfaces/controllers/user_controller_test.go b/interface/api/interfaces/controllers/user_controller_test.go index f46a73a..50e7318 100644 --- a/interface/api/interfaces/controllers/user_controller_test.go +++ b/interface/api/interfaces/controllers/user_controller_test.go @@ -21,6 +21,7 @@ var ( mockID = 2 userJSON = `{"first_name":"John ","last_name":"Doe"}` invalidUserJSON = `{"first_name": 1,"last_name": 2}` + noNameUserJSON = `{"first_name": "","last_name": ""}` ) func (r *mockUserRepository) Store(db *sqlx.DB, u domain.User) (int, error) { @@ -48,6 +49,13 @@ func newInvalidUserContext() echo.Context { return e.NewContext(invalidReq, httptest.NewRecorder()) } +func noNameUserContext() echo.Context { + e := echo.New() + invalidReq := httptest.NewRequest(http.MethodPost, "/users", strings.NewReader(noNameUserJSON)) + invalidReq.Header.Set(echo.HeaderContentType, echo.MIMEApplicationJSON) + return e.NewContext(invalidReq, httptest.NewRecorder()) +} + // echoのtestについては以下を参照 // https://echo.labstack.com/guide/testing // 課題: ユーザー名が空のケースを通す @@ -91,6 +99,15 @@ func TestUserController_Create(t *testing.T) { args: args{c: newInvalidUserContext()}, wantErr: true, }, + { + name: "ユーザー名が空", + fields: fields{ + db: nil, + repository: &mockUserRepository{}, + }, + args: args{c: noNameUserContext()}, + wantErr: true, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { From a3c94a21f4ba867131daf2cb4c88e5c1028afaef Mon Sep 17 00:00:00 2001 From: ookura keisuke Date: Thu, 16 Apr 2020 22:42:53 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=E8=AA=B2=E9=A1=8C3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/user_controller_test.go | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/interface/api/interfaces/controllers/user_controller_test.go b/interface/api/interfaces/controllers/user_controller_test.go index 50e7318..f1fa743 100644 --- a/interface/api/interfaces/controllers/user_controller_test.go +++ b/interface/api/interfaces/controllers/user_controller_test.go @@ -32,6 +32,9 @@ func (r *mockUserRepository) Store(db *sqlx.DB, u domain.User) (int, error) { } func (r *mockUserRepository) FindAll(db *sqlx.DB) (domain.Users, error) { + if r.isError { + return nil, errors.New("error") + } return nil, nil } @@ -56,6 +59,13 @@ func noNameUserContext() echo.Context { return e.NewContext(invalidReq, httptest.NewRecorder()) } +func indexContext() echo.Context { + e := echo.New() + validReq := httptest.NewRequest(http.MethodGet, "/users", nil) + validReq.Header.Set(echo.HeaderContentType, echo.MIMEApplicationJSON) + return e.NewContext(validReq, httptest.NewRecorder()) +} + // echoのtestについては以下を参照 // https://echo.labstack.com/guide/testing // 課題: ユーザー名が空のケースを通す @@ -137,7 +147,23 @@ func TestUserController_Index(t *testing.T) { args args wantErr bool }{ - // TODO: Add test cases. + { + name: "正常系", + fields: fields{ + db: nil, + repository: &mockUserRepository{}, + }, + args: args{c: indexContext()}, + }, + { + name: "異常系", + fields: fields{ + db: nil, + repository: &mockUserRepository{isError: true}, + }, + args: args{c: indexContext()}, + wantErr: true, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {