Files
florian.wilde 8a7939bee2 test: Testsuite fuer Kernlogik, QR-Codes, Domains und Sicherheit
232 Tests, unter anderem:
- Slug-Erzeugung, Kollisionsbehandlung und Validierung
- URL-Validierung inklusive IDN, Prozentkodierung und abgelehnter
  Protokolle; Punycode gegengeprueft gegen idn_to_ascii
- QR-Erzeugung in allen Groessen, mit Logo und Level-H-Automatik
- Weiterleitung gegen eine echte SQLite-Datenbank samt Domain-
  Aufloesung ueber den Host-Header
- Update einer bestehenden Installation auf mehrere Domains
- Angriffsseitig: gefaelschte Proxy-Header, Host-Header-Injektion,
  SVG mit Skripten, XXE und externen Referenzen
2026-08-03 18:11:40 +02:00

49 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Tests;
use App\Support\Color;
use PHPUnit\Framework\TestCase;
final class ColorTest extends TestCase
{
public function testNormalizeHex(): void
{
self::assertSame('#ffffff', Color::normalizeHex('#FFF'));
self::assertSame('#000000', Color::normalizeHex('000000'));
self::assertSame('#2c5cc5', Color::normalizeHex('#2C5CC5'));
self::assertSame('#000000', Color::normalizeHex('keine-farbe'));
self::assertSame('#ffffff', Color::normalizeHex('quatsch', '#ffffff'));
}
public function testContrastRatioExtremes(): void
{
self::assertSame(21.0, Color::contrastRatio('#000000', '#ffffff'));
self::assertSame(1.0, Color::contrastRatio('#123456', '#123456'));
}
public function testWarningForLowContrast(): void
{
self::assertNotNull(Color::qrWarning('#888888', '#999999'));
self::assertNull(Color::qrWarning('#000000', '#ffffff'));
self::assertNull(Color::qrWarning('#0b4f9e', '#ffffff'));
}
public function testWarningForInvertedCodes(): void
{
$warning = Color::qrWarning('#ffffff', '#000000');
self::assertNotNull($warning);
self::assertStringContainsString('invertierte', $warning);
}
public function testToRgb(): void
{
self::assertSame([255, 255, 255], Color::toRgb('#ffffff'));
self::assertSame([44, 92, 197], Color::toRgb('#2c5cc5'));
self::assertSame([0, 0, 0], Color::toRgb('#000'));
}
}