public async Task Given_CorrelationId_NotPresent_ShouldThrow()
        {
            // Arrange
            var idProvider = Substitute.For <ICorrelationIdProvider>();
            var options    = new RequestCorrelationOptions(true, new List <ICheckUrl>());
            var next       = Substitute.For <RequestDelegate>();
            var sut        = new CorrelateRequestMiddleware(next, options, idProvider);
            var context    = GetDefaultHttpContext();

            // Act
            // Assert
            await Assert.ThrowsAsync <NotCorrelatedRequestException>(() => sut.Invoke(context));
        }
        public async Task Given_CorrelationId_IsPresent_ThenInvokeNextMiddlewareComponent(string header)
        {
            // Arrange
            var idProvider = Substitute.For <ICorrelationIdProvider>();
            var options    = new RequestCorrelationOptions(true, new List <ICheckUrl>());
            var next       = Substitute.For <RequestDelegate>();
            var sut        = new CorrelateRequestMiddleware(next, options, idProvider);
            var context    = GetDefaultHttpContext();

            context.Request.Headers.Add(header, Guid.NewGuid().ToString());

            // Act
            await sut.Invoke(context);

            // Assert
            await next.Received(1).Invoke(context);
        }
        Given_CorrelationId_NotPresent_WhenOptionsNotEnforcingMessageCorrelation_ThenRequestShouldContainGeneratedId()
        {
            // Arrange
            var idProvider = Substitute.For <ICorrelationIdProvider>();
            var options    = new RequestCorrelationOptions(false, new List <ICheckUrl>());
            var next       = Substitute.For <RequestDelegate>();
            var sut        = new CorrelateRequestMiddleware(next, options, idProvider);
            var context    = GetDefaultHttpContext();

            idProvider.GenerateId().Returns("my-id");

            // Act
            await sut.Invoke(context);

            // Assert
            await next.Received(1).Invoke(Arg.Is <HttpContext>(c => c.Request.Headers.Values.Contains("my-id")));
        }