Skip to content

Commit 267325c

Browse files
committed
chat-server: basic unit testing for api and service layer.
1 parent a26a3b5 commit 267325c

File tree

7 files changed

+419
-0
lines changed

7 files changed

+419
-0
lines changed

chat-server/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
/bin/
2+
*.gen.go

chat-server/.mockery.yaml

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
quiet: False
2+
with-expecter: True
3+
mockname: "Mock{{.InterfaceName}}"
4+
filename: "{{.InterfaceName}}.mock.gen.go"
5+
dir: "{{.InterfaceDir}}/mocks"
6+
outpkg: "mocks"
7+
packages:
8+
github.com/aywan/balun_miserv_s2/chat-server/internal/repository:
9+
interfaces:
10+
Chat:
11+
github.com/aywan/balun_miserv_s2/chat-server/internal/service:
12+
interfaces:
13+
Chat:
14+

chat-server/Makefile

+5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ tests:
1616
.PHONY: generate
1717
generate:
1818
make generate-api-chat-v1
19+
make mocks
20+
21+
.PHONY: mocks
22+
mocks:
23+
$(LOCAL_BIN)/mockery
1924

2025
.PHONY: generate-api-chat-v1
2126
generate-api-chat-v1:

chat-server/go.mod

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ require (
77
github.com/aywan/balun_miserv_s2/shared/lib/db v0.0.0
88
github.com/aywan/balun_miserv_s2/shared/lib/logger v0.0.0
99
github.com/aywan/balun_miserv_s2/shared/lib/runutil v0.0.0
10+
github.com/brianvoe/gofakeit/v6 v6.24.0
1011
github.com/kelseyhightower/envconfig v1.4.0
1112
github.com/stretchr/testify v1.8.4
1213
go.uber.org/fx v1.20.1
@@ -34,6 +35,7 @@ require (
3435
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
3536
github.com/pmezard/go-difflib v1.0.0 // indirect
3637
github.com/rogpeppe/go-internal v1.11.0 // indirect
38+
github.com/stretchr/objx v0.5.0 // indirect
3739
go.uber.org/dig v1.17.0 // indirect
3840
go.uber.org/multierr v1.10.0 // indirect
3941
golang.org/x/crypto v0.11.0 // indirect

chat-server/go.sum

+5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8
22
github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10=
33
github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
44
github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
5+
github.com/brianvoe/gofakeit/v6 v6.24.0 h1:74yq7RRz/noddscZHRS2T84oHZisW9muwbb8sRnU52A=
6+
github.com/brianvoe/gofakeit/v6 v6.24.0/go.mod h1:Ow6qC71xtwm79anlwKRlWZW6zVq9D2XHE4QSSMP/rU8=
57
github.com/cockroachdb/cockroach-go/v2 v2.2.0 h1:/5znzg5n373N/3ESjHF5SMLxiW4RKB05Ql//KWfeTFs=
68
github.com/cockroachdb/cockroach-go/v2 v2.2.0/go.mod h1:u3MiKYGupPPjkn3ozknpMUpxPaNLTFWAya419/zv6eI=
79
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -46,11 +48,14 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
4648
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
4749
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
4850
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
51+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
4952
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
5053
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
5154
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
5255
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
5356
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
57+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
58+
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
5459
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
5560
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
5661
go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
+158
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
package chat
2+
3+
import (
4+
"context"
5+
"database/sql"
6+
"testing"
7+
8+
"github.com/aywan/balun_miserv_s2/chat-server/internal/model"
9+
"github.com/aywan/balun_miserv_s2/chat-server/internal/service/chat/dto"
10+
"github.com/aywan/balun_miserv_s2/chat-server/internal/service/mocks"
11+
desc "github.com/aywan/balun_miserv_s2/chat-server/pkg/grpc/v1/chat_v1"
12+
"github.com/brianvoe/gofakeit/v6"
13+
"github.com/stretchr/testify/require"
14+
"go.uber.org/zap/zaptest"
15+
)
16+
17+
func TestApi_Create(t *testing.T) {
18+
t.Parallel()
19+
log := zaptest.NewLogger(t)
20+
ctx := context.Background()
21+
var err error
22+
23+
req := &desc.CreateRequest{
24+
Users: []int64{1, 2, 3},
25+
OwnerId: 1,
26+
Name: gofakeit.BeerStyle(),
27+
}
28+
chatId := gofakeit.Int64()
29+
30+
chatService := mocks.NewMockChat(t)
31+
chatService.EXPECT().
32+
Create(ctx, dto.NewChatDTO{
33+
OwnerID: req.OwnerId,
34+
Name: req.Name,
35+
Users: req.Users,
36+
}).
37+
Return(chatId, nil)
38+
39+
api := New(log, chatService)
40+
41+
rsp, err := api.Create(ctx, req)
42+
require.NoError(t, err)
43+
require.Equal(t, chatId, rsp.Id)
44+
}
45+
46+
func TestApi_Delete(t *testing.T) {
47+
t.Parallel()
48+
log := zaptest.NewLogger(t)
49+
ctx := context.Background()
50+
var err error
51+
52+
req := &desc.ChatIdRequest{
53+
Id: gofakeit.Int64(),
54+
}
55+
56+
chatService := mocks.NewMockChat(t)
57+
chatService.EXPECT().
58+
Delete(ctx, req.Id).
59+
Return(nil)
60+
61+
api := New(log, chatService)
62+
63+
_, err = api.Delete(ctx, req)
64+
require.NoError(t, err)
65+
}
66+
67+
func TestApi_GetMessages(t *testing.T) {
68+
t.Parallel()
69+
log := zaptest.NewLogger(t)
70+
ctx := context.Background()
71+
var err error
72+
73+
req := &desc.GetMessagesRequest{
74+
ChatId: gofakeit.Int64(),
75+
Limit: gofakeit.Int64(),
76+
AfterMessageId: gofakeit.Int64(),
77+
BeforeMessageId: gofakeit.Int64(),
78+
}
79+
80+
messages := dto.MessagesResultDTO{
81+
Items: model.MessageList{
82+
{
83+
ID: gofakeit.Int64(),
84+
CreatedAt: gofakeit.Date(),
85+
UserID: sql.NullInt64{},
86+
MsgType: model.MsgTypeSystem,
87+
Text: gofakeit.BeerStyle(),
88+
},
89+
{
90+
ID: gofakeit.Int64(),
91+
CreatedAt: gofakeit.Date(),
92+
UserID: sql.NullInt64{gofakeit.Int64(), true},
93+
MsgType: model.MsgTypeUser,
94+
Text: gofakeit.BeerAlcohol() + " " + gofakeit.BeerIbu(),
95+
},
96+
},
97+
HasNext: gofakeit.Bool(),
98+
NextId: gofakeit.Int64(),
99+
}
100+
101+
chatService := mocks.NewMockChat(t)
102+
chatService.EXPECT().
103+
GetMessages(ctx, dto.GetMessagesDTO{
104+
ChatID: req.ChatId,
105+
Limit: req.Limit,
106+
AfterMessageId: req.AfterMessageId,
107+
BeforeMessageId: req.BeforeMessageId,
108+
}).
109+
Return(messages, nil)
110+
111+
api := New(log, chatService)
112+
113+
rsp, err := api.GetMessages(ctx, req)
114+
require.NoError(t, err)
115+
116+
require.Equal(t, messages.HasNext, rsp.HasNext)
117+
require.Equal(t, messages.NextId, rsp.NextId)
118+
119+
require.Equal(t, messages.Items[0].ID, rsp.Items[0].Id)
120+
require.Equal(t, messages.Items[0].CreatedAt, rsp.Items[0].CreatedAt.AsTime())
121+
require.Nil(t, rsp.Items[0].UserId)
122+
require.Equal(t, desc.MessageType_SYSTEM, rsp.Items[0].Type)
123+
require.Equal(t, messages.Items[0].Text, rsp.Items[0].Text)
124+
125+
require.Equal(t, messages.Items[1].ID, rsp.Items[1].Id)
126+
require.Equal(t, messages.Items[1].CreatedAt, rsp.Items[1].CreatedAt.AsTime())
127+
require.Equal(t, messages.Items[1].UserID.Int64, *rsp.Items[1].UserId)
128+
require.Equal(t, desc.MessageType_USER, rsp.Items[1].Type)
129+
require.Equal(t, messages.Items[1].Text, rsp.Items[1].Text)
130+
}
131+
132+
func TestApi_SendMessage(t *testing.T) {
133+
t.Parallel()
134+
log := zaptest.NewLogger(t)
135+
ctx := context.Background()
136+
var err error
137+
138+
req := &desc.SendMessageRequest{
139+
ChatId: gofakeit.Int64(),
140+
Type: desc.MessageType_USER,
141+
UserId: gofakeit.Int64(),
142+
Text: gofakeit.BeerStyle(),
143+
}
144+
145+
chatService := mocks.NewMockChat(t)
146+
chatService.EXPECT().
147+
SendMessage(ctx, dto.SendMessageDTO{
148+
ChatID: req.ChatId,
149+
UserID: req.UserId,
150+
Text: req.Text,
151+
}).
152+
Return(nil)
153+
154+
api := New(log, chatService)
155+
156+
_, err = api.SendMessage(ctx, req)
157+
require.NoError(t, err)
158+
}

0 commit comments

Comments
 (0)