public void Return_should_not_return_channel_to_the_pool_if_closed()
        {
            var channel = NSubstitute.Substitute.For <IModel>();

            channel.IsClosed.Returns(true);

            var references = new QueueReferences("lorem", "ipsum", "dolor", "amet", "sic");

            var connection = NSubstitute.Substitute.For <IBusConnection>();

            connection.CreateChannel()
            .Returns(channel);

            var sut = new PublisherChannelContextPool(connection);

            var ctx = new PublisherChannelContext(channel, references, sut);

            sut.Get(references);

            channel.Received(1)
            .ExchangeDeclare(references.ExchangeName, type: ExchangeType.Topic);
            channel.ClearReceivedCalls();

            sut.Return(ctx);

            sut.GetAvailableCount().Should().Be(0);
        }
        public void Create_should_return_valid_context()
        {
            var channel    = NSubstitute.Substitute.For <IModel>();
            var references = new QueueReferences("exchange", "queue", "routingKey", "deadletterExch", "deadLetterQ");

            var pool = NSubstitute.Substitute.For <IPublisherChannelContextPool>();

            var ctx = new PublisherChannelContext(channel, references, pool);

            pool.Get(references)
            .Returns(ctx);

            var factory = NSubstitute.Substitute.For <IQueueReferenceFactory>();

            factory.Create((IMessage)null)
            .ReturnsForAnyArgs(references);

            var sut = new PublisherChannelFactory(pool, factory);

            var message = DummyMessage.New();
            var result  = sut.Create(message);

            result.Should().NotBeNull();
            result.Channel.Should().Be(channel);
            result.QueueReferences.Should().Be(references);
        }
        public void Dispose_should_return_to_pool()
        {
            var pool       = NSubstitute.Substitute.For <IPublisherChannelContextPool>();
            var channel    = NSubstitute.Substitute.For <IModel>();
            var references = new QueueReferences("exchange", "queue", "routingKey", "deadletterExch", "deadLetterQ");

            var sut = new PublisherChannelContext(channel, references, pool);

            sut.Dispose();
            pool.Received(1)
            .Return(sut);
        }
        public void Dispose_should_dispose_channels()
        {
            var openChannel = NSubstitute.Substitute.For <IModel>();

            var references = new QueueReferences("lorem", "ipsum", "dolor", "amet", "sic");

            var connection = NSubstitute.Substitute.For <IBusConnection>();

            var sut = new PublisherChannelContextPool(connection);

            var ctx = new PublisherChannelContext(openChannel, references, sut);

            sut.Return(ctx);
            sut.Dispose();

            openChannel.Received(1)
            .Dispose();
        }