feat: add test case for usecase user.create
This commit is contained in:
		
							
								
								
									
										1
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								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=
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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())
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user