DokumentationVersionTest.php
Pfad: tests/DokumentationVersionTest.php
Ext: php
Größe: 2697 Bytes
Geändert: 2026-07-16 08:33:23+02
<?php
declare(strict_types=1);
namespace Tests;
use Demo\Application\Dokumentation\ListeDokumentationVersionen;
use Demo\Application\Dokumentation\ZeigeDokumentationVersion;
use Demo\Domain\Dokumentation\Dokumentation;
use Demo\Domain\Dokumentation\DokumentationHistorie;
use Demo\Domain\Dokumentation\Version;
use PHPUnit\Framework\TestCase;
/**
* Prueft die Versions-Anwendungsfaelle gegen einen In-Memory-Fake des Ports.
*/
final class DokumentationVersionTest extends TestCase
{
/**
* Registriert den Autoloader vor jedem Testfall.
*/
protected function setUp(): void
{
$root = dirname(__DIR__);
require_once $root . '/src/Autoloader.php';
(new \Demo\Autoloader($root . '/src'))->register();
}
/**
* Erzeugt einen Fake-Port mit fester Version und festem Snapshot.
*
* @return DokumentationHistorie In-Memory-Fake.
*/
private function historie(): DokumentationHistorie
{
return new class implements DokumentationHistorie {
public function versionen(string $slug): array
{
return $slug === 'a' ? [new Version(7, '2026-07-16 00:00:00+02', 'UPDATE')] : [];
}
public function beiVersion(string $slug, int $id): ?Dokumentation
{
return ($slug === 'a' && $id === 7)
? new Dokumentation(1, 'a', 'Titel', '# alt', ['x'], '2026-07-15', '2026-07-15')
: null;
}
};
}
/**
* Die Versionsliste wird durchgereicht.
*/
public function testListeLiefertVersionen(): void
{
$versionen = (new ListeDokumentationVersionen($this->historie()))->execute('a');
self::assertCount(1, $versionen);
self::assertSame(7, $versionen[0]->id);
self::assertSame('UPDATE', $versionen[0]->operation);
}
/**
* Ohne History bleibt die Liste leer.
*/
public function testListeLeerOhneHistory(): void
{
self::assertSame([], (new ListeDokumentationVersionen($this->historie()))->execute('b'));
}
/**
* Der Snapshot einer bekannten Version wird geliefert.
*/
public function testZeigeVersionLiefertSnapshot(): void
{
$dok = (new ZeigeDokumentationVersion($this->historie()))->execute('a', 7);
self::assertNotNull($dok);
self::assertSame('Titel', $dok->titel);
self::assertSame('# alt', $dok->body);
}
/**
* Unbekannte Version liefert null.
*/
public function testZeigeVersionNullWennUnbekannt(): void
{
self::assertNull((new ZeigeDokumentationVersion($this->historie()))->execute('a', 999));
}
}