createMock(DumpJobStatusService::class); $status->expects(self::once())->method('markRunning')->with('job-1'); $status->expects(self::never())->method('markFailed'); $logger = new RecordingLogger(); (new CreateDumpHandler($this->createMock(DumpService::class), $status, $logger))(new CreateDumpMessage('job-1')); self::assertCount(1, $logger->records); self::assertSame('info', $logger->records[0]['level']); self::assertSame('Dump job started.', $logger->records[0]['message']); self::assertSame(['jobId' => 'job-1'], $logger->records[0]['context']); } public function testLogsErrorAndMarksFailedWhenCreateThrows(): void { $exception = new \RuntimeException('boom'); $service = $this->createMock(DumpService::class); $service->method('createAsync')->willThrowException($exception); $status = $this->createMock(DumpJobStatusService::class); $status->expects(self::once())->method('markFailed')->with('job-2', 'boom'); $logger = new RecordingLogger(); (new CreateDumpHandler($service, $status, $logger))(new CreateDumpMessage('job-2')); self::assertCount(2, $logger->records); self::assertSame('error', $logger->records[1]['level']); self::assertSame('Dump job failed.', $logger->records[1]['message']); self::assertSame('job-2', $logger->records[1]['context']['jobId']); self::assertSame($exception, $logger->records[1]['context']['exception']); } }