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
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Tests;
|
||||
|
||||
use App\Support\UserAgentParser;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class UserAgentParserTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @return array<string,array{0:string,1:string,2:string,3:string}>
|
||||
*/
|
||||
public static function agentProvider(): array
|
||||
{
|
||||
return [
|
||||
'Windows Chrome' => [
|
||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
||||
'desktop', 'Chrome', 'Windows',
|
||||
],
|
||||
'macOS Safari' => [
|
||||
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15',
|
||||
'desktop', 'Safari', 'macOS',
|
||||
],
|
||||
'iPhone Safari' => [
|
||||
'Mozilla/5.0 (iPhone; CPU iPhone OS 17_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Mobile/15E148 Safari/604.1',
|
||||
'mobile', 'Safari', 'iOS',
|
||||
],
|
||||
'Android Handy' => [
|
||||
'Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36',
|
||||
'mobile', 'Chrome', 'Android',
|
||||
],
|
||||
'Android Tablet' => [
|
||||
'Mozilla/5.0 (Linux; Android 13; SM-X200) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
||||
'tablet', 'Chrome', 'Android',
|
||||
],
|
||||
'iPad' => [
|
||||
'Mozilla/5.0 (iPad; CPU OS 17_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/604.1',
|
||||
'tablet', 'Safari', 'iOS',
|
||||
],
|
||||
'Firefox Linux' => [
|
||||
'Mozilla/5.0 (X11; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0',
|
||||
'desktop', 'Firefox', 'Linux',
|
||||
],
|
||||
'Edge' => [
|
||||
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0',
|
||||
'desktop', 'Edge', 'Windows',
|
||||
],
|
||||
'Googlebot' => [
|
||||
'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
|
||||
'bot', 'Bot', 'unknown',
|
||||
],
|
||||
'curl' => ['curl/8.4.0', 'bot', 'Bot', 'unknown'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider agentProvider
|
||||
*/
|
||||
public function testParse(string $userAgent, string $device, string $browser, string $platform): void
|
||||
{
|
||||
$result = UserAgentParser::parse($userAgent);
|
||||
|
||||
self::assertSame($device, $result['device']);
|
||||
self::assertSame($browser, $result['browser']);
|
||||
self::assertSame($platform, $result['platform']);
|
||||
}
|
||||
|
||||
public function testEmptyUserAgentIsUnknown(): void
|
||||
{
|
||||
$result = UserAgentParser::parse('');
|
||||
|
||||
self::assertSame('unknown', $result['device']);
|
||||
self::assertSame('unknown', $result['browser']);
|
||||
self::assertSame('unknown', $result['platform']);
|
||||
}
|
||||
|
||||
public function testDeviceLabelsAreGerman(): void
|
||||
{
|
||||
self::assertSame('Mobil', UserAgentParser::deviceLabel('mobile'));
|
||||
self::assertSame('Desktop', UserAgentParser::deviceLabel('desktop'));
|
||||
self::assertSame('Tablet', UserAgentParser::deviceLabel('tablet'));
|
||||
self::assertSame('Unbekannt', UserAgentParser::deviceLabel('unknown'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user