public async Task HandleThrowsNullReferenceExceptionOnNullBody()
        {
            // arrange
            var logMessage = new THttpMessageLog();
            var handler    = new BaseHttpMessageLogBodyHandler <THttpMessageLog>();

            // act and assert
            await Assert.ThrowsAsync <NullReferenceException>(() => handler.Handle(null, logMessage).AsTask());
        }
        public async Task HandleThrowsNullReferenceExceptionOnNullLogMessage()
        {
            // arrange
            var body    = new MemoryStream();
            var handler = new BaseHttpMessageLogBodyHandler <THttpMessageLog>();

            // act and assert
            await Assert.ThrowsAsync <NullReferenceException>(() => handler.Handle(body, null).AsTask());
        }
        public async Task HandleIgnoresWhenLogMessageIgnored()
        {
            // arrange
            var body       = new MemoryStream();
            var handler    = new BaseHttpMessageLogBodyHandler <THttpMessageLog>();
            var logMessage = new THttpMessageLog();

            logMessage.IgnoreBody();

            // act
            await handler.Handle(body, logMessage);

            // assert
            Assert.True(handler.Ignored);
        }
        public async Task HandleReadBodyAsStringWhenRequestIsNotJson()
        {
            // arrange
            var handler     = new BaseHttpMessageLogBodyHandler <THttpMessageLog>();
            var logMessage  = new THttpMessageLog();
            var body        = new MemoryStream();
            var text        = "Hi";
            var textAsBytes = Encoding.UTF8.GetBytes(text);

            await body.WriteAsync(textAsBytes);

            // act
            await handler.Handle(body, logMessage);

            // assert
            Assert.Equal(text, logMessage.Body);
            Assert.IsType <string>(logMessage.Body);
        }
        public async Task HandleReadBodyAsObjectWhenRequestIsJson()
        {
            // arrange
            var handler     = new BaseHttpMessageLogBodyHandler <THttpMessageLog>();
            var logMessage  = new THttpMessageLog();
            var body        = new MemoryStream();
            var text        = "{\"name\":\"soheil\",\"orders\":[1,2]}";
            var textAsBytes = Encoding.UTF8.GetBytes(text);

            await body.WriteAsync(textAsBytes);

            logMessage.ContentType = MediaTypeNames.Application.Json;

            // act
            await handler.Handle(body, logMessage);

            // assert
            var json = Assert.IsType <JsonElement>(logMessage.Body);

            Assert.Equal(text, json.GetRawText());
        }