Skip to content

create unit test #6

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 25, 2023
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
11 changes: 5 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,17 +77,16 @@ The DIP promotes high-level modules (e.g., use cases) to depend on abstractions
- [ ] Request ID in logger (Header `X-Request-Id: xxx`)
- RESTful
- [x] Create Resource (`POST` verb)
- [ ] Update Resource (`PUT` verb)
- [ ] Partially Update Resource (`PATCH` verb)
- [x] Update Resource (`PUT` verb)
- [x] Partially Update Resource (`PATCH` verb)
- [ ] Find Resource (`GET` verb)
- [ ] Offset Pagination (Query param `?limit=10&page=1`)
- [ ] Sorting (Query param `?sort=fullname DESC,id DESC`)
- [x] Delete resource (`DELETE` verb, idempotent)
- Testing
- [ ] Table Driven Test
- [ ] Mocking
- [x] Table Driven Test
- [x] Mocking
- Others
- [ ] Database migration and seed tool
- [x] Database migration and seed tool
- [ ] Releaser

## How To Run
Expand Down
5 changes: 5 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,19 @@ module github.com/DoWithLogic/golang-clean-architecture
go 1.20

require (
github.com/DATA-DOG/go-sqlmock v1.5.0
github.com/go-sql-driver/mysql v1.7.1
github.com/invopop/validation v0.3.0
github.com/jmoiron/sqlx v1.3.5
github.com/labstack/echo/v4 v4.11.1
github.com/rs/zerolog v1.30.0
github.com/spf13/viper v1.16.0
github.com/stretchr/testify v1.8.4
go.uber.org/mock v0.3.0
)

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/labstack/gommon v0.4.0 // indirect
Expand All @@ -22,6 +26,7 @@ require (
github.com/mattn/go-sqlite3 v1.14.17 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/pelletier/go-toml/v2 v2.0.8 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/spf13/afero v1.9.5 // indirect
github.com/spf13/cast v1.5.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
Expand Down
7 changes: 6 additions & 1 deletion go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60=
github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ=
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
Expand Down Expand Up @@ -196,8 +198,9 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
Expand All @@ -215,6 +218,8 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo=
go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
Expand Down
18 changes: 14 additions & 4 deletions internal/users/delivery/http/handler/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,12 @@ func (h *handlers) CreateUser(c echo.Context) error {
)
}

createdID, err := h.uc.CreateUser(ctx, &entities.Users{Fullname: payload.Fullname, PhoneNumber: payload.PhoneNumber})
argsCreateUser := entities.CreateUser{
FUllName: payload.FullName,
PhoneNumber: payload.PhoneNumber,
}

createdID, err := h.uc.CreateUser(ctx, argsCreateUser)
if err != nil {
return c.JSON(http.StatusInternalServerError, dtos.NewResponseError(
http.StatusInternalServerError,
Expand Down Expand Up @@ -125,14 +130,14 @@ func (h *handlers) UpdateUser(c echo.Context) error {
)
}

updateArgs := &entities.UpdateUsers{
argsUpdateUser := entities.UpdateUsers{
UserID: userID,
Fullname: payload.Fullname,
PhoneNumber: payload.Fullname,
UserType: payload.UserType,
}

err = h.uc.UpdateUser(ctx, updateArgs)
err = h.uc.UpdateUser(ctx, argsUpdateUser)
if err != nil {
return c.JSON(http.StatusBadRequest, dtos.NewResponseError(
http.StatusInternalServerError,
Expand Down Expand Up @@ -178,7 +183,12 @@ func (h *handlers) UpdateUserStatus(c echo.Context) error {
)
}

err = h.uc.UpdateUserStatus(ctx, &entities.UpdateUsers{UserID: userID, IsActive: payload.IsActive})
argsUpdateUserStatus := entities.UpdateUserStatus{
UserID: userID,
IsActive: payload.IsActive,
}

err = h.uc.UpdateUserStatus(ctx, argsUpdateUserStatus)
if err != nil {
return c.JSON(http.StatusBadRequest, dtos.NewResponseError(
http.StatusInternalServerError,
Expand Down
4 changes: 2 additions & 2 deletions internal/users/dtos/create_users.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ package dtos
import "github.com/invopop/validation"

type CreateUserPayload struct {
Fullname string `json:"fullname"`
FullName string `json:"fullname"`
PhoneNumber string `json:"phone_number"`
}

func (cup CreateUserPayload) Validate() error {
return validation.ValidateStruct(&cup,
validation.Field(&cup.Fullname, validation.Required, validation.Length(0, 50)),
validation.Field(&cup.FullName, validation.Required, validation.Length(0, 50)),
validation.Field(&cup.PhoneNumber, validation.Required, validation.Length(0, 13)),
)
}
23 changes: 23 additions & 0 deletions internal/users/entities/create_users.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package entities

import "time"

type CreateUser struct {
FUllName string
PhoneNumber string
UserType string
IsActive bool
CreatedAt time.Time
CreatedBy string
}

func NewCreateUser(data CreateUser) CreateUser {
return CreateUser{
FUllName: data.FUllName,
PhoneNumber: data.PhoneNumber,
UserType: UserTypeRegular,
IsActive: true,
CreatedAt: time.Now(),
CreatedBy: "martin",
}
}
19 changes: 19 additions & 0 deletions internal/users/entities/update_user_status.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package entities

import "time"

type UpdateUserStatus struct {
UserID int64
IsActive bool
UpdatedAt time.Time
UpdatedBy string
}

func NewUpdateUserStatus(payload UpdateUserStatus) UpdateUserStatus {
return UpdateUserStatus{
UserID: payload.UserID,
IsActive: payload.IsActive,
UpdatedAt: time.Now(),
UpdatedBy: "martin",
}
}
9 changes: 4 additions & 5 deletions internal/users/entities/update_users.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,17 @@ type UpdateUsers struct {
Fullname string
PhoneNumber string
UserType string
IsActive bool
UpdatedAt string
UpdatedAt time.Time
UpdatedBy string
}

func NewUpdateUsers(data UpdateUsers) *UpdateUsers {
return &UpdateUsers{
func NewUpdateUsers(data UpdateUsers) UpdateUsers {
return UpdateUsers{
UserID: data.UserID,
Fullname: data.Fullname,
PhoneNumber: data.PhoneNumber,
UserType: UserTypeRegular,
UpdatedAt: time.Now().Format("2006-01-02 15:04:05"),
UpdatedAt: time.Now(),
UpdatedBy: "martin",
}
}
12 changes: 0 additions & 12 deletions internal/users/entities/users.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package entities

import (
"errors"
"time"
)

type (
Expand Down Expand Up @@ -40,14 +39,3 @@ func (locking *LockingOpt) Validate() error {

return nil
}

func NewUser(data Users) *Users {
return &Users{
Fullname: data.Fullname,
PhoneNumber: data.PhoneNumber,
UserType: UserTypeRegular,
IsActive: true,
CreatedAt: time.Now().Format("2006-01-02 15:04:05"),
CreatedBy: "martin",
}
}
94 changes: 94 additions & 0 deletions internal/users/mock/repository_mock.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading