feat(Docker): Upgrade to PHP 8.5.0RC3 with native ext-uri support

BREAKING CHANGE: Requires PHP 8.5.0RC3

Changes:
- Update Docker base image from php:8.4-fpm to php:8.5.0RC3-fpm
- Enable ext-uri for native WHATWG URL parsing support
- Update composer.json PHP requirement from ^8.4 to ^8.5
- Add ext-uri as required extension in composer.json
- Move URL classes from Url.php85/ to Url/ directory (now compatible)
- Remove temporary PHP 8.4 compatibility workarounds

Benefits:
- Native URL parsing with Uri\WhatWg\Url class
- Better performance for URL operations
- Future-proof with latest PHP features
- Eliminates PHP version compatibility issues
This commit is contained in:
2025-10-27 09:31:28 +01:00
parent 799f74f00a
commit c8b47e647d
81 changed files with 6988 additions and 601 deletions

View File

@@ -0,0 +1,55 @@
<?php
declare(strict_types=1);
use App\Framework\UserAgent\ValueObjects\DeviceCategory;
describe('DeviceCategory Value Object', function () {
it('has all expected device categories', function () {
expect(DeviceCategory::BOT)->toBeInstanceOf(DeviceCategory::class);
expect(DeviceCategory::MOBILE)->toBeInstanceOf(DeviceCategory::class);
expect(DeviceCategory::DESKTOP)->toBeInstanceOf(DeviceCategory::class);
expect(DeviceCategory::TABLET)->toBeInstanceOf(DeviceCategory::class);
expect(DeviceCategory::UNKNOWN)->toBeInstanceOf(DeviceCategory::class);
});
it('returns correct display names', function () {
expect(DeviceCategory::BOT->getDisplayName())->toBe('Bot');
expect(DeviceCategory::MOBILE->getDisplayName())->toBe('Mobile Device');
expect(DeviceCategory::DESKTOP->getDisplayName())->toBe('Desktop Computer');
expect(DeviceCategory::TABLET->getDisplayName())->toBe('Tablet');
expect(DeviceCategory::UNKNOWN->getDisplayName())->toBe('Unknown Device');
});
it('correctly identifies mobile devices', function () {
expect(DeviceCategory::MOBILE->isMobile())->toBeTrue();
expect(DeviceCategory::TABLET->isMobile())->toBeTrue();
expect(DeviceCategory::DESKTOP->isMobile())->toBeFalse();
expect(DeviceCategory::BOT->isMobile())->toBeFalse();
expect(DeviceCategory::UNKNOWN->isMobile())->toBeFalse();
});
it('correctly identifies desktop devices', function () {
expect(DeviceCategory::DESKTOP->isDesktop())->toBeTrue();
expect(DeviceCategory::MOBILE->isDesktop())->toBeFalse();
expect(DeviceCategory::TABLET->isDesktop())->toBeFalse();
expect(DeviceCategory::BOT->isDesktop())->toBeFalse();
expect(DeviceCategory::UNKNOWN->isDesktop())->toBeFalse();
});
it('correctly identifies bots', function () {
expect(DeviceCategory::BOT->isBot())->toBeTrue();
expect(DeviceCategory::MOBILE->isBot())->toBeFalse();
expect(DeviceCategory::DESKTOP->isBot())->toBeFalse();
expect(DeviceCategory::TABLET->isBot())->toBeFalse();
expect(DeviceCategory::UNKNOWN->isBot())->toBeFalse();
});
it('has correct enum values', function () {
expect(DeviceCategory::BOT->value)->toBe('bot');
expect(DeviceCategory::MOBILE->value)->toBe('mobile');
expect(DeviceCategory::DESKTOP->value)->toBe('desktop');
expect(DeviceCategory::TABLET->value)->toBe('tablet');
expect(DeviceCategory::UNKNOWN->value)->toBe('unknown');
});
});