Skip to content

Commit 75ec68f

Browse files
Add test for usecase
1 parent 42578fd commit 75ec68f

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

usecase/task_usecase_test.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package usecase_test
2+
3+
import (
4+
"context"
5+
"errors"
6+
"testing"
7+
"time"
8+
9+
"github.com/amitshekhariitbhu/go-backend-clean-architecture/domain"
10+
"github.com/amitshekhariitbhu/go-backend-clean-architecture/domain/mocks"
11+
"github.com/amitshekhariitbhu/go-backend-clean-architecture/usecase"
12+
"github.com/stretchr/testify/assert"
13+
"github.com/stretchr/testify/mock"
14+
"go.mongodb.org/mongo-driver/bson/primitive"
15+
)
16+
17+
func TestFetchByUserID(t *testing.T) {
18+
mockTaskRepository := new(mocks.TaskRepository)
19+
userObjectID := primitive.NewObjectID()
20+
userID := userObjectID.Hex()
21+
22+
t.Run("success", func(t *testing.T) {
23+
24+
mockTask := domain.Task{
25+
ID: primitive.NewObjectID(),
26+
Title: "Test Title",
27+
UserID: userObjectID,
28+
}
29+
30+
mockListTask := make([]domain.Task, 0)
31+
mockListTask = append(mockListTask, mockTask)
32+
33+
mockTaskRepository.On("FetchByUserID", mock.Anything, userID).Return(mockListTask, nil).Once()
34+
35+
u := usecase.NewTaskUsecase(mockTaskRepository, time.Second*2)
36+
37+
list, err := u.FetchByUserID(context.Background(), userID)
38+
39+
assert.NoError(t, err)
40+
assert.NotNil(t, list)
41+
assert.Len(t, list, len(mockListTask))
42+
43+
mockTaskRepository.AssertExpectations(t)
44+
})
45+
46+
t.Run("error", func(t *testing.T) {
47+
mockTaskRepository.On("FetchByUserID", mock.Anything, userID).Return(nil, errors.New("Unexpected")).Once()
48+
49+
u := usecase.NewTaskUsecase(mockTaskRepository, time.Second*2)
50+
51+
list, err := u.FetchByUserID(context.Background(), userID)
52+
53+
assert.Error(t, err)
54+
assert.Nil(t, list)
55+
56+
mockTaskRepository.AssertExpectations(t)
57+
})
58+
59+
}

0 commit comments

Comments
 (0)