chore: complete update
This commit is contained in:
84
tests/Domain/QrCode/End2EndTest.php
Normal file
84
tests/Domain/QrCode/End2EndTest.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Application\Service\QrCodeService;
|
||||
use App\Domain\QrCode\QrCode;
|
||||
use App\Domain\QrCode\Service\QrCodeEncoder;
|
||||
use App\Domain\QrCode\Service\QrCodeGenerator;
|
||||
use App\Domain\QrCode\Service\QrCodeMasker;
|
||||
use App\Domain\QrCode\Service\QrCodeRenderer;
|
||||
use App\Domain\QrCode\Service\ReedSolomon;
|
||||
use App\Domain\QrCode\ValueObject\ErrorCorrectionLevel;
|
||||
use App\Domain\QrCode\ValueObject\QrCodeMatrix;
|
||||
use App\Domain\QrCode\ValueObject\QrCodeVersion;
|
||||
|
||||
test('End-to-End QR-Code-Generierung funktioniert', function () {
|
||||
// Abhängigkeiten aufbauen
|
||||
$encoder = new QrCodeEncoder();
|
||||
$renderer = new QrCodeRenderer(new QrCodeMasker(), new ReedSolomon());
|
||||
$generator = new QrCodeGenerator($encoder, $renderer);
|
||||
|
||||
// Test-Daten
|
||||
$data = 'https://example.com';
|
||||
$errorLevel = ErrorCorrectionLevel::M;
|
||||
$version = 2; // Fixe Version für Test-Vorhersagbarkeit
|
||||
|
||||
// QR-Code generieren
|
||||
$qrCode = new QrCode($data, $errorLevel, new QrCodeVersion($version));
|
||||
$matrix = $generator->generate($qrCode);
|
||||
|
||||
// Prüfungen
|
||||
expect($matrix)->toBeInstanceOf(QrCodeMatrix::class);
|
||||
|
||||
// Prüfe die Größe (Version 2 = 25x25)
|
||||
$expectedSize = 25; // 21 + (2-1)*4 = 25
|
||||
expect($matrix->getSize())->toBe($expectedSize);
|
||||
|
||||
// Prüfe, ob Finder-Patterns vorhanden sind (3 Ecken haben spezifische Muster)
|
||||
$topLeft = $this->hasFinderPattern($matrix->getMatrix(), 0, 0);
|
||||
$topRight = $this->hasFinderPattern($matrix->getMatrix(), 0, $expectedSize - 7);
|
||||
$bottomLeft = $this->hasFinderPattern($matrix->getMatrix(), $expectedSize - 7, 0);
|
||||
|
||||
expect($topLeft)->toBeTrue('Finder Pattern oben links fehlt');
|
||||
expect($topRight)->toBeTrue('Finder Pattern oben rechts fehlt');
|
||||
expect($bottomLeft)->toBeTrue('Finder Pattern unten links fehlt');
|
||||
});
|
||||
|
||||
// Hilfsfunktion zur Prüfung von Finder-Patterns
|
||||
function hasFinderPattern(array $matrix, int $startRow, int $startCol): bool
|
||||
{
|
||||
// Prüfe das 7x7 Finder-Pattern-Muster
|
||||
// Das äußere Quadrat sollte 7x7 sein und vollständig dunkel
|
||||
for ($i = 0; $i < 7; $i++) {
|
||||
for ($j = 0; $j < 7; $j++) {
|
||||
if ($i === 0 || $i === 6 || $j === 0 || $j === 6) {
|
||||
if ($matrix[$startRow + $i][$startCol + $j] !== true) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Das mittlere Quadrat sollte 5x5 sein und weiß (false)
|
||||
for ($i = 1; $i < 6; $i++) {
|
||||
for ($j = 1; $j < 6; $j++) {
|
||||
if ($i === 1 || $i === 5 || $j === 1 || $j === 5) {
|
||||
if ($matrix[$startRow + $i][$startCol + $j] !== false) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Das innerste Quadrat sollte 3x3 sein und dunkel (true)
|
||||
for ($i = 2; $i < 5; $i++) {
|
||||
for ($j = 2; $j < 5; $j++) {
|
||||
if ($matrix[$startRow + $i][$startCol + $j] !== true) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user