public async Task Require_Single_Handler_In_InPipe()
        {
            const string url = "https://v-mock.org/v2/smoke-testing-company/ver";

#if NETCOREAPP
            var innerHandler1 = new ReturnResponseWithPresetStatusCode(async ctx => await Task.CompletedTask, 200);
            var innerHandler2 = new LogRequestAndResponse(innerHandler1.InvokeAsync);
            var outerHandler  = new LogRequestAndResponse(innerHandler2.InvokeAsync);
            var context       = new DefaultHttpContext();
            SetRequest(context, url);
#else
            var outerHandler = new LogRequestAndResponse()
            {
                InnerHandler = new LogRequestAndResponse()
            };
            var invoker = new HttpMessageInvoker(outerHandler);
            var request = new HttpRequestMessage(HttpMethod.Get, url);
#endif


#if NETCOREAPP
            await outerHandler.InvokeAsync(context);
#else
            await invoker.SendAsync(request, CancellationToken.None);
#endif
        }
        public async Task StatusCode400LogWarning()
        {
            var highestSeverityLevel = LogSeverityLevel.None;
            var mockLogger           = new Mock <ISyncLogger>();

            mockLogger.Setup(logger =>
                             logger.LogSync(
                                 It.IsAny <LogRecord>()))
            .Callback((LogRecord lr) =>
            {
                if (lr.SeverityLevel > highestSeverityLevel)
                {
                    highestSeverityLevel = lr.SeverityLevel;
                }
            })
            .Verifiable();
            FulcrumApplication.Setup.SynchronousFastLogger = mockLogger.Object;
            const string url          = "https://v-mock.org/v2/smoke-testing-company/ver";
            var          innerHandler = new ReturnResponseWithPresetStatusCode(async ctx => await Task.CompletedTask, 400);
            var          options      = new NexusLinkMiddlewareOptions();

            options.Features.LogRequestAndResponse.Enabled = true;
            var outerHandler = new Pipe.NexusLinkMiddleware(innerHandler.InvokeAsync, options);
            var context      = new DefaultHttpContext();

            context.SetRequest(url);

            await outerHandler.InvokeAsync(context);

            Assert.AreEqual(LogSeverityLevel.Warning, highestSeverityLevel);
        }
        public async Task StatusCode500LogError()
        {
            var highestSeverityLevel = LogSeverityLevel.None;
            var mockLogger           = new Mock <ISyncLogger>();

            mockLogger.Setup(logger =>
                             logger.LogSync(
                                 It.IsAny <LogRecord>()))
            .Callback((LogRecord lr) =>
            {
                if (lr.SeverityLevel > highestSeverityLevel)
                {
                    highestSeverityLevel = lr.SeverityLevel;
                }
            })
            .Verifiable();
            FulcrumApplication.Setup.SynchronousFastLogger = mockLogger.Object;
            const string url = "https://v-mock.org/v2/smoke-testing-company/ver";

#if NETCOREAPP
            var innerHandler = new ReturnResponseWithPresetStatusCode(async ctx => await Task.CompletedTask, 500);
            var outerHandler =
                new LogRequestAndResponse(innerHandler.InvokeAsync);
            var context = new DefaultHttpContext();
            SetRequest(context, url);
#else
            var outerHandler = new LogRequestAndResponse()
            {
                InnerHandler = new ReturnResponseWithPresetStatusCode(HttpStatusCode.InternalServerError)
                {
                    InnerHandler = new Mock <HttpMessageHandler>().Object
                }
            };
            var invoker = new HttpMessageInvoker(outerHandler);
            var request = new HttpRequestMessage(HttpMethod.Get, url);
#endif


#if NETCOREAPP
            await outerHandler.InvokeAsync(context);
#else
            await invoker.SendAsync(request, CancellationToken.None);
#endif

            Assert.AreEqual(LogSeverityLevel.Error, highestSeverityLevel);
        }