$values */ private function makeGateway(array $values = []): SecurityReportSettingsGateway { $metadata = $this->createMock(SettingsMetadataGateway::class); $metadata->method('getValue')->willReturnCallback(static fn (string $key): ?string => $values[$key] ?? null); $metadata->method('set')->willReturn(true); return new SecurityReportSettingsGateway($metadata); } public function testTemplateDefaultsToEmpty(): void { $gateway = $this->makeGateway(); $this->assertSame('', $gateway->getTemplateHtml()); $this->assertFalse($gateway->hasCustomTemplate()); } public function testGetTemplateHtmlReturnsTrimmedStoredValue(): void { $gateway = $this->makeGateway([ SecurityReportSettingsGateway::KEY_TEMPLATE_HTML => "
x
')); $this->assertSame('x
', $writes[SecurityReportSettingsGateway::KEY_TEMPLATE_HTML]); // Blank input clears the setting (restores the built-in default). $this->assertTrue($gateway->setTemplateHtml(' ')); $this->assertNull($writes[SecurityReportSettingsGateway::KEY_TEMPLATE_HTML]); } }