1+ using System ;
2+ using System . Linq ;
3+ using AWS . Lambda . Powertools . Logging . Internal ;
4+ using Microsoft . Extensions . DependencyInjection ;
5+ using Microsoft . Extensions . Logging ;
6+ using Xunit ;
7+
8+ namespace AWS . Lambda . Powertools . Logging . Tests ;
9+
10+ public class PowertoolsLoggerExtensionsTests
11+ {
12+ [ Fact ]
13+ public void AddPowertoolsLogger_WithClearExistingProviders_False_KeepsExistingProviders ( )
14+ {
15+ // Arrange
16+ var serviceCollection = new ServiceCollection ( ) ;
17+ serviceCollection . AddLogging ( builder =>
18+ {
19+ // Add a mock existing provider first
20+ builder . Services . AddSingleton < ILoggerProvider , MockLoggerProvider > ( ) ;
21+
22+ // Act
23+ builder . AddPowertoolsLogger ( clearExistingProviders : false ) ;
24+ } ) ;
25+
26+ var serviceProvider = serviceCollection . BuildServiceProvider ( ) ;
27+ var loggerProviders = serviceProvider . GetServices < ILoggerProvider > ( ) ;
28+
29+ // Assert
30+ var collection = loggerProviders as ILoggerProvider [ ] ?? loggerProviders . ToArray ( ) ;
31+ Assert . Contains ( collection , p => p is MockLoggerProvider ) ;
32+ Assert . Contains ( collection , p => p is PowertoolsLoggerProvider ) ;
33+ Assert . True ( collection . Count ( ) >= 2 ) ; // Should have both providers
34+ }
35+
36+ [ Fact ]
37+ public void AddPowertoolsLogger_WithClearExistingProviders_True_RemovesExistingProviders ( )
38+ {
39+ // Arrange
40+ var serviceCollection = new ServiceCollection ( ) ;
41+ serviceCollection . AddLogging ( builder =>
42+ {
43+ // Add a mock existing provider first
44+ builder . Services . AddSingleton < ILoggerProvider , MockLoggerProvider > ( ) ;
45+
46+ // Act
47+ builder . AddPowertoolsLogger ( clearExistingProviders : true ) ;
48+ } ) ;
49+
50+ var serviceProvider = serviceCollection . BuildServiceProvider ( ) ;
51+ var loggerProviders = serviceProvider . GetServices < ILoggerProvider > ( ) ;
52+
53+ // Assert
54+ var collection = loggerProviders as ILoggerProvider [ ] ?? loggerProviders . ToArray ( ) ;
55+ Assert . DoesNotContain ( collection , p => p is MockLoggerProvider ) ;
56+ Assert . Contains ( collection , p => p is PowertoolsLoggerProvider ) ;
57+ Assert . Single ( collection ) ; // Should only have Powertools provider
58+ }
59+
60+ private class MockLoggerProvider : ILoggerProvider
61+ {
62+ public ILogger CreateLogger ( string categoryName ) => new MockLogger ( ) ;
63+ public void Dispose ( ) { }
64+ }
65+
66+ private class MockLogger : ILogger
67+ {
68+ public IDisposable BeginScope < TState > ( TState state ) => null ;
69+ public bool IsEnabled ( LogLevel logLevel ) => true ;
70+ public void Log < TState > ( LogLevel logLevel , EventId eventId , TState state , Exception exception , Func < TState , Exception , string > formatter ) { }
71+ }
72+ }
0 commit comments