public async ValueTask WriteAsyncWithScheduler()
        {
            var mock = new Mock <IMessageHandler>();

            _handler = mock.Object;
            var interceptor = new BeforeHandleInterceptor();
            var scheduler   = new TestScheduler();
            var testChannel = new TaskSchedulerSubscribableChannel(scheduler);

            testChannel.AddInterceptor(interceptor);
            testChannel.Subscribe(_handler);
            await testChannel.Writer.WriteAsync(_message);

            Assert.True(scheduler.WasTaskScheduled);
            mock.Verify(h => h.HandleMessage(_message));
            Assert.Equal(1, interceptor.Counter);
            Assert.True(interceptor.WasAfterHandledInvoked);
        }
        public void PreSendInterceptorReturningModifiedMessage()
        {
            var expected    = new Mock <IMessage>().Object;
            var interceptor = new PreSendInterceptor
            {
                MessageToReturn = expected
            };

            channel.AddInterceptor(interceptor);
            channel.Send(MessageBuilder.WithPayload("test").Build());

            Assert.Single(messageHandler.Messages);
            var result = messageHandler.Messages[0];

            Assert.NotNull(result);
            Assert.Same(expected, result);
            Assert.True(interceptor.WasAfterCompletionInvoked);
        }