Skip to content

Commit

Permalink
Increase test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
voltgizerz committed Jul 13, 2024
1 parent 3c70f37 commit 04c8fef
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 47 deletions.
18 changes: 9 additions & 9 deletions internal/adapters/repository/transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ func NewTxRepository(opts RepositoryOpts) ports.ITxRepository {
}
}

// StartTransaction starts a new transaction.
func (m *TxRepository) StartTransaction(ctx context.Context) (*sql.Tx, error) {
span, ctx := opentracing.StartSpanFromContext(ctx, "repo.TxRepository.StartTransaction")
// StartTx starts a new transaction.
func (m *TxRepository) StartTx(ctx context.Context) (*sql.Tx, error) {
span, ctx := opentracing.StartSpanFromContext(ctx, "repo.TxRepository.StartTx")
defer span.Finish()

tx, err := m.MasterDB.BeginTx(ctx, nil)
Expand All @@ -32,17 +32,17 @@ func (m *TxRepository) StartTransaction(ctx context.Context) (*sql.Tx, error) {
return tx, nil
}

// CommitTransaction commits the given transaction.
func (m *TxRepository) CommitTransaction(ctx context.Context, tx *sql.Tx) error {
span, ctx := opentracing.StartSpanFromContext(ctx, "repo.TxRepository.CommitTransaction")
// CommitTx commits the given transaction.
func (m *TxRepository) CommitTx(ctx context.Context, tx *sql.Tx) error {
span, ctx := opentracing.StartSpanFromContext(ctx, "repo.TxRepository.CommitTx")
defer span.Finish()

return tx.Commit()
}

// RollbackTransaction rolls back the given transaction.
func (m *TxRepository) RollbackTransaction(ctx context.Context, tx *sql.Tx) error {
span, ctx := opentracing.StartSpanFromContext(ctx, "repo.TxRepository.RollbackTransaction")
// RollbackTx rolls back the given transaction.
func (m *TxRepository) RollbackTx(ctx context.Context, tx *sql.Tx) error {
span, ctx := opentracing.StartSpanFromContext(ctx, "repo.TxRepository.RollbackTx")
defer span.Finish()

return tx.Rollback()
Expand Down
6 changes: 3 additions & 3 deletions internal/core/ports/tx_ports.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

// IRepositoryTx defines the transaction methods.
type ITxRepository interface {
StartTransaction(ctx context.Context) (*sql.Tx, error)
CommitTransaction(ctx context.Context, tx *sql.Tx) error
RollbackTransaction(ctx context.Context, tx *sql.Tx) error
StartTx(ctx context.Context) (*sql.Tx, error)
CommitTx(ctx context.Context, tx *sql.Tx) error
RollbackTx(ctx context.Context, tx *sql.Tx) error
}
12 changes: 7 additions & 5 deletions internal/core/service/auth_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,14 +110,15 @@ func (s *AuthService) Register(ctx context.Context, userData entity.User) (int64
Email: userData.Email,
}

tx, err := s.txRepository.StartTransaction(ctx)
tx, err := s.txRepository.StartTx(ctx)
if err != nil {
logger.LogStdErr.WithFields(logrus.Fields{
"username": userData.Username,
"error": err,
}).Error("[AuthService] error on StartTransaction")
}).Error("[AuthService] error on StartTx")
return 0, err
}
defer s.txRepository.RollbackTransaction(ctx, tx)
defer s.txRepository.RollbackTx(ctx, tx)

result, err := s.userRepository.RegisterUser(ctx, tx, userDataProceed)
if err != nil {
Expand All @@ -128,12 +129,13 @@ func (s *AuthService) Register(ctx context.Context, userData entity.User) (int64
return 0, err
}

err = s.txRepository.CommitTransaction(ctx, tx)
err = s.txRepository.CommitTx(ctx, tx)
if err != nil {
logger.LogStdErr.WithFields(logrus.Fields{
"username": userData.Username,
"error": err,
}).Error("[AuthService] error on CommitTransaction")
}).Error("[AuthService] error on CommitTx")
return 0, err
}

return result, nil
Expand Down
62 changes: 50 additions & 12 deletions internal/core/service/auth_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package service

import (
"context"
"database/sql"
"errors"
"reflect"
"testing"
Expand Down Expand Up @@ -149,14 +150,15 @@ func TestUserService_Register(t *testing.T) {
want: 1,
wantErr: false,
setup: func(mockObj *MockObject) {
mockObj.MockUserRepo.EXPECT().GetUserByEmail(gomock.Any(), gomock.Any()).
Return(&models.UserORM{}, nil).Times(1)
mockObj.MockUserRepo.EXPECT().RegisterUser(gomock.Any(), gomock.Any(), gomock.Any()).
Return(int64(1), nil).Times(1)
mockObj.MockUserRepo.EXPECT().GetUserByEmail(gomock.Any(), gomock.Any()).Return(&models.UserORM{}, nil).Times(1)
mockObj.MockTxRepo.EXPECT().StartTx(gomock.Any()).Return(&sql.Tx{}, nil).Times(1)
mockObj.MockUserRepo.EXPECT().RegisterUser(gomock.Any(), gomock.Any(), gomock.Any()).Return(int64(1), nil).Times(1)
mockObj.MockTxRepo.EXPECT().CommitTx(gomock.Any(), gomock.Any()).Return(nil).Times(1)
mockObj.MockTxRepo.EXPECT().RollbackTx(gomock.Any(), gomock.Any()).Return(nil).Times(1)
},
},
{
name: "ERROR - GetUserByEmail",
name: "ERROR - on GetUserByEmail",
args: args{
ctx: context.Background(),
username: "test-user",
Expand All @@ -172,7 +174,7 @@ func TestUserService_Register(t *testing.T) {
},
},
{
name: "ERROR - Register",
name: "ERROR - on StartTx",
args: args{
ctx: context.Background(),
username: "test-user",
Expand All @@ -183,10 +185,45 @@ func TestUserService_Register(t *testing.T) {
want: 0,
wantErr: true,
setup: func(mockObj *MockObject) {
mockObj.MockUserRepo.EXPECT().GetUserByEmail(gomock.Any(), gomock.Any()).
Return(&models.UserORM{Username: ""}, errors.New("some error")).Times(1)
mockObj.MockUserRepo.EXPECT().RegisterUser(gomock.Any(), gomock.Any(), gomock.Any()).
Return(int64(0), errors.New("some error")).AnyTimes()
mockObj.MockUserRepo.EXPECT().GetUserByEmail(gomock.Any(), gomock.Any()).Return(&models.UserORM{}, nil).Times(1)
mockObj.MockTxRepo.EXPECT().StartTx(gomock.Any()).Return(nil, errors.New("some error")).Times(1)
},
},
{
name: "ERROR - on RegisterUser",
args: args{
ctx: context.Background(),
username: "test-user",
password: "test-password",
email: "test-email@email.com",
name: "test-name",
},
want: 0,
wantErr: true,
setup: func(mockObj *MockObject) {
mockObj.MockUserRepo.EXPECT().GetUserByEmail(gomock.Any(), gomock.Any()).Return(&models.UserORM{}, nil).Times(1)
mockObj.MockTxRepo.EXPECT().StartTx(gomock.Any()).Return(&sql.Tx{}, nil).Times(1)
mockObj.MockUserRepo.EXPECT().RegisterUser(gomock.Any(), gomock.Any(), gomock.Any()).Return(int64(0), errors.New("some error")).Times(1)
mockObj.MockTxRepo.EXPECT().RollbackTx(gomock.Any(), gomock.Any()).Return(nil).Times(1)
},
},
{
name: "ERROR - on CommitTx",
args: args{
ctx: context.Background(),
username: "test-user",
password: "test-password",
email: "test-email@email.com",
name: "test-name",
},
want: 0,
wantErr: true,
setup: func(mockObj *MockObject) {
mockObj.MockUserRepo.EXPECT().GetUserByEmail(gomock.Any(), gomock.Any()).Return(&models.UserORM{}, nil).Times(1)
mockObj.MockTxRepo.EXPECT().StartTx(gomock.Any()).Return(&sql.Tx{}, nil).Times(1)
mockObj.MockUserRepo.EXPECT().RegisterUser(gomock.Any(), gomock.Any(), gomock.Any()).Return(int64(1), nil).Times(1)
mockObj.MockTxRepo.EXPECT().CommitTx(gomock.Any(), gomock.Any()).Return(errors.New("some error")).Times(1)
mockObj.MockTxRepo.EXPECT().RollbackTx(gomock.Any(), gomock.Any()).Return(nil).Times(1)
},
},
}
Expand All @@ -201,16 +238,17 @@ func TestUserService_Register(t *testing.T) {

service := &AuthService{
userRepository: mockObj.MockUserRepo,
txRepository: mockObj.MockTxRepo,
}

userData := &entity.User{
userData := entity.User{
Username: tt.args.username,
Password: tt.args.password,
Email: tt.args.email,
Name: tt.args.name,
}

got, err := service.Register(tt.args.ctx, *userData)
got, err := service.Register(tt.args.ctx, userData)
if (err != nil) != tt.wantErr {
t.Errorf("AuthService.Register() error = %v, wantErr %v", err, tt.wantErr)
return
Expand Down
36 changes: 18 additions & 18 deletions internal/mocks/mocks_tx.go

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

0 comments on commit 04c8fef

Please sign in to comment.