11using System ;
22using System . Collections . Generic ;
33using System . Linq ;
4+ using System . Threading ;
45using System . Threading . Tasks ;
56using FluentAssertions ;
67using Xer . Delegator . Tests . Entities ;
@@ -19,7 +20,7 @@ public class MessageDelegatorTests
1920 public class MessageDelegatorConstruction
2021 {
2122 [ Fact ]
22- public void ShouldThrowWhenNullProvidedAsConstructorParameter ( )
23+ public void ShouldThrowWhenNullIsProvidedAsConstructorParameter ( )
2324 {
2425 // Given
2526 Action action = ( ) =>
@@ -148,7 +149,7 @@ public async Task ShouldSendAllMessagesToASingleMessageHandler()
148149 actualMessageHandlerInvocationCount . Should ( ) . Be ( expectedMessageHandlerInvocationCount ) ;
149150 }
150151
151- [ Fact ]
152+ [ Fact ]
152153 public void ShouldThrowWhenNullIsProvided ( )
153154 {
154155 // Given
@@ -164,9 +165,61 @@ public void ShouldThrowWhenNullIsProvided()
164165 // Then
165166 action . ShouldThrow < ArgumentNullException > ( ) ;
166167 }
168+
169+ [ Fact ]
170+ public void ShouldThrowWhenCancelled ( )
171+ {
172+ // Given
173+ IMessageHandlerResolver resolver = CreateSingleMessageHandlerResolver ( registration =>
174+ {
175+ registration . Register < TestMessage > ( ( message , cancellationToken ) =>
176+ {
177+ return Task . Delay ( TimeSpan . FromSeconds ( 5 ) , cancellationToken ) ;
178+ } ) ;
179+ } ) ;
180+
181+ MessageDelegator messageDelegator = CreateMessageDelegator ( resolver ) ;
182+
183+ Func < Task > action = async ( ) =>
184+ {
185+ // Cancels after 1 second.
186+ using ( var cts = new CancellationTokenSource ( TimeSpan . FromSeconds ( 1 ) ) )
187+ {
188+ // When
189+ await messageDelegator . SendAsync < TestMessage > ( new TestMessage ( ) , cts . Token ) ;
190+ }
191+ } ;
192+
193+ // Then
194+ action . ShouldThrow < OperationCanceledException > ( ) ;
195+ }
196+
197+ [ Fact ]
198+ public void ShouldPropagateExceptionFromHandler ( )
199+ {
200+ // Given
201+ IMessageHandlerResolver resolver = CreateSingleMessageHandlerResolver ( registration =>
202+ {
203+ registration . Register < TestMessage > ( ( message , cancellationToken ) =>
204+ {
205+ return Task . FromException ( new Exception ( "This exception is expected." ) ) ;
206+ } ) ;
207+ } ) ;
208+
209+ MessageDelegator messageDelegator = CreateMessageDelegator ( resolver ) ;
210+
211+ Func < Task > action = ( ) =>
212+ {
213+ // When
214+ return messageDelegator . SendAsync < TestMessage > ( new TestMessage ( ) ) ;
215+ } ;
216+
217+ // Then
218+ action . ShouldThrow < Exception > ( ) ;
219+ }
167220 }
168221
169- #endregion SyncAsync Method
222+ #endregion SendAsync Method
170223
171224 #region Common Methods
172225
0 commit comments