← Code-Übersicht

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'));
    }
}