WetellUrlPolicyTest.php
Pfad: tests/Rechnung/WetellUrlPolicyTest.php
Ext: php
Größe: 1292 Bytes
Geändert: 2026-07-16 17:10:12+02
<?php
declare(strict_types=1);
namespace Tests\Rechnung;
use Demo\Infrastructure\Rechnung\WetellUrlPolicy;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
use RuntimeException;
/** Prueft die WEtell-Egress-Positivliste. */
final class WetellUrlPolicyTest extends TestCase
{
/** @return iterable<string,array{string}> Verbotene Ziele. */
public static function blocked(): iterable
{
foreach (['http://mein.wetell.de/x', 'https://127.0.0.1/x', 'file:///etc/passwd', 'https://evil.example/x', 'https://user:pass@mein.wetell.de/x'] as $url) yield $url => [$url];
}
/** Fremde Schemas, Hosts und Benutzerinfo werden blockiert. */
#[DataProvider('blocked')]
public function testBlockiertFremdeZiele(string $url): void
{
$this->expectException(RuntimeException::class);
(new WetellUrlPolicy('https://mein.wetell.de/deine-rechnungen'))->assert($url);
}
/** Relative WEtell-Links werden korrekt aufgeloest. */
public function testLoestRelativeUrlAuf(): void
{
$policy = new WetellUrlPolicy('https://mein.wetell.de/deine-rechnungen');
self::assertSame('https://mein.wetell.de/rechnung.pdf', $policy->resolve('/rechnung.pdf', 'https://mein.wetell.de/deine-rechnungen'));
}
}