Skip to content

Commit 85dbce2

Browse files
committed
Refactor and expand LoggerServiceProviderTest for 100% coverage
- Consolidate existing tests into a comprehensive testRegisterAllLoggers - Add new test cases: - testRegisterWithoutOptionalLoggers - testRegisterWithoutDefaultChannel - testRegisterWithEmptyChannels - Implement callback-based assertions for addLogger calls - Improve test coverage for various configuration scenarios
1 parent 95d576a commit 85dbce2

File tree

1 file changed

+206
-39
lines changed

1 file changed

+206
-39
lines changed

tests/Service/LoggerServiceProviderTest.php

Lines changed: 206 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -14,66 +14,233 @@
1414

1515
class LoggerServiceProviderTest extends TestCase
1616
{
17+
private LoggerConfiguration|MockObject $config;
18+
private LoggerFactory|MockObject $loggerFactory;
19+
private LoggerRegistry|MockObject $loggerRegistry;
1720
private LoggerServiceProvider|MockObject $serviceProvider;
18-
private LoggerConfiguration|MockObject $mockConfig;
19-
private LoggerFactory|MockObject $mockFactory;
20-
private LoggerRegistry|MockObject $mockRegistry;
2121

2222
protected function setUp(): void
2323
{
24-
$this->mockConfig = $this->createMock(LoggerConfiguration::class);
25-
$this->mockFactory = $this->createMock(LoggerFactory::class);
26-
$this->mockRegistry = $this->createMock(LoggerRegistry::class);
24+
$this->config = $this->createMock(LoggerConfiguration::class);
25+
$this->loggerFactory = $this->createMock(LoggerFactory::class);
26+
$this->loggerRegistry = $this->createMock(LoggerRegistry::class);
2727

2828
$this->serviceProvider = new LoggerServiceProvider(
29-
$this->mockConfig,
30-
$this->mockFactory,
31-
$this->mockRegistry
29+
$this->config,
30+
$this->loggerFactory,
31+
$this->loggerRegistry
3232
);
3333
}
3434

35-
public function testRegister(): void
35+
public function testRegisterAllLoggers(): void
3636
{
37-
$this->mockConfig->method('get')
37+
// Arrange
38+
$configMap = [
39+
['default', null, 'default'],
40+
['channels', [], [
41+
'default' => ['path' => '/var/log/default.log', 'level' => 'debug'],
42+
'error' => ['path' => '/var/log/error.log', 'level' => 'error']
43+
]],
44+
['emergency_logger', [], ['path' => '/var/log/emergency.log', 'level' => 'emergency']],
45+
['query_logger.enabled', false, true],
46+
['query_logger', [], ['path' => '/var/log/query.log', 'level' => 'debug']],
47+
['performance_logger.enabled', false, true],
48+
['performance_logger', [], ['path' => '/var/log/performance.log', 'level' => 'info']],
49+
['error_logger.enabled', true, true],
50+
['error_logger', [], ['path' => '/var/log/error.log', 'level' => 'error']],
51+
['async.enabled', true, true],
52+
['async.batch_size', 10, 10],
53+
];
54+
$this->config->method('get')->willReturnMap($configMap);
55+
56+
$defaultLogger = $this->createMock(Logger::class);
57+
$errorLogger = $this->createMock(Logger::class);
58+
$emergencyLogger = $this->createMock(Logger::class);
59+
$queryLogger = $this->createMock(Logger::class);
60+
$performanceLogger = $this->createMock(Logger::class);
61+
$asyncLogger = $this->createMock(Logger::class);
62+
63+
$this->loggerFactory->method('createLogger')
64+
->willReturnMap([
65+
['default', ['path' => '/var/log/default.log', 'level' => 'debug'], $defaultLogger],
66+
['error', ['path' => '/var/log/error.log', 'level' => 'error'], $errorLogger],
67+
['emergency', ['path' => '/var/log/emergency.log', 'level' => 'emergency'], $emergencyLogger],
68+
]);
69+
70+
$this->loggerFactory->method('createQueryLogger')
71+
->willReturn($queryLogger);
72+
73+
$this->loggerFactory->method('createPerformanceLogger')
74+
->willReturn($performanceLogger);
75+
76+
$this->loggerFactory->method('createErrorLogger')
77+
->willReturn($errorLogger);
78+
79+
$this->loggerFactory->method('createAsyncLogger')
80+
->willReturn($asyncLogger);
81+
82+
$expectedAddLoggerCalls = [
83+
['default', $defaultLogger],
84+
['default', $defaultLogger],
85+
['error', $errorLogger],
86+
['emergency', $emergencyLogger],
87+
['query', $queryLogger],
88+
['performance', $performanceLogger],
89+
['error', $errorLogger],
90+
['async', $asyncLogger]
91+
];
92+
93+
$this->loggerRegistry->expects($this->exactly(count($expectedAddLoggerCalls)))
94+
->method('addLogger')
95+
->willReturnCallback(function ($channel, $logger) use (&$expectedAddLoggerCalls) {
96+
$expectedCall = array_shift($expectedAddLoggerCalls);
97+
$this->assertEquals($expectedCall[0], $channel);
98+
$this->assertSame($expectedCall[1], $logger);
99+
});
100+
101+
$this->loggerRegistry->method('getLogger')
102+
->with('default')
103+
->willReturn($defaultLogger);
104+
105+
// Act
106+
$this->serviceProvider->register();
107+
108+
// Assert
109+
$this->assertEmpty($expectedAddLoggerCalls, 'Not all expected addLogger calls were made');
110+
}
111+
112+
public function testRegisterWithoutOptionalLoggers(): void
113+
{
114+
// Arrange
115+
$configMap = [
116+
['default', null, 'default'],
117+
['channels', [], [
118+
'default' => ['path' => '/var/log/default.log', 'level' => 'debug'],
119+
'error' => ['path' => '/var/log/error.log', 'level' => 'error']
120+
]],
121+
['emergency_logger', [], ['path' => '/var/log/emergency.log', 'level' => 'emergency']],
122+
['query_logger.enabled', false, false],
123+
['performance_logger.enabled', false, false],
124+
['error_logger.enabled', true, false],
125+
['async.enabled', true, false],
126+
];
127+
$this->config->method('get')->willReturnMap($configMap);
128+
129+
$defaultLogger = $this->createMock(Logger::class);
130+
$errorLogger = $this->createMock(Logger::class);
131+
$emergencyLogger = $this->createMock(Logger::class);
132+
133+
$this->loggerFactory->method('createLogger')
134+
->willReturnMap([
135+
['default', ['path' => '/var/log/default.log', 'level' => 'debug'], $defaultLogger],
136+
['error', ['path' => '/var/log/error.log', 'level' => 'error'], $errorLogger],
137+
['emergency', ['path' => '/var/log/emergency.log', 'level' => 'emergency'], $emergencyLogger],
138+
]);
139+
140+
$expectedAddLoggerCalls = [
141+
['default', $defaultLogger],
142+
['default', $defaultLogger],
143+
['error', $errorLogger],
144+
['emergency', $emergencyLogger],
145+
];
146+
147+
$this->loggerRegistry->expects($this->exactly(count($expectedAddLoggerCalls)))
148+
->method('addLogger')
149+
->willReturnCallback(function ($channel, $logger) use (&$expectedAddLoggerCalls) {
150+
$expectedCall = array_shift($expectedAddLoggerCalls);
151+
$this->assertEquals($expectedCall[0], $channel);
152+
$this->assertSame($expectedCall[1], $logger);
153+
});
154+
155+
// Act
156+
$this->serviceProvider->register();
157+
158+
// Assert
159+
$this->assertEmpty($expectedAddLoggerCalls, 'Not all expected addLogger calls were made');
160+
}
161+
162+
public function testRegisterWithoutDefaultChannel(): void
163+
{
164+
// Arrange
165+
$configMap = [
166+
['default', null, null],
167+
['channels', [], [
168+
'custom' => ['path' => '/var/log/custom.log', 'level' => 'debug'],
169+
]],
170+
['emergency_logger', [], ['path' => '/var/log/emergency.log', 'level' => 'emergency']],
171+
['query_logger.enabled', false, false],
172+
['performance_logger.enabled', false, false],
173+
['error_logger.enabled', true, false],
174+
['async.enabled', true, false],
175+
];
176+
$this->config->method('get')->willReturnMap($configMap);
177+
178+
$customLogger = $this->createMock(Logger::class);
179+
$emergencyLogger = $this->createMock(Logger::class);
180+
181+
$this->loggerFactory->method('createLogger')
38182
->willReturnMap([
39-
['default', null, 'file'],
40-
['channels', [], ['file' => ['path' => '/var/log/app.log']]],
41-
['emergency_logger', [], ['path' => '/var/log/emergency.log']],
42-
['query_logger.enabled', false, true],
43-
['query_logger', [], ['path' => '/var/log/query.log']],
44-
['performance_logger.enabled', false, false],
45-
['error_logger.enabled', true, true],
46-
['error_logger', [], ['path' => '/var/log/error.log']],
47-
['async.enabled', false, true],
48-
['async.batch_size', 10, 20],
183+
['custom', ['path' => '/var/log/custom.log', 'level' => 'debug'], $customLogger],
184+
['emergency', ['path' => '/var/log/emergency.log', 'level' => 'emergency'], $emergencyLogger],
49185
]);
50186

51-
$mockLogger = $this->createMock(Logger::class);
187+
$expectedAddLoggerCalls = [
188+
['custom', $customLogger],
189+
['emergency', $emergencyLogger],
190+
];
191+
192+
$this->loggerRegistry->expects($this->exactly(count($expectedAddLoggerCalls)))
193+
->method('addLogger')
194+
->willReturnCallback(function ($channel, $logger) use (&$expectedAddLoggerCalls) {
195+
$expectedCall = array_shift($expectedAddLoggerCalls);
196+
$this->assertEquals($expectedCall[0], $channel);
197+
$this->assertSame($expectedCall[1], $logger);
198+
});
199+
200+
// Act
201+
$this->serviceProvider->register();
202+
203+
// Assert
204+
$this->assertEmpty($expectedAddLoggerCalls, 'Not all expected addLogger calls were made');
205+
}
206+
207+
public function testRegisterWithEmptyChannels(): void
208+
{
209+
// Arrange
210+
$configMap = [
211+
['default', null, null],
212+
['channels', [], []],
213+
['emergency_logger', [], ['path' => '/var/log/emergency.log', 'level' => 'emergency']],
214+
['query_logger.enabled', false, false],
215+
['performance_logger.enabled', false, false],
216+
['error_logger.enabled', true, false],
217+
['async.enabled', true, false],
218+
];
219+
$this->config->method('get')->willReturnMap($configMap);
52220

53-
$this->mockFactory->method('createLogger')->willReturn($mockLogger);
54-
$this->mockFactory->method('createQueryLogger')->willReturn($mockLogger);
55-
$this->mockFactory->method('createErrorLogger')->willReturn($mockLogger);
56-
$this->mockFactory->method('createAsyncLogger')->willReturn($mockLogger);
221+
$emergencyLogger = $this->createMock(Logger::class);
57222

58-
$this->mockRegistry->method('getLogger')->willReturn($mockLogger);
223+
$this->loggerFactory->method('createLogger')
224+
->willReturnMap([
225+
['emergency', ['path' => '/var/log/emergency.log', 'level' => 'emergency'], $emergencyLogger],
226+
]);
59227

60-
$expectedCalls = [
61-
['file', $mockLogger],
62-
['default', $mockLogger],
63-
['emergency', $mockLogger],
64-
['query', $mockLogger],
65-
['error', $mockLogger],
66-
['async', $mockLogger]
228+
$expectedAddLoggerCalls = [
229+
['emergency', $emergencyLogger],
67230
];
68231

69-
$actualCalls = [];
70-
$this->mockRegistry->method('addLogger')
71-
->willReturnCallback(function ($name, $logger) use (&$actualCalls) {
72-
$actualCalls[] = [$name, $logger];
232+
$this->loggerRegistry->expects($this->exactly(count($expectedAddLoggerCalls)))
233+
->method('addLogger')
234+
->willReturnCallback(function ($channel, $logger) use (&$expectedAddLoggerCalls) {
235+
$expectedCall = array_shift($expectedAddLoggerCalls);
236+
$this->assertEquals($expectedCall[0], $channel);
237+
$this->assertSame($expectedCall[1], $logger);
73238
});
74239

240+
// Act
75241
$this->serviceProvider->register();
76242

77-
$this->assertEquals($expectedCalls, $actualCalls);
243+
// Assert
244+
$this->assertEmpty($expectedAddLoggerCalls, 'Not all expected addLogger calls were made');
78245
}
79246
}

0 commit comments

Comments
 (0)