go-clean-template

Форк
0
/
translation_test.go 
126 строк · 2.6 Кб
1
package usecase_test
2

3
import (
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

15
var errInternalServErr = errors.New("internal server error")
16

17
type test struct {
18
	name string
19
	mock func()
20
	res  interface{}
21
	err  error
22
}
23

24
func translation(t *testing.T) (*usecase.TranslationUseCase, *MockTranslationRepo, *MockTranslationWebAPI) {
25
	t.Helper()
26

27
	mockCtl := gomock.NewController(t)
28
	defer mockCtl.Finish()
29

30
	repo := NewMockTranslationRepo(mockCtl)
31
	webAPI := NewMockTranslationWebAPI(mockCtl)
32

33
	translation := usecase.New(repo, webAPI)
34

35
	return translation, repo, webAPI
36
}
37

38
func TestHistory(t *testing.T) {
39
	t.Parallel()
40

41
	translation, repo, _ := translation(t)
42

43
	tests := []test{
44
		{
45
			name: "empty result",
46
			mock: func() {
47
				repo.EXPECT().GetHistory(context.Background()).Return(nil, nil)
48
			},
49
			res: []entity.Translation(nil),
50
			err: nil,
51
		},
52
		{
53
			name: "result with error",
54
			mock: func() {
55
				repo.EXPECT().GetHistory(context.Background()).Return(nil, errInternalServErr)
56
			},
57
			res: []entity.Translation(nil),
58
			err: errInternalServErr,
59
		},
60
	}
61

62
	for _, tc := range tests {
63
		tc := tc
64

65
		t.Run(tc.name, func(t *testing.T) {
66
			t.Parallel()
67

68
			tc.mock()
69

70
			res, err := translation.History(context.Background())
71

72
			require.Equal(t, res, tc.res)
73
			require.ErrorIs(t, err, tc.err)
74
		})
75
	}
76
}
77

78
func TestTranslate(t *testing.T) {
79
	t.Parallel()
80

81
	translation, repo, webAPI := translation(t)
82

83
	tests := []test{
84
		{
85
			name: "empty result",
86
			mock: func() {
87
				webAPI.EXPECT().Translate(entity.Translation{}).Return(entity.Translation{}, nil)
88
				repo.EXPECT().Store(context.Background(), entity.Translation{}).Return(nil)
89
			},
90
			res: entity.Translation{},
91
			err: nil,
92
		},
93
		{
94
			name: "web API error",
95
			mock: func() {
96
				webAPI.EXPECT().Translate(entity.Translation{}).Return(entity.Translation{}, errInternalServErr)
97
			},
98
			res: entity.Translation{},
99
			err: errInternalServErr,
100
		},
101
		{
102
			name: "repo error",
103
			mock: func() {
104
				webAPI.EXPECT().Translate(entity.Translation{}).Return(entity.Translation{}, nil)
105
				repo.EXPECT().Store(context.Background(), entity.Translation{}).Return(errInternalServErr)
106
			},
107
			res: entity.Translation{},
108
			err: errInternalServErr,
109
		},
110
	}
111

112
	for _, tc := range tests {
113
		tc := tc
114

115
		t.Run(tc.name, func(t *testing.T) {
116
			t.Parallel()
117

118
			tc.mock()
119

120
			res, err := translation.Translate(context.Background(), entity.Translation{})
121

122
			require.EqualValues(t, res, tc.res)
123
			require.ErrorIs(t, err, tc.err)
124
		})
125
	}
126
}
127

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.