execute([]); self::assertSame(0, $exit); $display = $tester->getDisplay(); self::assertStringContainsString('All checks passed', $display); self::assertStringNotContainsString('FAIL', $display); } public function testFailsAndShowsHintsWhenEnvIsMissing(): void { $command = new BridgeDoctorCommand( bridgeToken: '', mercureUrl: '', mercurePublisherKey: '', mercureSubscriberKey: '', ); $tester = new CommandTester($command); $exit = $tester->execute([]); self::assertSame(1, $exit); $display = $tester->getDisplay(); self::assertStringContainsString('BRIDGE_TOKEN env set', $display); self::assertStringContainsString('MERCURE_URL env set', $display); self::assertStringContainsString('Set BRIDGE_TOKEN in .env.local', $display); self::assertStringContainsString('Some checks failed', $display); } public function testConnectOptionFailsClosedAgainstAnUnreachableUrl(): void { $command = new BridgeDoctorCommand( bridgeToken: 'devtoken', mercureUrl: 'http://127.0.0.1:8765/.well-known/mercure', mercurePublisherKey: 'devkey', mercureSubscriberKey: 'devkey', ); $tester = new CommandTester($command); // Port 1 is reserved and refuses connections — the probe must fail. $exit = $tester->execute(['--connect' => true, '--url' => 'http://127.0.0.1:1/healthz']); self::assertSame(1, $exit); self::assertStringContainsString('Backend probe failed', $tester->getDisplay()); } }