11namespace SlimMessageBus . Host . Test ;
22
3- using SlimMessageBus . Host . Collections ;
4- using SlimMessageBus . Host . Interceptor ;
5-
6- public class PublishInterceptorPipelineTests
7- {
8- private readonly MessageBusMock _busMock = new ( ) ;
9-
10- [ Theory ]
11- [ InlineData ( false , false ) ]
12- [ InlineData ( true , false ) ]
13- [ InlineData ( true , true ) ]
14- public async Task When_Next_Then_InterceptorIsCalledAndTargetIsCalled ( bool producerInterceptorRegistered , bool publishInterceptorRegistered )
15- {
16- // arrange
17- var message = new SomeMessage ( ) ;
18- var topic = "topic1" ;
19-
20- var producerInterceptorMock = new Mock < IProducerInterceptor < SomeMessage > > ( ) ;
21- producerInterceptorMock
22- . Setup ( x => x . OnHandle ( message , It . IsAny < Func < Task < object > > > ( ) , It . IsAny < IProducerContext > ( ) ) )
23- . Returns ( ( SomeMessage message , Func < Task < object > > next , IProducerContext context ) => next ( ) ) ;
24-
25- var producerInterceptors = producerInterceptorRegistered ? new [ ] { producerInterceptorMock . Object } : null ;
26-
27- var publishInterceptorMock = new Mock < IPublishInterceptor < SomeMessage > > ( ) ;
28- publishInterceptorMock
29- . Setup ( x => x . OnHandle ( message , It . IsAny < Func < Task > > ( ) , It . IsAny < IProducerContext > ( ) ) )
30- . Returns ( ( SomeMessage message , Func < Task > next , IProducerContext context ) => next ( ) ) ;
31-
32- var publishInterceptors = publishInterceptorRegistered ? new [ ] { publishInterceptorMock . Object } : null ;
33-
34- var producerSettings = new ProducerBuilder < SomeMessage > ( new ProducerSettings ( ) )
35- . DefaultTopic ( topic )
36- . Settings ;
37-
38- var context = new PublishContext
39- {
40- Path = topic ,
41- Headers = new Dictionary < string , object > ( ) ,
42- } ;
43-
44- _busMock . BusMock
45- . Setup ( x => x . ProduceToTransport ( message , message . GetType ( ) , context . Path , context . Headers , _busMock . Bus . MessageBusTarget , context . CancellationToken ) )
46- . Returns ( ( ) => Task . FromResult < object > ( null ) ) ;
47-
48- var subject = new PublishInterceptorPipeline ( _busMock . Bus , new RuntimeTypeCache ( ) , message , producerSettings , _busMock . Bus . MessageBusTarget , context , producerInterceptors : producerInterceptors , publishInterceptors : publishInterceptors ) ;
49-
50- // act
51- var result = await subject . Next ( ) ;
52-
53- // assert
54- result . Should ( ) . BeNull ( ) ;
55-
56- if ( producerInterceptorRegistered )
57- {
58- producerInterceptorMock . Verify ( x => x . OnHandle ( message , It . IsAny < Func < Task < object > > > ( ) , It . IsAny < IProducerContext > ( ) ) , Times . Once ) ;
59- }
60- producerInterceptorMock . VerifyNoOtherCalls ( ) ;
61-
62- if ( publishInterceptorRegistered )
63- {
64- publishInterceptorMock . Verify ( x => x . OnHandle ( message , It . IsAny < Func < Task > > ( ) , It . IsAny < IProducerContext > ( ) ) , Times . Once ) ;
65- }
66- publishInterceptorMock . VerifyNoOtherCalls ( ) ;
67-
68- _busMock . BusMock . Verify ( x => x . ProduceToTransport ( message , message . GetType ( ) , context . Path , context . Headers , _busMock . Bus . MessageBusTarget , context . CancellationToken ) , Times . Once ) ;
69- }
3+ using SlimMessageBus . Host . Collections ;
4+ using SlimMessageBus . Host . Interceptor ;
5+
6+ public class PublishInterceptorPipelineTests
7+ {
8+ private readonly MessageBusMock _busMock = new ( ) ;
9+
10+ [ Theory ]
11+ [ InlineData ( false , false ) ]
12+ [ InlineData ( true , false ) ]
13+ [ InlineData ( true , true ) ]
14+ public async Task When_Next_Then_InterceptorIsCalledAndTargetIsCalled ( bool producerInterceptorRegistered , bool publishInterceptorRegistered )
15+ {
16+ // arrange
17+ var message = new SomeMessage ( ) ;
18+ var topic = "topic1" ;
19+
20+ var producerInterceptorMock = new Mock < IProducerInterceptor < SomeMessage > > ( ) ;
21+ producerInterceptorMock
22+ . Setup ( x => x . OnHandle ( message , It . IsAny < Func < Task < object > > > ( ) , It . IsAny < IProducerContext > ( ) ) )
23+ . Returns ( ( SomeMessage message , Func < Task < object > > next , IProducerContext context ) => next ( ) ) ;
24+
25+ var producerInterceptors = producerInterceptorRegistered ? new [ ] { producerInterceptorMock . Object } : null ;
26+
27+ var publishInterceptorMock = new Mock < IPublishInterceptor < SomeMessage > > ( ) ;
28+ publishInterceptorMock
29+ . Setup ( x => x . OnHandle ( message , It . IsAny < Func < Task > > ( ) , It . IsAny < IProducerContext > ( ) ) )
30+ . Returns ( ( SomeMessage message , Func < Task > next , IProducerContext context ) => next ( ) ) ;
31+
32+ var publishInterceptors = publishInterceptorRegistered ? new [ ] { publishInterceptorMock . Object } : null ;
33+
34+ var producerSettings = new ProducerBuilder < SomeMessage > ( new ProducerSettings ( ) )
35+ . DefaultTopic ( topic )
36+ . Settings ;
37+
38+ var context = new PublishContext
39+ {
40+ Path = topic ,
41+ Headers = new Dictionary < string , object > ( ) ,
42+ } ;
43+
44+ _busMock . BusMock
45+ . Setup ( x => x . ProduceToTransport ( message , producerSettings . MessageType , context . Path , context . Headers , _busMock . Bus . MessageBusTarget , context . CancellationToken ) )
46+ . Returns ( ( ) => Task . FromResult < object > ( null ) ) ;
47+
48+ var subject = new PublishInterceptorPipeline ( _busMock . Bus , new RuntimeTypeCache ( ) , message , producerSettings , _busMock . Bus . MessageBusTarget , context , producerInterceptors : producerInterceptors , publishInterceptors : publishInterceptors ) ;
49+
50+ // act
51+ var result = await subject . Next ( ) ;
52+
53+ // assert
54+ result . Should ( ) . BeNull ( ) ;
55+
56+ if ( producerInterceptorRegistered )
57+ {
58+ producerInterceptorMock . Verify ( x => x . OnHandle ( message , It . IsAny < Func < Task < object > > > ( ) , It . IsAny < IProducerContext > ( ) ) , Times . Once ) ;
59+ }
60+ producerInterceptorMock . VerifyNoOtherCalls ( ) ;
61+
62+ if ( publishInterceptorRegistered )
63+ {
64+ publishInterceptorMock . Verify ( x => x . OnHandle ( message , It . IsAny < Func < Task > > ( ) , It . IsAny < IProducerContext > ( ) ) , Times . Once ) ;
65+ }
66+ publishInterceptorMock . VerifyNoOtherCalls ( ) ;
67+
68+ _busMock . BusMock . Verify ( x => x . ProduceToTransport ( message , producerSettings . MessageType , context . Path , context . Headers , _busMock . Bus . MessageBusTarget , context . CancellationToken ) , Times . Once ) ;
69+ }
7070}
0 commit comments