From c1173b4bcca87314142c89907d301c114d6babd8 Mon Sep 17 00:00:00 2001 From: Muyao CHEN Date: Sun, 6 Oct 2024 23:21:54 +0200 Subject: [PATCH] feat: add test case for usecase user.create --- go.mod | 1 + go.sum | 2 + internal/howmuch/usecase/repo/testuser.go | 6 +++ internal/howmuch/usecase/usecase/user_test.go | 42 +++++++++++++------ 4 files changed, 38 insertions(+), 13 deletions(-) diff --git a/go.mod b/go.mod index 58b7488..3dc2014 100644 --- a/go.mod +++ b/go.mod @@ -10,6 +10,7 @@ require ( github.com/google/uuid v1.6.0 github.com/gosuri/uitable v0.0.4 github.com/jackc/pgx/v5 v5.7.1 + github.com/pkg/errors v0.9.1 github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.19.0 diff --git a/go.sum b/go.sum index 68ae74f..0b108ad 100644 --- a/go.sum +++ b/go.sum @@ -86,6 +86,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= diff --git a/internal/howmuch/usecase/repo/testuser.go b/internal/howmuch/usecase/repo/testuser.go index 574b5e1..c108c68 100644 --- a/internal/howmuch/usecase/repo/testuser.go +++ b/internal/howmuch/usecase/repo/testuser.go @@ -26,6 +26,7 @@ import ( "context" "git.vinchent.xyz/vinchent/howmuch/internal/howmuch/model" + "github.com/pkg/errors" ) type TestUserRepository struct{} @@ -38,5 +39,10 @@ func (tur *TestUserRepository) Create( user := *u user.ID = 123 + + if user.Email == "duplicate@error.com" { + return nil, errors.New("blabla (SQLSTATE 23505)") + } + return &user, nil } diff --git a/internal/howmuch/usecase/usecase/user_test.go b/internal/howmuch/usecase/usecase/user_test.go index b9d5f7f..93a1263 100644 --- a/internal/howmuch/usecase/usecase/user_test.go +++ b/internal/howmuch/usecase/usecase/user_test.go @@ -32,18 +32,34 @@ import ( ) func TestCreateUser(t *testing.T) { - ctx := context.Background() - userUsecase := NewUserUsecase(&repo.TestUserRepository{}, &repo.TestDBRepository{}) - input := &model.User{ - Email: "a@b.c", - FirstName: "James", - LastName: "Bond", - Password: "verystrong", - } - want := input - want.ID = 123 + t.Run("normal create", func(t *testing.T) { + ctx := context.Background() + userUsecase := NewUserUsecase(&repo.TestUserRepository{}, &repo.TestDBRepository{}) + input := &model.User{ + Email: "a@b.c", + FirstName: "James", + LastName: "Bond", + Password: "verystrong", + } + want := input + want.ID = 123 - got, err := userUsecase.Create(ctx, input) - assert.NoError(t, err) - assert.Equal(t, want, got) + got, err := userUsecase.Create(ctx, input) + assert.NoError(t, err) + assert.Equal(t, want, got) + }) + + t.Run("duplicate create", func(t *testing.T) { + ctx := context.Background() + userUsecase := NewUserUsecase(&repo.TestUserRepository{}, &repo.TestDBRepository{}) + input := &model.User{ + Email: "duplicate@error.com", + FirstName: "James", + LastName: "Bond", + Password: "verystrong", + } + + _, err := userUsecase.Create(ctx, input) + assert.EqualError(t, err, UserExisted.Error()) + }) }