From 9cb9dcf0c9bb83a5e33858b2f4c6170b9a7597cd Mon Sep 17 00:00:00 2001 From: Julien Veyssier Date: Mon, 23 Mar 2026 14:56:31 +0100 Subject: [PATCH 1/4] bump supported nc version to 33->34, replace IConfig by IUserConfig Signed-off-by: Julien Veyssier --- appinfo/info.xml | 4 ++-- lib/AppInfo/Application.php | 10 +++----- lib/Controller/ConfigController.php | 6 ++--- lib/Listener/OsmReferenceListener.php | 24 +++++++++---------- lib/Reference/BingReferenceProvider.php | 6 ++--- lib/Reference/DuckduckgoReferenceProvider.php | 6 ++--- lib/Reference/GoogleMapsReferenceProvider.php | 6 ++--- lib/Reference/HereMapsReferenceProvider.php | 6 ++--- .../OsmLocationReferenceProvider.php | 6 ++--- lib/Reference/OsmPointReferenceProvider.php | 6 ++--- lib/Reference/OsmRouteReferenceProvider.php | 6 ++--- lib/Search/OsmSearchLocationProvider.php | 6 ++--- lib/Settings/Personal.php | 21 +++++++++++----- 13 files changed, 59 insertions(+), 54 deletions(-) diff --git a/appinfo/info.xml b/appinfo/info.xml index 8658164..dfb78d5 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -6,7 +6,7 @@ - 3.0.0 + 4.0.0 agpl Julien Veyssier Osm @@ -21,7 +21,7 @@ component to quickly insert a location link by searching or selecting a point on https://github.com/nextcloud/integration_openstreetmap/raw/main/img/screenshot3.jpg https://github.com/nextcloud/integration_openstreetmap/raw/main/img/screenshot4.jpg - + OCA\Osm\Settings\Admin diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 2c7e9b6..effc634 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -27,7 +27,7 @@ use OCP\AppFramework\Bootstrap\IBootstrap; use OCP\AppFramework\Bootstrap\IRegistrationContext; use OCP\Collaboration\Reference\RenderReferenceEvent; -use OCP\IConfig; +use OCP\Config\IUserConfig; use OCP\IL10N; use OCP\INavigationManager; use OCP\IURLGenerator; @@ -43,13 +43,9 @@ class Application extends App implements IBootstrap { public const DEFAULT_MAPTILER_API_KEY = 'get_your_own_OpIi9ZULNHzrESv6T2vL'; public const DEFAULT_SEARCH_LOCATION_ENABLED_VALUE = '0'; public const DEFAULT_PROXY_OSM_VALUE = '1'; - private IConfig $config; public function __construct(array $urlParams = []) { parent::__construct(self::APP_ID, $urlParams); - - $container = $this->getContainer(); - $this->config = $container->query(IConfig::class); } public function register(IRegistrationContext $context): void { @@ -71,13 +67,13 @@ public function boot(IBootContext $context): void { $context->injectFn(Closure::fromCallable([$this, 'registerNavigation'])); } - public function registerNavigation(IUserSession $userSession): void { + public function registerNavigation(IUserSession $userSession, IUserConfig $userConfig): void { $user = $userSession->getUser(); if ($user !== null) { $userId = $user->getUID(); $container = $this->getContainer(); - if ($this->config->getUserValue($userId, self::APP_ID, 'navigation_enabled', '0') === '1') { + if ($userConfig->getValueString($userId, self::APP_ID, 'navigation_enabled', '0') === '1') { $l10n = $container->get(IL10N::class); $navName = $l10n->t('OpenStreetMap'); $container->get(INavigationManager::class)->add(function () use ($container, $navName) { diff --git a/lib/Controller/ConfigController.php b/lib/Controller/ConfigController.php index ebdf484..2e47157 100644 --- a/lib/Controller/ConfigController.php +++ b/lib/Controller/ConfigController.php @@ -18,8 +18,8 @@ use OCP\AppFramework\Http\Attribute\NoAdminRequired; use OCP\AppFramework\Http\Attribute\PasswordConfirmationRequired; use OCP\AppFramework\Http\DataResponse; +use OCP\Config\IUserConfig; use OCP\IAppConfig; -use OCP\IConfig; use OCP\IRequest; use OCP\PreConditionNotMetException; @@ -29,7 +29,7 @@ class ConfigController extends Controller { public function __construct( string $appName, IRequest $request, - private IConfig $config, + private IUserConfig $userConfig, private IAppConfig $appConfig, private ?string $userId, ) { @@ -44,7 +44,7 @@ public function __construct( #[NoAdminRequired] public function setConfig(array $values): DataResponse { foreach ($values as $key => $value) { - $this->config->setUserValue($this->userId, Application::APP_ID, $key, $value); + $this->userConfig->setValueString($this->userId, Application::APP_ID, $key, $value); } return new DataResponse(''); } diff --git a/lib/Listener/OsmReferenceListener.php b/lib/Listener/OsmReferenceListener.php index 75ac26c..d4c0a14 100644 --- a/lib/Listener/OsmReferenceListener.php +++ b/lib/Listener/OsmReferenceListener.php @@ -26,10 +26,10 @@ use OCA\Osm\AppInfo\Application; use OCP\AppFramework\Services\IInitialState; use OCP\Collaboration\Reference\RenderReferenceEvent; +use OCP\Config\IUserConfig; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; use OCP\IAppConfig; -use OCP\IConfig; use OCP\Util; /** @@ -38,7 +38,7 @@ class OsmReferenceListener implements IEventListener { public function __construct( - private IConfig $config, + private IUserConfig $userConfig, private IAppConfig $appConfig, private IInitialState $initialState, private ?string $userId, @@ -56,20 +56,20 @@ public function handle(Event $event): void { ]; $this->initialState->provideInitialState('api-keys', $userConfig); - $preferSimpleOsmIframe = $this->config->getUserValue($this->userId, Application::APP_ID, 'prefer_simple_osm_iframe', '0') === '1'; + $preferSimpleOsmIframe = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'prefer_simple_osm_iframe', '0') === '1'; $this->initialState->provideInitialState('prefer-osm-frame', $preferSimpleOsmIframe); $proxyMapRequests = $this->appConfig->getValueString(Application::APP_ID, 'proxy_osm', Application::DEFAULT_PROXY_OSM_VALUE) === '1'; $this->initialState->provideInitialState('proxy-map-requests', $proxyMapRequests); - $lastLat = $this->config->getUserValue($this->userId, Application::APP_ID, 'lat'); - $lastLon = $this->config->getUserValue($this->userId, Application::APP_ID, 'lon'); - $lastZoom = $this->config->getUserValue($this->userId, Application::APP_ID, 'zoom'); - $lastPitch = $this->config->getUserValue($this->userId, Application::APP_ID, 'pitch'); - $lastBearing = $this->config->getUserValue($this->userId, Application::APP_ID, 'bearing'); - $lastMapStyle = $this->config->getUserValue($this->userId, Application::APP_ID, 'mapStyle'); - $lastTerrain = $this->config->getUserValue($this->userId, Application::APP_ID, 'terrain'); - $lastGlobe = $this->config->getUserValue($this->userId, Application::APP_ID, 'globe'); - $lastLinkType = $this->config->getUserValue($this->userId, Application::APP_ID, 'linkType'); + $lastLat = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'lat'); + $lastLon = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'lon'); + $lastZoom = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'zoom'); + $lastPitch = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'pitch'); + $lastBearing = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'bearing'); + $lastMapStyle = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'mapStyle'); + $lastTerrain = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'terrain'); + $lastGlobe = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'globe'); + $lastLinkType = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'linkType'); if ($lastLat !== '' && $lastLon !== '' && $lastZoom !== '' && $lastPitch !== '' && $lastBearing !== '' && $lastMapStyle !== '') { $this->initialState->provideInitialState('last-map-state', [ diff --git a/lib/Reference/BingReferenceProvider.php b/lib/Reference/BingReferenceProvider.php index 8afaf66..81f6bfd 100644 --- a/lib/Reference/BingReferenceProvider.php +++ b/lib/Reference/BingReferenceProvider.php @@ -29,15 +29,15 @@ use OCP\Collaboration\Reference\IReferenceProvider; use OCP\Collaboration\Reference\LinkReferenceProvider; use OCP\Collaboration\Reference\Reference; +use OCP\Config\IUserConfig; use OCP\IAppConfig; -use OCP\IConfig; class BingReferenceProvider implements IReferenceProvider { private const RICH_OBJECT_TYPE = Application::APP_ID . '_location'; public function __construct( - private IConfig $config, + private IUserConfig $userConfig, private IAppConfig $appConfig, private IReferenceManager $referenceManager, private LinkReferenceProvider $linkReferenceProvider, @@ -50,7 +50,7 @@ public function __construct( */ public function matchReference(string $referenceText): bool { $adminLinkPreviewEnabled = $this->appConfig->getValueString(Application::APP_ID, 'link_preview_enabled', '1') === '1'; - $userLinkPreviewEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; + $userLinkPreviewEnabled = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; if (!$adminLinkPreviewEnabled || !$userLinkPreviewEnabled) { return false; } diff --git a/lib/Reference/DuckduckgoReferenceProvider.php b/lib/Reference/DuckduckgoReferenceProvider.php index ce1a6a8..4466813 100644 --- a/lib/Reference/DuckduckgoReferenceProvider.php +++ b/lib/Reference/DuckduckgoReferenceProvider.php @@ -29,15 +29,15 @@ use OCP\Collaboration\Reference\IReferenceProvider; use OCP\Collaboration\Reference\LinkReferenceProvider; use OCP\Collaboration\Reference\Reference; +use OCP\Config\IUserConfig; use OCP\IAppConfig; -use OCP\IConfig; class DuckduckgoReferenceProvider implements IReferenceProvider { private const RICH_OBJECT_TYPE = Application::APP_ID . '_location'; public function __construct( - private IConfig $config, + private IUserConfig $userConfig, private IAppConfig $appConfig, private IReferenceManager $referenceManager, private LinkReferenceProvider $linkReferenceProvider, @@ -50,7 +50,7 @@ public function __construct( */ public function matchReference(string $referenceText): bool { $adminLinkPreviewEnabled = $this->appConfig->getValueString(Application::APP_ID, 'link_preview_enabled', '1') === '1'; - $userLinkPreviewEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; + $userLinkPreviewEnabled = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; if (!$adminLinkPreviewEnabled || !$userLinkPreviewEnabled) { return false; } diff --git a/lib/Reference/GoogleMapsReferenceProvider.php b/lib/Reference/GoogleMapsReferenceProvider.php index 6cd574b..063552f 100644 --- a/lib/Reference/GoogleMapsReferenceProvider.php +++ b/lib/Reference/GoogleMapsReferenceProvider.php @@ -31,8 +31,8 @@ use OCP\Collaboration\Reference\IReferenceProvider; use OCP\Collaboration\Reference\LinkReferenceProvider; use OCP\Collaboration\Reference\Reference; +use OCP\Config\IUserConfig; use OCP\IAppConfig; -use OCP\IConfig; use OCP\IURLGenerator; @@ -42,7 +42,7 @@ class GoogleMapsReferenceProvider implements IReferenceProvider { public function __construct( private OsmAPIService $osmAPIService, - private IConfig $config, + private IUserConfig $userConfig, private IAppConfig $appConfig, private IURLGenerator $urlGenerator, private IReferenceManager $referenceManager, @@ -57,7 +57,7 @@ public function __construct( */ public function matchReference(string $referenceText): bool { $adminLinkPreviewEnabled = $this->appConfig->getValueString(Application::APP_ID, 'link_preview_enabled', '1') === '1'; - $userLinkPreviewEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; + $userLinkPreviewEnabled = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; if (!$adminLinkPreviewEnabled || !$userLinkPreviewEnabled) { return false; } diff --git a/lib/Reference/HereMapsReferenceProvider.php b/lib/Reference/HereMapsReferenceProvider.php index b69496e..dba382c 100644 --- a/lib/Reference/HereMapsReferenceProvider.php +++ b/lib/Reference/HereMapsReferenceProvider.php @@ -30,8 +30,8 @@ use OCP\Collaboration\Reference\IReferenceProvider; use OCP\Collaboration\Reference\LinkReferenceProvider; use OCP\Collaboration\Reference\Reference; +use OCP\Config\IUserConfig; use OCP\IAppConfig; -use OCP\IConfig; use OCP\IURLGenerator; @@ -41,7 +41,7 @@ class HereMapsReferenceProvider implements IReferenceProvider { public function __construct( private OsmAPIService $osmAPIService, - private IConfig $config, + private IUserConfig $userConfig, private IAppConfig $appConfig, private IURLGenerator $urlGenerator, private IReferenceManager $referenceManager, @@ -55,7 +55,7 @@ public function __construct( */ public function matchReference(string $referenceText): bool { $adminLinkPreviewEnabled = $this->appConfig->getValueString(Application::APP_ID, 'link_preview_enabled', '1') === '1'; - $userLinkPreviewEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; + $userLinkPreviewEnabled = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; if (!$adminLinkPreviewEnabled || !$userLinkPreviewEnabled) { return false; } diff --git a/lib/Reference/OsmLocationReferenceProvider.php b/lib/Reference/OsmLocationReferenceProvider.php index b79ee0e..56e5a2c 100644 --- a/lib/Reference/OsmLocationReferenceProvider.php +++ b/lib/Reference/OsmLocationReferenceProvider.php @@ -31,8 +31,8 @@ use OCP\Collaboration\Reference\IReferenceProvider; use OCP\Collaboration\Reference\LinkReferenceProvider; use OCP\Collaboration\Reference\Reference; +use OCP\Config\IUserConfig; use OCP\IAppConfig; -use OCP\IConfig; use OCP\IURLGenerator; @@ -42,7 +42,7 @@ class OsmLocationReferenceProvider implements IReferenceProvider { public function __construct( private OsmAPIService $osmAPIService, - private IConfig $config, + private IUserConfig $userConfig, private IAppConfig $appConfig, private IURLGenerator $urlGenerator, private IReferenceManager $referenceManager, @@ -57,7 +57,7 @@ public function __construct( */ public function matchReference(string $referenceText): bool { $adminLinkPreviewEnabled = $this->appConfig->getValueString(Application::APP_ID, 'link_preview_enabled', '1') === '1'; - $userLinkPreviewEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; + $userLinkPreviewEnabled = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; if (!$adminLinkPreviewEnabled || !$userLinkPreviewEnabled) { return false; } diff --git a/lib/Reference/OsmPointReferenceProvider.php b/lib/Reference/OsmPointReferenceProvider.php index 6b56d62..2721f93 100644 --- a/lib/Reference/OsmPointReferenceProvider.php +++ b/lib/Reference/OsmPointReferenceProvider.php @@ -32,8 +32,8 @@ use OCP\Collaboration\Reference\ISearchableReferenceProvider; use OCP\Collaboration\Reference\LinkReferenceProvider; use OCP\Collaboration\Reference\Reference; +use OCP\Config\IUserConfig; use OCP\IAppConfig; -use OCP\IConfig; use OCP\IL10N; use OCP\IURLGenerator; @@ -44,7 +44,7 @@ class OsmPointReferenceProvider extends ADiscoverableReferenceProvider implement public function __construct( private OsmAPIService $osmAPIService, - private IConfig $config, + private IUserConfig $userConfig, private IAppConfig $appConfig, private IL10N $l10n, private IURLGenerator $urlGenerator, @@ -97,7 +97,7 @@ public function getSupportedSearchProviderIds(): array { */ public function matchReference(string $referenceText): bool { $adminLinkPreviewEnabled = $this->appConfig->getValueString(Application::APP_ID, 'link_preview_enabled', '1') === '1'; - $userLinkPreviewEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; + $userLinkPreviewEnabled = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; if (!$adminLinkPreviewEnabled || !$userLinkPreviewEnabled) { return false; } diff --git a/lib/Reference/OsmRouteReferenceProvider.php b/lib/Reference/OsmRouteReferenceProvider.php index 81e5424..4c2cc79 100644 --- a/lib/Reference/OsmRouteReferenceProvider.php +++ b/lib/Reference/OsmRouteReferenceProvider.php @@ -30,8 +30,8 @@ use OCP\Collaboration\Reference\IReferenceManager; use OCP\Collaboration\Reference\LinkReferenceProvider; use OCP\Collaboration\Reference\Reference; +use OCP\Config\IUserConfig; use OCP\IAppConfig; -use OCP\IConfig; use OCP\IL10N; use OCP\IURLGenerator; @@ -42,7 +42,7 @@ class OsmRouteReferenceProvider extends ADiscoverableReferenceProvider { public function __construct( private RoutingService $routingService, - private IConfig $config, + private IUserConfig $userConfig, private IAppConfig $appConfig, private IURLGenerator $urlGenerator, private IL10N $l10n, @@ -87,7 +87,7 @@ public function getIconUrl(): string { */ public function matchReference(string $referenceText): bool { $adminLinkPreviewEnabled = $this->appConfig->getValueString(Application::APP_ID, 'link_preview_enabled', '1') === '1'; - $userLinkPreviewEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; + $userLinkPreviewEnabled = $this->userConfig->getValueString($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; if (!$adminLinkPreviewEnabled || !$userLinkPreviewEnabled) { return false; } diff --git a/lib/Search/OsmSearchLocationProvider.php b/lib/Search/OsmSearchLocationProvider.php index e7846a6..1ce1f46 100644 --- a/lib/Search/OsmSearchLocationProvider.php +++ b/lib/Search/OsmSearchLocationProvider.php @@ -27,8 +27,8 @@ use OCA\Osm\AppInfo\Application; use OCA\Osm\Service\OsmAPIService; use OCP\App\IAppManager; +use OCP\Config\IUserConfig; use OCP\IAppConfig; -use OCP\IConfig; use OCP\IL10N; use OCP\IURLGenerator; use OCP\IUser; @@ -43,7 +43,7 @@ class OsmSearchLocationProvider implements IProvider, IExternalProvider { public function __construct( private IAppManager $appManager, private IL10N $l10n, - private IConfig $config, + private IUserConfig $userConfig, private IAppConfig $appConfig, private IURLGenerator $urlGenerator, private OsmAPIService $osmAPIService, @@ -94,7 +94,7 @@ public function search(IUser $user, ISearchQuery $query): SearchResult { if (!$requestedFromSmartPicker) { $adminSearchLocationEnabled = $this->appConfig->getValueString(Application::APP_ID, 'search_location_enabled', Application::DEFAULT_SEARCH_LOCATION_ENABLED_VALUE) === '1'; - $searchLocationEnabled = $this->config->getUserValue($user->getUID(), Application::APP_ID, 'search_location_enabled', Application::DEFAULT_SEARCH_LOCATION_ENABLED_VALUE) === '1'; + $searchLocationEnabled = $this->userConfig->getValueString($user->getUID(), Application::APP_ID, 'search_location_enabled', Application::DEFAULT_SEARCH_LOCATION_ENABLED_VALUE) === '1'; if (!$adminSearchLocationEnabled || !$searchLocationEnabled) { return SearchResult::paginated($this->getName(), [], 0); } diff --git a/lib/Settings/Personal.php b/lib/Settings/Personal.php index bcdd782..f63351d 100644 --- a/lib/Settings/Personal.php +++ b/lib/Settings/Personal.php @@ -5,15 +5,15 @@ use OCA\Osm\AppInfo\Application; use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Services\IInitialState; +use OCP\Config\IUserConfig; use OCP\IAppConfig; -use OCP\IConfig; use OCP\Settings\ISettings; class Personal implements ISettings { public function __construct( - private IConfig $config, + private IUserConfig $userConfig, private IAppConfig $appConfig, private IInitialState $initialStateService, private ?string $userId, @@ -24,11 +24,20 @@ public function __construct( * @return TemplateResponse */ public function getForm(): TemplateResponse { - $searchLocationEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'search_location_enabled', Application::DEFAULT_SEARCH_LOCATION_ENABLED_VALUE) === '1'; + $searchLocationEnabled = $this->userConfig->getValueString( + $this->userId, Application::APP_ID, 'search_location_enabled', Application::DEFAULT_SEARCH_LOCATION_ENABLED_VALUE, + ) === '1'; $adminSearchLocationEnabled = $this->appConfig->getValueString(Application::APP_ID, 'search_location_enabled', Application::DEFAULT_SEARCH_LOCATION_ENABLED_VALUE) === '1'; - $navigationEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'navigation_enabled', '0') === '1'; - $linkPreviewEnabled = $this->config->getUserValue($this->userId, Application::APP_ID, 'link_preview_enabled', '1') === '1'; - $preferSimpleOsmIframe = $this->config->getUserValue($this->userId, Application::APP_ID, 'prefer_simple_osm_iframe', '0') === '1'; + + $navigationEnabled = $this->userConfig->getValueString( + $this->userId, Application::APP_ID, 'navigation_enabled', '0', + ) === '1'; + $linkPreviewEnabled = $this->userConfig->getValueString( + $this->userId, Application::APP_ID, 'link_preview_enabled', '1', + ) === '1'; + $preferSimpleOsmIframe = $this->userConfig->getValueString( + $this->userId, Application::APP_ID, 'prefer_simple_osm_iframe', '0', + ) === '1'; $userConfig = [ 'admin_search_location_enabled' => $adminSearchLocationEnabled, From 649872e85dbce96d02fb6a19a2fc0da1b46d7638 Mon Sep 17 00:00:00 2001 From: Julien Veyssier Date: Mon, 23 Mar 2026 15:03:21 +0100 Subject: [PATCH 2/4] use phpunit 13 Signed-off-by: Julien Veyssier --- composer.json | 2 +- composer.lock | 504 ++++++++++++++--------- tests/unit/Service/OsmAPIServiceTest.php | 9 + 3 files changed, 316 insertions(+), 199 deletions(-) diff --git a/composer.json b/composer.json index ad0ad4d..31c01dc 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,7 @@ "require-dev": { "nextcloud/coding-standard": "^1.1", "nextcloud/ocp": "dev-master", - "phpunit/phpunit": "^12" + "phpunit/phpunit": "^13" }, "config": { "allow-plugins": { diff --git a/composer.lock b/composer.lock index 046a56d..009b227 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4c1ee694375bd4d4c36e78ba01180c8b", + "content-hash": "0cd78bf4748bdfc803fce5415324e7c2", "packages": [ { "name": "bamarni/composer-bin-plugin", @@ -501,16 +501,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "12.5.3", + "version": "13.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "b015312f28dd75b75d3422ca37dff2cd1a565e8d" + "reference": "a8b58fde2f4fbc69a064e1f80ff917607cf7737c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/b015312f28dd75b75d3422ca37dff2cd1a565e8d", - "reference": "b015312f28dd75b75d3422ca37dff2cd1a565e8d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/a8b58fde2f4fbc69a064e1f80ff917607cf7737c", + "reference": "a8b58fde2f4fbc69a064e1f80ff917607cf7737c", "shasum": "" }, "require": { @@ -518,17 +518,17 @@ "ext-libxml": "*", "ext-xmlwriter": "*", "nikic/php-parser": "^5.7.0", - "php": ">=8.3", - "phpunit/php-file-iterator": "^6.0", - "phpunit/php-text-template": "^5.0", - "sebastian/complexity": "^5.0", - "sebastian/environment": "^8.0.3", - "sebastian/lines-of-code": "^4.0", - "sebastian/version": "^6.0", + "php": ">=8.4", + "phpunit/php-file-iterator": "^7.0", + "phpunit/php-text-template": "^6.0", + "sebastian/complexity": "^6.0", + "sebastian/environment": "^9.0", + "sebastian/lines-of-code": "^5.0", + "sebastian/version": "^7.0", "theseer/tokenizer": "^2.0.1" }, "require-dev": { - "phpunit/phpunit": "^12.5.1" + "phpunit/phpunit": "^13.0" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -537,7 +537,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "12.5.x-dev" + "dev-main": "13.0.x-dev" } }, "autoload": { @@ -566,7 +566,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.3" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/13.0.1" }, "funding": [ { @@ -586,32 +586,32 @@ "type": "tidelift" } ], - "time": "2026-02-06T06:01:44+00:00" + "time": "2026-02-06T06:05:15+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "6.0.1", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5" + "reference": "6e5aa1fb0a95b1703d83e721299ee18bb4e2de50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", - "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6e5aa1fb0a95b1703d83e721299ee18bb4e2de50", + "reference": "6e5aa1fb0a95b1703d83e721299ee18bb4e2de50", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -639,7 +639,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.1" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/7.0.0" }, "funding": [ { @@ -659,28 +659,28 @@ "type": "tidelift" } ], - "time": "2026-02-02T14:04:18+00:00" + "time": "2026-02-06T04:33:26+00:00" }, { "name": "phpunit/php-invoker", - "version": "6.0.0", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406" + "reference": "42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406", - "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88", + "reference": "42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "suggest": { "ext-pcntl": "*" @@ -688,7 +688,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -715,40 +715,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/7.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-invoker", + "type": "tidelift" } ], - "time": "2025-02-07T04:58:58+00:00" + "time": "2026-02-06T04:34:47+00:00" }, { "name": "phpunit/php-text-template", - "version": "5.0.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53" + "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53", - "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/a47af19f93f76aa3368303d752aa5272ca3299f4", + "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -775,40 +787,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/6.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-text-template", + "type": "tidelift" } ], - "time": "2025-02-07T04:59:16+00:00" + "time": "2026-02-06T04:36:37+00:00" }, { "name": "phpunit/php-timer", - "version": "8.0.0", + "version": "9.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc" + "reference": "a0e12065831f6ab0d83120dc61513eb8d9a966f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", - "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/a0e12065831f6ab0d83120dc61513eb8d9a966f6", + "reference": "a0e12065831f6ab0d83120dc61513eb8d9a966f6", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "8.0-dev" + "dev-main": "9.0-dev" } }, "autoload": { @@ -835,28 +859,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", "security": "https://github.com/sebastianbergmann/php-timer/security/policy", - "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0" + "source": "https://github.com/sebastianbergmann/php-timer/tree/9.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-timer", + "type": "tidelift" } ], - "time": "2025-02-07T04:59:38+00:00" + "time": "2026-02-06T04:37:53+00:00" }, { "name": "phpunit/phpunit", - "version": "12.5.14", + "version": "13.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "47283cfd98d553edcb1353591f4e255dc1bb61f0" + "reference": "d57826e8921a534680c613924bfd921ded8047f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/47283cfd98d553edcb1353591f4e255dc1bb61f0", - "reference": "47283cfd98d553edcb1353591f4e255dc1bb61f0", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d57826e8921a534680c613924bfd921ded8047f4", + "reference": "d57826e8921a534680c613924bfd921ded8047f4", "shasum": "" }, "require": { @@ -869,22 +905,22 @@ "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", - "php": ">=8.3", - "phpunit/php-code-coverage": "^12.5.3", - "phpunit/php-file-iterator": "^6.0.1", - "phpunit/php-invoker": "^6.0.0", - "phpunit/php-text-template": "^5.0.0", - "phpunit/php-timer": "^8.0.0", - "sebastian/cli-parser": "^4.2.0", - "sebastian/comparator": "^7.1.4", - "sebastian/diff": "^7.0.0", - "sebastian/environment": "^8.0.3", - "sebastian/exporter": "^7.0.2", - "sebastian/global-state": "^8.0.2", - "sebastian/object-enumerator": "^7.0.0", - "sebastian/recursion-context": "^7.0.1", - "sebastian/type": "^6.0.3", - "sebastian/version": "^6.0.0", + "php": ">=8.4.1", + "phpunit/php-code-coverage": "^13.0.1", + "phpunit/php-file-iterator": "^7.0.0", + "phpunit/php-invoker": "^7.0.0", + "phpunit/php-text-template": "^6.0.0", + "phpunit/php-timer": "^9.0.0", + "sebastian/cli-parser": "^5.0.0", + "sebastian/comparator": "^8.0.0", + "sebastian/diff": "^8.0.0", + "sebastian/environment": "^9.0.0", + "sebastian/exporter": "^8.0.0", + "sebastian/global-state": "^9.0.0", + "sebastian/object-enumerator": "^8.0.0", + "sebastian/recursion-context": "^8.0.0", + "sebastian/type": "^7.0.0", + "sebastian/version": "^7.0.0", "staabm/side-effects-detector": "^1.0.5" }, "bin": [ @@ -893,7 +929,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "12.5-dev" + "dev-main": "13.0-dev" } }, "autoload": { @@ -925,7 +961,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.14" + "source": "https://github.com/sebastianbergmann/phpunit/tree/13.0.5" }, "funding": [ { @@ -949,7 +985,7 @@ "type": "tidelift" } ], - "time": "2026-02-18T12:38:40+00:00" + "time": "2026-02-18T12:40:03+00:00" }, { "name": "psr/clock", @@ -1154,28 +1190,28 @@ }, { "name": "sebastian/cli-parser", - "version": "4.2.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04" + "reference": "48a4654fa5e48c1c81214e9930048a572d4b23ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/90f41072d220e5c40df6e8635f5dafba2d9d4d04", - "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/48a4654fa5e48c1c81214e9930048a572d4b23ca", + "reference": "48a4654fa5e48c1c81214e9930048a572d4b23ca", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.2-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -1199,7 +1235,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.0" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/5.0.0" }, "funding": [ { @@ -1219,31 +1255,31 @@ "type": "tidelift" } ], - "time": "2025-09-14T09:36:45+00:00" + "time": "2026-02-06T04:39:44+00:00" }, { "name": "sebastian/comparator", - "version": "7.1.4", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "6a7de5df2e094f9a80b40a522391a7e6022df5f6" + "reference": "29b232ddc29c2b114c0358c69b3084e7c3da0d58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/6a7de5df2e094f9a80b40a522391a7e6022df5f6", - "reference": "6a7de5df2e094f9a80b40a522391a7e6022df5f6", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/29b232ddc29c2b114c0358c69b3084e7c3da0d58", + "reference": "29b232ddc29c2b114c0358c69b3084e7c3da0d58", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "php": ">=8.3", - "sebastian/diff": "^7.0", - "sebastian/exporter": "^7.0" + "php": ">=8.4", + "sebastian/diff": "^8.0", + "sebastian/exporter": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^12.2" + "phpunit/phpunit": "^13.0" }, "suggest": { "ext-bcmath": "For comparing BcMath\\Number objects" @@ -1251,7 +1287,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "7.1-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -1291,7 +1327,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.4" + "source": "https://github.com/sebastianbergmann/comparator/tree/8.0.0" }, "funding": [ { @@ -1311,33 +1347,33 @@ "type": "tidelift" } ], - "time": "2026-01-24T09:28:48+00:00" + "time": "2026-02-06T04:40:39+00:00" }, { "name": "sebastian/complexity", - "version": "5.0.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb" + "reference": "c5651c795c98093480df79350cb050813fc7a2f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb", - "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/c5651c795c98093480df79350cb050813fc7a2f3", + "reference": "c5651c795c98093480df79350cb050813fc7a2f3", "shasum": "" }, "require": { "nikic/php-parser": "^5.0", - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -1361,41 +1397,53 @@ "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/complexity/tree/6.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/complexity", + "type": "tidelift" } ], - "time": "2025-02-07T04:55:25+00:00" + "time": "2026-02-06T04:41:32+00:00" }, { "name": "sebastian/diff", - "version": "7.0.0", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "7ab1ea946c012266ca32390913653d844ecd085f" + "reference": "a2b6d09d7729ee87d605a439469f9dcc39be5ea3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f", - "reference": "7ab1ea946c012266ca32390913653d844ecd085f", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/a2b6d09d7729ee87d605a439469f9dcc39be5ea3", + "reference": "a2b6d09d7729ee87d605a439469f9dcc39be5ea3", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0", + "phpunit/phpunit": "^13.0", "symfony/process": "^7.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -1428,35 +1476,47 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0" + "source": "https://github.com/sebastianbergmann/diff/tree/8.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/diff", + "type": "tidelift" } ], - "time": "2025-02-07T04:55:46+00:00" + "time": "2026-02-06T04:42:27+00:00" }, { "name": "sebastian/environment", - "version": "8.0.4", + "version": "9.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "7b8842c2d8e85d0c3a5831236bf5869af6ab2a11" + "reference": "c4a2dc54b1a24e13ef1839cbb5947b967cbae853" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/7b8842c2d8e85d0c3a5831236bf5869af6ab2a11", - "reference": "7b8842c2d8e85d0c3a5831236bf5869af6ab2a11", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/c4a2dc54b1a24e13ef1839cbb5947b967cbae853", + "reference": "c4a2dc54b1a24e13ef1839cbb5947b967cbae853", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "suggest": { "ext-posix": "*" @@ -1464,7 +1524,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "8.0-dev" + "dev-main": "9.1-dev" } }, "autoload": { @@ -1492,7 +1552,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/8.0.4" + "source": "https://github.com/sebastianbergmann/environment/tree/9.1.0" }, "funding": [ { @@ -1512,34 +1572,34 @@ "type": "tidelift" } ], - "time": "2026-03-15T07:05:40+00:00" + "time": "2026-03-22T06:31:50+00:00" }, { "name": "sebastian/exporter", - "version": "7.0.2", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "016951ae10980765e4e7aee491eb288c64e505b7" + "reference": "dc31f1f8e0186c8f0bb3e48fd4d51421d8905fea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/016951ae10980765e4e7aee491eb288c64e505b7", - "reference": "016951ae10980765e4e7aee491eb288c64e505b7", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/dc31f1f8e0186c8f0bb3e48fd4d51421d8905fea", + "reference": "dc31f1f8e0186c8f0bb3e48fd4d51421d8905fea", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=8.3", - "sebastian/recursion-context": "^7.0" + "php": ">=8.4", + "sebastian/recursion-context": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -1582,7 +1642,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/8.0.0" }, "funding": [ { @@ -1602,35 +1662,35 @@ "type": "tidelift" } ], - "time": "2025-09-24T06:16:11+00:00" + "time": "2026-02-06T04:44:28+00:00" }, { "name": "sebastian/global-state", - "version": "8.0.2", + "version": "9.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "ef1377171613d09edd25b7816f05be8313f9115d" + "reference": "e52e3dc22441e6218c710afe72c3042f8fc41ea7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/ef1377171613d09edd25b7816f05be8313f9115d", - "reference": "ef1377171613d09edd25b7816f05be8313f9115d", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e52e3dc22441e6218c710afe72c3042f8fc41ea7", + "reference": "e52e3dc22441e6218c710afe72c3042f8fc41ea7", "shasum": "" }, "require": { - "php": ">=8.3", - "sebastian/object-reflector": "^5.0", - "sebastian/recursion-context": "^7.0" + "php": ">=8.4", + "sebastian/object-reflector": "^6.0", + "sebastian/recursion-context": "^8.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "8.0-dev" + "dev-main": "9.0-dev" } }, "autoload": { @@ -1656,7 +1716,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/9.0.0" }, "funding": [ { @@ -1676,33 +1736,33 @@ "type": "tidelift" } ], - "time": "2025-08-29T11:29:25+00:00" + "time": "2026-02-06T04:45:13+00:00" }, { "name": "sebastian/lines-of-code", - "version": "4.0.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f" + "reference": "4f21bb7768e1c997722ccc7efb1d6b5c11bfd471" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/97ffee3bcfb5805568d6af7f0f893678fc076d2f", - "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/4f21bb7768e1c997722ccc7efb1d6b5c11bfd471", + "reference": "4f21bb7768e1c997722ccc7efb1d6b5c11bfd471", "shasum": "" }, "require": { "nikic/php-parser": "^5.0", - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -1726,42 +1786,54 @@ "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.0" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/5.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/lines-of-code", + "type": "tidelift" } ], - "time": "2025-02-07T04:57:28+00:00" + "time": "2026-02-06T04:45:54+00:00" }, { "name": "sebastian/object-enumerator", - "version": "7.0.0", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894" + "reference": "b39ab125fd9a7434b0ecbc4202eebce11a98cfc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894", - "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/b39ab125fd9a7434b0ecbc4202eebce11a98cfc5", + "reference": "b39ab125fd9a7434b0ecbc4202eebce11a98cfc5", "shasum": "" }, "require": { - "php": ">=8.3", - "sebastian/object-reflector": "^5.0", - "sebastian/recursion-context": "^7.0" + "php": ">=8.4", + "sebastian/object-reflector": "^6.0", + "sebastian/recursion-context": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -1784,40 +1856,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/8.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/object-enumerator", + "type": "tidelift" } ], - "time": "2025-02-07T04:57:48+00:00" + "time": "2026-02-06T04:46:36+00:00" }, { "name": "sebastian/object-reflector", - "version": "5.0.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "4bfa827c969c98be1e527abd576533293c634f6a" + "reference": "3ca042c2c60b0eab094f8a1b6a7093f4d4c72200" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a", - "reference": "4bfa827c969c98be1e527abd576533293c634f6a", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/3ca042c2c60b0eab094f8a1b6a7093f4d4c72200", + "reference": "3ca042c2c60b0eab094f8a1b6a7093f4d4c72200", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -1840,40 +1924,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/6.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/object-reflector", + "type": "tidelift" } ], - "time": "2025-02-07T04:58:17+00:00" + "time": "2026-02-06T04:47:13+00:00" }, { "name": "sebastian/recursion-context", - "version": "7.0.1", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c" + "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", - "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/74c5af21f6a5833e91767ca068c4d3dfec15317e", + "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -1904,7 +2000,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/8.0.0" }, "funding": [ { @@ -1924,32 +2020,32 @@ "type": "tidelift" } ], - "time": "2025-08-13T04:44:59+00:00" + "time": "2026-02-06T04:51:28+00:00" }, { "name": "sebastian/type", - "version": "6.0.3", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d" + "reference": "42412224607bd3931241bbd17f38e0f972f5a916" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/e549163b9760b8f71f191651d22acf32d56d6d4d", - "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/42412224607bd3931241bbd17f38e0f972f5a916", + "reference": "42412224607bd3931241bbd17f38e0f972f5a916", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -1973,7 +2069,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/6.0.3" + "source": "https://github.com/sebastianbergmann/type/tree/7.0.0" }, "funding": [ { @@ -1993,29 +2089,29 @@ "type": "tidelift" } ], - "time": "2025-08-09T06:57:12+00:00" + "time": "2026-02-06T04:52:09+00:00" }, { "name": "sebastian/version", - "version": "6.0.0", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c" + "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c", - "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ad37a5552c8e2b88572249fdc19b6da7792e021b", + "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -2039,15 +2135,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/version/issues", "security": "https://github.com/sebastianbergmann/version/security/policy", - "source": "https://github.com/sebastianbergmann/version/tree/6.0.0" + "source": "https://github.com/sebastianbergmann/version/tree/7.0.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/version", + "type": "tidelift" } ], - "time": "2025-02-07T05:00:38+00:00" + "time": "2026-02-06T04:52:52+00:00" }, { "name": "staabm/side-effects-detector", diff --git a/tests/unit/Service/OsmAPIServiceTest.php b/tests/unit/Service/OsmAPIServiceTest.php index 6fc5816..a110ad7 100644 --- a/tests/unit/Service/OsmAPIServiceTest.php +++ b/tests/unit/Service/OsmAPIServiceTest.php @@ -11,6 +11,15 @@ class OsmAPIServiceTest extends TestCase { + /** @var MockObject|LoggerInterface */ + private $logger; + /** @var MockObject|L10N */ + private $l10n; + /** @var MockObject|ClientService */ + private $clientService; + + private OsmAPIService $service; + public function setUp(): void { parent::setUp(); From 5f9e5dad04abba70df704858893753c1f3c5f32f Mon Sep 17 00:00:00 2001 From: Julien Veyssier Date: Mon, 23 Mar 2026 15:03:59 +0100 Subject: [PATCH 3/4] use php 8.2 in psalm config and 8.4 in tests Signed-off-by: Julien Veyssier --- .github/workflows/integration.yml | 2 +- .github/workflows/phpunit.yml | 2 +- composer.json | 3 +++ composer.lock | 5 ++++- psalm.xml | 2 +- 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index a0e43e1..c477664 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -35,7 +35,7 @@ jobs: strategy: fail-fast: false matrix: - php-versions: ['8.3'] + php-versions: ['8.4'] databases: ['sqlite'] server-versions: ['master'] diff --git a/.github/workflows/phpunit.yml b/.github/workflows/phpunit.yml index 4f06e3d..54c5d6e 100644 --- a/.github/workflows/phpunit.yml +++ b/.github/workflows/phpunit.yml @@ -33,7 +33,7 @@ jobs: # do not stop on another job's failure fail-fast: false matrix: - php-versions: ['8.3'] + php-versions: ['8.4'] databases: ['sqlite'] server-versions: ['master'] diff --git a/composer.json b/composer.json index 31c01dc..7dc5bb9 100644 --- a/composer.json +++ b/composer.json @@ -28,6 +28,9 @@ "config": { "allow-plugins": { "bamarni/composer-bin-plugin": true + }, + "platform": { + "php": "8.4.1" } }, "extra": { diff --git a/composer.lock b/composer.lock index 009b227..9ccb958 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0cd78bf4748bdfc803fce5415324e7c2", + "content-hash": "0f6f9d50500cfa754ba8fb3cbdd0ac08", "packages": [ { "name": "bamarni/composer-bin-plugin", @@ -2271,5 +2271,8 @@ "php": ">=8.1.0" }, "platform-dev": {}, + "platform-overrides": { + "php": "8.4.1" + }, "plugin-api-version": "2.6.0" } diff --git a/psalm.xml b/psalm.xml index ee23203..bab765e 100644 --- a/psalm.xml +++ b/psalm.xml @@ -7,7 +7,7 @@ resolveFromConfigFile="true" ensureOverrideAttribute="false" strictBinaryOperands="false" - phpVersion="8.1" + phpVersion="8.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://getpsalm.org/schema/config" xsi:schemaLocation="https://getpsalm.org/schema/config vendor-bin/psalm/vendor/vimeo/psalm/config.xsd" From f5c3b52b24e499a8250e1de033eabfcf224e25d4 Mon Sep 17 00:00:00 2001 From: Julien Veyssier Date: Mon, 23 Mar 2026 15:14:08 +0100 Subject: [PATCH 4/4] display phpunit deprecations, warnings and notices Signed-off-by: Julien Veyssier --- tests/phpunit.integration.xml | 18 +++++++++++------- tests/phpunit.xml | 21 +++++++++++---------- tests/unit/Service/OsmAPIServiceTest.php | 17 ++--------------- 3 files changed, 24 insertions(+), 32 deletions(-) diff --git a/tests/phpunit.integration.xml b/tests/phpunit.integration.xml index 2cf3e98..ad2a6d4 100644 --- a/tests/phpunit.integration.xml +++ b/tests/phpunit.integration.xml @@ -1,11 +1,15 @@ - - - - ../appinfo - ../lib - - + ./integration diff --git a/tests/phpunit.xml b/tests/phpunit.xml index 6a93dfb..9db2a05 100644 --- a/tests/phpunit.xml +++ b/tests/phpunit.xml @@ -1,17 +1,18 @@ - - - - - - + ./unit - - - - ../appinfo diff --git a/tests/unit/Service/OsmAPIServiceTest.php b/tests/unit/Service/OsmAPIServiceTest.php index a110ad7..465a6d5 100644 --- a/tests/unit/Service/OsmAPIServiceTest.php +++ b/tests/unit/Service/OsmAPIServiceTest.php @@ -2,32 +2,19 @@ namespace OCA\Osm\Tests; -use OC\Http\Client\ClientService; -use OC\L10N\L10N; use OCA\Osm\AppInfo\Application; use OCA\Osm\Service\OsmAPIService; -use Psr\Log\LoggerInterface; +use OCP\Server; use Test\TestCase; class OsmAPIServiceTest extends TestCase { - /** @var MockObject|LoggerInterface */ - private $logger; - /** @var MockObject|L10N */ - private $l10n; - /** @var MockObject|ClientService */ - private $clientService; - private OsmAPIService $service; public function setUp(): void { parent::setUp(); - $this->logger = $this->createMock(LoggerInterface::class); - $this->l10n = $this->createMock(L10N::class); - $this->clientService = $this->createMock(ClientService::class); - - $this->service = new OsmAPIService($this->logger, $this->l10n, $this->clientService); + $this->service = Server::get(OsmAPIService::class); } public function testDummy() {