public void ChangeConfiguration_ValidateOnNlogConfiguration(bool compressed, bool archiveOnStart, string layout, bool debug)
        {
            // Arrange
            var filter       = Guid.NewGuid().ToString();
            var filename     = Guid.NewGuid().ToString();
            var fileCount    = 11;
            var fileCountNew = 10;
            var fileSize     = new FileSize {
                SizeType = SizeType.KibiByte, Size = 123456
            };
            var logLevel = LogLevel.Information;
            var sut      = new NLogLoggerConfiguration();

            sut.ApplyConfiguration(options => options
                                   .WithLevel(logLevel)
                                   .WithFilter(filter)
                                   .WithFile(filename)
                                   .WithMaxSize(fileSize)
                                   .WithArchiveCount(fileCount)
                                   .Compress(compressed)
                                   .ArchiveOnStart(archiveOnStart)
                                   .WithLogMessageLayout(layout)
                                   .AddDebugTarget(debug));

            // Act
            sut.ChangeConfiguration(options => options.WithArchiveCount(fileCountNew));

            // Assert
            var config = NLog.LogManager.Configuration;
            var target = config.AllTargets.OfType <NLog.Targets.FileTarget>().Single();

            target.ArchiveAboveSize.Should().Be(fileSize.SizeInBytes);
            (target.FileName as NLog.Layouts.SimpleLayout)?.Text.Should().Be(filename);
            target.ArchiveOldFileOnStartup.Should().Be(archiveOnStart);
            target.MaxArchiveFiles.Should().Be(fileCountNew);
            target.EnableArchiveFileCompression.Should().Be(compressed);
            var rule = config.LoggingRules.First();

            rule.Levels.Should().Contain(logLevel.ToNLog());
            // Debug
            if (debug)
            {
                config.AllTargets.OfType <NLog.Targets.DebuggerTarget>().Should().HaveCount(1);
            }
            else
            {
                config.AllTargets.OfType <NLog.Targets.DebuggerTarget>().Should().BeEmpty();
            }
            //Layout
            if (sut.CurrentOptions.LogMessageLayout == null)
            {
                target.Layout.Render(new LogEventInfo(logLevel.ToNLog(), "MyLogger", "Hallo Welt")).Should().Contain("INFO|MyLogger||Hallo Welt|");
            }
            else
            {
                target.Layout.Render(new LogEventInfo(logLevel.ToNLog(), "MyLogger", "Hallo Welt")).Should().Be("MyLogger");
            }
        }
        public void ChangeConfiguration_WithNoOptionFunction_Throws()
        {
            // Arrange
            var sut       = new NLogLoggerConfiguration();
            var sutAction = new Action(() => sut.ChangeConfiguration(null));

            // Act / Assert
            sutAction.Should().ThrowExactly <ArgumentNullException>()
            .Which.ParamName.Should().Be("options");
        }
        public void ApplyConfiguration_WithEmptyOptions_Throws()
        {
            var sut       = new NLogLoggerConfiguration();
            var sutAction = new Action(() => sut.ApplyConfiguration(new LoggerOptions()));

            // Act / Assert
            var exception = sutAction.Should().ThrowExactly <ArgumentException>();

            exception.Which.ParamName.Should().Be("options");
            exception.Which.Message.Should().Contain("file size");
        }
        public void ApplyConfiguration_WitFileSizeBelow1000_Throws()
        {
            var sut       = new NLogLoggerConfiguration();
            var sutAction = new Action(() => sut.ApplyConfiguration(new LoggerOptions()
                                                                    .WithMaxSize(new FileSize {
                Size = 999
            })));

            // Act / Assert
            var exception = sutAction.Should().ThrowExactly <ArgumentException>();

            exception.Which.ParamName.Should().Be("options");
            exception.Which.Message.Should().Contain("file size").And.Contain("1000");
        }
        public void Constructor_CurrentOptionsWithDefaultValues()
        {
            // Act
            var sut = new NLogLoggerConfiguration().CurrentOptions;

            // Assert
            sut.FileName.Should().BeNull();
            sut.IsCompressed.Should().BeFalse();
            sut.Level.Should().Be(LogLevel.Off);
            sut.ArchiveCount.Should().Be(5);
            sut.SizePerFile.Size.Should().Be(0);
            sut.SizePerFile.SizeInBytes.Should().Be(0);
            sut.SizePerFile.SizeType.Should().Be(SizeType.Byte);
            sut.IsArchiveOnStart.Should().BeFalse();
            sut.Filter.Should().Be("*");
        }