From 7f6652882917e6a4034dbf2992838f06355f1ef8 Mon Sep 17 00:00:00 2001 From: Robin Windey Date: Fri, 3 Oct 2025 10:13:03 +0000 Subject: [PATCH 1/3] Use NC stable32 references Signed-off-by: Robin Windey --- .github/workflows/phpunit-integration.yml | 2 +- .github/workflows/phpunit.yml | 6 +- .github/workflows/psalm.yml | 2 +- .github/workflows/sonarqube.yml | 2 +- composer.json | 2 +- composer.lock | 481 +++++++++++++--------- 6 files changed, 300 insertions(+), 195 deletions(-) diff --git a/.github/workflows/phpunit-integration.yml b/.github/workflows/phpunit-integration.yml index 767f4e5c..c048fefd 100644 --- a/.github/workflows/phpunit-integration.yml +++ b/.github/workflows/phpunit-integration.yml @@ -44,7 +44,7 @@ jobs: matrix: php-versions: ['8.3'] databases: ['mysql'] - server-versions: ['master'] + server-versions: ['stable32'] backend: ['remote', 'local'] # Do not change these names, they're used in the integration tests name: php-integrationtests-${{ matrix.backend }}-${{ matrix.php-versions }}-${{ matrix.databases }} diff --git a/.github/workflows/phpunit.yml b/.github/workflows/phpunit.yml index cb5bf2ef..b1b1021d 100644 --- a/.github/workflows/phpunit.yml +++ b/.github/workflows/phpunit.yml @@ -20,7 +20,7 @@ jobs: matrix: php-versions: ['8.3'] databases: ['sqlite'] - server-versions: ['master'] + server-versions: ['stable32'] name: php${{ matrix.php-versions }}-${{ matrix.databases }} @@ -77,7 +77,7 @@ jobs: matrix: php-versions: ['8.3', '8.4'] databases: ['mysql'] - server-versions: ['master'] + server-versions: ['stable32'] name: php${{ matrix.php-versions }}-${{ matrix.databases }} @@ -143,7 +143,7 @@ jobs: matrix: php-versions: ['8.3'] databases: ['pgsql'] - server-versions: ['master'] + server-versions: ['stable32'] name: php${{ matrix.php-versions }}-${{ matrix.databases }} diff --git a/.github/workflows/psalm.yml b/.github/workflows/psalm.yml index c0149bfa..4166d869 100644 --- a/.github/workflows/psalm.yml +++ b/.github/workflows/psalm.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: - ocp-version: [ 'dev-master' ] + ocp-version: [ 'dev-stable32' ] php-version: [ '8.2', '8.3', '8.4' ] name: Nextcloud ${{ matrix.ocp-version }} PHP${{ matrix.php-version }} diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml index db308ff3..5850debd 100644 --- a/.github/workflows/sonarqube.yml +++ b/.github/workflows/sonarqube.yml @@ -20,7 +20,7 @@ jobs: matrix: php-versions: ['8.3'] databases: ['sqlite'] - server-versions: ['master'] + server-versions: ['stable32'] name: php${{ matrix.php-versions }}-${{ matrix.databases }}-COVERAGE diff --git a/composer.json b/composer.json index a1225bcc..785c2c82 100644 --- a/composer.json +++ b/composer.json @@ -8,7 +8,7 @@ "phpunit/phpcov": "^10.0", "nextcloud/coding-standard": "^1.3", "vimeo/psalm": "6.4.*", - "nextcloud/ocp": "dev-master" + "nextcloud/ocp": "dev-stable32" }, "config": { "optimize-autoloader": true, diff --git a/composer.lock b/composer.lock index 159f8506..6a97dbc3 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": "733a510036ecbd4d90e43c93ed8a497f", + "content-hash": "9a125df6e3f982cfdee04fee73978329", "packages": [ { "name": "mikehaertl/php-shellcommand", @@ -56,16 +56,16 @@ "packages-dev": [ { "name": "amphp/amp", - "version": "v3.1.0", + "version": "v3.1.1", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9" + "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9", - "reference": "7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9", + "url": "https://api.github.com/repos/amphp/amp/zipball/fa0ab33a6f47a82929c38d03ca47ebb71086a93f", + "reference": "fa0ab33a6f47a82929c38d03ca47ebb71086a93f", "shasum": "" }, "require": { @@ -125,7 +125,7 @@ ], "support": { "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v3.1.0" + "source": "https://github.com/amphp/amp/tree/v3.1.1" }, "funding": [ { @@ -133,7 +133,7 @@ "type": "github" } ], - "time": "2025-01-26T16:07:39+00:00" + "time": "2025-08-27T21:42:00+00:00" }, { "name": "amphp/byte-stream", @@ -366,16 +366,16 @@ }, { "name": "amphp/parallel", - "version": "v2.3.1", + "version": "v2.3.2", "source": { "type": "git", "url": "https://github.com/amphp/parallel.git", - "reference": "5113111de02796a782f5d90767455e7391cca190" + "reference": "321b45ae771d9c33a068186b24117e3cd1c48dce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/parallel/zipball/5113111de02796a782f5d90767455e7391cca190", - "reference": "5113111de02796a782f5d90767455e7391cca190", + "url": "https://api.github.com/repos/amphp/parallel/zipball/321b45ae771d9c33a068186b24117e3cd1c48dce", + "reference": "321b45ae771d9c33a068186b24117e3cd1c48dce", "shasum": "" }, "require": { @@ -438,7 +438,7 @@ ], "support": { "issues": "https://github.com/amphp/parallel/issues", - "source": "https://github.com/amphp/parallel/tree/v2.3.1" + "source": "https://github.com/amphp/parallel/tree/v2.3.2" }, "funding": [ { @@ -446,7 +446,7 @@ "type": "github" } ], - "time": "2024-12-21T01:56:09+00:00" + "time": "2025-08-27T21:55:40+00:00" }, { "name": "amphp/parser", @@ -943,16 +943,16 @@ }, { "name": "composer/semver", - "version": "3.4.3", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", "shasum": "" }, "require": { @@ -1004,7 +1004,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" + "source": "https://github.com/composer/semver/tree/3.4.4" }, "funding": [ { @@ -1014,13 +1014,9 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2024-09-19T14:15:21+00:00" + "time": "2025-08-20T19:15:30+00:00" }, { "name": "composer/xdebug-handler", @@ -1320,16 +1316,16 @@ }, { "name": "fidry/cpu-core-counter", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", "shasum": "" }, "require": { @@ -1339,10 +1335,10 @@ "fidry/makefile": "^0.2.0", "fidry/php-cs-fixer-config": "^1.1.2", "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^8.5.31 || ^9.5.26", "webmozarts/strict-phpunit": "^7.5" }, @@ -1369,7 +1365,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" }, "funding": [ { @@ -1377,7 +1373,7 @@ "type": "github" } ], - "time": "2024-08-06T10:04:20+00:00" + "time": "2025-08-14T07:29:31+00:00" }, { "name": "kelunik/certificate", @@ -1439,26 +1435,26 @@ }, { "name": "kubawerlos/php-cs-fixer-custom-fixers", - "version": "v3.24.0", + "version": "v3.35.1", "source": { "type": "git", "url": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers.git", - "reference": "93222100a91399314c3726857e249e76c4a7d760" + "reference": "2a35f80ae24ca77443a7af1599c3a3db1b6bd395" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kubawerlos/php-cs-fixer-custom-fixers/zipball/93222100a91399314c3726857e249e76c4a7d760", - "reference": "93222100a91399314c3726857e249e76c4a7d760", + "url": "https://api.github.com/repos/kubawerlos/php-cs-fixer-custom-fixers/zipball/2a35f80ae24ca77443a7af1599c3a3db1b6bd395", + "reference": "2a35f80ae24ca77443a7af1599c3a3db1b6bd395", "shasum": "" }, "require": { "ext-filter": "*", "ext-tokenizer": "*", - "friendsofphp/php-cs-fixer": "^3.61.1", + "friendsofphp/php-cs-fixer": "^3.87", "php": "^7.4 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.6.22 || 10.5.45 || ^11.5.7" + "phpunit/phpunit": "^9.6.24 || ^10.5.51 || ^11.5.32" }, "type": "library", "autoload": { @@ -1479,9 +1475,15 @@ "description": "A set of custom fixers for PHP CS Fixer", "support": { "issues": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers/issues", - "source": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers/tree/v3.24.0" + "source": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers/tree/v3.35.1" }, - "time": "2025-03-22T16:51:39+00:00" + "funding": [ + { + "url": "https://github.com/kubawerlos", + "type": "github" + } + ], + "time": "2025-09-28T18:43:35+00:00" }, { "name": "league/uri", @@ -1659,16 +1661,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.13.0", + "version": "1.13.4", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "024473a478be9df5fdaca2c793f2232fe788e414" + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", - "reference": "024473a478be9df5fdaca2c793f2232fe788e414", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { @@ -1707,7 +1709,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" }, "funding": [ { @@ -1715,7 +1717,7 @@ "type": "tidelift" } ], - "time": "2025-02-12T12:17:51+00:00" + "time": "2025-08-01T08:46:24+00:00" }, { "name": "netresearch/jsonmapper", @@ -1770,21 +1772,21 @@ }, { "name": "nextcloud/coding-standard", - "version": "v1.3.2", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/nextcloud/coding-standard.git", - "reference": "9c719c4747fa26efc12f2e8b21c14a9a75c6ba6d" + "reference": "8e06808c1423e9208d63d1bd205b9a38bd400011" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nextcloud/coding-standard/zipball/9c719c4747fa26efc12f2e8b21c14a9a75c6ba6d", - "reference": "9c719c4747fa26efc12f2e8b21c14a9a75c6ba6d", + "url": "https://api.github.com/repos/nextcloud/coding-standard/zipball/8e06808c1423e9208d63d1bd205b9a38bd400011", + "reference": "8e06808c1423e9208d63d1bd205b9a38bd400011", "shasum": "" }, "require": { "kubawerlos/php-cs-fixer-custom-fixers": "^3.22", - "php": "^7.3|^8.0", + "php": "^8.0", "php-cs-fixer/shim": "^3.17" }, "type": "library", @@ -1804,24 +1806,27 @@ } ], "description": "Nextcloud coding standards for the php cs fixer", + "keywords": [ + "dev" + ], "support": { "issues": "https://github.com/nextcloud/coding-standard/issues", - "source": "https://github.com/nextcloud/coding-standard/tree/v1.3.2" + "source": "https://github.com/nextcloud/coding-standard/tree/v1.4.0" }, - "time": "2024-10-14T16:49:05+00:00" + "time": "2025-06-19T12:27:27+00:00" }, { "name": "nextcloud/ocp", - "version": "dev-master", + "version": "dev-stable32", "source": { "type": "git", "url": "https://github.com/nextcloud-deps/ocp.git", - "reference": "8f470f66ec1d0d2e209c8a8a8a6ec30d4598e461" + "reference": "251d379ae2c80830880d49e1070926f89bc48669" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/8f470f66ec1d0d2e209c8a8a8a6ec30d4598e461", - "reference": "8f470f66ec1d0d2e209c8a8a8a6ec30d4598e461", + "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/251d379ae2c80830880d49e1070926f89bc48669", + "reference": "251d379ae2c80830880d49e1070926f89bc48669", "shasum": "" }, "require": { @@ -1831,11 +1836,10 @@ "psr/event-dispatcher": "^1.0", "psr/log": "^3.0.2" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "32.0.0-dev" + "dev-stable32": "32.0.0-dev" } }, "notification-url": "https://packagist.org/downloads/", @@ -1855,22 +1859,22 @@ "description": "Composer package containing Nextcloud's public OCP API and the unstable NCU API", "support": { "issues": "https://github.com/nextcloud-deps/ocp/issues", - "source": "https://github.com/nextcloud-deps/ocp/tree/master" + "source": "https://github.com/nextcloud-deps/ocp/tree/stable32" }, - "time": "2025-04-24T00:50:06+00:00" + "time": "2025-10-03T00:46:18+00:00" }, { "name": "nikic/php-parser", - "version": "v5.4.0", + "version": "v5.6.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494" + "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", + "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", "shasum": "" }, "require": { @@ -1889,7 +1893,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -1913,9 +1917,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1" }, - "time": "2024-12-30T11:07:19+00:00" + "time": "2025-08-13T20:13:15+00:00" }, { "name": "phar-io/manifest", @@ -2037,16 +2041,16 @@ }, { "name": "php-cs-fixer/shim", - "version": "v3.75.0", + "version": "v3.88.2", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/shim.git", - "reference": "eea219a577085bd13ff0cb644a422c20798316c7" + "reference": "b70300670e5a37dd3a9cb0f188e186c8c206f70f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/eea219a577085bd13ff0cb644a422c20798316c7", - "reference": "eea219a577085bd13ff0cb644a422c20798316c7", + "url": "https://api.github.com/repos/PHP-CS-Fixer/shim/zipball/b70300670e5a37dd3a9cb0f188e186c8c206f70f", + "reference": "b70300670e5a37dd3a9cb0f188e186c8c206f70f", "shasum": "" }, "require": { @@ -2083,9 +2087,9 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/PHP-CS-Fixer/shim/issues", - "source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.75.0" + "source": "https://github.com/PHP-CS-Fixer/shim/tree/v3.88.2" }, - "time": "2025-03-31T18:45:02+00:00" + "time": "2025-09-27T00:25:01+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -2142,16 +2146,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.2", + "version": "5.6.3", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62" + "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94f8051919d1b0369a6bcc7931d679a511c03fe9", + "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9", "shasum": "" }, "require": { @@ -2200,9 +2204,9 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.3" }, - "time": "2025-04-13T19:20:35+00:00" + "time": "2025-08-01T19:43:32+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -2264,16 +2268,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.1.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", "shasum": "" }, "require": { @@ -2305,22 +2309,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0" }, - "time": "2025-02-19T13:28:12+00:00" + "time": "2025-08-30T15:50:23+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "11.0.9", + "version": "11.0.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7" + "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/14d63fbcca18457e49c6f8bebaa91a87e8e188d7", - "reference": "14d63fbcca18457e49c6f8bebaa91a87e8e188d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", + "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", "shasum": "" }, "require": { @@ -2377,15 +2381,27 @@ "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/11.0.9" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.11" }, "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-code-coverage", + "type": "tidelift" } ], - "time": "2025-02-25T13:26:39+00:00" + "time": "2025-08-27T14:37:49+00:00" }, { "name": "phpunit/php-file-iterator", @@ -2696,16 +2712,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.18", + "version": "11.5.42", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "fc3e887c7f3f9917e1bf61e523413d753db00a17" + "reference": "1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fc3e887c7f3f9917e1bf61e523413d753db00a17", - "reference": "fc3e887c7f3f9917e1bf61e523413d753db00a17", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c", + "reference": "1c6cb5dfe412af3d0dfd414cfd110e3b9cfdbc3c", "shasum": "" }, "require": { @@ -2715,24 +2731,24 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.0", + "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.2", - "phpunit/php-code-coverage": "^11.0.9", + "phpunit/php-code-coverage": "^11.0.11", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-invoker": "^5.0.1", "phpunit/php-text-template": "^4.0.1", "phpunit/php-timer": "^7.0.1", "sebastian/cli-parser": "^3.0.2", "sebastian/code-unit": "^3.0.3", - "sebastian/comparator": "^6.3.1", + "sebastian/comparator": "^6.3.2", "sebastian/diff": "^6.0.2", - "sebastian/environment": "^7.2.0", - "sebastian/exporter": "^6.3.0", + "sebastian/environment": "^7.2.1", + "sebastian/exporter": "^6.3.2", "sebastian/global-state": "^7.0.2", "sebastian/object-enumerator": "^6.0.1", - "sebastian/type": "^5.1.2", + "sebastian/type": "^5.1.3", "sebastian/version": "^5.0.2", "staabm/side-effects-detector": "^1.0.5" }, @@ -2777,7 +2793,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.18" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.42" }, "funding": [ { @@ -2801,7 +2817,7 @@ "type": "tidelift" } ], - "time": "2025-04-22T06:09:49+00:00" + "time": "2025-09-28T12:09:13+00:00" }, { "name": "psr/clock", @@ -3356,16 +3372,16 @@ }, { "name": "sebastian/comparator", - "version": "6.3.1", + "version": "6.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959" + "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959", - "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85c77556683e6eee4323e4c5468641ca0237e2e8", + "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8", "shasum": "" }, "require": { @@ -3424,15 +3440,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.2" }, "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/comparator", + "type": "tidelift" } ], - "time": "2025-03-07T06:57:01+00:00" + "time": "2025-08-10T08:07:46+00:00" }, { "name": "sebastian/complexity", @@ -3561,23 +3589,23 @@ }, { "name": "sebastian/environment", - "version": "7.2.0", + "version": "7.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5" + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", - "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.3" }, "suggest": { "ext-posix": "*" @@ -3613,28 +3641,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/7.2.0" + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1" }, "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/environment", + "type": "tidelift" } ], - "time": "2024-07-03T04:54:44+00:00" + "time": "2025-05-21T11:55:47+00:00" }, { "name": "sebastian/exporter", - "version": "6.3.0", + "version": "6.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", "shasum": "" }, "require": { @@ -3648,7 +3688,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -3691,15 +3731,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" }, "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/exporter", + "type": "tidelift" } ], - "time": "2024-12-05T09:17:50+00:00" + "time": "2025-09-24T06:12:51+00:00" }, { "name": "sebastian/global-state", @@ -3937,23 +3989,23 @@ }, { "name": "sebastian/recursion-context", - "version": "6.0.2", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", - "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { @@ -3989,28 +4041,40 @@ "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/6.0.2" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" }, "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/recursion-context", + "type": "tidelift" } ], - "time": "2024-07-03T05:10:34+00:00" + "time": "2025-08-13T04:42:22+00:00" }, { "name": "sebastian/type", - "version": "5.1.2", + "version": "5.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e" + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", - "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", "shasum": "" }, "require": { @@ -4046,15 +4110,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/5.1.2" + "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" }, "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/type", + "type": "tidelift" } ], - "time": "2025-03-18T13:35:50+00:00" + "time": "2025-08-09T06:55:48+00:00" }, { "name": "sebastian/version", @@ -4232,23 +4308,24 @@ }, { "name": "symfony/console", - "version": "v7.2.5", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "e51498ea18570c062e7df29d05a7003585b19b88" + "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/e51498ea18570c062e7df29d05a7003585b19b88", - "reference": "e51498ea18570c062e7df29d05a7003585b19b88", + "url": "https://api.github.com/repos/symfony/console/zipball/2b9c5fafbac0399a20a2e82429e2bd735dcfb7db", + "reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0" + "symfony/string": "^7.2" }, "conflict": { "symfony/dependency-injection": "<6.4", @@ -4305,7 +4382,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.5" + "source": "https://github.com/symfony/console/tree/v7.3.4" }, "funding": [ { @@ -4316,25 +4393,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-03-12T08:11:12+00:00" + "time": "2025-09-22T15:31:00+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { @@ -4347,7 +4428,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -4372,7 +4453,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -4388,20 +4469,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/filesystem", - "version": "v7.2.0", + "version": "v7.3.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" + "reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", - "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/edcbb768a186b5c3f25d0643159a787d3e63b7fd", + "reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd", "shasum": "" }, "require": { @@ -4438,7 +4519,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.2.0" + "source": "https://github.com/symfony/filesystem/tree/v7.3.2" }, "funding": [ { @@ -4449,16 +4530,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-10-25T15:15:23+00:00" + "time": "2025-07-07T08:17:47+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -4517,7 +4602,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" }, "funding": [ { @@ -4528,6 +4613,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -4537,16 +4626,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", "shasum": "" }, "require": { @@ -4595,7 +4684,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" }, "funding": [ { @@ -4606,16 +4695,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-06-27T09:58:17+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -4676,7 +4769,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" }, "funding": [ { @@ -4687,6 +4780,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -4696,19 +4793,20 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { + "ext-iconv": "*", "php": ">=7.2" }, "provide": { @@ -4756,7 +4854,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -4767,25 +4865,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", "shasum": "" }, "require": { @@ -4803,7 +4905,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -4839,7 +4941,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" }, "funding": [ { @@ -4855,20 +4957,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-04-25T09:37:31+00:00" }, { "name": "symfony/string", - "version": "v7.2.0", + "version": "v7.3.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" + "reference": "f96476035142921000338bad71e5247fbc138872" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", + "url": "https://api.github.com/repos/symfony/string/zipball/f96476035142921000338bad71e5247fbc138872", + "reference": "f96476035142921000338bad71e5247fbc138872", "shasum": "" }, "require": { @@ -4883,7 +4985,6 @@ }, "require-dev": { "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", "symfony/http-client": "^6.4|^7.0", "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", @@ -4926,7 +5027,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.2.0" + "source": "https://github.com/symfony/string/tree/v7.3.4" }, "funding": [ { @@ -4937,12 +5038,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-13T13:31:26+00:00" + "time": "2025-09-11T14:36:48+00:00" }, { "name": "theseer/tokenizer", From 377826a7a660f42f3b053fda68ad5e0ee00ad939 Mon Sep 17 00:00:00 2001 From: R0Wi Date: Fri, 3 Oct 2025 10:15:58 +0000 Subject: [PATCH 2/3] Apply php-cs-fixer changes --- lib/BackgroundJobs/ProcessFileJob.php | 4 +- lib/Events/TextRecognizedEvent.php | 2 +- lib/Notification/Notifier.php | 8 ++-- lib/OcrProcessors/CommandLineUtils.php | 2 +- lib/OcrProcessors/OcrProcessorFactory.php | 8 ++-- lib/OcrProcessors/Remote/Client/ApiClient.php | 4 +- .../Remote/WorkflowOcrRemoteProcessor.php | 4 +- lib/Operation.php | 14 +++--- lib/Service/OcrService.php | 12 ++--- lib/Settings/GlobalSettings.php | 4 +- lib/SetupChecks/OcrMyPdfCheck.php | 12 ++--- lib/Wrapper/CommandWrapper.php | 8 ++-- lib/Wrapper/ICommand.php | 12 ++--- tests/Integration/AppTest.php | 2 +- tests/Integration/BackendTestBase.php | 6 +-- .../Notification/NotificationTest.php | 2 +- .../BackgroundJobs/ProcessFileJobTest.php | 6 +-- .../Helper/ProcessingFIleAccessorTest.php | 2 +- .../RegisterFlowOperationsListenerTest.php | 4 +- tests/Unit/Notification/NotifierTest.php | 4 +- .../Local/PdfOcrProcessorTest.php | 10 ++--- tests/Unit/OperationTest.php | 24 +++++----- .../Service/OcrBackendInfoServiceTest.php | 2 +- tests/Unit/Service/OcrServiceTest.php | 44 +++++++++---------- 24 files changed, 100 insertions(+), 100 deletions(-) diff --git a/lib/BackgroundJobs/ProcessFileJob.php b/lib/BackgroundJobs/ProcessFileJob.php index c506d7d6..80fa908d 100644 --- a/lib/BackgroundJobs/ProcessFileJob.php +++ b/lib/BackgroundJobs/ProcessFileJob.php @@ -39,7 +39,7 @@ class ProcessFileJob extends \OCP\BackgroundJob\QueuedJob { protected $logger; /** @var IOcrService */ private $ocrService; - + public function __construct( LoggerInterface $logger, IOcrService $ocrService, @@ -48,7 +48,7 @@ public function __construct( $this->logger = $logger; $this->ocrService = $ocrService; } - + /** * @param mixed $argument */ diff --git a/lib/Events/TextRecognizedEvent.php b/lib/Events/TextRecognizedEvent.php index f5e322e9..c659b16e 100644 --- a/lib/Events/TextRecognizedEvent.php +++ b/lib/Events/TextRecognizedEvent.php @@ -44,7 +44,7 @@ class TextRecognizedEvent extends Event { */ public function __construct(string $recognizedText, File $file) { parent::__construct(); - + $this->recognizedText = $recognizedText; $this->file = $file; } diff --git a/lib/Notification/Notifier.php b/lib/Notification/Notifier.php index fdd927cb..3d12aaa8 100644 --- a/lib/Notification/Notifier.php +++ b/lib/Notification/Notifier.php @@ -104,15 +104,15 @@ public function prepare(INotification $notification, string $languageCode): INot // Only add file info if we have some ... $richParams = false; - if ($notification->getObjectType() === 'file' && - ($fileId = $notification->getObjectId()) && - ($uid = $notification->getUser())) { + if ($notification->getObjectType() === 'file' + && ($fileId = $notification->getObjectId()) + && ($uid = $notification->getUser())) { $richParams = $this->tryGetRichParamForFile($uid, intval($fileId)); if ($richParams !== false) { $notification->setRichSubject($richSubject, $richParams); } } - + // Fallback to generic error message without file link if ($richParams === false) { $notification->setParsedSubject($parsedSubject); diff --git a/lib/OcrProcessors/CommandLineUtils.php b/lib/OcrProcessors/CommandLineUtils.php index f6c4889b..5e4fa8f8 100644 --- a/lib/OcrProcessors/CommandLineUtils.php +++ b/lib/OcrProcessors/CommandLineUtils.php @@ -44,7 +44,7 @@ public function __construct( public function getCommandlineArgs(WorkflowSettings $settings, GlobalSettings $globalSettings, ?string $sidecarFile = null, array $additionalCommandlineArgs = []): string { $isLocalExecution = !$this->ocrBackendInfoService->isRemoteBackend(); - + // Default setting is quiet $args = $isLocalExecution ? ['-q'] : []; diff --git a/lib/OcrProcessors/OcrProcessorFactory.php b/lib/OcrProcessors/OcrProcessorFactory.php index 6ae492a4..ce939a0c 100644 --- a/lib/OcrProcessors/OcrProcessorFactory.php +++ b/lib/OcrProcessors/OcrProcessorFactory.php @@ -67,14 +67,14 @@ public static function registerOcrProcessors(IRegistrationContext $context) : vo * "singleton per request" which leads to problems regarding the reused Command object * under the hood. */ - $context->registerService(PdfOcrProcessor::class, fn (ContainerInterface $c) => - new PdfOcrProcessor( + $context->registerService(PdfOcrProcessor::class, fn (ContainerInterface $c) + => new PdfOcrProcessor( $c->get(ICommand::class), $c->get(LoggerInterface::class), $c->get(ISidecarFileAccessor::class), $c->get(ICommandLineUtils::class)), false); - $context->registerService(ImageOcrProcessor::class, fn (ContainerInterface $c) => - new ImageOcrProcessor( + $context->registerService(ImageOcrProcessor::class, fn (ContainerInterface $c) + => new ImageOcrProcessor( $c->get(ICommand::class), $c->get(LoggerInterface::class), $c->get(ISidecarFileAccessor::class), diff --git a/lib/OcrProcessors/Remote/Client/ApiClient.php b/lib/OcrProcessors/Remote/Client/ApiClient.php index 4576803e..94f7fa33 100644 --- a/lib/OcrProcessors/Remote/Client/ApiClient.php +++ b/lib/OcrProcessors/Remote/Client/ApiClient.php @@ -37,7 +37,7 @@ public function __construct( private LoggerInterface $logger, ) { } - + public function processOcr($file, string $fileName, string $ocrMyPdfParameters): OcrResult|ErrorResult { $options = [ 'multipart' => [ @@ -92,7 +92,7 @@ private function exAppRequest(string $path, ?array $options, string $method, boo $options ?? [] ); $this->logger->debug('Response received', ['path' => $path, 'response' => $response]); - + if (is_array($response) || ($throwIfResponseCodeNot200 && $response->getStatusCode() !== 200)) { $this->logger->error('Request failed', ['path' => $path, 'response' => $response]); throw new RuntimeException('Request failed'); diff --git a/lib/OcrProcessors/Remote/WorkflowOcrRemoteProcessor.php b/lib/OcrProcessors/Remote/WorkflowOcrRemoteProcessor.php index b0e525b4..c86c6d1d 100644 --- a/lib/OcrProcessors/Remote/WorkflowOcrRemoteProcessor.php +++ b/lib/OcrProcessors/Remote/WorkflowOcrRemoteProcessor.php @@ -46,12 +46,12 @@ public function __construct( ) { } - + public function ocrFile(File $file, WorkflowSettings $settings, GlobalSettings $globalSettings): OcrProcessorResult { $ocrMyPdfParameters = $this->commandLineUtils->getCommandlineArgs($settings, $globalSettings); $fileResource = $file->fopen('rb'); $fileName = $file->getName(); - + $this->logger->debug('Sending OCR request to remote backend'); $apiResult = $this->apiClient->processOcr($fileResource, $fileName, $ocrMyPdfParameters); $this->logger->debug('OCR result received', ['apiResult' => $apiResult]); diff --git a/lib/Operation.php b/lib/Operation.php index 2c1848e4..5adb0503 100644 --- a/lib/Operation.php +++ b/lib/Operation.php @@ -104,15 +104,15 @@ public function onEvent(string $eventName, Event $event, IRuleMatcher $ruleMatch $this->logger->debug('onEvent: ' . $eventName); // $node and $argsArray will be passed by reference - if (!($match = $this->getMatch($ruleMatcher)) || - !$this->tryGetFile($eventName, $event, $node) || - $this->eventTriggeredByOcrProcess($node) || - !$this->tryGetJobArgs($node, $match['operation'], $argsArray)) { + if (!($match = $this->getMatch($ruleMatcher)) + || !$this->tryGetFile($eventName, $event, $node) + || $this->eventTriggeredByOcrProcess($node) + || !$this->tryGetJobArgs($node, $match['operation'], $argsArray)) { return; } - + $this->logger->debug('Adding file to jobqueue: ' . json_encode($argsArray)); - + $this->jobList->add(ProcessFileJob::class, $argsArray); } @@ -140,7 +140,7 @@ private function tryGetFile(string $eventName, Event $event, ?Node & $node) : bo private function tryGetFileFromGenericEvent(string $eventName, GenericEvent $event, ?Node & $node) : bool { $node = $event->getSubject(); - + // Some events have two nodes involved $arrayEvents = [ '\OCP\Files::postRename', diff --git a/lib/Service/OcrService.php b/lib/Service/OcrService.php index 91ecf65d..84af5ca4 100644 --- a/lib/Service/OcrService.php +++ b/lib/Service/OcrService.php @@ -155,7 +155,7 @@ public function runOcrProcess(int $fileId, string $uid, WorkflowSettings $settin $ocrProcessor = $this->ocrProcessorFactory->create($file->getMimeType()); $globalSettings = $this->globalSettingsService->getGlobalSettings(); - + try { $result = $ocrProcessor->ocrFile($file, $settings, $globalSettings); } catch (OcrAlreadyDoneException $ex) { @@ -181,9 +181,9 @@ private function parseArguments($argument) : array { throw new \InvalidArgumentException('Argument is not an array in ' . self::class . ' method \'tryParseArguments\'.'); } - $getArgument = fn ($key) => array_key_exists($key, $argument) ? - $argument[$key] : - throw new \InvalidArgumentException("Argument key '$key' not found in " . self::class . ' method \'tryParseArguments\'.'); + $getArgument = fn ($key) => array_key_exists($key, $argument) + ? $argument[$key] + : throw new \InvalidArgumentException("Argument key '$key' not found in " . self::class . ' method \'tryParseArguments\'.'); $jsonSettings = $getArgument('settings'); $settings = new WorkflowSettings($jsonSettings); @@ -222,7 +222,7 @@ private function getNode(int $fileId) : Node { if (count($nodeArr) === 0) { throw new NotFoundException('Could not process file with id \'' . $fileId . '\'. File was not found'); } - + $node = array_shift($nodeArr); if (!$node instanceof Node || $node->getType() !== FileInfo::TYPE_FILE) { @@ -263,7 +263,7 @@ private function processTagsAfterSuccessfulOcr(File $file, WorkflowSettings $set private function createNewFileVersion(string $filePath, string $ocrContent, ?int $fileMtime = null) : void { $dirPath = dirname($filePath); $filename = basename($filePath); - + $this->processingFileAccessor->setCurrentlyProcessedFilePath($filePath); try { diff --git a/lib/Settings/GlobalSettings.php b/lib/Settings/GlobalSettings.php index b6d6c62e..a6c73ce2 100644 --- a/lib/Settings/GlobalSettings.php +++ b/lib/Settings/GlobalSettings.php @@ -37,11 +37,11 @@ class GlobalSettings implements ISettings { public function getForm() : TemplateResponse { return new TemplateResponse(Application::APP_NAME, 'globalSettings', [], 'blank'); } - + public function getSection(): string { return 'workflow'; } - + public function getPriority(): int { return 75; } diff --git a/lib/SetupChecks/OcrMyPdfCheck.php b/lib/SetupChecks/OcrMyPdfCheck.php index 9a6cc8c7..9bc8d9c8 100644 --- a/lib/SetupChecks/OcrMyPdfCheck.php +++ b/lib/SetupChecks/OcrMyPdfCheck.php @@ -53,9 +53,9 @@ public function getName(): string { } public function run(): SetupResult { - return $this->ocrBackendInfoService->isRemoteBackend() ? - $this->runRemoteCheck() : - $this->runLocalCheck(); + return $this->ocrBackendInfoService->isRemoteBackend() + ? $this->runRemoteCheck() + : $this->runLocalCheck(); } private function runLocalCheck(): SetupResult { @@ -72,9 +72,9 @@ private function runLocalCheck(): SetupResult { private function runRemoteCheck(): SetupResult { try { - return $this->apiClient->heartbeat() ? - SetupResult::success($this->l10n->t('Workflow OCR Backend is installed.')) : - SetupResult::warning($this->l10n->t('Workflow OCR Backend is installed but heartbeat failed.')); + return $this->apiClient->heartbeat() + ? SetupResult::success($this->l10n->t('Workflow OCR Backend is installed.')) + : SetupResult::warning($this->l10n->t('Workflow OCR Backend is installed but heartbeat failed.')); } catch (\Exception $e) { $this->logger->error('Error while checking OCRmyPDF backend: ' . $e->getMessage(), [ 'exception' => $e, diff --git a/lib/Wrapper/CommandWrapper.php b/lib/Wrapper/CommandWrapper.php index 118e0a28..92ada7fa 100644 --- a/lib/Wrapper/CommandWrapper.php +++ b/lib/Wrapper/CommandWrapper.php @@ -50,21 +50,21 @@ public function setStdIn(string $stdIn) : ICommand { $this->command->setStdIn($stdIn); return $this; } - + /** * @inheritdoc */ public function execute() : bool { return (bool)$this->command->execute(); } - + /** * @inheritdoc */ public function getOutput(bool $trim = true) : string { return (string)$this->command->getOutput($trim); } - + /** * @inheritdoc */ @@ -78,7 +78,7 @@ public function getError(bool $trim = true) : string { public function getStdErr(bool $trim = true) : string { return (string)$this->command->getStdErr($trim); } - + /** * @inheritdoc */ diff --git a/lib/Wrapper/ICommand.php b/lib/Wrapper/ICommand.php index 4465331e..45f486de 100644 --- a/lib/Wrapper/ICommand.php +++ b/lib/Wrapper/ICommand.php @@ -35,7 +35,7 @@ interface ICommand { * @return ICommand for method chaining */ public function setCommand(string $command) : ICommand; - + /** * @param string $stdIn If set, the string will be piped to the * command via standard input. This enables the same functionality as @@ -45,7 +45,7 @@ public function setCommand(string $command) : ICommand; * @return ICommand for method chaining */ public function setStdIn(string $stdIn) : ICommand; - + /** * Execute the command * @@ -53,26 +53,26 @@ public function setStdIn(string $stdIn) : ICommand; * can be obtained from getError(), getStdErr() and getExitCode(). */ public function execute() : bool; - + /** * @param bool $trim whether to `trim()` the return value. The default is `true`. * @return string the command output (stdout). Empty if none. */ public function getOutput(bool $trim = true) : string; - + /** * @param bool $trim whether to `trim()` the return value. The default is `true`. * @return string the error message, either stderr or an internal message. * Empty string if none. */ public function getError(bool $trim = true) : string; - + /** * @param bool $trim whether to `trim()` the return value. The default is `true`. * @return string the stderr output. Empty if none. */ public function getStdErr(bool $trim = true) : string; - + /** * @return int|null the exit code or null if command was not executed yet */ diff --git a/tests/Integration/AppTest.php b/tests/Integration/AppTest.php index b78fff73..b57ba257 100644 --- a/tests/Integration/AppTest.php +++ b/tests/Integration/AppTest.php @@ -80,7 +80,7 @@ private function runBootstrapRegistrations(bool $lazy) { // HACK:: reset registrations and simulate request start $this->invokePrivate($bootstrapCoordinator, 'registrationContext', [null]); - + if ($lazy) { $bootstrapCoordinator->runLazyRegistration(Application::APP_NAME); } else { diff --git a/tests/Integration/BackendTestBase.php b/tests/Integration/BackendTestBase.php index 17a21e9d..ead505b8 100644 --- a/tests/Integration/BackendTestBase.php +++ b/tests/Integration/BackendTestBase.php @@ -136,7 +136,7 @@ protected function addOperation(string $mimeType, string $operationJson = '') { private function deleteOperation() { // Clear managers cache and operations to ensure "deleteOperation" works $reflection = new \ReflectionClass($this->workflowEngineManager); - + $operationsByScopeProperty = $reflection->getProperty('operationsByScope'); $operationsByScopeProperty->setAccessible(true); $operationsByScope = $operationsByScopeProperty->getValue($this->workflowEngineManager); @@ -154,7 +154,7 @@ private function deleteOperation() { // ignore } } - + } protected function uploadTestFile(string $testFile) { @@ -181,7 +181,7 @@ private function deleteTestFilesIfExist() { curl_setopt($ch, CURLOPT_URL, $this->getNextcloudWebdavUrl() . basename($localFile)); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - + $this->executeCurl($ch, [404]); } $this->uploadedFiles = []; diff --git a/tests/Integration/Notification/NotificationTest.php b/tests/Integration/Notification/NotificationTest.php index ad256c27..5864c48a 100644 --- a/tests/Integration/Notification/NotificationTest.php +++ b/tests/Integration/Notification/NotificationTest.php @@ -61,7 +61,7 @@ public static function setUpBeforeClass() : void { protected function setUp() : void { parent::setUp(); - + // Use real Notification service to be able to check if notifications get created $this->notificationService = new NotificationService(\OC::$server->get(\OCP\Notification\IManager::class)); $this->logger = $this->createMock(LoggerInterface::class); diff --git a/tests/Unit/BackgroundJobs/ProcessFileJobTest.php b/tests/Unit/BackgroundJobs/ProcessFileJobTest.php index 82361c9f..86e18b46 100644 --- a/tests/Unit/BackgroundJobs/ProcessFileJobTest.php +++ b/tests/Unit/BackgroundJobs/ProcessFileJobTest.php @@ -38,10 +38,10 @@ class ProcessFileJobTest extends TestCase { /** @var LoggerInterface|MockObject */ private $logger; - + /** @var IOcrService|MockObject */ private $ocrService; - + /** @var JobList */ private $jobList; @@ -107,7 +107,7 @@ public function testCallsOcrService() { $this->ocrService->expects($this->once()) ->method('runOcrProcessWithJobArgument') ->with($this->equalTo($this->argument)); - + $this->processFileJob->start($this->jobList); } } diff --git a/tests/Unit/Helper/ProcessingFIleAccessorTest.php b/tests/Unit/Helper/ProcessingFIleAccessorTest.php index 31eadc25..b6a33bc0 100644 --- a/tests/Unit/Helper/ProcessingFIleAccessorTest.php +++ b/tests/Unit/Helper/ProcessingFIleAccessorTest.php @@ -33,7 +33,7 @@ public function testSingleton() { $this->assertTrue($o1 === $o2); } - + public function testGetSet() { $o = ProcessingFileAccessor::getInstance(); $o ->setCurrentlyProcessedFilePath('/someuser/files/somefile.pdf'); diff --git a/tests/Unit/Listener/RegisterFlowOperationsListenerTest.php b/tests/Unit/Listener/RegisterFlowOperationsListenerTest.php index 83f27dd9..63c7ddfd 100644 --- a/tests/Unit/Listener/RegisterFlowOperationsListenerTest.php +++ b/tests/Unit/Listener/RegisterFlowOperationsListenerTest.php @@ -41,7 +41,7 @@ class RegisterFlowOperationsListenerTest extends TestCase { /** @var ContainerInterface|MockObject */ private $container; - + public function setUp() : void { parent::setUp(); $this->container = $this->createMock(ContainerInterface::class); @@ -88,7 +88,7 @@ public function testRegistersOperationClassAndScripts_OnRegisterOperationsEvent( $scriptCount++; } } - + $this->assertEquals(2, $scriptCount); } diff --git a/tests/Unit/Notification/NotifierTest.php b/tests/Unit/Notification/NotifierTest.php index da917c57..644ca43f 100644 --- a/tests/Unit/Notification/NotifierTest.php +++ b/tests/Unit/Notification/NotifierTest.php @@ -181,7 +181,7 @@ public function testPrepareConstructsOcrErrorCorrectlyWithFileId() { ->willReturn('http://localhost/index.php/apps/files/?file=123'); $preparedNotification = $this->notifier->prepare($notification, 'en'); - + $richSubject = $preparedNotification->getRichSubject(); $richSubjectParams = $preparedNotification->getRichSubjectParameters(); @@ -227,7 +227,7 @@ public function testPrepareConstructsOcrErrorCorrectlyWithoutFile() { ->method('linkToRouteAbsolute'); $preparedNotification = $this->notifier->prepare($notification, 'en'); - + $this->assertEmpty($preparedNotification->getRichSubject()); $this->assertEmpty($preparedNotification->getRichSubjectParameters()); $this->assertEquals(' Workflow OCR error', $preparedNotification->getParsedSubject()); diff --git a/tests/Unit/OcrProcessors/Local/PdfOcrProcessorTest.php b/tests/Unit/OcrProcessors/Local/PdfOcrProcessorTest.php index 872e8675..bdade24a 100644 --- a/tests/Unit/OcrProcessors/Local/PdfOcrProcessorTest.php +++ b/tests/Unit/OcrProcessors/Local/PdfOcrProcessorTest.php @@ -73,7 +73,7 @@ protected function setUp(): void { $this->sidecarFileAccessor = $this->createMock(ISidecarFileAccessor::class); $this->ocrBackendInfoService = $this->createMock(IOcrBackendInfoService::class); $this->commandLineUtils = new CommandLineUtils($this->ocrBackendInfoService, $this->logger); - + $this->defaultSettings = new WorkflowSettings(); $this->defaultGlobalSettings = new GlobalSettings(); $this->fileBefore = $this->createMock(File::class); @@ -156,10 +156,10 @@ public function testLogsWarningIfOcrMyPdfSucceedsWithWarningOutput() { ->with( 'OCRmyPDF succeeded with warning(s): {stdErr}, {errorOutput}', $this->callback(function ($paramsArray) { - return is_array($paramsArray) && - count($paramsArray) === 2 && - $paramsArray['stdErr'] === 'stdErrOutput' && - $paramsArray['errorOutput'] === 'getErrorOutput'; + return is_array($paramsArray) + && count($paramsArray) === 2 + && $paramsArray['stdErr'] === 'stdErrOutput' + && $paramsArray['errorOutput'] === 'getErrorOutput'; })); $processor = new PdfOcrProcessor($this->command, $this->logger, $this->sidecarFileAccessor, $this->commandLineUtils); diff --git a/tests/Unit/OperationTest.php b/tests/Unit/OperationTest.php index 8858b12b..73c4818b 100644 --- a/tests/Unit/OperationTest.php +++ b/tests/Unit/OperationTest.php @@ -66,7 +66,7 @@ class OperationTest extends TestCase { protected function setUp(): void { parent::setUp(); - + $this->jobList = $this->createMock(IJobList::class); $this->l = $this->createMock(IL10N::class); $this->logger = $this->createMock(LoggerInterface::class); @@ -275,9 +275,9 @@ public function testDoesNothingOnUnsupportedEvent() { $this->logger->expects($this->once()) ->method('warning') ->withAnyParameters(); - + $operation = new Operation($this->jobList, $this->l, $this->logger, $this->urlGenerator, $this->processingFileAccessor, $this->rootFolder); - + $operation->onEvent($eventName, $event, $this->ruleMatcher); } @@ -290,9 +290,9 @@ public function testDoesNothingOnMapperTypeEventWithObjectTypeFolder() { $this->logger->expects($this->once()) ->method('warning') ->withAnyParameters(); - + $operation = new Operation($this->jobList, $this->l, $this->logger, $this->urlGenerator, $this->processingFileAccessor, $this->rootFolder); - + $operation->onEvent($eventName, $event, $this->ruleMatcher); } @@ -305,9 +305,9 @@ public function testDoesNothingOnMapperEventHavingInvalidFileId() { $this->logger->expects($this->once()) ->method('warning') ->withAnyParameters(); - + $operation = new Operation($this->jobList, $this->l, $this->logger, $this->urlGenerator, $this->processingFileAccessor, $this->rootFolder); - + $operation->onEvent($eventName, $event, $this->ruleMatcher); } @@ -326,9 +326,9 @@ public function testDoesNothingOnMapperEventIfFileNotFound() { ->method('getById') ->with(42) ->willReturn([]); - + $operation = new Operation($this->jobList, $this->l, $this->logger, $this->urlGenerator, $this->processingFileAccessor, $this->rootFolder); - + $operation->onEvent($eventName, $event, $this->ruleMatcher); } @@ -347,9 +347,9 @@ public function testDoesNothingOnMapperEventIfObjectIdIsFolder() { ->method('getById') ->with(42) ->willReturn([$this->createMock(Folder::class)]); - + $operation = new Operation($this->jobList, $this->l, $this->logger, $this->urlGenerator, $this->processingFileAccessor, $this->rootFolder); - + $operation->onEvent($eventName, $event, $this->ruleMatcher); } @@ -381,7 +381,7 @@ public function testFileAddedToQueueOnTagAssignedEvent() { ->willReturn([$fileMock]); $operation = new Operation($this->jobList, $this->l, $this->logger, $this->urlGenerator, $this->processingFileAccessor, $rootFolder); - + $operation->onEvent($eventName, $event, $this->ruleMatcher); } diff --git a/tests/Unit/Service/OcrBackendInfoServiceTest.php b/tests/Unit/Service/OcrBackendInfoServiceTest.php index 8679e4f3..2f607b41 100644 --- a/tests/Unit/Service/OcrBackendInfoServiceTest.php +++ b/tests/Unit/Service/OcrBackendInfoServiceTest.php @@ -191,7 +191,7 @@ public function testGetInstalledLanguagesFromRemoteBackend() { ->method('getExApp') ->with('workflow_ocr_backend') ->willReturn(['enabled' => true]); - + $this->apiClient->expects($this->once()) ->method('getLanguages') ->willReturn(['eng', 'deu', 'chi']); diff --git a/tests/Unit/Service/OcrServiceTest.php b/tests/Unit/Service/OcrServiceTest.php index 21ded7a7..f6f70342 100644 --- a/tests/Unit/Service/OcrServiceTest.php +++ b/tests/Unit/Service/OcrServiceTest.php @@ -303,7 +303,7 @@ public function testCatchesTagNotFoundException() { $this->logger->expects($this->exactly(2)) ->method('warning'); - + $this->ocrService->runOcrProcess(42, 'usr', $settings); } @@ -312,7 +312,7 @@ public function testResetsUserEnvironmentOnException() { $exception = new Exception('someEx'); $this->filesystem->method('init') ->willThrowException($exception); - + // Make sure user-environment is reset after any exception // so the user should be set on beginning but should also // be reset to null after any run. @@ -341,7 +341,7 @@ public function testCallsInitFilesystem() { $this->filesystem->expects($this->once()) ->method('init') ->with('usr', '/usr/files'); - + $this->ocrService->runOcrProcess(42, 'usr', $settings); } @@ -350,14 +350,14 @@ public function testCallsGetOnRootFolder() { $this->rootFolder->expects($this->once()) ->method('getById') ->with(42); - + $this->ocrService->runOcrProcess(42, 'usr', $settings); } public function testCallsOcrProcessorWithFile() { $globalSettings = new GlobalSettings(); $settings = new WorkflowSettings(); - + $mimeType = 'application/pdf'; $content = 'someFileContent'; $fileMock = $this->createValidFileMock($mimeType, $content); @@ -384,7 +384,7 @@ public function testCreatesNewFileVersionAndEmitsTextRecognizedEvent(string $ori $ocrContent = 'someOcrProcessedFile'; $ocrResult = new OcrProcessorResult($ocrContent, 'pdf', $ocrContent); // Extend this cases if we add new OCR processors $originalFileMock = $this->createValidFileMock($mimeType, $content, $rootFolderPath, $originalFilename); - + $this->rootFolderGetById42ReturnValue = [$originalFileMock]; $this->ocrProcessor->expects($this->once()) @@ -551,8 +551,8 @@ public function testOcrSkippedIfOcrModeIsSkipFileAndResultIsEmpty() { $this->logger->expects($this->atLeastOnce()) ->method('debug') ->willReturnCallback(function ($message, $params) use (&$loggedSkipMessage, $fileId) { - if (str_contains($message, 'Skipping empty OCR result for file with id') && - isset($params['fileId']) && $params['fileId'] === $fileId) { + if (str_contains($message, 'Skipping empty OCR result for file with id') + && isset($params['fileId']) && $params['fileId'] === $fileId) { $loggedSkipMessage = true; } }); @@ -560,7 +560,7 @@ public function testOcrSkippedIfOcrModeIsSkipFileAndResultIsEmpty() { ->method('create'); $this->eventService->expects($this->never()) ->method('textRecognized'); - + $this->ocrService->runOcrProcess($fileId, 'usr', $settings); $this->assertTrue($loggedSkipMessage); @@ -581,7 +581,7 @@ public function testOcrEmptyExceptionIsThrown(int $ocrMode) { ->method('create'); $this->eventService->expects($this->never()) ->method('textRecognized'); - + $thrown = false; try { $this->ocrService->runOcrProcess($fileId, 'usr', $settings); @@ -620,12 +620,12 @@ public function testRestoreOriginalFileModificationDate() { $this->ocrService->runOcrProcess(42, 'usr', $settings); } - + public function testRunOcrProcessWithJobArgumentCatchedException() { $exception = new Exception('someEx'); $this->userManager->method('get') ->willThrowException($exception); - + $this->logger->expects($this->once()) ->method('error') ->with($exception->getMessage(), ['exception' => $exception]); @@ -666,7 +666,7 @@ public function testRunOcrProcessWithJobArgumentLogsErrorAndSendsNotificationOnN public function testRunOcrProcessWithJobArgumentLogsErrorOnException(Exception $exception) { $this->ocrProcessor->method('ocrFile') ->willThrowException($exception); - + $this->logger->expects($this->once()) ->method('error'); @@ -705,19 +705,19 @@ public function testSetsFileVersionsLabelIfKeepOriginalFileVersionIsTrue() { $content = 'someFileContent'; $ocrContent = 'someOcrProcessedFile'; $ocrResult = new OcrProcessorResult($ocrContent, 'pdf', $ocrContent); - + $fileMock = $this->createValidFileMock($mimeType, $content); $this->rootFolderGetById42ReturnValue = [$fileMock]; - + $this->ocrProcessor->expects($this->once()) ->method('ocrFile') ->willReturn($ocrResult); - + $viewMock = $this->createMock(IView::class); $this->viewFactory->expects($this->once()) ->method('create') ->willReturn($viewMock); - + $fileMock->expects($this->once()) ->method('getMTime') ->willReturn(1234); @@ -733,20 +733,20 @@ public function testSetsFileVersionsLabelIfKeepOriginalFileVersionIsTrue() { ->method('getMetadataValue') ->with('label') ->willReturn(''); - + $versionBackendMock = $this->createMockForIntersectionOfInterfaces([IVersionBackend::class, IMetadataVersionBackend::class]); $versionMock->expects($this->once()) ->method('getBackend') ->willReturn($versionBackendMock); - + $versionBackendMock->expects($this->once()) ->method('setMetadataValue') ->with($fileMock, 1, 'label', 'Before OCR'); - + $this->versionManager->expects($this->once()) ->method('getVersionsForFile') ->willReturn([$versionMock]); - + $this->ocrService->runOcrProcess(42, 'usr', $settings); } @@ -764,7 +764,7 @@ public function testRunOcrProcessThrowsNonOcrAlreadyDoneExceptionIfModeIsNotSkip ->willThrowException($ex); $this->expectException(OcrAlreadyDoneException::class); - + $this->ocrService->runOcrProcess(42, 'usr', $settings); } From b29b0e5b6998c908c3804480a2e37fd71c72a301 Mon Sep 17 00:00:00 2001 From: Robin Windey Date: Fri, 3 Oct 2025 10:36:20 +0000 Subject: [PATCH 3/3] Fix PHPUnit tearDown for LocalBackend Integrationtest Signed-off-by: Robin Windey --- phpunit.integration.xml | 7 ++++++- tests/Integration/LocalBackendTest.php | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/phpunit.integration.xml b/phpunit.integration.xml index 41a83020..4cee3bc0 100644 --- a/phpunit.integration.xml +++ b/phpunit.integration.xml @@ -5,7 +5,12 @@ colors="true" timeoutForSmallTests="900" timeoutForMediumTests="900" - timeoutForLargeTests="900"> + timeoutForLargeTests="900" + displayDetailsOnTestsThatTriggerDeprecations="true" + displayDetailsOnTestsThatTriggerErrors="true" + displayDetailsOnTestsThatTriggerNotices="true" + displayDetailsOnTestsThatTriggerWarnings="true" + displayDetailsOnPhpunitDeprecations="true"> ./tests/Integration diff --git a/tests/Integration/LocalBackendTest.php b/tests/Integration/LocalBackendTest.php index 88297811..b91eac3f 100644 --- a/tests/Integration/LocalBackendTest.php +++ b/tests/Integration/LocalBackendTest.php @@ -76,7 +76,9 @@ protected function setUp(): void { protected function tearDown(): void { parent::tearDown(); - $this->dispatcher->removeListener(TextRecognizedEvent::class, $this->eventListener); + if (isset($this->dispatcher) && isset($this->eventListener)) { + $this->dispatcher->removeListener(TextRecognizedEvent::class, $this->eventListener); + } $this->capturedEvents = []; }