feat: add routes, lang, tests, stubs, docs, and docker configurations

This commit is contained in:
2026-05-21 16:05:16 +07:00
parent fad70d096b
commit 28a06315b8
3385 changed files with 177070 additions and 0 deletions
+75
View File
@@ -0,0 +1,75 @@
<?php
use App\Helpers\SessionHelper;
test('parseUserAgent returns Unknown for null', function () {
$result = SessionHelper::parseUserAgent(null);
expect($result['browser'])->toBe('Unknown');
expect($result['os'])->toBe('Unknown');
expect($result['browser_icon'])->toBe('bi-question-circle');
expect($result['os_icon'])->toBe('bi-question-circle');
});
test('parseUserAgent returns Unknown for empty string', function () {
expect(SessionHelper::parseUserAgent('')['browser'])->toBe('Unknown');
});
test('parseUserAgent detects Android', function () {
$ua = 'Mozilla/5.0 (Linux; Android 14; Pixel 8) Chrome/120.0.0.0 Mobile Safari/537.36';
$r = SessionHelper::parseUserAgent($ua);
expect($r['os'])->toBe('Android');
expect($r['os_icon'])->toBe('bi-phone');
});
test('parseUserAgent detects iOS', function () {
$ua = 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15';
expect(SessionHelper::parseUserAgent($ua)['os'])->toBe('iOS');
});
test('parseUserAgent detects Windows', function () {
$ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0';
$r = SessionHelper::parseUserAgent($ua);
expect($r['os'])->toBe('Windows');
expect($r['os_icon'])->toBe('bi-windows');
});
test('parseUserAgent detects macOS', function () {
$ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15';
$r = SessionHelper::parseUserAgent($ua);
expect($r['os'])->toBe('macOS');
expect($r['os_icon'])->toBe('bi-apple');
});
test('parseUserAgent detects Linux desktop', function () {
$ua = 'Mozilla/5.0 (X11; Linux x86_64) Gecko/20100101 Firefox/121.0';
$r = SessionHelper::parseUserAgent($ua);
expect($r['os'])->toBe('Linux');
});
test('parseUserAgent detects Edge before Chrome', function () {
$ua = 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 Chrome/120 Safari/537.36 Edg/120.0';
expect(SessionHelper::parseUserAgent($ua)['browser'])->toBe('Edge');
});
test('parseUserAgent detects Chrome', function () {
$ua = 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 Chrome/120.0 Safari/537.36';
expect(SessionHelper::parseUserAgent($ua)['browser'])->toBe('Chrome');
});
test('parseUserAgent detects Firefox', function () {
$ua = 'Mozilla/5.0 (Windows NT 10.0; rv:121.0) Gecko/20100101 Firefox/121.0';
expect(SessionHelper::parseUserAgent($ua)['browser'])->toBe('Firefox');
});
test('parseUserAgent detects Safari (without Chrome)', function () {
$ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 Version/17.0 Safari/605.1.15';
expect(SessionHelper::parseUserAgent($ua)['browser'])->toBe('Safari');
});
test('parseUserAgent falls back to bi-globe icon when browser unknown', function () {
$ua = 'Some-Strange-Bot/1.0';
$r = SessionHelper::parseUserAgent($ua);
expect($r['browser'])->toBe('Unknown');
expect($r['browser_icon'])->toBe('bi-globe');
});