public void GetLoggerMethodSadPath()
        {
            var provider = new RockLibLoggerProvider(new MockLogger().Object);

            provider.Invoking(m => m.GetLogger(null))
            .Should().ThrowExactly <ArgumentNullException>().WithMessage("*categoryName*");
        }
        public void ConstructorHappyPath2()
        {
            Action <RockLibLoggerOptions, string> capturedCallback = null;

            var options = new RockLibLoggerOptions {
                IncludeScopes = true
            };

            var logger             = new MockLogger().Object;
            var mockOptionsMonitor = new Mock <IOptionsMonitor <RockLibLoggerOptions> >();

            mockOptionsMonitor.Setup(m => m.OnChange(It.IsAny <Action <RockLibLoggerOptions, string> >()))
            .Returns(new Mock <IDisposable>().Object)
            .Callback(new Action <Action <RockLibLoggerOptions, string> >(OnChange));
            mockOptionsMonitor.Setup(m => m.Get("")).Returns(options);

            var provider = new RockLibLoggerProvider(logger, mockOptionsMonitor.Object);

            provider.IncludeScopes.Should().BeTrue();
            provider.Logger.Should().BeSameAs(logger);
            capturedCallback.Should().NotBeNull();
            capturedCallback.Target.Should().BeSameAs(provider);
            capturedCallback.Method.Name.Should().Be("ReloadLoggerOptions");

            void OnChange(Action <RockLibLoggerOptions, string> callback)
            {
                capturedCallback = callback;
            }
        }
        public void ScopeProviderSetterSadPath()
        {
            var loggerProvider = new RockLibLoggerProvider(new MockLogger().Object);

            Action act = () => loggerProvider.ScopeProvider = null;

            act.Should().ThrowExactly <ArgumentNullException>().WithMessage("*value*");
        }
        public void ScopeProviderGetterHappyPath2()
        {
            var loggerProvider = new RockLibLoggerProvider(new MockLogger().Object);

            loggerProvider.IncludeScopes = true;

            loggerProvider.ScopeProvider.Should().BeOfType <LoggerExternalScopeProvider>();
        }
        public void ConstructorSetsLogger()
        {
            var logger = new Mock <ILogger>().Object;

            var provider = new RockLibLoggerProvider(logger);

            provider.Logger.Should().BeSameAs(logger);
        }
        public void ConstructorSetsCreateLogger()
        {
            Func <ILogger> createLogger = () => null;

            var provider = new RockLibLoggerProvider(createLogger);

            provider.CreateLogger.Should().BeSameAs(createLogger);
        }
        public void ConstructorHappyPath1()
        {
            var logger = new MockLogger().Object;

            var provider = new RockLibLoggerProvider(logger);

            provider.Logger.Should().BeSameAs(logger);
            provider.IncludeScopes.Should().BeFalse();
        }
        public void GetLoggerMethodHappyPath2()
        {
            var provider = new RockLibLoggerProvider(new MockLogger().Object);

            var logger1 = provider.GetLogger("MyCategoryName");
            var logger2 = provider.GetLogger("MyCategoryName");

            logger1.Should().BeSameAs(logger2);
        }
        public void DisposeMethodHappyPath2()
        {
            var options = new RockLibLoggerOptions();

            var logger = new MockLogger().Object;

            var provider = new RockLibLoggerProvider(logger);

            provider.Invoking(m => m.Dispose()).Should().NotThrow();
        }
        public void CreateLoggerSucceeds()
        {
            var logger = new Mock <ILogger>().Object;

            var provider = new RockLibLoggerProvider(logger);

            var rockLibLogger = (RockLibLogger)provider.CreateLogger("SomeCategory");

            rockLibLogger.Logger.Should().BeSameAs(logger);
            rockLibLogger.CategoryName.Should().Be("SomeCategory");
        }
        public void ScopeProviderGetterHappyPath1()
        {
            var loggerProvider = new RockLibLoggerProvider(new MockLogger().Object);

            var scopeProvider = new Mock <IExternalScopeProvider>().Object;

            loggerProvider.ScopeProvider = scopeProvider;

            loggerProvider.ScopeProvider.Should().BeNull();

            loggerProvider.IncludeScopes = true;

            loggerProvider.ScopeProvider.Should().BeSameAs(scopeProvider);
        }
        public void GetLoggerMethodHappyPath1()
        {
            var logger        = new MockLogger().Object;
            var scopeProvider = new Mock <IExternalScopeProvider>().Object;

            var provider = new RockLibLoggerProvider(logger);

            provider.IncludeScopes = true;
            provider.ScopeProvider = scopeProvider;

            var rockLibLogger = provider.GetLogger("MyCategoryName");

            rockLibLogger.Logger.Should().BeSameAs(logger);
            rockLibLogger.CategoryName.Should().Be("MyCategoryName");
            rockLibLogger.ScopeProvider.Should().BeSameAs(scopeProvider);
        }
        public void ScopeProviderSetterHappyPath()
        {
            var scopeProvider = new Mock <IExternalScopeProvider>().Object;

            var loggerProvider = new RockLibLoggerProvider(new MockLogger().Object);

            loggerProvider.IncludeScopes = true;

            var logger = loggerProvider.GetLogger("Category1");

            logger.ScopeProvider.Should().NotBeSameAs(scopeProvider);

            loggerProvider.ScopeProvider = scopeProvider;

            logger.ScopeProvider.Should().BeSameAs(scopeProvider);
        }
        public void DisposeMethodHappyPath1()
        {
            var options = new RockLibLoggerOptions();

            var logger                = new MockLogger().Object;
            var mockOptionsMonitor    = new Mock <IOptionsMonitor <RockLibLoggerOptions> >();
            var mockChangeReloadToken = new Mock <IDisposable>();

            mockOptionsMonitor.Setup(m => m.OnChange(It.IsAny <Action <RockLibLoggerOptions, string> >()))
            .Returns(mockChangeReloadToken.Object);
            mockOptionsMonitor.Setup(m => m.Get("")).Returns(options);

            var provider = new RockLibLoggerProvider(logger, mockOptionsMonitor.Object);

            provider.Dispose();

            mockChangeReloadToken.Verify(m => m.Dispose(), Times.Once());
        }