OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

DeviceInfoTest.php

2 KB
<?php

declare(strict_types=1);

use OpenNIT\Core\DeviceInfo;

/**
 * Deckt die leichtgewichtige User-Agent-Auswertung für Sitzungsanzeige und
 * Neues-Gerät-Erkennung ab.
 */
return static function (): void {

    $chromeWin = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';
    $safariIph = 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1';
    $edgeWin   = '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';
    $ffMac     = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:121.0) Gecko/20100101 Firefox/121.0';

    test('browser: erkennt Chrome/Safari/Edge/Firefox in richtiger Reihenfolge', function () use ($chromeWin, $safariIph, $edgeWin, $ffMac) {
        assertSame('Chrome', DeviceInfo::browser($chromeWin));
        assertSame('Safari', DeviceInfo::browser($safariIph));
        assertSame('Edge',   DeviceInfo::browser($edgeWin));   // Edge trägt Chrome mit
        assertSame('Firefox', DeviceInfo::browser($ffMac));
    });

    test('platform: erkennt Windows/iPhone/macOS', function () use ($chromeWin, $safariIph, $ffMac) {
        assertSame('Windows', DeviceInfo::platform($chromeWin));
        assertSame('iPhone',  DeviceInfo::platform($safariIph));
        assertSame('macOS',   DeviceInfo::platform($ffMac));
    });

    test('describe: kombiniert Browser und Plattform', function () use ($chromeWin, $safariIph, $edgeWin) {
        assertSame('Chrome auf Windows', DeviceInfo::describe($chromeWin));
        assertSame('Safari auf iPhone',  DeviceInfo::describe($safariIph));
        assertSame('Edge auf Windows',   DeviceInfo::describe($edgeWin));
    });

    test('describe: Fallback bei leerem/unbekanntem User-Agent', function () {
        assertSame('Unbekanntes Gerät', DeviceInfo::describe(null));
        assertSame('Unbekanntes Gerät', DeviceInfo::describe(''));
        assertSame('Unbekanntes Gerät', DeviceInfo::describe('irgendwas-ohne-marker'));
    });

    test('fingerprint: stabil und user-agent-abhängig', function () use ($chromeWin, $ffMac) {
        assertSame(DeviceInfo::fingerprint($chromeWin), DeviceInfo::fingerprint($chromeWin));
        assertTrue(DeviceInfo::fingerprint($chromeWin) !== DeviceInfo::fingerprint($ffMac));
        assertSame(64, strlen(DeviceInfo::fingerprint($chromeWin))); // sha256 hex
    });
};