11package squeue_test
22
33import (
4- "context"
54 "errors"
65 "testing"
76
@@ -31,41 +30,45 @@ func (suite *ConsumerTestSuite) TearDownTest() {
3130}
3231
3332func (suite * ConsumerTestSuite ) TestNewConsumer () {
34- squeue.NewConsumer [* TestMessage ](suite .driver )
33+ squeue .NewConsumer [* TestMessage ](suite .driver , "test-queue" )
3534}
3635
3736func (suite * ConsumerTestSuite ) TestConsumeMessages_DriverError () {
38- consumer := squeue.NewConsumer [* TestMessage ](suite .driver )
39- ctx := context .Background ()
4037 queue := "test-queue"
38+ consumer := squeue .NewConsumer [* TestMessage ](suite .driver , queue )
4139
4240 suite .driver .
4341 EXPECT ().
44- Consume (ctx , queue ).
42+ Consume (queue ).
4543 Return (nil , errors .New ("consume error" ))
4644
47- messages , err := consumer .Consume (ctx , queue )
45+ messages , err := consumer .Consume ()
4846 suite .Nil (messages )
4947 suite .Error (err )
5048}
5149
5250func (suite * ConsumerTestSuite ) TestConsumeMessages_OneMessageWithError () {
53- consumer := squeue.NewConsumer [* TestMessage ](suite .driver )
54- ctx := context .Background ()
5551 queue := "test-queue"
56-
57- dMessages := make (chan driver.Message )
58- go func () {
59- dMessages <- driver.Message {Error : errors .New ("error in message" )}
60- close (dMessages )
61- }()
52+ consumer := squeue .NewConsumer [* TestMessage ](suite .driver , queue )
6253
6354 suite .driver .
6455 EXPECT ().
65- Consume (ctx , queue ).
66- Return (dMessages , nil )
56+ Consume (queue ).
57+ DoAndReturn (func (queue string , _ ... func ()) (* driver.ConsumerController , error ) {
58+ ctrl := driver .NewConsumerController ()
59+ // Simulate catching the .Stop()
60+ go func () { <- ctrl .Done () }()
61+
62+ // Simulate sending one message and Stopping the driver
63+ go func () {
64+ ctrl .Send (driver.Message {Error : errors .New ("error in message" )})
65+ ctrl .Stop ()
66+ }()
67+
68+ return ctrl , nil
69+ })
6770
68- messages , err := consumer .Consume (ctx , queue )
71+ messages , err := consumer .Consume ()
6972
7073 suite .NotNil (messages )
7174 suite .Nil (err )
@@ -80,26 +83,31 @@ func (suite *ConsumerTestSuite) TestConsumeMessages_OneMessageWithError() {
8083}
8184
8285func (suite * ConsumerTestSuite ) TestConsumeMessages_OneMessageUnmarshallError () {
83- consumer := squeue.NewConsumer [* TestMessage ](suite .driver )
84- ctx := context .Background ()
8586 queue := "test-queue"
86-
87- dMessages := make (chan driver.Message )
88- go func () {
89- dMessages <- driver.Message {
90- Body : []byte ("invalid json" ),
91- ID : "1111" ,
92- Error : nil ,
93- }
94- close (dMessages )
95- }()
87+ consumer := squeue .NewConsumer [* TestMessage ](suite .driver , queue )
9688
9789 suite .driver .
9890 EXPECT ().
99- Consume (ctx , queue ).
100- Return (dMessages , nil )
101-
102- messages , err := consumer .Consume (ctx , queue )
91+ Consume (queue ).
92+ DoAndReturn (func (queue string , _ ... func ()) (* driver.ConsumerController , error ) {
93+ ctrl := driver .NewConsumerController ()
94+ // Simulate catching the .Stop()
95+ go func () { <- ctrl .Done () }()
96+
97+ // Simulate sending one message and Stopping the driver
98+ go func () {
99+ ctrl .Send (driver.Message {
100+ Body : []byte ("invalid json" ),
101+ ID : "1111" ,
102+ Error : nil ,
103+ })
104+ ctrl .Stop ()
105+ }()
106+
107+ return ctrl , nil
108+ })
109+
110+ messages , err := consumer .Consume ()
103111
104112 suite .NotNil (messages )
105113 suite .Nil (err )
@@ -117,37 +125,41 @@ func (suite *ConsumerTestSuite) TestConsumeMessages_OneMessageUnmarshallError()
117125}
118126
119127func (suite * ConsumerTestSuite ) TestConsumeMessages_RealWorldScenarioWithErrors () {
120- consumer := squeue.NewConsumer [* TestMessage ](suite .driver )
121- ctx := context .Background ()
122128 queue := "test-queue"
123-
124- dMessages := make (chan driver.Message )
125- go func () {
126- dMessages <- driver.Message {
127- Body : []byte (`{"name":"test message"}` ),
128- ID : "1111" ,
129- Error : nil ,
130- }
131-
132- dMessages <- driver.Message {
133- Error : errors .New ("wire error" ),
134- }
135-
136- dMessages <- driver.Message {
137- Body : []byte (`{"name":"test another message"}` ),
138- ID : "1111" ,
139- Error : nil ,
140- }
141-
142- close (dMessages )
143- }()
129+ consumer := squeue .NewConsumer [* TestMessage ](suite .driver , queue )
144130
145131 suite .driver .
146132 EXPECT ().
147- Consume (ctx , queue ).
148- Return (dMessages , nil )
149-
150- messages , err := consumer .Consume (ctx , queue )
133+ Consume (queue ).
134+ DoAndReturn (func (queue string , _ ... func ()) (* driver.ConsumerController , error ) {
135+ ctrl := driver .NewConsumerController ()
136+ // Simulate catching the .Stop()
137+ go func () { <- ctrl .Done () }()
138+
139+ // Simulate sending three messages and Stopping the driver
140+ go func () {
141+ ctrl .Send (driver.Message {
142+ Body : []byte (`{"name":"test message"}` ),
143+ ID : "1111" ,
144+ Error : nil ,
145+ })
146+
147+ ctrl .Send (driver.Message {
148+ Error : errors .New ("wire error" ),
149+ })
150+
151+ ctrl .Send (driver.Message {
152+ Body : []byte (`{"name":"test another message"}` ),
153+ ID : "1111" ,
154+ Error : nil ,
155+ })
156+ ctrl .Stop ()
157+ }()
158+
159+ return ctrl , nil
160+ })
161+
162+ messages , err := consumer .Consume ()
151163
152164 suite .NotNil (messages )
153165 suite .Nil (err )
@@ -173,6 +185,25 @@ func (suite *ConsumerTestSuite) TestConsumeMessages_RealWorldScenarioWithErrors(
173185 suite .Contains (m .Content .Name , "test another message" )
174186}
175187
188+ func (suite * ConsumerTestSuite ) TestAckMessage_WithError () {
189+ queue := "test-queue"
190+ consumer := squeue .NewConsumer [* TestMessage ](suite .driver , queue )
191+
192+ msg := squeue.Message [* TestMessage ]{
193+ Content : & TestMessage {},
194+ ID : "123" ,
195+ }
196+
197+ suite .driver .
198+ EXPECT ().
199+ Ack (queue , "123" ).
200+ Return (errors .New ("ack error" ))
201+
202+ err := consumer .Ack (msg )
203+
204+ suite .Error (err )
205+ }
206+
176207func TestConsumerTestSuite (t * testing.T ) {
177208 suite .Run (t , new (ConsumerTestSuite ))
178209}
0 commit comments