Skip to content

Commit 25e70e9

Browse files
committed
forwarder New tests
1 parent ae56e10 commit 25e70e9

File tree

5 files changed

+123
-15
lines changed

5 files changed

+123
-15
lines changed

errors.go

+3
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,7 @@ var (
99
ErrTableEmpty = errors.New("table is empty")
1010

1111
ErrPoolNil = errors.New("pool is nil")
12+
13+
ErrReaderNil = errors.New("reader is nil")
14+
ErrPublisherNil = errors.New("publisher is nil")
1215
)

forwarder.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package outbox
22

33
import (
44
"context"
5-
"errors"
65
"fmt"
76

87
"github.com/jackc/pgx/v5/pgxpool"
@@ -24,10 +23,10 @@ type forwarder struct {
2423

2524
func NewForwarder(reader Reader, publisher Publisher, opts ...ForwardOption) (Forwarder, error) {
2625
if reader == nil {
27-
return nil, errors.New("reader is nil")
26+
return nil, ErrReaderNil
2827
}
2928
if publisher == nil {
30-
return nil, errors.New("publisher is nil")
29+
return nil, ErrPublisherNil
3130
}
3231

3332
f := &forwarder{

forwarder_test.go

+111
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"errors"
55
"testing"
66

7+
"github.com/jackc/pgx/v5/pgxpool"
78
outbox "github.com/nikolayk812/pgx-outbox"
89
"github.com/nikolayk812/pgx-outbox/internal/fakes"
910
"github.com/nikolayk812/pgx-outbox/internal/mocks"
@@ -175,3 +176,113 @@ func TestForwarder_Forward(t *testing.T) {
175176
})
176177
}
177178
}
179+
180+
func TestForwarder_New(t *testing.T) {
181+
t.Parallel()
182+
183+
tests := []struct {
184+
name string
185+
reader outbox.Reader
186+
publisher outbox.Publisher
187+
options []outbox.ForwardOption
188+
wantErr error
189+
}{
190+
{
191+
name: "nil reader",
192+
reader: nil,
193+
wantErr: outbox.ErrReaderNil,
194+
},
195+
{
196+
name: "nil publisher",
197+
reader: new(mocks.Reader),
198+
publisher: nil,
199+
wantErr: outbox.ErrPublisherNil,
200+
},
201+
{
202+
name: "with options",
203+
reader: new(mocks.Reader),
204+
publisher: new(mocks.Publisher),
205+
options: []outbox.ForwardOption{outbox.WithForwardFilter(types.MessageFilter{Brokers: []string{"broker1"}})},
206+
},
207+
}
208+
209+
for _, tt := range tests {
210+
t.Run(tt.name, func(t *testing.T) {
211+
t.Parallel()
212+
213+
forwarder, err := outbox.NewForwarder(tt.reader, tt.publisher, tt.options...)
214+
if tt.wantErr != nil {
215+
require.Error(t, err)
216+
assert.ErrorIs(t, err, tt.wantErr)
217+
return
218+
}
219+
220+
require.NoError(t, err)
221+
assert.NotNil(t, forwarder)
222+
})
223+
}
224+
}
225+
226+
func TestForwarder_NewFromPool(t *testing.T) {
227+
t.Parallel()
228+
229+
tests := []struct {
230+
name string
231+
table string
232+
pool *pgxpool.Pool
233+
publisher outbox.Publisher
234+
options []outbox.ForwardOption
235+
wantErr error
236+
}{
237+
{
238+
name: "empty table",
239+
table: "",
240+
pool: new(pgxpool.Pool),
241+
wantErr: outbox.ErrTableEmpty,
242+
},
243+
{
244+
name: "nil pool",
245+
table: "outbox_messages",
246+
pool: nil,
247+
wantErr: outbox.ErrPoolNil,
248+
},
249+
{
250+
name: "nil publisher",
251+
table: "outbox_messages",
252+
pool: new(pgxpool.Pool),
253+
publisher: nil,
254+
wantErr: outbox.ErrPublisherNil,
255+
},
256+
{
257+
name: "valid inputs",
258+
table: "outbox_messages",
259+
pool: new(pgxpool.Pool),
260+
publisher: new(mocks.Publisher),
261+
wantErr: nil,
262+
},
263+
{
264+
name: "with option",
265+
table: "outbox_messages",
266+
pool: new(pgxpool.Pool),
267+
publisher: new(mocks.Publisher),
268+
options: []outbox.ForwardOption{outbox.WithForwardFilter(types.MessageFilter{Brokers: []string{"broker1"}})},
269+
wantErr: nil,
270+
},
271+
}
272+
273+
for _, tt := range tests {
274+
t.Run(tt.name, func(t *testing.T) {
275+
t.Parallel()
276+
277+
forwarder, err := outbox.NewForwarderFromPool(tt.table, tt.pool, tt.publisher, tt.options...)
278+
if tt.wantErr != nil {
279+
require.ErrorIs(t, err, tt.wantErr)
280+
assert.Nil(t, forwarder)
281+
return
282+
}
283+
284+
require.NoError(t, err)
285+
assert.NotNil(t, forwarder)
286+
})
287+
}
288+
}

writer.go

-5
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package outbox
33
import (
44
"context"
55
"database/sql"
6-
"errors"
76
"fmt"
87
"time"
98

@@ -161,10 +160,6 @@ func (w *writer) WriteBatch(ctx context.Context, tx pgx.Tx, messages []types.Mes
161160
type Tx interface{}
162161

163162
func queryRow(ctx context.Context, tx Tx, q string, args ...interface{}) (pgx.Row, error) {
164-
if tx == nil {
165-
return nil, errors.New("tx is nil")
166-
}
167-
168163
var row pgx.Row
169164

170165
switch t := tx.(type) {

writer_reader_test.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ func (suite *WriterReaderTestSuite) TestReader_ReadMessage() {
363363
}
364364
}
365365

366-
func (suite *WriterReaderTestSuite) TestWriter_MarkMessage() {
366+
func (suite *WriterReaderTestSuite) TestWriter_AckMessage() {
367367
msg1 := fakes.FakeMessage()
368368
msg2 := fakes.FakeMessage()
369369
msg3 := fakes.FakeMessage()
@@ -726,7 +726,7 @@ func (suite *WriterReaderTestSuite) TestReader_New() {
726726
name string
727727
table string
728728
pool *pgxpool.Pool
729-
option outbox.ReadOption
729+
options []outbox.ReadOption
730730
wantErr error
731731
}{
732732
{
@@ -742,18 +742,18 @@ func (suite *WriterReaderTestSuite) TestReader_New() {
742742
wantErr: outbox.ErrPoolNil,
743743
},
744744
{
745-
name: "with option",
746-
table: "outbox_messages",
747-
pool: suite.pool,
748-
option: outbox.WithReadFilter(types.MessageFilter{Brokers: []string{"broker1"}}),
745+
name: "with options",
746+
table: "outbox_messages",
747+
pool: suite.pool,
748+
options: []outbox.ReadOption{outbox.WithReadFilter(types.MessageFilter{Brokers: []string{"broker1"}})},
749749
},
750750
}
751751

752752
for _, tt := range tests {
753753
suite.Run(tt.name, func() {
754754
t := suite.T()
755755

756-
reader, err := outbox.NewReader(tt.table, tt.pool, tt.option)
756+
reader, err := outbox.NewReader(tt.table, tt.pool, tt.options...)
757757
if tt.wantErr != nil {
758758
require.ErrorIs(t, err, tt.wantErr)
759759
return

0 commit comments

Comments
 (0)