Skip to content

Commit

Permalink
feat: user repository interface get by username
Browse files Browse the repository at this point in the history
  • Loading branch information
situmorangbastian committed Aug 1, 2018
1 parent 865e25c commit fe7c9b3
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 0 deletions.
1 change: 1 addition & 0 deletions error.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ var (
ErrContextNil = errors.New("Context is nil")
ErrInvalidUsernamePassword = errors.New("Username and password invalid")
ErrUserNotAuthorized = errors.New("User not authorized")
ErrUsernameHasBeenTaken = errors.New("Username has been taken")
)

type customError struct {
Expand Down
1 change: 1 addition & 0 deletions inventar.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ type UserService interface {
type UserRepository interface {
Signup(ctx context.Context, credential *Credential) (bool, error)
Signin(ctx context.Context, credential *Credential) (bool, error)
GetByUsername(ctx context.Context, username string) (*Credential, error)
}
23 changes: 23 additions & 0 deletions mocks/UserRepository.go

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

10 changes: 10 additions & 0 deletions user/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,16 @@ func (s *service) Signup(ctx context.Context, credential *inventar.Credential) (
return false, err
}

checkUsername, err := s.repository.GetByUsername(ctx, credential.Username)

if err != nil {
return false, err
}

if checkUsername.Username != "" {
return false, inventar.ErrUsernameHasBeenTaken
}

res, err := s.repository.Signup(ctx, credential)

if err != nil {
Expand Down
46 changes: 46 additions & 0 deletions user/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@ func TestSignup(t *testing.T) {
Password: "admin123",
}

mockCredentialEmpty := &inventar.Credential{}

r := new(mocks.UserRepository)
r.On("GetByUsername", mock.Anything, mockCredential.Username).Return(mockCredentialEmpty, nil)
r.On("Signup", mock.Anything, mockCredential).Return(true, nil)

v := inventar.NewValidator()
Expand Down Expand Up @@ -74,14 +77,57 @@ func TestSignupWithErrorValidate(t *testing.T) {
assert.False(t, res)
}

func TestSignupWithErrorGetByUsername(t *testing.T) {

mockCredential := &inventar.Credential{
Username: "admin",
Password: "admin123",
}

r := new(mocks.UserRepository)
r.On("GetByUsername", mock.Anything, mockCredential.Username).Return(nil, errors.New("Error"))

v := inventar.NewValidator()

s := NewService(r, v, timeout)

res, err := s.Signup(context.TODO(), mockCredential)

assert.Error(t, err)
assert.False(t, res)
}

func TestSignupWithUsernameHasBeenTaken(t *testing.T) {

mockCredential := &inventar.Credential{
Username: "admin",
Password: "admin123",
}

r := new(mocks.UserRepository)
r.On("GetByUsername", mock.Anything, mockCredential.Username).Return(mockCredential, nil)

v := inventar.NewValidator()

s := NewService(r, v, timeout)

res, err := s.Signup(context.TODO(), mockCredential)

assert.Error(t, err)
assert.False(t, res)
}

func TestSignupWithError(t *testing.T) {

mockCredential := &inventar.Credential{
Username: "admin",
Password: "admin123",
}

mockCredentialEmpty := &inventar.Credential{}

r := new(mocks.UserRepository)
r.On("GetByUsername", mock.Anything, mockCredential.Username).Return(mockCredentialEmpty, nil)
r.On("Signup", mock.Anything, mockCredential).Return(false, errors.New("Error"))

v := inventar.NewValidator()
Expand Down

0 comments on commit fe7c9b3

Please sign in to comment.