@@ -16,20 +16,55 @@ namespace Liquid.Messaging.RabbitMq.Tests
16
16
public class RabbitMqConsumerTest : RabbitMqConsumer < MessageMock >
17
17
{
18
18
public static readonly IRabbitMqFactory _factory = Substitute . For < IRabbitMqFactory > ( ) ;
19
- public static readonly IOptions < RabbitMqConsumerSettings > _settings = GetOptions ( ) ;
20
-
19
+ public static IOptions < RabbitMqConsumerSettings > _settings = GetOptions ( ) ;
20
+ public static RabbitMqConsumerSettings _settingsValue ;
21
21
public static IOptions < RabbitMqConsumerSettings > GetOptions ( )
22
22
{
23
23
var settings = Substitute . For < IOptions < RabbitMqConsumerSettings > > ( ) ;
24
- settings . Value . Returns ( new RabbitMqConsumerSettings ( ) ) ;
24
+
25
+ _settingsValue = new RabbitMqConsumerSettings
26
+ {
27
+ CompressMessage = true ,
28
+ Exchange = "test" ,
29
+ Queue = "test" ,
30
+ AdvancedSettings = new AdvancedSettings
31
+ {
32
+ AutoAck = false ,
33
+ QueueAckModeSettings = new QueueAckModeSettings ( ) { QueueAckMode = QueueAckModeEnum . BasicAck , Requeue = true }
34
+ }
35
+ } ;
36
+ settings . Value . Returns ( _settingsValue ) ;
25
37
return settings ;
26
38
}
27
39
28
40
public RabbitMqConsumerTest ( )
29
41
: base ( _factory , _settings )
30
42
{
43
+ var model = Substitute . For < IModel > ( ) ;
44
+ _factory . GetReceiver ( Arg . Any < RabbitMqConsumerSettings > ( ) ) . Returns ( model ) ;
45
+ }
46
+
47
+ [ Fact ]
48
+ public void Constructor_WhenFactoryIsNull_ThrowArgumentNullException ( )
49
+ {
50
+ Assert . Throws < ArgumentNullException > ( ( ) => new RabbitMqConsumer < MessageMock > ( null , _settings ) ) ;
31
51
}
32
52
53
+ [ Fact ]
54
+ public void Constructor_WhenSettingsIsNull_ThrowArgumentNullException ( )
55
+ {
56
+ Assert . Throws < ArgumentNullException > ( ( ) => new RabbitMqConsumer < MessageMock > ( _factory , null ) ) ;
57
+ }
58
+
59
+ [ Fact ]
60
+ public void Constructor_WhenSettingsValueIsNull_ThrowArgumentNullException ( )
61
+ {
62
+ var settings = Substitute . For < IOptions < RabbitMqConsumerSettings > > ( ) ;
63
+ settings . Value . Returns ( ( RabbitMqConsumerSettings ) null ) ;
64
+ Assert . Throws < ArgumentNullException > ( ( ) => new RabbitMqConsumer < MessageMock > ( _factory , settings ) ) ;
65
+ }
66
+
67
+
33
68
[ Fact ]
34
69
public void RegisterMessageHandler_WhenRegisteredSucessfully_BasicConsumeReceivedCall ( )
35
70
{
@@ -66,10 +101,73 @@ public async Task MessageHandler_WhenProcessExecutedSucessfully()
66
101
_factory . GetReceiver ( Arg . Any < RabbitMqConsumerSettings > ( ) ) . Returns ( messageReceiver ) ;
67
102
68
103
ConsumeMessageAsync += ProcessMessageAsyncMock ;
104
+ await RegisterMessageHandler ( ) ;
105
+ await MessageHandler ( message , new CancellationToken ( ) ) ;
106
+ }
107
+
108
+ [ Fact ]
109
+ public async Task MessageHandler_CallsConsumeMessageAsync_AndAcks_WhenAutoAckIsFalse ( )
110
+ {
111
+ var message = new BasicDeliverEventArgs ( ) ;
112
+ var entity = new MessageMock ( ) { TestMessageId = 1 } ;
113
+ message . Body = entity . ToJsonBytes ( ) ;
114
+ var messageReceiver = Substitute . For < IModel > ( ) ;
115
+ ConsumeMessageAsync += ProcessMessageAsyncMock ;
116
+ _factory . GetReceiver ( Arg . Any < RabbitMqConsumerSettings > ( ) ) . Returns ( messageReceiver ) ;
117
+
118
+ await RegisterMessageHandler ( ) ;
119
+
120
+ await MessageHandler ( message , new CancellationToken ( ) ) ;
121
+ messageReceiver . Received ( 1 ) . BasicAck ( message . DeliveryTag , false ) ;
69
122
123
+ }
124
+
125
+ [ Fact ]
126
+ public async Task MessageHandler_CallsConsumeMessageAsync_AndNacks_WhenAutoAckIsFalse ( )
127
+ {
128
+ var message = new BasicDeliverEventArgs ( ) ;
129
+ var entity = new MessageMock ( ) { TestMessageId = 2 } ;
130
+ message . Body = entity . ToJsonBytes ( ) ;
131
+ var messageReceiver = Substitute . For < IModel > ( ) ;
132
+ ConsumeMessageAsync += ProcessMessageAsyncMock ;
133
+ _factory . GetReceiver ( Arg . Any < RabbitMqConsumerSettings > ( ) ) . Returns ( messageReceiver ) ;
134
+
135
+ await RegisterMessageHandler ( ) ;
70
136
await MessageHandler ( message , new CancellationToken ( ) ) ;
137
+ messageReceiver . Received ( 1 ) . BasicNack ( message . DeliveryTag , false , true ) ;
71
138
}
72
139
140
+ [ Fact ]
141
+ public async Task MessageHandler_CallsConsumeMessageAsync_AndRejects_WhenAutoAckIsFalse ( )
142
+ {
143
+ var message = new BasicDeliverEventArgs ( ) ;
144
+ var entity = new MessageMock ( ) { TestMessageId = 2 } ;
145
+ message . Body = entity . ToJsonBytes ( ) ;
146
+ var messageReceiver = Substitute . For < IModel > ( ) ;
147
+ ConsumeMessageAsync += ProcessMessageAsyncMock ;
148
+
149
+ _factory . GetReceiver ( Arg . Any < RabbitMqConsumerSettings > ( ) ) . Returns ( messageReceiver ) ;
150
+
151
+ _settingsValue = new RabbitMqConsumerSettings
152
+ {
153
+ CompressMessage = true ,
154
+ Exchange = "test" ,
155
+ Queue = "test" ,
156
+ AdvancedSettings = new AdvancedSettings
157
+ {
158
+ AutoAck = false ,
159
+ QueueAckModeSettings = new QueueAckModeSettings ( ) { QueueAckMode = QueueAckModeEnum . BasicReject , Requeue = true }
160
+ }
161
+ } ;
162
+
163
+ _settings . Value . Returns ( _settingsValue ) ;
164
+
165
+ await RegisterMessageHandler ( ) ;
166
+
167
+ await MessageHandler ( message , new CancellationToken ( ) ) ;
168
+ messageReceiver . Received ( 1 ) . BasicReject ( message . DeliveryTag , true ) ;
169
+ }
170
+
73
171
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
74
172
private async Task ProcessMessageAsyncMock ( ConsumerMessageEventArgs < MessageMock > args , CancellationToken cancellationToken )
75
173
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
0 commit comments