go-clean-template
126 строк · 2.6 Кб
1package usecase_test
2
3import (
4"context"
5"errors"
6"testing"
7
8"github.com/golang/mock/gomock"
9"github.com/stretchr/testify/require"
10
11"github.com/evrone/go-clean-template/internal/entity"
12"github.com/evrone/go-clean-template/internal/usecase"
13)
14
15var errInternalServErr = errors.New("internal server error")
16
17type test struct {
18name string
19mock func()
20res interface{}
21err error
22}
23
24func translation(t *testing.T) (*usecase.TranslationUseCase, *MockTranslationRepo, *MockTranslationWebAPI) {
25t.Helper()
26
27mockCtl := gomock.NewController(t)
28defer mockCtl.Finish()
29
30repo := NewMockTranslationRepo(mockCtl)
31webAPI := NewMockTranslationWebAPI(mockCtl)
32
33translation := usecase.New(repo, webAPI)
34
35return translation, repo, webAPI
36}
37
38func TestHistory(t *testing.T) {
39t.Parallel()
40
41translation, repo, _ := translation(t)
42
43tests := []test{
44{
45name: "empty result",
46mock: func() {
47repo.EXPECT().GetHistory(context.Background()).Return(nil, nil)
48},
49res: []entity.Translation(nil),
50err: nil,
51},
52{
53name: "result with error",
54mock: func() {
55repo.EXPECT().GetHistory(context.Background()).Return(nil, errInternalServErr)
56},
57res: []entity.Translation(nil),
58err: errInternalServErr,
59},
60}
61
62for _, tc := range tests {
63tc := tc
64
65t.Run(tc.name, func(t *testing.T) {
66t.Parallel()
67
68tc.mock()
69
70res, err := translation.History(context.Background())
71
72require.Equal(t, res, tc.res)
73require.ErrorIs(t, err, tc.err)
74})
75}
76}
77
78func TestTranslate(t *testing.T) {
79t.Parallel()
80
81translation, repo, webAPI := translation(t)
82
83tests := []test{
84{
85name: "empty result",
86mock: func() {
87webAPI.EXPECT().Translate(entity.Translation{}).Return(entity.Translation{}, nil)
88repo.EXPECT().Store(context.Background(), entity.Translation{}).Return(nil)
89},
90res: entity.Translation{},
91err: nil,
92},
93{
94name: "web API error",
95mock: func() {
96webAPI.EXPECT().Translate(entity.Translation{}).Return(entity.Translation{}, errInternalServErr)
97},
98res: entity.Translation{},
99err: errInternalServErr,
100},
101{
102name: "repo error",
103mock: func() {
104webAPI.EXPECT().Translate(entity.Translation{}).Return(entity.Translation{}, nil)
105repo.EXPECT().Store(context.Background(), entity.Translation{}).Return(errInternalServErr)
106},
107res: entity.Translation{},
108err: errInternalServErr,
109},
110}
111
112for _, tc := range tests {
113tc := tc
114
115t.Run(tc.name, func(t *testing.T) {
116t.Parallel()
117
118tc.mock()
119
120res, err := translation.Translate(context.Background(), entity.Translation{})
121
122require.EqualValues(t, res, tc.res)
123require.ErrorIs(t, err, tc.err)
124})
125}
126}
127