CodeTest.php
Pfad: tests/CodeTest.php
Ext: php
Größe: 3300 Bytes
Geändert: 2026-07-16 10:05:56+02
<?php
declare(strict_types=1);
namespace Tests;
use Demo\Application\Code\ListeCodeDateien;
use Demo\Application\Code\ListeCodeDateiVersionen;
use Demo\Application\Code\ZeigeCodeDatei;
use Demo\Application\Code\ZeigeCodeDateiVersion;
use Demo\Domain\Code\CodeDatei;
use Demo\Domain\Code\CodeDateiHistorie;
use Demo\Domain\Code\CodeDateiRepository;
use Demo\Domain\Code\CodeVersion;
use PHPUnit\Framework\TestCase;
/**
* Testet die Code-Usecases gegen In-Memory-Fakes.
*/
final class CodeTest extends TestCase
{
private array $dateien;
private array $versionen;
protected function setUp(): void
{
$root = dirname(__DIR__);
require_once $root . '/src/Autoloader.php';
(new \Demo\Autoloader($root . '/src'))->register();
$code = new CodeDatei(
5,
'src/CodeTest.php',
'CodeTest.php',
'php',
'echo 1;',
'hash',
7,
'2026-07-16T12:00:00Z',
'2026-07-15T12:00:00Z'
);
$this->dateien = [$code];
$this->versionen = [new CodeVersion(4, '2026-07-16T11:00:00Z', 'UPDATE')];
}
private function dateiRepository(): CodeDateiRepository
{
return new class($this->dateien) implements CodeDateiRepository {
private array $dateien;
public function __construct(array $dateien)
{
$this->dateien = $dateien;
}
public function liste(): array { return $this->dateien; }
public function byId(int $id): ?CodeDatei
{
foreach ($this->dateien as $datei) {
if ($datei->id === $id) {
return $datei;
}
}
return null;
}
public function synchronisiere(array $dateien): void { }
};
}
private function historie(): CodeDateiHistorie
{
return new class($this->versionen, $this->dateien) implements CodeDateiHistorie {
private array $versionen;
private array $dateien;
public function __construct(array $versionen, array $dateien)
{
$this->versionen = $versionen;
$this->dateien = $dateien;
}
public function versionen(int $codeDateiId): array { return $this->versionen; }
public function beiVersion(int $codeDateiId, int $id): ?CodeDatei
{
return $codeDateiId === 5 && $id === 4 ? $this->dateien[0] : null;
}
};
}
public function testListeLiefertDateien(): void
{
self::assertSame($this->dateien, (new ListeCodeDateien($this->dateiRepository()))->execute());
}
public function testZeigeNachIdLiefertDatei(): void
{
self::assertSame('CodeTest.php', (new ZeigeCodeDatei($this->dateiRepository()))->execute(5)->dateiName);
}
public function testVersionenGreiftDurch(): void
{
self::assertSame($this->versionen, (new ListeCodeDateiVersionen($this->historie()))->execute(5));
}
public function testZeigeVersionFuerSnapshot(): void
{
self::assertNotNull((new ZeigeCodeDateiVersion($this->historie()))->execute(5, 4));
}
}