Skip to content

Commit

Permalink
update: repository
Browse files Browse the repository at this point in the history
  • Loading branch information
FromSi committed Oct 21, 2024
1 parent 73d73bf commit ed151fb
Show file tree
Hide file tree
Showing 6 changed files with 142 additions and 119 deletions.
22 changes: 13 additions & 9 deletions internal/repositories/gorm_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,22 +108,26 @@ func (receiver GormUserRepository) HasUserByEmail(email string) bool {
return exists
}

func (receiver GormUserRepository) GetUserByEmailAndPassword(email string, password string) User {
var gormUser GormUser
func (receiver GormUserRepository) HasUserByEmailAndPassword(email string, password string) bool {
var exists bool

result := receiver.db.Model(&GormUser{}).First(&gormUser, &GormUser{Email: email, Password: password})
receiver.db.Model(&GormUser{}).Select("count(*) > 0").Find(&exists, &GormUser{Email: email, Password: password})

if result.RowsAffected == 0 {
return nil
}
return exists
}

return &gormUser
func (receiver GormUserRepository) HasUserByUUIDAndPassword(uuid string, password string) bool {
var exists bool

receiver.db.Model(&GormUser{}).Select("count(*) > 0").Find(&exists, &GormUser{UUID: uuid, Password: password})

return exists
}

func (receiver GormUserRepository) GetUserByUUIDAndPassword(uuid string, password string) User {
func (receiver GormUserRepository) GetUserByEmail(email string) User {
var gormUser GormUser

result := receiver.db.Model(&GormUser{}).First(&gormUser, &GormUser{UUID: uuid, Password: password})
result := receiver.db.Model(&GormUser{}).First(&gormUser, &GormUser{Email: email})

if result.RowsAffected == 0 {
return nil
Expand Down
53 changes: 34 additions & 19 deletions internal/repositories/gorm_user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -180,38 +180,53 @@ func TestGormUserRepository_CreateUser_And_HasUserByEmail(t *testing.T) {
assert.False(t, exists)
}

func TestGormUserRepository_CreateUser_And_GetUserByEmailAndPassword(t *testing.T) {
func TestGormUserRepository_CreateUser_And_HasUserByEmailAndPassword(t *testing.T) {
db, _ := gorm.Open(sqlite.Open("file::memory:"), &gorm.Config{Logger: logger.Default.LogMode(logger.Silent)})

gormUserRepository, _ := NewGormUserRepository(db)

gormUser := NewGormUser()

gormUser.SetUUID("1")
gormUser.SetEmail("1")
gormUser.SetEmail("2")
gormUser.SetPassword("3")
gormUser.SetCreatedAt(4)
gormUser.SetUpdatedAt(5)

err := gormUserRepository.CreateUser(gormUser)

assert.Nil(t, err)

gormUserForRepository := gormUserRepository.GetUserByEmailAndPassword("0", "0")
exists := gormUserRepository.HasUserByEmailAndPassword(gormUser.GetEmail(), gormUser.GetPassword())

assert.Nil(t, gormUserForRepository)
assert.True(t, exists)

gormUserForRepository = gormUserRepository.GetUserByEmailAndPassword(gormUser.GetEmail(), gormUser.GetPassword())
exists = gormUserRepository.HasUserByEmailAndPassword("0", "0")

assert.NotNil(t, gormUserForRepository)
assert.Equal(t, gormUserForRepository.GetUUID(), gormUser.GetUUID())
assert.Equal(t, gormUserForRepository.GetEmail(), gormUser.GetEmail())
assert.Equal(t, gormUserForRepository.GetPassword(), gormUser.GetPassword())
assert.Equal(t, gormUserForRepository.GetCreatedAt(), gormUser.GetCreatedAt())
assert.Equal(t, gormUserForRepository.GetUpdatedAt(), gormUser.GetUpdatedAt())
assert.False(t, exists)
}

func TestGormUserRepository_CreateUser_And_HasUserByUUIDAndPassword(t *testing.T) {
db, _ := gorm.Open(sqlite.Open("file::memory:"), &gorm.Config{Logger: logger.Default.LogMode(logger.Silent)})

gormUserRepository, _ := NewGormUserRepository(db)

gormUser := NewGormUser()

gormUser.SetUUID("1")
gormUser.SetPassword("2")

err := gormUserRepository.CreateUser(gormUser)

assert.Nil(t, err)

exists := gormUserRepository.HasUserByUUIDAndPassword(gormUser.GetUUID(), gormUser.GetPassword())

assert.True(t, exists)

exists = gormUserRepository.HasUserByUUIDAndPassword("0", "0")

assert.False(t, exists)
}

func TestGormUserRepository_CreateUser_And_GetUserByUUIDAndPassword(t *testing.T) {
func TestGormUserRepository_CreateUser_And_GetUserByEmail(t *testing.T) {
db, _ := gorm.Open(sqlite.Open("file::memory:"), &gorm.Config{Logger: logger.Default.LogMode(logger.Silent)})

gormUserRepository, _ := NewGormUserRepository(db)
Expand All @@ -228,11 +243,11 @@ func TestGormUserRepository_CreateUser_And_GetUserByUUIDAndPassword(t *testing.T

assert.Nil(t, err)

gormUserForRepository := gormUserRepository.GetUserByUUIDAndPassword("0", "0")
gormUserForRepository := gormUserRepository.GetUserByEmail("0")

assert.Nil(t, gormUserForRepository)

gormUserForRepository = gormUserRepository.GetUserByUUIDAndPassword(gormUser.GetUUID(), gormUser.GetPassword())
gormUserForRepository = gormUserRepository.GetUserByEmail(gormUser.GetEmail())

assert.NotNil(t, gormUserForRepository)
assert.Equal(t, gormUserForRepository.GetUUID(), gormUser.GetUUID())
Expand All @@ -258,7 +273,7 @@ func TestGormUserRepository_CreateUser_And_UpdatePassword(t *testing.T) {

assert.Nil(t, err)

gormUserForRepository := gormUserRepository.GetUserByEmailAndPassword(gormUser.GetEmail(), gormUser.GetPassword())
gormUserForRepository := gormUserRepository.GetUserByEmail(gormUser.GetEmail())

assert.NotNil(t, gormUserForRepository)
assert.Equal(t, gormUserForRepository.GetPassword(), gormUser.GetPassword())
Expand All @@ -271,7 +286,7 @@ func TestGormUserRepository_CreateUser_And_UpdatePassword(t *testing.T) {

assert.Nil(t, err)

gormUserForRepository = gormUserRepository.GetUserByEmailAndPassword(gormUser.GetEmail(), gormUser.GetPassword())
gormUserForRepository = gormUserRepository.GetUserByEmail(gormUser.GetEmail())

assert.NotNil(t, gormUserForRepository)
assert.Equal(t, gormUserForRepository.GetPassword(), gormUser.GetPassword())
Expand Down
5 changes: 3 additions & 2 deletions internal/repositories/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ package repositories
type QueryUserRepository interface {
HasUserByUUID(string) bool
HasUserByEmail(string) bool
GetUserByEmailAndPassword(string, string) User
GetUserByUUIDAndPassword(string, string) User
HasUserByEmailAndPassword(string, string) bool
HasUserByUUIDAndPassword(string, string) bool
GetUserByEmail(string) User
}

type MutableUserRepository interface {
Expand Down
4 changes: 2 additions & 2 deletions internal/services/base_reset_token.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@ func (receiver BaseResetTokenService) ResetPasswordByUserUUIDAndOldPasswordAndNe
oldPassword string,
newPassword string,
) error {
user := receiver.userRepository.GetUserByUUIDAndPassword(userUUID, oldPassword)
userExists := receiver.userRepository.HasUserByUUIDAndPassword(userUUID, oldPassword)

if user == nil {
if !userExists {
return errors.New("user not found")
}

Expand Down
89 changes: 2 additions & 87 deletions internal/services/base_reset_token_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,90 +9,6 @@ import (
"testing"
)

type MockUserService struct {
mock.Mock
}

func (receiver *MockUserService) GenerateUUID() string {
return receiver.Called().String(0)
}

func (receiver *MockUserService) HashPassword(password string) (string, error) {
args := receiver.Called(password)

return args.String(0), args.Error(1)
}

func (receiver *MockUserService) CheckPasswordByHashAndPassword(hashedPassword string, password string) error {
return receiver.Called(hashedPassword, password).Error(0)
}

type MockResetTokenRepository struct {
mock.Mock
}

func (receiver *MockResetTokenRepository) HasToken(token string) bool {
return receiver.Called(token).Bool(0)
}

func (receiver *MockResetTokenRepository) GetResetTokenByToken(token string) repositories.ResetToken {
args := receiver.Called(token)

if args.Get(0) != nil {
return args.Get(0).(repositories.ResetToken)
}

return nil
}

func (receiver *MockResetTokenRepository) CreateResetToken(token repositories.ResetToken) error {
return receiver.Called(token).Error(0)
}

func (receiver *MockResetTokenRepository) DeleteResetToken(token string) error {
return receiver.Called(token).Error(0)
}

type MockUserRepository struct {
mock.Mock
}

func (receiver *MockUserRepository) HasUserByUUID(uuid string) bool {
return receiver.Called(uuid).Bool(0)
}

func (receiver *MockUserRepository) HasUserByEmail(email string) bool {
return receiver.Called(email).Bool(0)
}

func (receiver *MockUserRepository) GetUserByEmailAndPassword(email string, password string) repositories.User {
args := receiver.Called(email, password)

if args.Get(0) != nil {
return args.Get(0).(repositories.User)
}

return nil
}

func (receiver *MockUserRepository) GetUserByUUIDAndPassword(uuid string, password string) repositories.User {
args := receiver.Called(uuid, password)

if args.Get(0) != nil {
return args.Get(0).(repositories.User)
}

return nil
}

func (receiver *MockUserRepository) CreateUser(user repositories.User) error {
return receiver.Called(user).Error(0)
}

func (receiver *MockUserRepository) UpdatePassword(uuid string, password string, updatedAt int) error {
return receiver.Called(uuid, password, updatedAt).Error(0)
}

func Test_NewBaseResetTokenService(t *testing.T) {
mockUserService := MockUserService{}
mockUserRepository := MockUserRepository{}
Expand Down Expand Up @@ -191,9 +107,8 @@ func TestBaseResetTokenService_ResetPasswordByUserUUIDAndOldPasswordAndNewPasswo
mockUserRepository := MockUserRepository{}
mockResetTokenRepository := MockResetTokenRepository{}

mockUser := &repositories.GormUser{}
mockUserRepository.On("GetUserByUUIDAndPassword", "1", mock.Anything).Return(mockUser)
mockUserRepository.On("GetUserByUUIDAndPassword", "2", mock.Anything).Return(nil)
mockUserRepository.On("HasUserByUUIDAndPassword", "1", mock.Anything).Return(true)
mockUserRepository.On("HasUserByUUIDAndPassword", "2", mock.Anything).Return(false)
mockUserService.On("HashPassword", "1").Return("1", nil)
mockUserService.On("HashPassword", "2").Return("", errors.New("invalid-password"))
mockUserRepository.On("UpdatePassword", mock.Anything, mock.Anything, mock.Anything).Return(nil)
Expand Down
88 changes: 88 additions & 0 deletions internal/services/mock_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package services

import (
"github.com/fromsi/jwt-oauth-sso/internal/repositories"
"github.com/stretchr/testify/mock"
)

type MockUserService struct {
mock.Mock
}

func (receiver *MockUserService) GenerateUUID() string {
return receiver.Called().String(0)
}

func (receiver *MockUserService) HashPassword(password string) (string, error) {
args := receiver.Called(password)

return args.String(0), args.Error(1)
}

func (receiver *MockUserService) CheckPasswordByHashAndPassword(hashedPassword string, password string) error {
return receiver.Called(hashedPassword, password).Error(0)
}

type MockResetTokenRepository struct {
mock.Mock
}

func (receiver *MockResetTokenRepository) HasToken(token string) bool {
return receiver.Called(token).Bool(0)
}

func (receiver *MockResetTokenRepository) GetResetTokenByToken(token string) repositories.ResetToken {
args := receiver.Called(token)

if args.Get(0) != nil {
return args.Get(0).(repositories.ResetToken)
}

return nil
}

func (receiver *MockResetTokenRepository) CreateResetToken(token repositories.ResetToken) error {
return receiver.Called(token).Error(0)
}

func (receiver *MockResetTokenRepository) DeleteResetToken(token string) error {
return receiver.Called(token).Error(0)
}

type MockUserRepository struct {
mock.Mock
}

func (receiver *MockUserRepository) HasUserByUUID(uuid string) bool {
return receiver.Called(uuid).Bool(0)
}

func (receiver *MockUserRepository) HasUserByEmail(email string) bool {
return receiver.Called(email).Bool(0)
}

func (receiver *MockUserRepository) HasUserByEmailAndPassword(email string, password string) bool {
return receiver.Called(email, password).Bool(0)
}

func (receiver *MockUserRepository) HasUserByUUIDAndPassword(uuid string, password string) bool {
return receiver.Called(uuid, password).Bool(0)
}

func (receiver *MockUserRepository) GetUserByEmail(email string) repositories.User {
args := receiver.Called(email)

if args.Get(0) != nil {
return args.Get(0).(repositories.User)
}

return nil
}

func (receiver *MockUserRepository) CreateUser(user repositories.User) error {
return receiver.Called(user).Error(0)
}

func (receiver *MockUserRepository) UpdatePassword(uuid string, password string, updatedAt int) error {
return receiver.Called(uuid, password, updatedAt).Error(0)
}

0 comments on commit ed151fb

Please sign in to comment.