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 AddRockLibLoggerProviderExtensionMethod1HappyPath2()
        {
            RockLibLoggerOptions capturedOptions = null;

            var services          = new ServiceCollection();
            var mockLoggerBuilder = new Mock <ILoggingBuilder>();

            mockLoggerBuilder.Setup(m => m.Services).Returns(services);

            mockLoggerBuilder.Object.AddRockLibLoggerProvider(opt => capturedOptions = opt);

            var descriptor =
                services.Should().ContainSingle(d => d.ServiceType == typeof(IConfigureOptions <RockLibLoggerOptions>))
                .Subject;

            descriptor.Lifetime.Should().Be(ServiceLifetime.Singleton);
            descriptor.ImplementationInstance.Should().NotBeNull();
            descriptor.ImplementationFactory.Should().BeNull();
            descriptor.ImplementationType.Should().BeNull();

            var configureOptions =
                descriptor.ImplementationInstance.Should().BeAssignableTo <IConfigureOptions <RockLibLoggerOptions> >()
                .Subject;

            var options = new RockLibLoggerOptions();

            configureOptions.Configure(options);

            capturedOptions.Should().BeSameAs(options);
        }
        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 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());
        }