Files
KantSites/tests/browser-fixture.php
T
kantarciandClaude Opus 5 82b07820bc Kant CMS: Grundgerüst, visueller Editor, Mediathek
Symfony 7.4 / Twig / Doctrine DBAL auf herkömmlichem PHP-Webhosting.
Versionierte Blockdokumente (v1-v3) mit unveränderlichen Revisionen,
getrennten Entwürfen/Veröffentlichungen und optimistischer
Konflikterkennung. Visueller Editor mit Strukturbaum, Live-Vorschau,
responsiven Gerätewerten, Abschnittsvorlagen, Bildmediathek,
Galerien und Effekten. Öffentliche Ausgabe ohne Editor-JavaScript.

Geprüft: 41 PHP-Tests / 155 Assertions, 10 JavaScript-Modelltests.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 10:19:05 +02:00

56 lines
2.6 KiB
PHP

<?php
// Isolated test data only. Never touches the configured application database.
require dirname(__DIR__).'/vendor/autoload.php';
use App\Content\DemoContent;
use App\Content\DocumentValidator;
use App\Content\PageRepository;
use App\Infrastructure\ConnectionFactory;
use Doctrine\DBAL\Schema\Schema;
use DoctrineMigrations\Version20260912000100;
use DoctrineMigrations\Version20260912000200;
use DoctrineMigrations\Version20260912000300;
use Psr\Log\NullLogger;
$directory = dirname(__DIR__).'/var/browser-tests';
if (!is_dir($directory)) {
mkdir($directory, 0775, true);
}
$path = $directory.'/'.bin2hex(random_bytes(12)).'.db';
$url = 'sqlite:///'.str_replace('\\', '/', $path);
$db = ConnectionFactory::create($url);
$schema = new Schema();
(new Version20260912000100($db, new NullLogger()))->up($schema);
(new Version20260912000200($db, new NullLogger()))->up($schema);
(new Version20260912000300($db, new NullLogger()))->up($schema);
foreach ($schema->toSql($db->getDatabasePlatform()) as $sql) {
$db->executeStatement($sql);
}
$db->insert('website', ['id' => 'default', 'name' => 'Browser test', 'default_locale' => 'de', 'theme' => '{}']);
$pages = new PageRepository($db, new DocumentValidator());
foreach (DemoContent::pages() as $slug => $document) {
$id = 'test-'.$slug;
$db->insert('page', ['id' => $id, 'slug' => $slug, 'locale' => 'de', 'website_id' => 'default', 'version' => 0]);
$revision = $pages->saveDraft($id, $document, 0);
$pages->publish($id, $revision, 1);
}
$password = bin2hex(random_bytes(20));
$username = 'browser-'.bin2hex(random_bytes(6));
$db->insert('cms_user', ['id' => $username, 'username' => $username, 'password_hash' => password_hash($password, PASSWORD_BCRYPT, ['cost' => 4]), 'roles' => '["ROLE_ADMIN"]']);
$images = [];
foreach (['Berge', 'Küste'] as $index => $title) {
$image = imagecreatetruecolor(1800, 1200);
for ($y = 0; $y < 1200; ++$y) {
$color = imagecolorallocate($image, 110 + (int) ($y / 18), 150 + (int) ($y / 30), 155 + (int) ($y / 28));
imageline($image, 0, $y, 1799, $y, $color);
}
imagefilledellipse($image, 1300, 270, 210, 210, imagecolorallocate($image, 245, 223, 169));
imagefilledpolygon($image, [0, 1000, 420, 350 + $index * 150, 950, 980, 1400, 550, 1800, 1100, 1800, 1200, 0, 1200], imagecolorallocate($image, 42, 83 + $index * 20, 75));
$imagePath = $path.'-'.$title.'.png';
imagepng($image, $imagePath);
imagedestroy($image);
$images[] = $imagePath;
}
echo json_encode(['databaseUrl' => $url, 'mediaDirectory' => $path.'-media', 'images' => $images, 'username' => $username, 'password' => $password]);