Skip to content

Commit

Permalink
Merge pull request #31 from RianIhsan/improvement/error-handling-unit…
Browse files Browse the repository at this point in the history
…-test

improvement:error handling and update unit test
  • Loading branch information
RianIhsan authored Nov 1, 2023
2 parents bb5773f + 5ff8413 commit dce45b6
Show file tree
Hide file tree
Showing 6 changed files with 261 additions and 4 deletions.
48 changes: 48 additions & 0 deletions admin/mocks/Repository.go

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

48 changes: 48 additions & 0 deletions admin/mocks/Service.go

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

21 changes: 21 additions & 0 deletions admin/repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ type Repository interface {
GetTotalTransactionsByUsername(name string) (int64, error)
GetUserById(userId int) (user.User, error)
GetCampaignById(campaignId int) (campaign.Campaign, error)
FindUserById(userId int) (user.User, error)
FindCampaignById(id int) (campaign.Campaign, error)
}

type repository struct {
Expand Down Expand Up @@ -103,6 +105,15 @@ func (r *repository) GetUserById(userId int) (user.User, error) {
return u, nil
}

func (r *repository) FindUserById(ID int) (user.User, error) {
var u user.User
err := r.db.Where("id = ?", ID).Find(&u).Error
if err != nil {
return u, err
}
return u, err
}

func (r *repository) GetCampaignById(campaignId int) (campaign.Campaign, error) {
var c campaign.Campaign
err := r.db.Where("id = ?", campaignId).Delete(&c).Error
Expand All @@ -112,3 +123,13 @@ func (r *repository) GetCampaignById(campaignId int) (campaign.Campaign, error)

return c, nil
}

func (r *repository) FindCampaignById(id int) (campaign.Campaign, error) {
var c campaign.Campaign
err := r.db.Where("id = ?", id).Find(&c).Error
if err != nil {
return c, err
}

return c, nil
}
26 changes: 26 additions & 0 deletions admin/service.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package admin

import (
"errors"
"github.com/RianIhsan/raise-unity/campaign"
"github.com/RianIhsan/raise-unity/transaction"
"github.com/RianIhsan/raise-unity/user"
Expand All @@ -14,6 +15,8 @@ type Service interface {
SearchTransactionByUsername(name string) ([]transaction.Transaction, error)
DeleteUserById(id int) (user.User, error)
DeleteCampaignById(id int) (campaign.Campaign, error)
FindUserById(id int) (user.User, error)
FindCampaignById(id int) (campaign.Campaign, error)
}

type service struct {
Expand Down Expand Up @@ -94,6 +97,18 @@ func (s *service) SearchTransactionByUsername(name string) ([]transaction.Transa
return userTransaction, nil
}

func (s *service) FindUserById(id int) (user.User, error) {
user, err := s.repository.FindUserById(id)
if err != nil {
return user, err
}
if user.ID == 0 {
return user, errors.New("no user found with that ID")
}

return user, err
}

func (s *service) DeleteUserById(id int) (user.User, error) {
deleteUser, err := s.repository.GetUserById(id)
if err != nil {
Expand All @@ -110,3 +125,14 @@ func (s *service) DeleteCampaignById(id int) (campaign.Campaign, error) {
}
return deleteCampaign, err
}

func (s *service) FindCampaignById(id int) (campaign.Campaign, error) {
campaign, err := s.repository.FindCampaignById(id)
if err != nil {
return campaign, err
}
if campaign.ID == 0 {
return campaign, errors.New("no campaign found with that id")
}
return campaign, nil
}
101 changes: 101 additions & 0 deletions admin/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,7 @@ func TestDeleteUserById(t *testing.T) {
result, err := service.DeleteUserById(user.ID)
assert.NoError(t, err)
assert.Equal(t, user.ID, result.ID)
repository.AssertExpectations(t)

})

Expand All @@ -423,6 +424,8 @@ func TestDeleteUserById(t *testing.T) {
_, err := service.DeleteUserById(user.ID)
assert.Error(t, err)
assert.Equal(t, "User not found", err.Error())
repository.AssertExpectations(t)

})
}

Expand Down Expand Up @@ -479,5 +482,103 @@ func TestDeleteCampaignId(t *testing.T) {
_, err := service.DeleteCampaignById(MockCampaign.ID)
assert.Error(t, err)
assert.Equal(t, "Campaign not found", err.Error())
repository.AssertExpectations(t)

})
}

func TestFindUserById(t *testing.T) {
var repository = mocks.NewRepository(t)
var service = NewService(repository)

mockUser := user.User{
ID: 1,
Name: "Rian",
Occupation: "programmer",
Email: "rianganteng@gmail.com",
Password: "rian12345",
Avatar: "www.cloudinary.com/avatar",
Role: "user",
IsVerified: true,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
}

t.Run("Success get user id", func(t *testing.T) {
repository.On("FindUserById", mockUser.ID).Return(mockUser, nil).Once()
result, err := service.FindUserById(mockUser.ID)
assert.NoError(t, err)
assert.Equal(t, mockUser.ID, result.ID)
repository.AssertExpectations(t)

})

t.Run("Failed get user id", func(t *testing.T) {
repository.On("FindUserById", mockUser.ID).Return(mockUser, errors.New("no user found with that ID")).Once()
_, err := service.FindUserById(mockUser.ID)
assert.Error(t, err)
assert.Equal(t, 1, mockUser.ID, "no user found with that ID")
repository.AssertExpectations(t)
})

}

func TestFindCampaignById(t *testing.T) {
var repository = mocks.NewRepository(t)
var service = NewService(repository)

mockCampaign := campaign.Campaign{
ID: 1,
UserID: 1,
Name: "Sample Campaign",
ShortDescription: "A short description",
Description: "A long description",
Perks: "Perks for backers",
BackerCount: 100,
GoalAmount: 10000,
CurrentAmount: 5000,
Status: "active",
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
CampaignImages: []campaign.CampaignImage{
{
ID: 1,
CampaignID: 1,
IsPrimary: 1,
FileName: "gambar.png",
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
},
},
User: user.User{
ID: 1,
Name: "Rian",
Occupation: "programmer",
Email: "rianganteng@gmail.com",
Password: "rian12345",
Avatar: "www.cloudinary.com/avatar",
Role: "user",
IsVerified: true,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
},
}

t.Run("Success get campaign id", func(t *testing.T) {
repository.On("FindCampaignById", mockCampaign.ID).Return(mockCampaign, nil).Once()
result, err := service.FindCampaignById(mockCampaign.ID)
assert.NoError(t, err)
assert.Equal(t, mockCampaign.ID, result.ID)
repository.AssertExpectations(t)

})

t.Run("Failed get campaign id", func(t *testing.T) {
repository.On("FindCampaignById", mockCampaign.ID).Return(mockCampaign, errors.New("no campaign found with that id")).Once()
_, err := service.FindCampaignById(mockCampaign.ID)
assert.Error(t, err)
assert.Equal(t, 1, mockCampaign.ID, "no campaign found with that id")
repository.AssertExpectations(t)
})

}
21 changes: 17 additions & 4 deletions handler/admin.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,15 +124,21 @@ func (h *adminHandler) DeleteUser(c *gin.Context) {
c.JSON(http.StatusBadRequest, response)
return
}
user, err := h.service.FindUserById(userId)
if err != nil {
response := helper.ErrorResponse("Failed get user", err.Error())
c.JSON(http.StatusBadRequest, response)
return
}

_, err = h.service.DeleteUserById(userId)
_, err = h.service.DeleteUserById(user.ID)
if err != nil {
response := helper.ErrorResponse("Failed delete user", err.Error())
c.JSON(http.StatusBadRequest, response)
return
}

response := helper.GeneralResponse("Success Delete user")
response := helper.SuccesResponse("Success Delete user")
c.JSON(http.StatusOK, response)
}

Expand All @@ -143,14 +149,21 @@ func (h *adminHandler) DeleteCampaign(c *gin.Context) {
c.JSON(http.StatusUnauthorized, response)
return
}
campaignId, err := strconv.Atoi(c.Param("id"))
campaign, err := strconv.Atoi(c.Param("id"))
if err != nil {
response := helper.ErrorResponse("Failed get campaign", err.Error())
c.JSON(http.StatusBadRequest, response)
return
}

campaignId, err := h.service.FindCampaignById(campaign)
if err != nil {
response := helper.ErrorResponse("Failed get campaign", err.Error())
c.JSON(http.StatusBadRequest, response)
return
}

_, err = h.service.DeleteCampaignById(campaignId)
_, err = h.service.DeleteCampaignById(campaignId.ID)
if err != nil {
response := helper.ErrorResponse("Failed delete campaign", err.Error())
c.JSON(http.StatusBadRequest, response)
Expand Down

0 comments on commit dce45b6

Please sign in to comment.