public void AddSejil_registeres_required_services()
        {
            // Arrange
            var webhostBuilder = new WebHostBuilder()
                                 .Configure(app => { })
                                 .ConfigureServices(services =>
                                                    services.AddSingleton <IServer>(Mock.Of <IServer>()));

            // Act
            webhostBuilder.AddSejil(new SejilSettings("/sejil", SejilTools.MapSerilogLogLevel(LogLevel.Debug)));

            // Assert
            var webhost = webhostBuilder.Build();

            using var scope = webhost.Services.CreateScope();
            var settings    = scope.ServiceProvider.GetService(typeof(ISejilSettings));
            var repository  = scope.ServiceProvider.GetService(typeof(ISejilRepository));
            var sqlProvider = scope.ServiceProvider.GetService(typeof(ISejilSqlProvider));
            var controller  = scope.ServiceProvider.GetService(typeof(ISejilController));

            Assert.NotNull(settings);
            Assert.NotNull(repository);
            Assert.NotNull(sqlProvider);
            Assert.NotNull(controller);
        }
        public void AddSejil_sets_intial_settings(LogLevel logLevel, LogEventLevel expectedMappedLogLevel)
        {
            // Arrange
            var url            = "/sejil";
            var webhostBuilder = new WebHostBuilder()
                                 .Configure(app => { })
                                 .ConfigureServices(services => services.AddSingleton <IServer>(Mock.Of <IServer>()));

            // Act
            webhostBuilder.AddSejil(new SejilSettings(url, SejilTools.MapSerilogLogLevel(logLevel)));

            // Assert
            var settings = webhostBuilder.Build().Services.GetRequiredService <ISejilSettings>();

            Assert.Equal(url, settings.Url);
            Assert.Equal(expectedMappedLogLevel, settings.LoggingLevelSwitch.MinimumLevel);
        }
        public void AddSejil_throws_when_none_is_passed_for_log_level()
        {
            // Arrange
            var webhostBuilder = new WebHostBuilder()
                                 .Configure(app => { })
                                 .ConfigureServices(services => services.AddSingleton <IServer>(Mock.Of <IServer>()));

            // Act & assert
            var ex = Assert.Throws <InvalidOperationException>(() => webhostBuilder.AddSejil(new SejilSettings("/sejil", SejilTools.MapSerilogLogLevel(LogLevel.None))));

            Assert.Equal("Minimum log level cannot be set to None.", ex.Message);
        }