public void ConstructorAllowsWarningsByDefault()
        {
            var expected = TraceLevel.Warning;
            var writer   = new SerilogWebJobTraceWriter(Mock.Of <ILogger>());

            writer.Level.Should().Be(expected, "because the log level should have been set to allow Warnings");
        }
        public void ConstructorSetsTheRequestedLogLevel()
        {
            var expected = TraceLevel.Off;
            var writer   = new SerilogWebJobTraceWriter(Mock.Of <ILogger>(), expected);

            writer.Level.Should().Be(expected, "because the log level should have been set");
        }
        public void TraceLogsInformationAsInformation()
        {
            var loggerMock = new Mock <ILogger>();
            var writer     = new SerilogWebJobTraceWriter(loggerMock.Object);
            var trace      = new TraceEvent(TraceLevel.Info, "Hello");

            writer.Trace(trace);
            loggerMock.Verify(logger => logger.Information(It.IsAny <string>()), Times.Once, "because the correct log method should be called for the level");
        }
        public void TraceWithExceptionLogsAsAnError()
        {
            var loggerMock = new Mock <ILogger>();
            var writer     = new SerilogWebJobTraceWriter(loggerMock.Object);
            var expected   = new Exception();
            var trace      = new TraceEvent(TraceLevel.Verbose, "Hello");

            trace.Exception = expected;

            writer.Trace(trace);
            loggerMock.Verify(logger => logger.Error(It.Is <Exception>(ex => ex == expected), It.IsAny <string>(), It.IsAny <string>()), Times.Once, "because an exception should be error logged, regardless of level");
        }