public async Task GivenMessage_WhenPublish_ShouldPublish()
        {
            const string body              = "test_message";
            const string correlationId     = "correlationId";
            var          publisherMock     = new Mock <IPublisher>();
            var          serializerMock    = new Mock <IPublisherSerializer>();
            var          routingMock       = new Mock <IRouting>();
            var          cancellationToken = new CancellationToken();

            publisherMock
            .Setup(x => x.PublishAsync(It.IsAny <PublisherMessage>(), cancellationToken))
            .Verifiable();

            var message = new PublisherMessage(
                publisherMock.Object,
                body,
                serializerMock.Object,
                routingMock.Object,
                correlationId,
                cancellationToken);

            await message.PublishAsync(cancellationToken);

            message.Should().NotBeNull();
            message.GetHeaders().Should().ContainKey("PublishedAt");
            message.GetHeaders()["PublishedAt"].ToString().Should().MatchRegex(@"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}");
            publisherMock.VerifyAll();
        }
        public void GivenMessage_WhenInstantiate_ShouldAddDefaultHeader()
        {
            const string body           = "";
            const string correlationId  = "correlationId";
            const string exchange       = "exchange";
            const string routingKey     = "routingKey";
            var          publisherMock  = new Mock <IPublisher>();
            var          serializerMock = new Mock <IPublisherSerializer>();
            var          routingMock    = new Mock <IRouting>();

            routingMock.SetupGet(x => x.ExchangeName)
            .Returns(exchange)
            .Verifiable();
            routingMock.SetupGet(x => x.RoutingKey)
            .Returns(routingKey)
            .Verifiable();
            var cancellationToken = new CancellationToken();

            var message = new PublisherMessage(publisherMock.Object, body, serializerMock.Object, routingMock.Object,
                                               correlationId,
                                               cancellationToken);

            var headers = message.GetHeaders();

            headers.Should().NotBeNull();
            headers.Should().Contain(nameof(IRouting.ExchangeName), exchange);
            headers.Should().Contain(nameof(IRouting.RoutingKey), routingKey);
            headers.Should().Contain("SerializerType", serializerMock.Object.GetType().FullName);
            headers.Should().ContainKey(nameof(message.CreatedAt));
        }
        public void GivenMessage_ShouldAddHeader()
        {
            const string body              = "";
            const string correlationId     = "correlationId";
            var          publisherMock     = new Mock <IPublisher>();
            var          serializerMock    = new Mock <IPublisherSerializer>();
            var          routingMock       = new Mock <IRouting>();
            var          cancellationToken = new CancellationToken();

            var message = new PublisherMessage(publisherMock.Object, body, serializerMock.Object, routingMock.Object,
                                               correlationId,
                                               cancellationToken);

            message.AddHeader("NewHeader", "NewHeaderValue");

            var headers = message.GetHeaders();

            headers.Should().NotBeNull();
            headers.Should().Contain("NewHeader", "NewHeaderValue");
        }