diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml index 16584a5b6..5a33cb775 100644 --- a/.github/workflows/test-integration.yml +++ b/.github/workflows/test-integration.yml @@ -22,4 +22,6 @@ jobs: run: composer install - name: Run QA tests - run: composer check + run: composer check-ci + env: + SYMFONY_DEPRECATIONS_HELPER: 999999 diff --git a/.gitignore b/.gitignore index 2bea33b45..c5397068f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .idea +.github/*.md /web/bundles/ /web/app_dev.php /web/app_test.php diff --git a/CHANGELOG.md b/CHANGELOG.md index f79a6caa1..b8f98af45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog +# 7.0.0 - unreleased +**Notable Changes** +- Upgrade to Symfony 7.4 (from 6.4) +- Upgrade to PHPUnit 10 (from 9.x) +- Upgrade to PHPStan 2.0 (from 1.x) +- Migrate from annotations to attributes (PHP 8 attributes) + +**Important for System Administrators** +Ensure the `database_server_version` parameter contains the correct MariaDB version. e.g. `10.6.23-MariaDB` + + +**Improvements** +- Upgrade all Symfony components to 7.4 +- Upgrade Stepup-Bundle to 7.0 +- Modernize codebase with PHP 8+ features +- Fix various Symfony and Doctrine deprecations +- Improved code quality with updated tooling + # 6.0.2 - Repair deprovisioning API calls - Restore deprovisioned user on new login (returing users) diff --git a/README.md b/README.md index bde2a080c..df5a19098 100644 --- a/README.md +++ b/README.md @@ -7,19 +7,19 @@ This component is part of "Step-up Authentication as-a Service". See [Stepup-Dep ## Requirements - * PHP 5.6+ or PHP7 + * PHP 8.2 * [Composer](https://getcomposer.org/) * A web server (Apache, Nginx) - * MariaDB 10 + * MariaDB 10.6 * A working [Gateway](https://github.com/OpenConext/Stepup-Gateway) ## Installation Clone the repository or download the archive to a directory. Install the dependencies by running `composer install` and fill out the database credentials et cetera. -Make sure to run database migrations using `bin/console middleware:migrations:migrate`. +Make sure to run database migrations using `bin/console doctrine:migrations:migrate`. -When using 'Stepup-Deploy' the 'deploy' entity manager should be used in order to use the correct credentials e.g. `bin/console middleware:migrations:migrate --em=deploy` +When using 'Stepup-Deploy' the 'deploy' entity manager should be used in order to use the correct credentials e.g. `bin/console doctrine:migrations:migrate --em=deploy` ## Management API @@ -31,6 +31,9 @@ Some of the configuration of the components is static (i.e. stored in parametere ## Development Notes +### Technical debt + * https://github.com/broadway/event-store-dbal blocks upgrade to `doctrine/dbal:^4.0` + ### Adding new events Whenever adding a new event, be sure to update `bin/config/events.yml`. diff --git a/ci/qa/phpcs.xml b/ci/qa/phpcs.xml index 0797fd159..a5f85f9c1 100644 --- a/ci/qa/phpcs.xml +++ b/ci/qa/phpcs.xml @@ -6,10 +6,7 @@ src/*/*Bundle/Resources - src/*/*Bundle/Tests src/*/Bundle/*Bundle/Resources - src/*/Bundle/*Bundle/Tests - */Tests/* */Migrations/* @@ -21,5 +18,18 @@ + */Tests/* + + + */Tests/* + + + + + + + + + diff --git a/ci/qa/phplint.yaml b/ci/qa/phplint.yaml index d6dfb6c33..2b5943efd 100644 --- a/ci/qa/phplint.yaml +++ b/ci/qa/phplint.yaml @@ -1,6 +1,6 @@ path: [./src, ./tests] jobs: 10 -cache: /var/qa/phplint.cache +cache-dir: var/cache/qa/phpla int.cache extensions: - php exclude: diff --git a/ci/qa/phpstan-baseline.neon b/ci/qa/phpstan-baseline.neon index 57ccb6a81..7e8a7be31 100644 --- a/ci/qa/phpstan-baseline.neon +++ b/ci/qa/phpstan-baseline.neon @@ -1,4281 +1,4405 @@ parameters: ignoreErrors: - - message: "#^Cannot access offset 'payload' on mixed\\.$#" + message: '#^Cannot access offset ''payload'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: ../../src/Surfnet/Migrations/Version20210610131957.php - - message: "#^Cannot access offset 'vetting_type' on mixed\\.$#" + message: '#^Cannot access offset ''vetting_type'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: ../../src/Surfnet/Migrations/Version20210610131957.php - - message: "#^Method Surfnet\\\\Migrations\\\\Version20210610131957\\:\\:stripSensitiveData\\(\\) should return string but returns string\\|false\\.$#" + message: '#^Method Surfnet\\Migrations\\Version20210610131957\:\:stripSensitiveData\(\) should return string but returns string\|false\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/Migrations/Version20210610131957.php - - message: "#^Parameter \\#1 \\$rawPayload of method Surfnet\\\\Migrations\\\\Version20210610131957\\:\\:stripSensitiveData\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$rawPayload of method Surfnet\\Migrations\\Version20210610131957\:\:stripSensitiveData\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Migrations/Version20210610131957.php - - message: "#^Part \\$playhead \\(mixed\\) of encapsed string cannot be cast to string\\.$#" + message: '#^Part \$playhead \(mixed\) of encapsed string cannot be cast to string\.$#' + identifier: encapsedStringPart.nonString count: 1 path: ../../src/Surfnet/Migrations/Version20210610131957.php - - message: "#^Part \\$uuid \\(mixed\\) of encapsed string cannot be cast to string\\.$#" + message: '#^Part \$uuid \(mixed\) of encapsed string cannot be cast to string\.$#' + identifier: encapsedStringPart.nonString count: 1 path: ../../src/Surfnet/Migrations/Version20210610131957.php - - message: "#^Cannot access offset 'email_templates' on mixed\\.$#" + message: '#^Cannot access offset ''email_templates'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: ../../src/Surfnet/Stepup/Configuration/Configuration.php - - message: "#^Cannot access offset 'gateway' on mixed\\.$#" + message: '#^Cannot access offset ''gateway'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 2 path: ../../src/Surfnet/Stepup/Configuration/Configuration.php - - message: "#^Cannot access offset 'identity_providers' on mixed\\.$#" + message: '#^Cannot access offset ''identity_providers'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: ../../src/Surfnet/Stepup/Configuration/Configuration.php - - message: "#^Cannot access offset 'service_providers' on mixed\\.$#" + message: '#^Cannot access offset ''service_providers'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: ../../src/Surfnet/Stepup/Configuration/Configuration.php - - message: "#^Cannot access offset 'sraa' on mixed\\.$#" + message: '#^Cannot access offset ''sraa'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: ../../src/Surfnet/Stepup/Configuration/Configuration.php - - message: "#^Parameter \\#2 \\$emailTemplates of class Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\EmailTemplatesUpdatedEvent constructor expects array, mixed given\\.$#" + message: '#^Parameter \#2 \$emailTemplates of class Surfnet\\Stepup\\Configuration\\Event\\EmailTemplatesUpdatedEvent constructor expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Configuration/Configuration.php - - message: "#^Parameter \\#2 \\$identityProviders of class Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\IdentityProvidersUpdatedEvent constructor expects array, mixed given\\.$#" + message: '#^Parameter \#2 \$identityProviders of class Surfnet\\Stepup\\Configuration\\Event\\IdentityProvidersUpdatedEvent constructor expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Configuration/Configuration.php - - message: "#^Parameter \\#2 \\$newConfiguration of class Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\ConfigurationUpdatedEvent constructor expects array, mixed given\\.$#" + message: '#^Parameter \#2 \$newConfiguration of class Surfnet\\Stepup\\Configuration\\Event\\ConfigurationUpdatedEvent constructor expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Configuration/Configuration.php - - message: "#^Parameter \\#2 \\$serviceProviders of class Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\ServiceProvidersUpdatedEvent constructor expects array, mixed given\\.$#" + message: '#^Parameter \#2 \$serviceProviders of class Surfnet\\Stepup\\Configuration\\Event\\ServiceProvidersUpdatedEvent constructor expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Configuration/Configuration.php - - message: "#^Parameter \\#2 \\$sraaList of class Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\SraaUpdatedEvent constructor expects array, mixed given\\.$#" + message: '#^Parameter \#2 \$sraaList of class Surfnet\\Stepup\\Configuration\\Event\\SraaUpdatedEvent constructor expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Configuration/Configuration.php - - message: "#^Property Surfnet\\\\Stepup\\\\Configuration\\\\Configuration\\:\\:\\$configuration type has no value type specified in iterable type array\\.$#" + message: '#^Property Surfnet\\Stepup\\Configuration\\Configuration\:\:\$configuration type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Configuration.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\AllowedSecondFactorListUpdatedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\AllowedSecondFactorListUpdatedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/AllowedSecondFactorListUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\AllowedSecondFactorListUpdatedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\AllowedSecondFactorListUpdatedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/AllowedSecondFactorListUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\ConfigurationUpdatedEvent\\:\\:__construct\\(\\) has parameter \\$newConfiguration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\ConfigurationUpdatedEvent\:\:__construct\(\) has parameter \$newConfiguration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/ConfigurationUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\ConfigurationUpdatedEvent\\:\\:__construct\\(\\) has parameter \\$oldConfiguration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\ConfigurationUpdatedEvent\:\:__construct\(\) has parameter \$oldConfiguration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/ConfigurationUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\ConfigurationUpdatedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\ConfigurationUpdatedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/ConfigurationUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\ConfigurationUpdatedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\ConfigurationUpdatedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/ConfigurationUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\EmailTemplatesUpdatedEvent\\:\\:__construct\\(\\) has parameter \\$emailTemplates with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\EmailTemplatesUpdatedEvent\:\:__construct\(\) has parameter \$emailTemplates with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/EmailTemplatesUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\EmailTemplatesUpdatedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\EmailTemplatesUpdatedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/EmailTemplatesUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\EmailTemplatesUpdatedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\EmailTemplatesUpdatedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/EmailTemplatesUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\IdentityProvidersUpdatedEvent\\:\\:__construct\\(\\) has parameter \\$identityProviders with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\IdentityProvidersUpdatedEvent\:\:__construct\(\) has parameter \$identityProviders with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/IdentityProvidersUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\IdentityProvidersUpdatedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\IdentityProvidersUpdatedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/IdentityProvidersUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\IdentityProvidersUpdatedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\IdentityProvidersUpdatedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/IdentityProvidersUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\InstitutionConfigurationRemovedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\InstitutionConfigurationRemovedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/InstitutionConfigurationRemovedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\InstitutionConfigurationRemovedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\InstitutionConfigurationRemovedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/InstitutionConfigurationRemovedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\NewConfigurationCreatedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\NewConfigurationCreatedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/NewConfigurationCreatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\NewConfigurationCreatedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\NewConfigurationCreatedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/NewConfigurationCreatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\NewInstitutionConfigurationCreatedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\NewInstitutionConfigurationCreatedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/NewInstitutionConfigurationCreatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\NewInstitutionConfigurationCreatedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\NewInstitutionConfigurationCreatedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/NewInstitutionConfigurationCreatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\NumberOfTokensPerIdentityOptionChangedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\NumberOfTokensPerIdentityOptionChangedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/NumberOfTokensPerIdentityOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\NumberOfTokensPerIdentityOptionChangedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\NumberOfTokensPerIdentityOptionChangedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/NumberOfTokensPerIdentityOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\RaLocationAddedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\RaLocationAddedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/RaLocationAddedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\RaLocationAddedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\RaLocationAddedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/RaLocationAddedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\RaLocationContactInformationChangedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\RaLocationContactInformationChangedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/RaLocationContactInformationChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\RaLocationContactInformationChangedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\RaLocationContactInformationChangedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/RaLocationContactInformationChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\RaLocationRelocatedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\RaLocationRelocatedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/RaLocationRelocatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\RaLocationRelocatedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\RaLocationRelocatedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/RaLocationRelocatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\RaLocationRemovedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\RaLocationRemovedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/RaLocationRemovedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\RaLocationRemovedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\RaLocationRemovedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/RaLocationRemovedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\RaLocationRenamedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\RaLocationRenamedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/RaLocationRenamedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\RaLocationRenamedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\RaLocationRenamedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/RaLocationRenamedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\SelectRaaOptionChangedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\SelectRaaOptionChangedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/SelectRaaOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\SelectRaaOptionChangedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\SelectRaaOptionChangedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/SelectRaaOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\SelfAssertedTokensOptionChangedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\SelfAssertedTokensOptionChangedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/SelfAssertedTokensOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\SelfAssertedTokensOptionChangedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\SelfAssertedTokensOptionChangedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/SelfAssertedTokensOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\SelfVetOptionChangedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\SelfVetOptionChangedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/SelfVetOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\SelfVetOptionChangedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\SelfVetOptionChangedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/SelfVetOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\ServiceProvidersUpdatedEvent\\:\\:__construct\\(\\) has parameter \\$serviceProviders with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\ServiceProvidersUpdatedEvent\:\:__construct\(\) has parameter \$serviceProviders with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/ServiceProvidersUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\ServiceProvidersUpdatedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\ServiceProvidersUpdatedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/ServiceProvidersUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\ServiceProvidersUpdatedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\ServiceProvidersUpdatedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/ServiceProvidersUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\ShowRaaContactInformationOptionChangedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\ShowRaaContactInformationOptionChangedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/ShowRaaContactInformationOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\ShowRaaContactInformationOptionChangedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\ShowRaaContactInformationOptionChangedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/ShowRaaContactInformationOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\SraaUpdatedEvent\\:\\:__construct\\(\\) has parameter \\$sraaList with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\SraaUpdatedEvent\:\:__construct\(\) has parameter \$sraaList with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/SraaUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\SraaUpdatedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\SraaUpdatedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/SraaUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\SraaUpdatedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\SraaUpdatedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/SraaUpdatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\SsoOn2faOptionChangedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\SsoOn2faOptionChangedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/SsoOn2faOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\SsoOn2faOptionChangedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\SsoOn2faOptionChangedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/SsoOn2faOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\SsoRegistrationBypassOptionChangedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\SsoRegistrationBypassOptionChangedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/SsoRegistrationBypassOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\SsoRegistrationBypassOptionChangedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\SsoRegistrationBypassOptionChangedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/SsoRegistrationBypassOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\UseRaLocationsOptionChangedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\UseRaLocationsOptionChangedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/UseRaLocationsOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\UseRaLocationsOptionChangedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\UseRaLocationsOptionChangedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/UseRaLocationsOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\UseRaOptionChangedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\UseRaOptionChangedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/UseRaOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\UseRaOptionChangedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\UseRaOptionChangedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/UseRaOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\UseRaaOptionChangedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\UseRaaOptionChangedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/UseRaaOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\UseRaaOptionChangedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\UseRaaOptionChangedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/UseRaaOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\VerifyEmailOptionChangedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\VerifyEmailOptionChangedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/VerifyEmailOptionChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Event\\\\VerifyEmailOptionChangedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Event\\VerifyEmailOptionChangedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Event/VerifyEmailOptionChangedEvent.php - - message: "#^Cannot call method add\\(\\) on Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\RaLocationList\\|null\\.$#" + message: '#^Cannot call method add\(\) on Surfnet\\Stepup\\Configuration\\Value\\RaLocationList\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Configuration/InstitutionConfiguration.php - - message: "#^Cannot call method containsWithId\\(\\) on Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\RaLocationList\\|null\\.$#" + message: '#^Cannot call method containsWithId\(\) on Surfnet\\Stepup\\Configuration\\Value\\RaLocationList\|null\.$#' + identifier: method.nonObject count: 3 path: ../../src/Surfnet/Stepup/Configuration/InstitutionConfiguration.php - - message: "#^Cannot call method getById\\(\\) on Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\RaLocationList\\|null\\.$#" + message: '#^Cannot call method getById\(\) on Surfnet\\Stepup\\Configuration\\Value\\RaLocationList\|null\.$#' + identifier: method.nonObject count: 4 path: ../../src/Surfnet/Stepup/Configuration/InstitutionConfiguration.php - - message: "#^Cannot call method removeWithId\\(\\) on Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\RaLocationList\\|null\\.$#" + message: '#^Cannot call method removeWithId\(\) on Surfnet\\Stepup\\Configuration\\Value\\RaLocationList\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Configuration/InstitutionConfiguration.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\AllowedSecondFactorList\\:\\:__construct\\(\\) has parameter \\$allowedSecondFactors with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Value\\AllowedSecondFactorList\:\:__construct\(\) has parameter \$allowedSecondFactors with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Value/AllowedSecondFactorList.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\AllowedSecondFactorList\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Value\\AllowedSecondFactorList\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Value/AllowedSecondFactorList.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\AllowedSecondFactorList\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Value\\AllowedSecondFactorList\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Value/AllowedSecondFactorList.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\AllowedSecondFactorList\\:\\:ofTypes\\(\\) has parameter \\$allowedSecondFactors with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Value\\AllowedSecondFactorList\:\:ofTypes\(\) has parameter \$allowedSecondFactors with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Value/AllowedSecondFactorList.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\AllowedSecondFactorList\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Value\\AllowedSecondFactorList\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Value/AllowedSecondFactorList.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\InstitutionAuthorizationOption\\:\\:fromInstitutionConfig\\(\\) has parameter \\$institutions with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Value\\InstitutionAuthorizationOption\:\:fromInstitutionConfig\(\) has parameter \$institutions with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Value/InstitutionAuthorizationOption.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\InstitutionAuthorizationOption\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Value\\InstitutionAuthorizationOption\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Value/InstitutionAuthorizationOption.php - - message: "#^Property Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\InstitutionRole\\:\\:\\$validRoles type has no value type specified in iterable type array\\.$#" + message: '#^Property Surfnet\\Stepup\\Configuration\\Value\\InstitutionRole\:\:\$validRoles type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Value/InstitutionRole.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\InstitutionSet\\:\\:toScalarArray\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Instanceof between Surfnet\\Stepup\\Configuration\\Value\\Institution and Surfnet\\Stepup\\Configuration\\Value\\Institution will always evaluate to true\.$#' + identifier: instanceof.alwaysTrue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Value/InstitutionSet.php - - message: "#^Method Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\RaLocationList\\:\\:__construct\\(\\) has parameter \\$raLocations with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Configuration\\Value\\InstitutionSet\:\:toScalarArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../../src/Surfnet/Stepup/Configuration/Value/InstitutionSet.php + + - + message: '#^Method Surfnet\\Stepup\\Configuration\\Value\\RaLocationList\:\:__construct\(\) has parameter \$raLocations with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Configuration/Value/RaLocationList.php - - message: "#^Property Surfnet\\\\Stepup\\\\Helper\\\\JsonHelper\\:\\:\\$jsonErrors type has no value type specified in iterable type array\\.$#" + message: '#^Static property Surfnet\\Stepup\\DateTime\\DateTime\:\:\$now \(Surfnet\\Stepup\\DateTime\\DateTime\|null\) is never assigned Surfnet\\Stepup\\DateTime\\DateTime so it can be removed from the property type\.$#' + identifier: property.unusedType + count: 1 + path: ../../src/Surfnet/Stepup/DateTime/DateTime.php + + - + message: '#^Property Surfnet\\Stepup\\Helper\\JsonHelper\:\:\$jsonErrors type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Helper/JsonHelper.php - - message: "#^Method Surfnet\\\\Stepup\\\\Helper\\\\SecondFactorProvePossessionHelper\\:\\:__construct\\(\\) has parameter \\$skipProvePossessionSecondFactorTypes with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Helper\\SecondFactorProvePossessionHelper\:\:__construct\(\) has parameter \$skipProvePossessionSecondFactorTypes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Helper/SecondFactorProvePossessionHelper.php - - message: "#^Property Surfnet\\\\Stepup\\\\Helper\\\\SecondFactorProvePossessionHelper\\:\\:\\$skipProvePossessionSecondFactorTypes type has no value type specified in iterable type array\\.$#" + message: '#^Property Surfnet\\Stepup\\Helper\\SecondFactorProvePossessionHelper\:\:\$skipProvePossessionSecondFactorTypes type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Helper/SecondFactorProvePossessionHelper.php - - message: "#^Method Surfnet\\\\Stepup\\\\Helper\\\\UserDataFilter\\:\\:filter\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Helper\\UserDataFilter\:\:filter\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Helper/UserDataFilter.php - - message: "#^Method Surfnet\\\\Stepup\\\\Helper\\\\UserDataFilterInterface\\:\\:filter\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Helper\\UserDataFilterInterface\:\:filter\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Helper/UserDataFilterInterface.php - - message: "#^Method Surfnet\\\\Stepup\\\\Helper\\\\UserDataFormatter\\:\\:format\\(\\) has parameter \\$errors with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Helper\\UserDataFormatter\:\:format\(\) has parameter \$errors with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Helper/UserDataFormatter.php - - message: "#^Method Surfnet\\\\Stepup\\\\Helper\\\\UserDataFormatter\\:\\:format\\(\\) has parameter \\$userData with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Helper\\UserDataFormatter\:\:format\(\) has parameter \$userData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Helper/UserDataFormatter.php - - message: "#^Method Surfnet\\\\Stepup\\\\Helper\\\\UserDataFormatter\\:\\:format\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Helper\\UserDataFormatter\:\:format\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Helper/UserDataFormatter.php - - message: "#^Method Surfnet\\\\Stepup\\\\Helper\\\\UserDataFormatter\\:\\:formatResponse\\(\\) has parameter \\$errors with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Helper\\UserDataFormatter\:\:formatResponse\(\) has parameter \$errors with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Helper/UserDataFormatter.php - - message: "#^Method Surfnet\\\\Stepup\\\\Helper\\\\UserDataFormatter\\:\\:formatResponse\\(\\) has parameter \\$userData with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Helper\\UserDataFormatter\:\:formatResponse\(\) has parameter \$userData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Helper/UserDataFormatter.php - - message: "#^Method Surfnet\\\\Stepup\\\\Helper\\\\UserDataFormatter\\:\\:formatResponse\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Helper\\UserDataFormatter\:\:formatResponse\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Helper/UserDataFormatter.php - - message: "#^Method Surfnet\\\\Stepup\\\\Helper\\\\UserDataFormatterInterface\\:\\:format\\(\\) has parameter \\$errors with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Helper\\UserDataFormatterInterface\:\:format\(\) has parameter \$errors with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Helper/UserDataFormatterInterface.php - - message: "#^Method Surfnet\\\\Stepup\\\\Helper\\\\UserDataFormatterInterface\\:\\:format\\(\\) has parameter \\$userData with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Helper\\UserDataFormatterInterface\:\:format\(\) has parameter \$userData with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Helper/UserDataFormatterInterface.php - - message: "#^Method Surfnet\\\\Stepup\\\\Helper\\\\UserDataFormatterInterface\\:\\:format\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Helper\\UserDataFormatterInterface\:\:format\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Helper/UserDataFormatterInterface.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\InstitutionCollection\\:\\:__construct\\(\\) has parameter \\$institutions with no value type specified in iterable type array\\.$#" - count: 1 - path: ../../src/Surfnet/Stepup/Identity/Collection/InstitutionCollection.php - - - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\InstitutionCollection\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" - count: 1 - path: ../../src/Surfnet/Stepup/Identity/Collection/InstitutionCollection.php - - - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\InstitutionCollection\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: ../../src/Surfnet/Stepup/Identity/Collection/InstitutionCollection.php - - - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\InstitutionCollection\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Collection\\InstitutionCollection\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Collection/InstitutionCollection.php - - message: "#^Parameter \\#1 \\$institution of method Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\InstitutionCollection\\:\\:add\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution, mixed given\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Collection\\InstitutionCollection\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Collection/InstitutionCollection.php - - message: "#^Parameter \\#1 \\$institution of method Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\InstitutionCollection\\:\\:remove\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution, mixed given\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Collection\\InstitutionCollection\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Collection/InstitutionCollection.php - - message: "#^Property Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\InstitutionCollection\\:\\:\\$elements type has no value type specified in iterable type array\\.$#" + message: '#^Property Surfnet\\Stepup\\Identity\\Collection\\InstitutionCollection\:\:\$elements type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Collection/InstitutionCollection.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\VettingTypeHintCollection\\:\\:__construct\\(\\) has parameter \\$hints with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Collection\\VettingTypeHintCollection\:\:__construct\(\) has parameter \$hints with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Collection/VettingTypeHintCollection.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\VettingTypeHintCollection\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Collection\\VettingTypeHintCollection\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Collection/VettingTypeHintCollection.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\VettingTypeHintCollection\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Collection\\VettingTypeHintCollection\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Collection/VettingTypeHintCollection.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\VettingTypeHintCollection\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Collection\\VettingTypeHintCollection\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Collection/VettingTypeHintCollection.php - - message: "#^Property Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\VettingTypeHintCollection\\:\\:\\$elements type has no value type specified in iterable type array\\.$#" + message: '#^Property Surfnet\\Stepup\\Identity\\Collection\\VettingTypeHintCollection\:\:\$elements type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Collection/VettingTypeHintCollection.php - - message: "#^Cannot cast mixed to string\\.$#" - count: 1 - path: ../../src/Surfnet/Stepup/Identity/Entity/InstitutionCollection.php - - - - message: "#^Property Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\InstitutionCollection\\:\\:\\$institutions type has no value type specified in iterable type array\\.$#" + message: '#^Property Surfnet\\Stepup\\Identity\\Entity\\InstitutionCollection\:\:\$institutions type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/InstitutionCollection.php - - message: "#^Cannot call method getId\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null\\.$#" + message: '#^Cannot call method getId\(\) on Surfnet\\Stepup\\Identity\\Api\\Identity\|null\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/Stepup/Identity/Entity/RecoveryToken.php - - message: "#^Cannot call method getInstitution\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null\\.$#" + message: '#^Cannot call method getInstitution\(\) on Surfnet\\Stepup\\Identity\\Api\\Identity\|null\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/Stepup/Identity/Entity/RecoveryToken.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RecoveryToken\\:\\:getTokenId\\(\\) should return Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenId but returns Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenId\\|null\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Entity\\RecoveryToken\:\:getTokenId\(\) should return Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenId but returns Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenId\|null\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/RecoveryToken.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RecoveryToken\\:\\:getType\\(\\) should return Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenType but returns Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenType\\|null\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Entity\\RecoveryToken\:\:getType\(\) should return Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenType but returns Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenType\|null\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/RecoveryToken.php - - message: "#^Parameter \\#3 \\$recoveryTokenId of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithRecoveryCodeRevocationEvent constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenId\\|null given\\.$#" + message: '#^Parameter \#3 \$recoveryTokenId of class Surfnet\\Stepup\\Identity\\Event\\CompliedWithRecoveryCodeRevocationEvent constructor expects Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenId, Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenId\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/RecoveryToken.php - - message: "#^Parameter \\#3 \\$recoveryTokenId of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RecoveryTokenRevokedEvent constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenId\\|null given\\.$#" + message: '#^Parameter \#3 \$recoveryTokenId of class Surfnet\\Stepup\\Identity\\Event\\RecoveryTokenRevokedEvent constructor expects Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenId, Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenId\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/RecoveryToken.php - - message: "#^Parameter \\#4 \\$recoveryTokenType of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithRecoveryCodeRevocationEvent constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenType, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenType\\|null given\\.$#" + message: '#^Parameter \#4 \$recoveryTokenType of class Surfnet\\Stepup\\Identity\\Event\\CompliedWithRecoveryCodeRevocationEvent constructor expects Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenType, Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/RecoveryToken.php - - message: "#^Parameter \\#4 \\$recoveryTokenType of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RecoveryTokenRevokedEvent constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenType, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenType\\|null given\\.$#" + message: '#^Parameter \#4 \$recoveryTokenType of class Surfnet\\Stepup\\Identity\\Event\\RecoveryTokenRevokedEvent constructor expects Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenType, Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/RecoveryToken.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RecoveryTokenCollection\\:\\:first\\(\\) should return Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RecoveryToken but returns Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RecoveryToken\\|false\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Entity\\RecoveryTokenCollection\:\:first\(\) should return Surfnet\\Stepup\\Identity\\Entity\\RecoveryToken but returns Surfnet\\Stepup\\Identity\\Entity\\RecoveryToken\|false\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/RecoveryTokenCollection.php - - message: "#^Cannot call method equals\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RegistrationAuthorityRole\\|null\\.$#" + message: '#^Cannot call method equals\(\) on Surfnet\\Stepup\\Identity\\Value\\RegistrationAuthorityRole\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/RegistrationAuthority.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RegistrationAuthorityCollection\\:\\:getValues\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Entity\\RegistrationAuthorityCollection\:\:getValues\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/RegistrationAuthorityCollection.php - - message: "#^Class Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\SecondFactorCollection extends generic class Doctrine\\\\Common\\\\Collections\\\\ArrayCollection but does not specify its types\\: TKey, T$#" + message: '#^Class Surfnet\\Stepup\\Identity\\Entity\\SecondFactorCollection extends generic class Doctrine\\Common\\Collections\\ArrayCollection but does not specify its types\: TKey, T$#' + identifier: missingType.generics count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/SecondFactorCollection.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\SecondFactorCollection\\:\\:getSecondFactorWithHighestLoa\\(\\) should return Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\SecondFactor\\|null but returns mixed\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Entity\\SecondFactorCollection\:\:getSecondFactorWithHighestLoa\(\) should return Surfnet\\Stepup\\Identity\\Entity\\SecondFactor\|null but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/SecondFactorCollection.php - - message: "#^Parameter \\#2 \\$callback of function array_reduce expects callable\\(mixed, mixed\\)\\: mixed, Closure\\(Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VettedSecondFactor, Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VettedSecondFactor\\)\\: Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VettedSecondFactor given\\.$#" + message: '#^Parameter \#2 \$callback of function array_reduce expects callable\(mixed, mixed\)\: mixed, Closure\(Surfnet\\Stepup\\Identity\\Entity\\VettedSecondFactor, Surfnet\\Stepup\\Identity\\Entity\\VettedSecondFactor\)\: Surfnet\\Stepup\\Identity\\Entity\\VettedSecondFactor given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/SecondFactorCollection.php - - message: "#^Cannot call method getCommonName\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null\\.$#" + message: '#^Cannot call method getCommonName\(\) on Surfnet\\Stepup\\Identity\\Api\\Identity\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Cannot call method getEmail\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null\\.$#" + message: '#^Cannot call method getEmail\(\) on Surfnet\\Stepup\\Identity\\Api\\Identity\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Cannot call method getId\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null\\.$#" + message: '#^Cannot call method getId\(\) on Surfnet\\Stepup\\Identity\\Api\\Identity\|null\.$#' + identifier: method.nonObject count: 3 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Cannot call method getInstitution\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null\\.$#" + message: '#^Cannot call method getInstitution\(\) on Surfnet\\Stepup\\Identity\\Api\\Identity\|null\.$#' + identifier: method.nonObject count: 3 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Cannot call method getPreferredLocale\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null\\.$#" + message: '#^Cannot call method getPreferredLocale\(\) on Surfnet\\Stepup\\Identity\\Api\\Identity\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Cannot call method isOpen\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\EmailVerificationWindow\\|null\\.$#" + message: '#^Cannot call method isOpen\(\) on Surfnet\\Stepup\\Identity\\Value\\EmailVerificationWindow\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\UnverifiedSecondFactor\\:\\:getType\\(\\) should return Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType but returns Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Entity\\UnverifiedSecondFactor\:\:getType\(\) should return Surfnet\\StepupBundle\\Value\\SecondFactorType but returns Surfnet\\StepupBundle\\Value\\SecondFactorType\|null\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Parameter \\#1 \\$id of static method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VerifiedSecondFactor\\:\\:create\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId\\|null given\\.$#" + message: '#^Parameter \#1 \$id of static method Surfnet\\Stepup\\Identity\\Entity\\VerifiedSecondFactor\:\:create\(\) expects Surfnet\\Stepup\\Identity\\Value\\SecondFactorId, Surfnet\\Stepup\\Identity\\Value\\SecondFactorId\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Parameter \\#2 \\$identity of static method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VerifiedSecondFactor\\:\\:create\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity, Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null given\\.$#" + message: '#^Parameter \#2 \$identity of static method Surfnet\\Stepup\\Identity\\Entity\\VerifiedSecondFactor\:\:create\(\) expects Surfnet\\Stepup\\Identity\\Api\\Identity, Surfnet\\Stepup\\Identity\\Api\\Identity\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Parameter \\#3 \\$secondFactorId of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithUnverifiedSecondFactorRevocationEvent constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId\\|null given\\.$#" + message: '#^Parameter \#3 \$secondFactorId of class Surfnet\\Stepup\\Identity\\Event\\CompliedWithUnverifiedSecondFactorRevocationEvent constructor expects Surfnet\\Stepup\\Identity\\Value\\SecondFactorId, Surfnet\\Stepup\\Identity\\Value\\SecondFactorId\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Parameter \\#3 \\$secondFactorId of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\EmailVerifiedEvent constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId\\|null given\\.$#" + message: '#^Parameter \#3 \$secondFactorId of class Surfnet\\Stepup\\Identity\\Event\\EmailVerifiedEvent constructor expects Surfnet\\Stepup\\Identity\\Value\\SecondFactorId, Surfnet\\Stepup\\Identity\\Value\\SecondFactorId\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Parameter \\#3 \\$secondFactorId of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\UnverifiedSecondFactorRevokedEvent constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId\\|null given\\.$#" + message: '#^Parameter \#3 \$secondFactorId of class Surfnet\\Stepup\\Identity\\Event\\UnverifiedSecondFactorRevokedEvent constructor expects Surfnet\\Stepup\\Identity\\Value\\SecondFactorId, Surfnet\\Stepup\\Identity\\Value\\SecondFactorId\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Parameter \\#3 \\$type of static method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VerifiedSecondFactor\\:\\:create\\(\\) expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null given\\.$#" + message: '#^Parameter \#3 \$type of static method Surfnet\\Stepup\\Identity\\Entity\\VerifiedSecondFactor\:\:create\(\) expects Surfnet\\StepupBundle\\Value\\SecondFactorType, Surfnet\\StepupBundle\\Value\\SecondFactorType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Parameter \\#4 \\$secondFactorType of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithUnverifiedSecondFactorRevocationEvent constructor expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null given\\.$#" + message: '#^Parameter \#4 \$secondFactorType of class Surfnet\\Stepup\\Identity\\Event\\CompliedWithUnverifiedSecondFactorRevocationEvent constructor expects Surfnet\\StepupBundle\\Value\\SecondFactorType, Surfnet\\StepupBundle\\Value\\SecondFactorType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Parameter \\#4 \\$secondFactorType of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\EmailVerifiedEvent constructor expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null given\\.$#" + message: '#^Parameter \#4 \$secondFactorType of class Surfnet\\Stepup\\Identity\\Event\\EmailVerifiedEvent constructor expects Surfnet\\StepupBundle\\Value\\SecondFactorType, Surfnet\\StepupBundle\\Value\\SecondFactorType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Parameter \\#4 \\$secondFactorType of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\UnverifiedSecondFactorRevokedEvent constructor expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null given\\.$#" + message: '#^Parameter \#4 \$secondFactorType of class Surfnet\\Stepup\\Identity\\Event\\UnverifiedSecondFactorRevokedEvent constructor expects Surfnet\\StepupBundle\\Value\\SecondFactorType, Surfnet\\StepupBundle\\Value\\SecondFactorType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Cannot call method add\\(\\) on Surfnet\\\\Stepup\\\\DateTime\\\\DateTime\\|null\\.$#" + message: '#^Cannot call method add\(\) on Surfnet\\Stepup\\DateTime\\DateTime\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Cannot call method getCommonName\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null\\.$#" + message: '#^Cannot call method getCommonName\(\) on Surfnet\\Stepup\\Identity\\Api\\Identity\|null\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Cannot call method getEmail\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null\\.$#" + message: '#^Cannot call method getEmail\(\) on Surfnet\\Stepup\\Identity\\Api\\Identity\|null\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Cannot call method getId\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null\\.$#" + message: '#^Cannot call method getId\(\) on Surfnet\\Stepup\\Identity\\Api\\Identity\|null\.$#' + identifier: method.nonObject count: 4 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Cannot call method getInstitution\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null\\.$#" + message: '#^Cannot call method getInstitution\(\) on Surfnet\\Stepup\\Identity\\Api\\Identity\|null\.$#' + identifier: method.nonObject count: 4 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Cannot call method getNameId\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null\\.$#" + message: '#^Cannot call method getNameId\(\) on Surfnet\\Stepup\\Identity\\Api\\Identity\|null\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Cannot call method getPreferredLocale\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null\\.$#" + message: '#^Cannot call method getPreferredLocale\(\) on Surfnet\\Stepup\\Identity\\Api\\Identity\|null\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VerifiedSecondFactor\\:\\:getType\\(\\) should return Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType but returns Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Entity\\VerifiedSecondFactor\:\:getType\(\) should return Surfnet\\StepupBundle\\Value\\SecondFactorType but returns Surfnet\\StepupBundle\\Value\\SecondFactorType\|null\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Parameter \\#1 \\$id of static method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VettedSecondFactor\\:\\:create\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId\\|null given\\.$#" + message: '#^Parameter \#1 \$id of static method Surfnet\\Stepup\\Identity\\Entity\\VettedSecondFactor\:\:create\(\) expects Surfnet\\Stepup\\Identity\\Value\\SecondFactorId, Surfnet\\Stepup\\Identity\\Value\\SecondFactorId\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Parameter \\#1 \\$secondFactorType of method Surfnet\\\\StepupBundle\\\\Service\\\\SecondFactorTypeService\\:\\:getLevel\\(\\) expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null given\\.$#" + message: '#^Parameter \#1 \$secondFactorType of method Surfnet\\StepupBundle\\Service\\SecondFactorTypeService\:\:getLevel\(\) expects Surfnet\\StepupBundle\\Value\\SecondFactorType, Surfnet\\StepupBundle\\Value\\SecondFactorType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Parameter \\#2 \\$identity of static method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VettedSecondFactor\\:\\:create\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity, Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null given\\.$#" + message: '#^Parameter \#2 \$identity of static method Surfnet\\Stepup\\Identity\\Entity\\VettedSecondFactor\:\:create\(\) expects Surfnet\\Stepup\\Identity\\Api\\Identity, Surfnet\\Stepup\\Identity\\Api\\Identity\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Parameter \\#3 \\$secondFactorId of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithVerifiedSecondFactorRevocationEvent constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId\\|null given\\.$#" + message: '#^Parameter \#3 \$secondFactorId of class Surfnet\\Stepup\\Identity\\Event\\CompliedWithVerifiedSecondFactorRevocationEvent constructor expects Surfnet\\Stepup\\Identity\\Value\\SecondFactorId, Surfnet\\Stepup\\Identity\\Value\\SecondFactorId\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Parameter \\#3 \\$secondFactorId of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\VerifiedSecondFactorRevokedEvent constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId\\|null given\\.$#" + message: '#^Parameter \#3 \$secondFactorId of class Surfnet\\Stepup\\Identity\\Event\\VerifiedSecondFactorRevokedEvent constructor expects Surfnet\\Stepup\\Identity\\Value\\SecondFactorId, Surfnet\\Stepup\\Identity\\Value\\SecondFactorId\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Parameter \\#3 \\$type of static method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VettedSecondFactor\\:\\:create\\(\\) expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null given\\.$#" + message: '#^Parameter \#3 \$type of static method Surfnet\\Stepup\\Identity\\Entity\\VettedSecondFactor\:\:create\(\) expects Surfnet\\StepupBundle\\Value\\SecondFactorType, Surfnet\\StepupBundle\\Value\\SecondFactorType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Parameter \\#4 \\$secondFactorId of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorVettedEvent constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId\\|null given\\.$#" + message: '#^Parameter \#4 \$secondFactorId of class Surfnet\\Stepup\\Identity\\Event\\SecondFactorVettedEvent constructor expects Surfnet\\Stepup\\Identity\\Value\\SecondFactorId, Surfnet\\Stepup\\Identity\\Value\\SecondFactorId\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Parameter \\#4 \\$secondFactorId of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorVettedWithoutTokenProofOfPossession constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId\\|null given\\.$#" + message: '#^Parameter \#4 \$secondFactorId of class Surfnet\\Stepup\\Identity\\Event\\SecondFactorVettedWithoutTokenProofOfPossession constructor expects Surfnet\\Stepup\\Identity\\Value\\SecondFactorId, Surfnet\\Stepup\\Identity\\Value\\SecondFactorId\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Parameter \\#4 \\$secondFactorType of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithVerifiedSecondFactorRevocationEvent constructor expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null given\\.$#" + message: '#^Parameter \#4 \$secondFactorType of class Surfnet\\Stepup\\Identity\\Event\\CompliedWithVerifiedSecondFactorRevocationEvent constructor expects Surfnet\\StepupBundle\\Value\\SecondFactorType, Surfnet\\StepupBundle\\Value\\SecondFactorType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Parameter \\#4 \\$secondFactorType of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\VerifiedSecondFactorRevokedEvent constructor expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null given\\.$#" + message: '#^Parameter \#4 \$secondFactorType of class Surfnet\\Stepup\\Identity\\Event\\VerifiedSecondFactorRevokedEvent constructor expects Surfnet\\StepupBundle\\Value\\SecondFactorType, Surfnet\\StepupBundle\\Value\\SecondFactorType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Parameter \\#5 \\$secondFactorType of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorVettedEvent constructor expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null given\\.$#" + message: '#^Parameter \#5 \$secondFactorType of class Surfnet\\Stepup\\Identity\\Event\\SecondFactorVettedEvent constructor expects Surfnet\\StepupBundle\\Value\\SecondFactorType, Surfnet\\StepupBundle\\Value\\SecondFactorType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Parameter \\#5 \\$secondFactorType of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorVettedWithoutTokenProofOfPossession constructor expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null given\\.$#" + message: '#^Parameter \#5 \$secondFactorType of class Surfnet\\Stepup\\Identity\\Event\\SecondFactorVettedWithoutTokenProofOfPossession constructor expects Surfnet\\StepupBundle\\Value\\SecondFactorType, Surfnet\\StepupBundle\\Value\\SecondFactorType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Cannot call method getId\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null\\.$#" + message: '#^Cannot call method getId\(\) on Surfnet\\Stepup\\Identity\\Api\\Identity\|null\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/Stepup/Identity/Entity/VettedSecondFactor.php - - message: "#^Cannot call method getInstitution\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Api\\\\Identity\\|null\\.$#" + message: '#^Cannot call method getInstitution\(\) on Surfnet\\Stepup\\Identity\\Api\\Identity\|null\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/Stepup/Identity/Entity/VettedSecondFactor.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VettedSecondFactor\\:\\:getType\\(\\) should return Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType but returns Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Entity\\VettedSecondFactor\:\:getType\(\) should return Surfnet\\StepupBundle\\Value\\SecondFactorType but returns Surfnet\\StepupBundle\\Value\\SecondFactorType\|null\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VettedSecondFactor.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VettedSecondFactor\\:\\:vettingType\\(\\) should return Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingType but returns Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingType\\|null\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Entity\\VettedSecondFactor\:\:vettingType\(\) should return Surfnet\\Stepup\\Identity\\Value\\VettingType but returns Surfnet\\Stepup\\Identity\\Value\\VettingType\|null\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VettedSecondFactor.php - - message: "#^Parameter \\#3 \\$secondFactorId of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithVettedSecondFactorRevocationEvent constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId\\|null given\\.$#" + message: '#^Parameter \#3 \$secondFactorId of class Surfnet\\Stepup\\Identity\\Event\\CompliedWithVettedSecondFactorRevocationEvent constructor expects Surfnet\\Stepup\\Identity\\Value\\SecondFactorId, Surfnet\\Stepup\\Identity\\Value\\SecondFactorId\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VettedSecondFactor.php - - message: "#^Parameter \\#3 \\$secondFactorId of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\VettedSecondFactorRevokedEvent constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId\\|null given\\.$#" + message: '#^Parameter \#3 \$secondFactorId of class Surfnet\\Stepup\\Identity\\Event\\VettedSecondFactorRevokedEvent constructor expects Surfnet\\Stepup\\Identity\\Value\\SecondFactorId, Surfnet\\Stepup\\Identity\\Value\\SecondFactorId\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VettedSecondFactor.php - - message: "#^Parameter \\#4 \\$secondFactorType of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithVettedSecondFactorRevocationEvent constructor expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null given\\.$#" + message: '#^Parameter \#4 \$secondFactorType of class Surfnet\\Stepup\\Identity\\Event\\CompliedWithVettedSecondFactorRevocationEvent constructor expects Surfnet\\StepupBundle\\Value\\SecondFactorType, Surfnet\\StepupBundle\\Value\\SecondFactorType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VettedSecondFactor.php - - message: "#^Parameter \\#4 \\$secondFactorType of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\VettedSecondFactorRevokedEvent constructor expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null given\\.$#" + message: '#^Parameter \#4 \$secondFactorType of class Surfnet\\Stepup\\Identity\\Event\\VettedSecondFactorRevokedEvent constructor expects Surfnet\\StepupBundle\\Value\\SecondFactorType, Surfnet\\StepupBundle\\Value\\SecondFactorType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Entity/VettedSecondFactor.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\AppointedAsRaEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\AppointedAsRaEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/AppointedAsRaEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\AppointedAsRaEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\AppointedAsRaEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/AppointedAsRaEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\AppointedAsRaEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\AppointedAsRaEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/AppointedAsRaEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\AppointedAsRaForInstitutionEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\AppointedAsRaForInstitutionEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/AppointedAsRaForInstitutionEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\AppointedAsRaForInstitutionEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\AppointedAsRaForInstitutionEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/AppointedAsRaForInstitutionEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\AppointedAsRaaEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\AppointedAsRaaEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/AppointedAsRaaEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\AppointedAsRaaEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\AppointedAsRaaEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/AppointedAsRaaEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\AppointedAsRaaEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\AppointedAsRaaEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/AppointedAsRaaEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\AppointedAsRaaForInstitutionEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\AppointedAsRaaForInstitutionEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/AppointedAsRaaForInstitutionEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\AppointedAsRaaForInstitutionEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\AppointedAsRaaForInstitutionEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/AppointedAsRaaForInstitutionEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithRecoveryCodeRevocationEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\CompliedWithRecoveryCodeRevocationEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/CompliedWithRecoveryCodeRevocationEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithRecoveryCodeRevocationEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\CompliedWithRecoveryCodeRevocationEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/CompliedWithRecoveryCodeRevocationEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithRecoveryCodeRevocationEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\CompliedWithRecoveryCodeRevocationEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/CompliedWithRecoveryCodeRevocationEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithRevocationEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\CompliedWithRevocationEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/CompliedWithRevocationEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithRevocationEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\CompliedWithRevocationEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/CompliedWithRevocationEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithRevocationEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\CompliedWithRevocationEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/CompliedWithRevocationEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\EmailVerifiedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\EmailVerifiedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/EmailVerifiedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\EmailVerifiedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\EmailVerifiedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/EmailVerifiedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\GssfPossessionProvenAndVerifiedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\GssfPossessionProvenAndVerifiedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/GssfPossessionProvenAndVerifiedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\GssfPossessionProvenAndVerifiedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\GssfPossessionProvenAndVerifiedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/GssfPossessionProvenAndVerifiedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\GssfPossessionProvenEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\GssfPossessionProvenEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/GssfPossessionProvenEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\GssfPossessionProvenEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\GssfPossessionProvenEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/GssfPossessionProvenEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityAccreditedAsRaEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\IdentityAccreditedAsRaEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityAccreditedAsRaEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\IdentityAccreditedAsRaEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityAccreditedAsRaEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\IdentityAccreditedAsRaEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityAccreditedAsRaForInstitutionEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\IdentityAccreditedAsRaForInstitutionEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaForInstitutionEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityAccreditedAsRaaEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\IdentityAccreditedAsRaaEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaaEvent.php - - message: "#^Parameter \\#1 \\$contactInformation of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\ContactInformation constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$contactInformation of class Surfnet\\Stepup\\Identity\\Value\\ContactInformation constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaaEvent.php - - message: "#^Parameter \\#1 \\$data of static method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RegistrationAuthorityRole\\:\\:deserialize\\(\\) expects array, mixed given\\.$#" + message: '#^Parameter \#1 \$data of static method Surfnet\\Stepup\\Identity\\Value\\RegistrationAuthorityRole\:\:deserialize\(\) expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaaEvent.php - - message: "#^Parameter \\#1 \\$institution of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$institution of class Surfnet\\Stepup\\Identity\\Value\\Institution constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaaEvent.php - - message: "#^Parameter \\#1 \\$location of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Location constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$location of class Surfnet\\Stepup\\Identity\\Value\\Location constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaaEvent.php - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\IdentityId constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$value of class Surfnet\\Stepup\\Identity\\Value\\IdentityId constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaaEvent.php - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\NameId constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$value of class Surfnet\\Stepup\\Identity\\Value\\NameId constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaaEvent.php - - message: "#^Parameter \\#1 \\$contactInformation of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\ContactInformation constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$contactInformation of class Surfnet\\Stepup\\Identity\\Value\\ContactInformation constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaaForInstitutionEvent.php - - message: "#^Parameter \\#1 \\$data of static method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RegistrationAuthorityRole\\:\\:deserialize\\(\\) expects array, mixed given\\.$#" + message: '#^Parameter \#1 \$data of static method Surfnet\\Stepup\\Identity\\Value\\RegistrationAuthorityRole\:\:deserialize\(\) expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaaForInstitutionEvent.php - - message: "#^Parameter \\#1 \\$institution of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$institution of class Surfnet\\Stepup\\Identity\\Value\\Institution constructor expects string, mixed given\.$#' + identifier: argument.type count: 2 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaaForInstitutionEvent.php - - message: "#^Parameter \\#1 \\$location of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Location constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$location of class Surfnet\\Stepup\\Identity\\Value\\Location constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaaForInstitutionEvent.php - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\IdentityId constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$value of class Surfnet\\Stepup\\Identity\\Value\\IdentityId constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaaForInstitutionEvent.php - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\NameId constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$value of class Surfnet\\Stepup\\Identity\\Value\\NameId constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityAccreditedAsRaaForInstitutionEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityCreatedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\IdentityCreatedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityCreatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityCreatedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\IdentityCreatedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityCreatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityEmailChangedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\IdentityEmailChangedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityEmailChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityEmailChangedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\IdentityEmailChangedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityEmailChangedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityForgottenEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\IdentityForgottenEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityForgottenEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityForgottenEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\IdentityForgottenEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityForgottenEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityRenamedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\IdentityRenamedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityRenamedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityRenamedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\IdentityRenamedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/IdentityRenamedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\InstitutionsAddedToWhitelistEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\InstitutionsAddedToWhitelistEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/InstitutionsAddedToWhitelistEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\InstitutionsRemovedFromWhitelistEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\InstitutionsRemovedFromWhitelistEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/InstitutionsRemovedFromWhitelistEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\LocalePreferenceExpressedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\LocalePreferenceExpressedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/LocalePreferenceExpressedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\LocalePreferenceExpressedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\LocalePreferenceExpressedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/LocalePreferenceExpressedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\PhonePossessionProvenAndVerifiedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\PhonePossessionProvenAndVerifiedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/PhonePossessionProvenAndVerifiedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\PhonePossessionProvenAndVerifiedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\PhonePossessionProvenAndVerifiedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/PhonePossessionProvenAndVerifiedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\PhonePossessionProvenEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\PhonePossessionProvenEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/PhonePossessionProvenEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\PhonePossessionProvenEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\PhonePossessionProvenEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/PhonePossessionProvenEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\PhoneRecoveryTokenPossessionProvenEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\PhoneRecoveryTokenPossessionProvenEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/PhoneRecoveryTokenPossessionProvenEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\PhoneRecoveryTokenPossessionProvenEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\PhoneRecoveryTokenPossessionProvenEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/PhoneRecoveryTokenPossessionProvenEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RecoveryTokenRevokedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\RecoveryTokenRevokedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/RecoveryTokenRevokedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RecoveryTokenRevokedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\RecoveryTokenRevokedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/RecoveryTokenRevokedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RecoveryTokenRevokedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\RecoveryTokenRevokedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/RecoveryTokenRevokedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RegistrationAuthorityInformationAmendedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\RegistrationAuthorityInformationAmendedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/RegistrationAuthorityInformationAmendedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RegistrationAuthorityInformationAmendedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\RegistrationAuthorityInformationAmendedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/RegistrationAuthorityInformationAmendedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RegistrationAuthorityInformationAmendedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\RegistrationAuthorityInformationAmendedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/RegistrationAuthorityInformationAmendedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RegistrationAuthorityInformationAmendedForInstitutionEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\RegistrationAuthorityInformationAmendedForInstitutionEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/RegistrationAuthorityInformationAmendedForInstitutionEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RegistrationAuthorityInformationAmendedForInstitutionEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\RegistrationAuthorityInformationAmendedForInstitutionEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/RegistrationAuthorityInformationAmendedForInstitutionEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RegistrationAuthorityInformationAmendedForInstitutionEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\RegistrationAuthorityInformationAmendedForInstitutionEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/RegistrationAuthorityInformationAmendedForInstitutionEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RegistrationAuthorityRetractedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\RegistrationAuthorityRetractedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/RegistrationAuthorityRetractedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RegistrationAuthorityRetractedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\RegistrationAuthorityRetractedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/RegistrationAuthorityRetractedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RegistrationAuthorityRetractedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\RegistrationAuthorityRetractedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/RegistrationAuthorityRetractedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RegistrationAuthorityRetractedForInstitutionEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\RegistrationAuthorityRetractedForInstitutionEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/RegistrationAuthorityRetractedForInstitutionEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RegistrationAuthorityRetractedForInstitutionEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\RegistrationAuthorityRetractedForInstitutionEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/RegistrationAuthorityRetractedForInstitutionEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SafeStoreSecretRecoveryTokenPossessionPromisedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\SafeStoreSecretRecoveryTokenPossessionPromisedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/SafeStoreSecretRecoveryTokenPossessionPromisedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SafeStoreSecretRecoveryTokenPossessionPromisedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\SafeStoreSecretRecoveryTokenPossessionPromisedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/SafeStoreSecretRecoveryTokenPossessionPromisedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorMigratedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\SecondFactorMigratedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/SecondFactorMigratedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorMigratedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\SecondFactorMigratedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/SecondFactorMigratedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorMigratedToEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\SecondFactorMigratedToEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/SecondFactorMigratedToEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorMigratedToEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\SecondFactorMigratedToEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/SecondFactorMigratedToEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorRevokedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\SecondFactorRevokedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/SecondFactorRevokedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorRevokedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\SecondFactorRevokedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/SecondFactorRevokedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorRevokedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\SecondFactorRevokedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/SecondFactorRevokedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorVettedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\SecondFactorVettedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/SecondFactorVettedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorVettedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\SecondFactorVettedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/SecondFactorVettedEvent.php - - message: "#^Parameter \\#1 \\$vettingType of method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\SensitiveData\\\\SensitiveData\\:\\:withVettingType\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingType, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingType\\|null given\\.$#" + message: '#^Parameter \#1 \$vettingType of method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\SensitiveData\\SensitiveData\:\:withVettingType\(\) expects Surfnet\\Stepup\\Identity\\Value\\VettingType, Surfnet\\Stepup\\Identity\\Value\\VettingType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/SecondFactorVettedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorVettedWithoutTokenProofOfPossession\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\SecondFactorVettedWithoutTokenProofOfPossession\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/SecondFactorVettedWithoutTokenProofOfPossession.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorVettedWithoutTokenProofOfPossession\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\SecondFactorVettedWithoutTokenProofOfPossession\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/SecondFactorVettedWithoutTokenProofOfPossession.php - - message: "#^Parameter \\#1 \\$vettingType of method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\SensitiveData\\\\SensitiveData\\:\\:withVettingType\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingType, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingType\\|null given\\.$#" + message: '#^Parameter \#1 \$vettingType of method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\SensitiveData\\SensitiveData\:\:withVettingType\(\) expects Surfnet\\Stepup\\Identity\\Value\\VettingType, Surfnet\\Stepup\\Identity\\Value\\VettingType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/SecondFactorVettedWithoutTokenProofOfPossession.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\U2fDevicePossessionProvenAndVerifiedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\U2fDevicePossessionProvenAndVerifiedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/U2fDevicePossessionProvenAndVerifiedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\U2fDevicePossessionProvenAndVerifiedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\U2fDevicePossessionProvenAndVerifiedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/U2fDevicePossessionProvenAndVerifiedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\U2fDevicePossessionProvenEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\U2fDevicePossessionProvenEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/U2fDevicePossessionProvenEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\U2fDevicePossessionProvenEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\U2fDevicePossessionProvenEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/U2fDevicePossessionProvenEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\VettedSecondFactorsAllRevokedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\VettedSecondFactorsAllRevokedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/VettedSecondFactorsAllRevokedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\VettedSecondFactorsAllRevokedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\VettedSecondFactorsAllRevokedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/VettedSecondFactorsAllRevokedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\VettedSecondFactorsAllRevokedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\VettedSecondFactorsAllRevokedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/VettedSecondFactorsAllRevokedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\VettingTypeHintsSavedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\VettingTypeHintsSavedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/VettingTypeHintsSavedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\VettingTypeHintsSavedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\VettingTypeHintsSavedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/VettingTypeHintsSavedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\VettingTypeHintsSavedEvent\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\VettingTypeHintsSavedEvent\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/VettingTypeHintsSavedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\WhitelistCreatedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\WhitelistCreatedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/WhitelistCreatedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\WhitelistReplacedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\WhitelistReplacedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/WhitelistReplacedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\YubikeyPossessionProvenAndVerifiedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\YubikeyPossessionProvenAndVerifiedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/YubikeyPossessionProvenAndVerifiedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\YubikeyPossessionProvenAndVerifiedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\YubikeyPossessionProvenAndVerifiedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/YubikeyPossessionProvenAndVerifiedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\YubikeyPossessionProvenEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\YubikeyPossessionProvenEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/YubikeyPossessionProvenEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\YubikeyPossessionProvenEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\YubikeyPossessionProvenEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/YubikeyPossessionProvenEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\YubikeySecondFactorBootstrappedEvent\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\YubikeySecondFactorBootstrappedEvent\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/YubikeySecondFactorBootstrappedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\YubikeySecondFactorBootstrappedEvent\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Event\\YubikeySecondFactorBootstrappedEvent\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Event/YubikeySecondFactorBootstrappedEvent.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\EventSourcing\\\\IdentityRepository\\:\\:obtainInformation\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\EventSourcing\\IdentityRepository\:\:obtainInformation\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/EventSourcing/IdentityRepository.php - - message: "#^Argument of an invalid type Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\SecondFactorCollection\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Argument of an invalid type Surfnet\\Stepup\\Identity\\Entity\\SecondFactorCollection\|null supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable count: 11 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method asVetted\\(\\) on mixed\\.$#" + message: '#^Cannot call method asVetted\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method complyWithRevocation\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VettedSecondFactor\\|null\\.$#" + message: '#^Cannot call method complyWithRevocation\(\) on Surfnet\\Stepup\\Identity\\Entity\\VettedSecondFactor\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method count\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RecoveryTokenCollection\\|null\\.$#" + message: '#^Cannot call method count\(\) on Surfnet\\Stepup\\Identity\\Entity\\RecoveryTokenCollection\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method count\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RegistrationAuthorityCollection\\|null\\.$#" + message: '#^Cannot call method count\(\) on Surfnet\\Stepup\\Identity\\Entity\\RegistrationAuthorityCollection\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method count\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\SecondFactorCollection\\|null\\.$#" + message: '#^Cannot call method count\(\) on Surfnet\\Stepup\\Identity\\Entity\\SecondFactorCollection\|null\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method exists\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RegistrationAuthorityCollection\\|null\\.$#" + message: '#^Cannot call method exists\(\) on Surfnet\\Stepup\\Identity\\Entity\\RegistrationAuthorityCollection\|null\.$#' + identifier: method.nonObject count: 3 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method first\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RecoveryTokenCollection\\|null\\.$#" + message: '#^Cannot call method first\(\) on Surfnet\\Stepup\\Identity\\Entity\\RecoveryTokenCollection\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method get\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RecoveryTokenCollection\\|null\\.$#" + message: '#^Cannot call method get\(\) on Surfnet\\Stepup\\Identity\\Entity\\RecoveryTokenCollection\|null\.$#' + identifier: method.nonObject count: 3 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method get\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RegistrationAuthorityCollection\\|null\\.$#" + message: '#^Cannot call method get\(\) on Surfnet\\Stepup\\Identity\\Entity\\RegistrationAuthorityCollection\|null\.$#' + identifier: method.nonObject count: 7 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method get\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\SecondFactorCollection\\|null\\.$#" + message: '#^Cannot call method get\(\) on Surfnet\\Stepup\\Identity\\Entity\\SecondFactorCollection\|null\.$#' + identifier: method.nonObject count: 11 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method getIdentifier\\(\\) on mixed\\.$#" + message: '#^Cannot call method getIdentifier\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method getSecondFactorWithHighestLoa\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\SecondFactorCollection\\|null\\.$#" + message: '#^Cannot call method getSecondFactorWithHighestLoa\(\) on Surfnet\\Stepup\\Identity\\Entity\\SecondFactorCollection\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method getType\\(\\) on mixed\\.$#" + message: '#^Cannot call method getType\(\) on mixed\.$#' + identifier: method.nonObject count: 3 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method getValues\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RegistrationAuthorityCollection\\|null\\.$#" + message: '#^Cannot call method getValues\(\) on Surfnet\\Stepup\\Identity\\Entity\\RegistrationAuthorityCollection\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method getValues\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\SecondFactorCollection\\|null\\.$#" + message: '#^Cannot call method getValues\(\) on Surfnet\\Stepup\\Identity\\Entity\\SecondFactorCollection\|null\.$#' + identifier: method.nonObject count: 3 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method hasType\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RecoveryTokenCollection\\|null\\.$#" + message: '#^Cannot call method hasType\(\) on Surfnet\\Stepup\\Identity\\Entity\\RecoveryTokenCollection\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method isEmpty\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\SecondFactorCollection\\|null\\.$#" + message: '#^Cannot call method isEmpty\(\) on Surfnet\\Stepup\\Identity\\Entity\\SecondFactorCollection\|null\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method remove\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RecoveryTokenCollection\\|null\\.$#" + message: '#^Cannot call method remove\(\) on Surfnet\\Stepup\\Identity\\Entity\\RecoveryTokenCollection\|null\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method remove\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RegistrationAuthorityCollection\\|null\\.$#" + message: '#^Cannot call method remove\(\) on Surfnet\\Stepup\\Identity\\Entity\\RegistrationAuthorityCollection\|null\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method remove\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\SecondFactorCollection\\|null\\.$#" + message: '#^Cannot call method remove\(\) on Surfnet\\Stepup\\Identity\\Entity\\SecondFactorCollection\|null\.$#' + identifier: method.nonObject count: 9 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method revoke\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VettedSecondFactor\\|null\\.$#" + message: '#^Cannot call method revoke\(\) on Surfnet\\Stepup\\Identity\\Entity\\VettedSecondFactor\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method set\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RecoveryTokenCollection\\|null\\.$#" + message: '#^Cannot call method set\(\) on Surfnet\\Stepup\\Identity\\Entity\\RecoveryTokenCollection\|null\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method set\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\RegistrationAuthorityCollection\\|null\\.$#" + message: '#^Cannot call method set\(\) on Surfnet\\Stepup\\Identity\\Entity\\RegistrationAuthorityCollection\|null\.$#' + identifier: method.nonObject count: 4 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method set\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\SecondFactorCollection\\|null\\.$#" + message: '#^Cannot call method set\(\) on Surfnet\\Stepup\\Identity\\Entity\\SecondFactorCollection\|null\.$#' + identifier: method.nonObject count: 13 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method typeAndIdentifierAreEqual\\(\\) on mixed\\.$#" + message: '#^Cannot call method typeAndIdentifierAreEqual\(\) on mixed\.$#' + identifier: method.nonObject count: 3 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Cannot call method vet\\(\\) on mixed\\.$#" + message: '#^Cannot call method vet\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Identity\\:\\:getVerifiedSecondFactor\\(\\) should return Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VerifiedSecondFactor\\|null but returns mixed\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Identity\:\:getVerifiedSecondFactor\(\) should return Surfnet\\Stepup\\Identity\\Entity\\VerifiedSecondFactor\|null but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Identity\\:\\:getVettedSecondFactorById\\(\\) should return Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VettedSecondFactor\\|null but returns mixed\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Identity\:\:getVettedSecondFactorById\(\) should return Surfnet\\Stepup\\Identity\\Entity\\VettedSecondFactor\|null but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Parameter \\#1 \\$value of function count expects array\\|Countable, Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\SecondFactorCollection\\|null given\\.$#" + message: '#^Parameter \#1 \$value of function count expects array\|Countable, Surfnet\\Stepup\\Identity\\Entity\\SecondFactorCollection\|null given\.$#' + identifier: argument.type count: 4 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Parameter \\#1 \\$vettingType of method Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VerifiedSecondFactor\\:\\:asVetted\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingType, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingType\\|null given\\.$#" + message: '#^Parameter \#1 \$vettingType of method Surfnet\\Stepup\\Identity\\Entity\\VerifiedSecondFactor\:\:asVetted\(\) expects Surfnet\\Stepup\\Identity\\Value\\VettingType, Surfnet\\Stepup\\Identity\\Value\\VettingType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Parameter \\#4 \\$secondFactorId of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorMigratedToEvent constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId\\|null given\\.$#" + message: '#^Parameter \#4 \$secondFactorId of class Surfnet\\Stepup\\Identity\\Event\\SecondFactorMigratedToEvent constructor expects Surfnet\\Stepup\\Identity\\Value\\SecondFactorId, Surfnet\\Stepup\\Identity\\Value\\SecondFactorId\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Identity/Identity.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\EmailVerificationWindow\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Value\\EmailVerificationWindow\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Value/EmailVerificationWindow.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\EmailVerificationWindow\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Value\\EmailVerificationWindow\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Value/EmailVerificationWindow.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\OnPremiseVettingType\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Value\\OnPremiseVettingType\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Value/OnPremiseVettingType.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\OnPremiseVettingType\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Value\\OnPremiseVettingType\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Value/OnPremiseVettingType.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RegistrationAuthorityRole\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Value\\RegistrationAuthorityRole\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Value/RegistrationAuthorityRole.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RegistrationAuthorityRole\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Value\\RegistrationAuthorityRole\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Value/RegistrationAuthorityRole.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SelfAssertedRegistrationVettingType\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Value\\SelfAssertedRegistrationVettingType\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Value/SelfAssertedRegistrationVettingType.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SelfAssertedRegistrationVettingType\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Value\\SelfAssertedRegistrationVettingType\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Value/SelfAssertedRegistrationVettingType.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SelfVetVettingType\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Value\\SelfVetVettingType\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Value/SelfVetVettingType.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SelfVetVettingType\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Value\\SelfVetVettingType\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Value/SelfVetVettingType.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\UnknownVettingType\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Value\\UnknownVettingType\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Value/UnknownVettingType.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingTypeFactory\\:\\:fromData\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Value\\VettingTypeFactory\:\:fromData\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Value/VettingTypeFactory.php - - message: "#^Method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingTypeHint\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Identity\\Value\\VettingTypeHint\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Identity/Value/VettingTypeHint.php - - message: "#^Cannot call method addAllFrom\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\InstitutionCollection\\|null\\.$#" + message: '#^Cannot call method addAllFrom\(\) on Surfnet\\Stepup\\Identity\\Collection\\InstitutionCollection\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Whitelist.php - - message: "#^Cannot call method contains\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\InstitutionCollection\\|null\\.$#" + message: '#^Cannot call method contains\(\) on Surfnet\\Stepup\\Identity\\Collection\\InstitutionCollection\|null\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/Stepup/Identity/Whitelist.php - - message: "#^Cannot call method removeAllIn\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\InstitutionCollection\\|null\\.$#" + message: '#^Cannot call method removeAllIn\(\) on Surfnet\\Stepup\\Identity\\Collection\\InstitutionCollection\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/Stepup/Identity/Whitelist.php - - message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" - count: 2 - path: ../../src/Surfnet/Stepup/Identity/Whitelist.php - - - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Event\\\\EventSerializationAndDeserializationTest\\:\\:institutionConfigurationEventsProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Event\\EventSerializationAndDeserializationTest\:\:institutionConfigurationEventsProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Event/EventSerializationAndDeserializationTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\AllowedSecondFactorListTest\\:\\:availableSecondFactorTypeProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\AllowedSecondFactorListTest\:\:availableSecondFactorTypeProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/AllowedSecondFactorListTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\AllowedSecondFactorListTest\\:\\:differentAllowedSecondFactorListsProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\AllowedSecondFactorListTest\:\:differentAllowedSecondFactorListsProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/AllowedSecondFactorListTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\AllowedSecondFactorListTest\\:\\:sameAllowedSecondFactorListsProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\AllowedSecondFactorListTest\:\:sameAllowedSecondFactorListsProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/AllowedSecondFactorListTest.php - - message: "#^Parameter \\#1 \\$other of method Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\:\\:equals\\(\\) expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, mixed given\\.$#" + message: '#^Parameter \#1 \$other of method Surfnet\\StepupBundle\\Value\\SecondFactorType\:\:equals\(\) expects Surfnet\\StepupBundle\\Value\\SecondFactorType, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/AllowedSecondFactorListTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\InstitutionAuthorizationOptionTest\\:\\:institutionHasInstitutionProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\InstitutionAuthorizationOptionTest\:\:institutionHasInstitutionProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionAuthorizationOptionTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\InstitutionAuthorizationOptionTest\\:\\:institutionSetComparisonProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\InstitutionAuthorizationOptionTest\:\:institutionSetComparisonProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionAuthorizationOptionTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\InstitutionAuthorizationOptionTest\\:\\:institution_option_instances_can_be_compared\\(\\) has parameter \\$configurationA with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\InstitutionAuthorizationOptionTest\:\:institution_option_instances_can_be_compared\(\) has parameter \$configurationA with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionAuthorizationOptionTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\InstitutionAuthorizationOptionTest\\:\\:institution_option_instances_can_be_compared\\(\\) has parameter \\$configurationB with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\InstitutionAuthorizationOptionTest\:\:institution_option_instances_can_be_compared\(\) has parameter \$configurationB with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionAuthorizationOptionTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\InstitutionAuthorizationOptionTest\\:\\:invalidConstructorArgumentsProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\InstitutionAuthorizationOptionTest\:\:invalidConstructorArgumentsProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionAuthorizationOptionTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\InstitutionAuthorizationOptionTest\\:\\:the_has_institution_method_should_check_for_institutions\\(\\) has parameter \\$institutionList with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\InstitutionAuthorizationOptionTest\:\:the_has_institution_method_should_check_for_institutions\(\) has parameter \$institutionList with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionAuthorizationOptionTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\InstitutionConfigurationIdTest\\:\\:nonStringOrEmptyStringProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\InstitutionConfigurationIdTest\:\:nonStringOrEmptyStringProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionConfigurationIdTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\InstitutionRoleTest\\:\\:institutionTypeProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\InstitutionRoleTest\:\:institutionTypeProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionRoleTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\InstitutionRoleTest\\:\\:invalidConstructorArgumentsProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\InstitutionRoleTest\:\:invalidConstructorArgumentsProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionRoleTest.php - - message: "#^Parameter \\#1 \\$type of class Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\InstitutionRole constructor expects string, bool\\|int\\|string given\\.$#" + message: '#^Parameter \#1 \$type of class Surfnet\\Stepup\\Configuration\\Value\\InstitutionRole constructor expects string, bool\|int\|string given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionRoleTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\InstitutionSetTest\\:\\:dirtyInstitutionListProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\InstitutionSetTest\:\:dirtyInstitutionListProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionSetTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\InstitutionSetTest\\:\\:factory_method_can_build_from_array_of_string_and_rejects_invalid_types\\(\\) has parameter \\$invalid with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\InstitutionSetTest\:\:factory_method_can_build_from_array_of_string_and_rejects_invalid_types\(\) has parameter \$invalid with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionSetTest.php - - message: "#^Parameter \\#1 \\$institutions of static method Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\InstitutionSet\\:\\:create\\(\\) expects array\\, array\\ given\\.$#" + message: '#^Parameter \#1 \$institutions of static method Surfnet\\Stepup\\Configuration\\Value\\InstitutionSet\:\:create\(\) expects array\, array\ given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionSetTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\InstitutionTest\\:\\:nonStringOrNonEmptyStringProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\InstitutionTest\:\:nonStringOrNonEmptyStringProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\RaLocationIdTest\\:\\:nonStringOrEmptyStringProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\RaLocationIdTest\:\:nonStringOrEmptyStringProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/RaLocationIdTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\RaLocationListTest\\:\\:getRaLocationsArray\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\RaLocationListTest\:\:getRaLocationsArray\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/RaLocationListTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Configuration\\\\Value\\\\RaLocationNameTest\\:\\:nonStringOrEmptyStringProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Configuration\\Value\\RaLocationNameTest\:\:nonStringOrEmptyStringProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Configuration/Value/RaLocationNameTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Helper\\\\JsonHelperTest\\:\\:nonStringProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Helper\\JsonHelperTest\:\:nonStringProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Helper/JsonHelperTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Helper\\\\UserDataFilterTest\\:\\:test_filtering_is_applied_with_expected_result\\(\\) has parameter \\$expectation with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Helper\\UserDataFilterTest\:\:test_filtering_is_applied_with_expected_result\(\) has parameter \$expectation with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Helper/UserDataFilterTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Collection\\\\InstitutionCollectionTest\\:\\:getInstitutions\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: ../../src/Surfnet/Stepup/Tests/Identity/Collection/InstitutionCollectionTest.php - - - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Entity\\\\ConfigurableSettingsTest\\:\\:localeVerifications\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Identity\\Entity\\ConfigurableSettingsTest\:\:localeVerifications\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Entity/ConfigurableSettingsTest.php - - message: "#^Cannot call method setSensitiveData\\(\\) on mixed\\.$#" + message: '#^Cannot call method setSensitiveData\(\) on mixed\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/Stepup/Tests/Identity/Event/EventSerializationAndDeserializationTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Event\\\\EventSerializationAndDeserializationTest\\:\\:eventProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Identity\\Event\\EventSerializationAndDeserializationTest\:\:eventProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Event/EventSerializationAndDeserializationTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Event\\\\EventSerializationAndDeserializationTest\\:\\:serializedDataProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Identity\\Event\\EventSerializationAndDeserializationTest\:\:serializedDataProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Event/EventSerializationAndDeserializationTest.php - - message: "#^Parameter \\#1 \\$data of static method Broadway\\\\Serializer\\\\Serializable\\:\\:deserialize\\(\\) expects array, mixed given\\.$#" + message: '#^Parameter \#1 \$data of static method Broadway\\Serializer\\Serializable\:\:deserialize\(\) expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Event/EventSerializationAndDeserializationTest.php - - message: "#^Parameter \\#1 \\$data of static method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\SensitiveData\\\\SensitiveData\\:\\:deserialize\\(\\) expects array, mixed given\\.$#" + message: '#^Parameter \#1 \$data of static method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\SensitiveData\\SensitiveData\:\:deserialize\(\) expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Event/EventSerializationAndDeserializationTest.php - - message: "#^Parameter \\#1 \\$objectOrClass of class ReflectionClass constructor expects class\\-string\\\\|T of object, string given\\.$#" + message: '#^Call to function is_a\(\) with arguments ''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithRevocationEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithUnverifiedSecondFactorRevocationEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithVerifiedSecondFactorRevocationEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\CompliedWithVettedSecondFactorRevocationEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\EmailVerifiedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\GssfPossessionProvenAndVerifiedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\GssfPossessionProvenEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityCreatedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityEmailChangedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityRenamedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\IdentityRestoredEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\PhonePossessionProvenAndVerifiedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\PhonePossessionProvenEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\PhoneRecoveryTokenPossessionProvenEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RegistrationAuthorityRetractedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\RegistrationAuthorityRetractedForInstitutionEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SafeStoreSecretRecoveryTokenPossessionPromisedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorMigratedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorMigratedToEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorRevokedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorVettedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorVettedWithoutTokenProofOfPossession''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\U2fDevicePossessionProvenAndVerifiedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\U2fDevicePossessionProvenEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\UnverifiedSecondFactorRevokedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\VerifiedSecondFactorRevokedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\VettedSecondFactorRevokedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\YubikeyPossessionProvenAndVerifiedEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\YubikeyPossessionProvenEvent''\|''Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\YubikeySecondFactorBootstrappedEvent'', ''Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\SensitiveData\\\\Forgettable'' and true will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Event/ForgettableEventsTest.php - - message: "#^Parameter \\#2 \\$array of function array_map expects array, array\\\\|false given\\.$#" + message: '#^Parameter \#1 \$objectOrClass of class ReflectionClass constructor expects class\-string\\|T of object, string given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Event/ForgettableEventsTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Event\\\\WhitelistEventSerializationAndDeserializationTest\\:\\:eventProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Identity\\Event\\WhitelistEventSerializationAndDeserializationTest\:\:eventProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Event/WhitelistEventSerializationAndDeserializationTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Value\\\\CommonNameTest\\:\\:invalidArgumentProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Identity\\Value\\CommonNameTest\:\:invalidArgumentProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Value/CommonNameTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Value\\\\DocumentNumberTest\\:\\:invalidArgumentProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Identity\\Value\\DocumentNumberTest\:\:invalidArgumentProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Value/DocumentNumberTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Value\\\\EmailTest\\:\\:invalidArgumentProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Identity\\Value\\EmailTest\:\:invalidArgumentProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Value/EmailTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Value\\\\EmailTest\\:\\:invalidEmailProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Identity\\Value\\EmailTest\:\:invalidEmailProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Value/EmailTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Value\\\\GssfIdTest\\:\\:invalidValueProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Identity\\Value\\GssfIdTest\:\:invalidValueProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Value/GssfIdTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Value\\\\InstitutionTest\\:\\:invalidValueProviderInvalidString\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Identity\\Value\\InstitutionTest\:\:invalidValueProviderInvalidString\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Value/InstitutionTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Value\\\\PhoneNumberTest\\:\\:invalidValueProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Identity\\Value\\PhoneNumberTest\:\:invalidValueProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Value/PhoneNumberTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Value\\\\StepupProviderTest\\:\\:invalidValueProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Identity\\Value\\StepupProviderTest\:\:invalidValueProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Value/StepupProviderTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Value\\\\TimeFrameTest\\:\\:invalidValueProviderInt\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Identity\\Value\\TimeFrameTest\:\:invalidValueProviderInt\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Value/TimeFrameTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Value\\\\YubikeyPublicIdTest\\:\\:invalidFormatProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Identity\\Value\\YubikeyPublicIdTest\:\:invalidFormatProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Value/YubikeyPublicIdTest.php - - message: "#^Method Surfnet\\\\Stepup\\\\Tests\\\\Identity\\\\Value\\\\YubikeyPublicIdTest\\:\\:validFormatProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\Stepup\\Tests\\Identity\\Value\\YubikeyPublicIdTest\:\:validFormatProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/Stepup/Tests/Identity/Value/YubikeyPublicIdTest.php - - message: "#^Cannot cast mixed to string\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Filter/InstitutionAuthorizationRepositoryFilter.php - - - - message: "#^Cannot call method getIdentityId\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\IdentityId\\|null\\.$#" + message: '#^Cannot call method getIdentityId\(\) on Surfnet\\Stepup\\Identity\\Value\\IdentityId\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Service/CommandAuthorizationService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Authorization\\\\Value\\\\AuthorizationDecision\\:\\:__construct\\(\\) has parameter \\$errorMessages with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Authorization\\Value\\AuthorizationDecision\:\:__construct\(\) has parameter \$errorMessages with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Value/AuthorizationDecision.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Authorization\\\\Value\\\\AuthorizationDecision\\:\\:denied\\(\\) has parameter \\$messages with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Authorization\\Value\\AuthorizationDecision\:\:denied\(\) has parameter \$messages with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Value/AuthorizationDecision.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Authorization\\\\Value\\\\AuthorizationDecision\\:\\:getErrorMessages\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Authorization\\Value\\AuthorizationDecision\:\:getErrorMessages\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Value/AuthorizationDecision.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Authorization\\\\Value\\\\InstitutionAuthorizationContext\\:\\:getInstitutions\\(\\) should return Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\InstitutionCollection but returns Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\InstitutionCollection\\|null\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Authorization\\Value\\InstitutionAuthorizationContext\:\:getInstitutions\(\) should return Surfnet\\Stepup\\Identity\\Collection\\InstitutionCollection but returns Surfnet\\Stepup\\Identity\\Collection\\InstitutionCollection\|null\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Value/InstitutionAuthorizationContext.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Authorization\\\\Value\\\\InstitutionRoleSet\\:\\:__construct\\(\\) has parameter \\$institutionRoles with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Authorization\\Value\\InstitutionRoleSet\:\:__construct\(\) has parameter \$institutionRoles with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Value/InstitutionRoleSet.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Authorization\\\\Value\\\\InstitutionRoleSet\\:\\:getRoles\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Authorization\\Value\\InstitutionRoleSet\:\:getRoles\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Value/InstitutionRoleSet.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Authorization\\\\Value\\\\InstitutionRoleSetInterface\\:\\:getRoles\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Authorization\\Value\\InstitutionRoleSetInterface\:\:getRoles\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Value/InstitutionRoleSetInterface.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\ConfiguredInstitution\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\ConfiguredInstitution\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Entity/ConfiguredInstitution.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\RaLocation\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\RaLocation\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Entity/RaLocation.php - - message: "#^Parameter \\#2 \\$secondFactorType of static method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\AllowedSecondFactor\\:\\:createFrom\\(\\) expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, mixed given\\.$#" + message: '#^Parameter \#2 \$secondFactorType of static method Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\AllowedSecondFactor\:\:createFrom\(\) expects Surfnet\\StepupBundle\\Value\\SecondFactorType, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/AllowedSecondFactorListProjector.php - - message: "#^Cannot access property \\$numberOfTokensPerIdentityOption on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\InstitutionConfigurationOptions\\|null\\.$#" + message: '#^Cannot access property \$numberOfTokensPerIdentityOption on Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\InstitutionConfigurationOptions\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionConfigurationOptionsProjector.php - - message: "#^Cannot access property \\$selfAssertedTokensOption on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\InstitutionConfigurationOptions\\|null\\.$#" + message: '#^Cannot access property \$selfAssertedTokensOption on Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\InstitutionConfigurationOptions\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionConfigurationOptionsProjector.php - - message: "#^Cannot access property \\$selfVetOption on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\InstitutionConfigurationOptions\\|null\\.$#" + message: '#^Cannot access property \$selfVetOption on Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\InstitutionConfigurationOptions\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionConfigurationOptionsProjector.php - - message: "#^Cannot access property \\$showRaaContactInformationOption on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\InstitutionConfigurationOptions\\|null\\.$#" + message: '#^Cannot access property \$showRaaContactInformationOption on Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\InstitutionConfigurationOptions\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionConfigurationOptionsProjector.php - - message: "#^Cannot access property \\$ssoOn2faOption on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\InstitutionConfigurationOptions\\|null\\.$#" + message: '#^Cannot access property \$ssoOn2faOption on Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\InstitutionConfigurationOptions\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionConfigurationOptionsProjector.php - - message: "#^Cannot access property \\$ssoRegistrationBypassOption on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\InstitutionConfigurationOptions\\|null\\.$#" + message: '#^Cannot access property \$ssoRegistrationBypassOption on Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\InstitutionConfigurationOptions\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionConfigurationOptionsProjector.php - - message: "#^Cannot access property \\$useRaLocationsOption on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\InstitutionConfigurationOptions\\|null\\.$#" + message: '#^Cannot access property \$useRaLocationsOption on Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\InstitutionConfigurationOptions\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionConfigurationOptionsProjector.php - - message: "#^Cannot access property \\$verifyEmailOption on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\InstitutionConfigurationOptions\\|null\\.$#" + message: '#^Cannot access property \$verifyEmailOption on Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\InstitutionConfigurationOptions\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionConfigurationOptionsProjector.php - - message: "#^Parameter \\#1 \\$institutionConfigurationOptions of method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Repository\\\\InstitutionConfigurationOptionsRepository\\:\\:save\\(\\) expects Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\InstitutionConfigurationOptions, Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\InstitutionConfigurationOptions\\|null given\\.$#" + message: '#^Parameter \#1 \$institutionConfigurationOptions of method Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Repository\\InstitutionConfigurationOptionsRepository\:\:save\(\) expects Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\InstitutionConfigurationOptions, Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\InstitutionConfigurationOptions\|null given\.$#' + identifier: argument.type count: 8 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionConfigurationOptionsProjector.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Repository\\\\AllowedSecondFactorRepository\\:\\:getAllowedSecondFactorsFor\\(\\) should return array\\ but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Repository\\AllowedSecondFactorRepository\:\:getAllowedSecondFactorsFor\(\) should return array\ but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Repository/AllowedSecondFactorRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Repository\\\\InstitutionAuthorizationRepository\\:\\:findAuthorizationOptionsForInstitution\\(\\) should return array\\ but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Repository\\InstitutionAuthorizationRepository\:\:findAuthorizationOptionsForInstitution\(\) should return array\ but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Repository/InstitutionAuthorizationRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Repository\\\\InstitutionAuthorizationRepository\\:\\:findAuthorizationOptionsForInstitutionByRole\\(\\) should return array\\ but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Repository\\InstitutionAuthorizationRepository\:\:findAuthorizationOptionsForInstitutionByRole\(\) should return array\ but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Repository/InstitutionAuthorizationRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Repository\\\\InstitutionAuthorizationRepository\\:\\:findSelectRaasForInstitution\\(\\) should return array\\ but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Repository\\InstitutionAuthorizationRepository\:\:findSelectRaasForInstitution\(\) should return array\ but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Repository/InstitutionAuthorizationRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Repository\\\\InstitutionConfigurationOptionsRepository\\:\\:findConfigurationOptionsFor\\(\\) should return Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\InstitutionConfigurationOptions\\|null but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Repository\\InstitutionConfigurationOptionsRepository\:\:findConfigurationOptionsFor\(\) should return Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\InstitutionConfigurationOptions\|null but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Repository/InstitutionConfigurationOptionsRepository.php - - message: "#^Cannot call method getInstitution\\(\\) on string\\|Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\Institution\\.$#" + message: '#^Cannot call method getInstitution\(\) on string\|Surfnet\\Stepup\\Configuration\\Value\\Institution\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Repository/RaLocationRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Repository\\\\RaLocationRepository\\:\\:findByInstitution\\(\\) should return array\\ but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Repository\\RaLocationRepository\:\:findByInstitution\(\) should return array\ but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Repository/RaLocationRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Repository\\\\RaLocationRepository\\:\\:findByRaLocationId\\(\\) should return Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\RaLocation\\|null but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Repository\\RaLocationRepository\:\:findByRaLocationId\(\) should return Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\RaLocation\|null but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Repository/RaLocationRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Repository\\\\RaLocationRepository\\:\\:search\\(\\) should return array\\\\|null but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Repository\\RaLocationRepository\:\:search\(\) should return array\\|null but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Repository/RaLocationRepository.php - - message: "#^Cannot access an offset on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\AllowedSecondFactor\\.$#" + message: '#^Cannot access an offset on Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\AllowedSecondFactor\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Service/AllowedSecondFactorMap.php - - message: "#^Parameter \\#1 \\$allowedSecondFactors of static method Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\AllowedSecondFactorList\\:\\:ofTypes\\(\\) expects array, Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\AllowedSecondFactor given\\.$#" + message: '#^Parameter \#1 \$allowedSecondFactors of static method Surfnet\\Stepup\\Configuration\\Value\\AllowedSecondFactorList\:\:ofTypes\(\) expects array, Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\AllowedSecondFactor given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Service/AllowedSecondFactorMap.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Service\\\\InstitutionAuthorizationOptionMap\\:\\:fromInstitutionAuthorizations\\(\\) has parameter \\$institutionAuthorizations with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Service\\InstitutionAuthorizationOptionMap\:\:fromInstitutionAuthorizations\(\) has parameter \$institutionAuthorizations with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Service/InstitutionAuthorizationOptionMap.php - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\IdentityId constructor expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/AuditLogController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\AbstractQuery\\:\\:\\$pageNumber \\(int\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/AuditLogController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\SecondFactorAuditLogQuery\\:\\:\\$orderBy \\(string\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/AuditLogController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\SecondFactorAuditLogQuery\\:\\:\\$orderDirection \\(string\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/AuditLogController.php - - - - message: "#^Access to an undefined property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Command\\\\CreateIdentityCommand\\|Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Command\\\\UpdateIdentityCommand\\:\\:\\$institution\\.$#" + message: '#^Access to an undefined property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Identity\\Command\\CreateIdentityCommand\|Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Identity\\Command\\UpdateIdentityCommand\:\:\$institution\.$#' + identifier: property.notFound count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/CommandController.php - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\IdentityId constructor expects string, string\\|null given\\.$#" + message: '#^Parameter \#1 \$value of class Surfnet\\Stepup\\Identity\\Value\\IdentityId constructor expects string, string\|null given\.$#' + identifier: argument.type count: 2 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/CommandController.php - - message: "#^Cannot cast mixed to int\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/IdentityController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\IdentityQuery\\:\\:\\$commonName \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/IdentityController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\IdentityQuery\\:\\:\\$email \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/IdentityController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\IdentityQuery\\:\\:\\$nameId \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/IdentityController.php - - - - message: "#^Cannot cast mixed to int\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaCandidateController.php - - - - message: "#^Parameter \\#1 \\$identityId of method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Service\\\\RaCandidateService\\:\\:findOneByIdentityId\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaCandidateController.php - - - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\IdentityId constructor expects string, mixed given\\.$#" - count: 2 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaCandidateController.php - - - - message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaCandidateController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaCandidateQuery\\:\\:\\$commonName \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaCandidateController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaCandidateQuery\\:\\:\\$email \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaCandidateController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaCandidateQuery\\:\\:\\$institution \\(string\\|Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaCandidateController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaCandidateQuery\\:\\:\\$raInstitution \\(string\\|Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaCandidateController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaCandidateQuery\\:\\:\\$secondFactorTypes \\(array\\\\) does not accept mixed\\.$#" + message: '#^Parameter \#2 \.\.\.\$values of function sprintf expects bool\|float\|int\|string\|null, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaCandidateController.php - - message: "#^Cannot cast mixed to int\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaListingController.php - - - - message: "#^Parameter \\#1 \\$institution of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution constructor expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaListingController.php - - - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\IdentityId constructor expects string, mixed given\\.$#" - count: 3 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaListingController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaListingQuery\\:\\:\\$email \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaListingController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaListingQuery\\:\\:\\$institution \\(string\\|Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaListingController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaListingQuery\\:\\:\\$name \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaListingController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaListingQuery\\:\\:\\$orderBy \\(string\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaListingController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaListingQuery\\:\\:\\$orderDirection \\(string\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaListingController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaListingQuery\\:\\:\\$raInstitution \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaListingController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaListingQuery\\:\\:\\$role \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaListingController.php - - - - message: "#^Parameter \\#1 \\$raLocationId of class Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\RaLocationId constructor expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaLocationController.php - - - - message: "#^Parameter \\#1 \\$value of function count expects array\\|Countable, array\\\\|null given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaLocationController.php - - - - message: "#^Parameter \\#4 \\$collection of class Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Response\\\\JsonCollectionResponse constructor expects array, array\\\\|null given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaLocationController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Query\\\\RaLocationQuery\\:\\:\\$orderBy \\(string\\) does not accept mixed\\.$#" + message: '#^Parameter \#1 \$value of function count expects array\|Countable, array\\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaLocationController.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Query\\\\RaLocationQuery\\:\\:\\$orderDirection \\(string\\) does not accept mixed\\.$#" + message: '#^Parameter \#4 \$collection of class Surfnet\\StepupMiddleware\\ApiBundle\\Response\\JsonCollectionResponse constructor expects array, array\\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaLocationController.php - - message: "#^Cannot cast mixed to int\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaSecondFactorController.php - - - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\IdentityId constructor expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaSecondFactorController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaSecondFactorQuery\\:\\:\\$email \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaSecondFactorController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaSecondFactorQuery\\:\\:\\$institution \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaSecondFactorController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaSecondFactorQuery\\:\\:\\$name \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaSecondFactorController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaSecondFactorQuery\\:\\:\\$orderBy \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaSecondFactorController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaSecondFactorQuery\\:\\:\\$orderDirection \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaSecondFactorController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaSecondFactorQuery\\:\\:\\$secondFactorId \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaSecondFactorController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaSecondFactorQuery\\:\\:\\$status \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaSecondFactorController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RaSecondFactorQuery\\:\\:\\$type \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaSecondFactorController.php - - - - message: "#^Cannot call method getRoles\\(\\) on Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RecoveryTokenController.php - - - - message: "#^Cannot cast mixed to int\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RecoveryTokenController.php - - - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\IdentityId constructor expects string, mixed given\\.$#" - count: 2 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RecoveryTokenController.php - - - - message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RecoveryTokenController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RecoveryTokenQuery\\:\\:\\$email \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RecoveryTokenController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RecoveryTokenQuery\\:\\:\\$institution \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RecoveryTokenController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RecoveryTokenQuery\\:\\:\\$name \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RecoveryTokenController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RecoveryTokenQuery\\:\\:\\$orderBy \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RecoveryTokenController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RecoveryTokenQuery\\:\\:\\$orderDirection \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RecoveryTokenController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RecoveryTokenQuery\\:\\:\\$status \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RecoveryTokenController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\RecoveryTokenQuery\\:\\:\\$type \\(string\\|null\\) does not accept mixed\\.$#" + message: '#^Cannot call method getRoles\(\) on Symfony\\Component\\Security\\Core\\User\\UserInterface\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/RecoveryTokenController.php - - message: "#^Cannot cast mixed to int\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/UnverifiedSecondFactorController.php - - - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\IdentityId constructor expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/UnverifiedSecondFactorController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\UnverifiedSecondFactorQuery\\:\\:\\$verificationNonce \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/UnverifiedSecondFactorController.php - - - - message: "#^Cannot cast mixed to int\\.$#" - count: 2 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/VerifiedSecondFactorController.php - - - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\IdentityId constructor expects string, mixed given\\.$#" - count: 3 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/VerifiedSecondFactorController.php - - - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorId constructor expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/VerifiedSecondFactorController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Query\\\\VerifiedSecondFactorQuery\\:\\:\\$registrationCode \\(string\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/VerifiedSecondFactorController.php - - - - message: "#^Cannot cast mixed to int\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/VettedSecondFactorController.php - - - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\IdentityId constructor expects string, mixed given\\.$#" + message: '#^Call to method scalarNode\(\) on an unknown class Symfony\\Component\\Config\\Definition\\Builder\\NodeBuilder\\.$#' + identifier: class.notFound count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Controller/VettedSecondFactorController.php + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/DependencyInjection/Configuration.php - - message: "#^Cannot cast mixed to string\\.$#" + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/AuthorityRoleType.php - - message: "#^Parameter \\#1 \\$role of class Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Value\\\\AuthorityRole constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$role of class Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Value\\AuthorityRole constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/AuthorityRoleType.php - - message: "#^Cannot cast mixed to string\\.$#" + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/CommonNameType.php - - message: "#^Parameter \\#1 \\$commonName of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\CommonName constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$commonName of class Surfnet\\Stepup\\Identity\\Value\\CommonName constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/CommonNameType.php - - message: "#^Parameter \\#1 \\$contactInformation of class Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\ContactInformation constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$contactInformation of class Surfnet\\Stepup\\Configuration\\Value\\ContactInformation constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ConfigurationContactInformationType.php - - message: "#^Parameter \\#1 \\$institution of class Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\Institution constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$institution of class Surfnet\\Stepup\\Configuration\\Value\\Institution constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ConfigurationInstitutionType.php - - message: "#^Parameter \\#1 \\$location of class Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\Location constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$location of class Surfnet\\Stepup\\Configuration\\Value\\Location constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ConfigurationLocationType.php - - message: "#^Cannot cast mixed to string\\.$#" + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ContactInformationType.php - - message: "#^Parameter \\#1 \\$contactInformation of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\ContactInformation constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$contactInformation of class Surfnet\\Stepup\\Identity\\Value\\ContactInformation constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ContactInformationType.php - - message: "#^Cannot call method format\\(\\) on mixed\\.$#" + message: '#^Cannot call method format\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/DateTimeType.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Doctrine\\\\Type\\\\DateTimeType\\:\\:getSQLDeclaration\\(\\) has parameter \\$column with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Doctrine\\Type\\DateTimeType\:\:getSQLDeclaration\(\) has parameter \$column with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/DateTimeType.php - - message: "#^Parameter \\#2 \\$datetime of static method DateTime\\:\\:createFromFormat\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#2 \$datetime of static method DateTime\:\:createFromFormat\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/DateTimeType.php - - message: "#^Parameter \\#1 \\$documentNumber of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\DocumentNumber constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$documentNumber of class Surfnet\\Stepup\\Identity\\Value\\DocumentNumber constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/DocumentNumberType.php - - message: "#^Cannot cast mixed to string\\.$#" + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/EmailType.php - - message: "#^Parameter \\#1 \\$email of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Email constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$email of class Surfnet\\Stepup\\Identity\\Value\\Email constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/EmailType.php - - message: "#^Parameter \\#1 \\$type of class Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\InstitutionRole constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$type of class Surfnet\\Stepup\\Configuration\\Value\\InstitutionRole constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/InstitutionRoleType.php - - message: "#^Cannot cast mixed to string\\.$#" + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/InstitutionType.php - - message: "#^Parameter \\#1 \\$institution of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$institution of class Surfnet\\Stepup\\Identity\\Value\\Institution constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/InstitutionType.php - - message: "#^Cannot cast mixed to string\\.$#" + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/LocaleType.php - - message: "#^Parameter \\#1 \\$locale of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Locale constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$locale of class Surfnet\\Stepup\\Identity\\Value\\Locale constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/LocaleType.php - - message: "#^Cannot cast mixed to string\\.$#" + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/LocationType.php - - message: "#^Parameter \\#1 \\$location of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Location constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$location of class Surfnet\\Stepup\\Identity\\Value\\Location constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/LocationType.php - - message: "#^Cannot cast mixed to string\\.$#" + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/NameIdType.php - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\NameId constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$value of class Surfnet\\Stepup\\Identity\\Value\\NameId constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/NameIdType.php - - message: "#^Parameter \\#1 \\$raLocationName of class Surfnet\\\\Stepup\\\\Configuration\\\\Value\\\\RaLocationName constructor expects string, mixed given\\.$#" + message: '#^Cannot cast T of mixed to int\.$#' + identifier: cast.int + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/NumberOfTokensPerIdentityType.php + + - + message: '#^Parameter \#1 \$raLocationName of class Surfnet\\Stepup\\Configuration\\Value\\RaLocationName constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/RaLocationNameType.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Doctrine\\\\Type\\\\SecondFactorStatusType\\:\\:getSQLDeclaration\\(\\) has parameter \\$column with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Doctrine\\Type\\SecondFactorStatusType\:\:getSQLDeclaration\(\) has parameter \$column with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SecondFactorStatusType.php - - message: "#^Cannot cast mixed to string\\.$#" + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SecondFactorTypeType.php - - message: "#^Parameter \\#1 \\$type of class Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$type of class Surfnet\\StepupBundle\\Value\\SecondFactorType constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SecondFactorTypeType.php - - message: "#^Cannot cast mixed to string\\.$#" + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/VettingTypeHintsType.php - - message: "#^Parameter \\#1 \\$data of static method Surfnet\\\\Stepup\\\\Identity\\\\Collection\\\\VettingTypeHintCollection\\:\\:deserialize\\(\\) expects array, mixed given\\.$#" + message: '#^Parameter \#1 \$data of static method Surfnet\\Stepup\\Identity\\Collection\\VettingTypeHintCollection\:\:deserialize\(\) expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/VettingTypeHintsType.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\EventListener\\\\ExceptionListener\\:\\:createJsonErrorResponse\\(\\) has parameter \\$headers with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\EventListener\\ExceptionListener\:\:createJsonErrorResponse\(\) has parameter \$headers with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/EventListener/ExceptionListener.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Exception\\\\BadApiRequestException\\:\\:__construct\\(\\) has parameter \\$errors with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Exception\\BadApiRequestException\:\:__construct\(\) has parameter \$errors with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Exception/BadApiRequestException.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Exception\\\\BadCommandRequestException\\:\\:__construct\\(\\) has parameter \\$errors with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Exception\\BadCommandRequestException\:\:__construct\(\) has parameter \$errors with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Exception/BadCommandRequestException.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\AuditLogEntry\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\AuditLogEntry\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/AuditLogEntry.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/Identity.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\IdentitySelfAssertedTokenOptions\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\IdentitySelfAssertedTokenOptions\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/IdentitySelfAssertedTokenOptions.php - - message: "#^PHPDoc tag @var for property Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\IdentitySelfAssertedTokenOptions\\:\\:\\$identityId with type Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\IdentityId is incompatible with native type string\\.$#" + message: '#^PHPDoc tag @var for property Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\IdentitySelfAssertedTokenOptions\:\:\$identityId with type Surfnet\\Stepup\\Identity\\Value\\IdentityId is incompatible with native type string\.$#' + identifier: property.phpDocType count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/IdentitySelfAssertedTokenOptions.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\InstitutionListing\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\InstitutionListing\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/InstitutionListing.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RaCandidate\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RaCandidate\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/RaCandidate.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RaListing\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RaListing\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/RaListing.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RaSecondFactor\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RaSecondFactor\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/RaSecondFactor.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RecoveryToken\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RecoveryToken\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/RecoveryToken.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\UnverifiedSecondFactor\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\UnverifiedSecondFactor\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/UnverifiedSecondFactor.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\VerifiedSecondFactor\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\VerifiedSecondFactor\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/VerifiedSecondFactor.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\VettedSecondFactor\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\VettedSecondFactor\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/VettedSecondFactor.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\VettingTypeHint\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\VettingTypeHint\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/VettingTypeHint.php - - message: "#^Cannot call method getCommonName\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\CommonName\\|null\\.$#" + message: '#^Cannot call method getCommonName\(\) on Surfnet\\Stepup\\Identity\\Value\\CommonName\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/AuditLogProjector.php - - message: "#^Parameter \\#1 \\$type of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenType constructor expects string, string\\|null given\\.$#" + message: '#^Parameter \#1 \$type of class Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenType constructor expects string, string\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/AuditLogProjector.php - - message: "#^Cannot access property \\$commonName on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null\\.$#" + message: '#^Cannot access property \$commonName on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null\.$#' + identifier: property.nonObject count: 2 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/IdentityProjector.php - - message: "#^Cannot access property \\$email on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null\\.$#" + message: '#^Cannot access property \$email on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null\.$#' + identifier: property.nonObject count: 2 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/IdentityProjector.php - - message: "#^Cannot access property \\$preferredLocale on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null\\.$#" + message: '#^Cannot access property \$preferredLocale on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/IdentityProjector.php - - message: "#^Parameter \\#1 \\$identity of method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\IdentityRepository\\:\\:save\\(\\) expects Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity, Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null given\\.$#" + message: '#^Parameter \#1 \$identity of method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\IdentityRepository\:\:save\(\) expects Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity, Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null given\.$#' + identifier: argument.type count: 4 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/IdentityProjector.php - - message: "#^Parameter \\#1 \\$vettingType of method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Projector\\\\IdentityProjector\\:\\:determinePossessionOfSelfAssertedToken\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingType, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingType\\|null given\\.$#" + message: '#^Parameter \#1 \$vettingType of method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Projector\\IdentityProjector\:\:determinePossessionOfSelfAssertedToken\(\) expects Surfnet\\Stepup\\Identity\\Value\\VettingType, Surfnet\\Stepup\\Identity\\Value\\VettingType\|null given\.$#' + identifier: argument.type count: 2 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/IdentityProjector.php - - message: "#^Parameter \\#1 \\$vettingType of method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Projector\\\\IdentitySelfAssertedTokenOptionsProjector\\:\\:determinePossessionOfToken\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingType, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingType\\|null given\\.$#" + message: '#^Parameter \#1 \$vettingType of method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Projector\\IdentitySelfAssertedTokenOptionsProjector\:\:determinePossessionOfToken\(\) expects Surfnet\\Stepup\\Identity\\Value\\VettingType, Surfnet\\Stepup\\Identity\\Value\\VettingType\|null given\.$#' + identifier: argument.type count: 2 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/IdentitySelfAssertedTokenOptionsProjector.php - - message: "#^Cannot access property \\$commonName on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null\\.$#" + message: '#^Cannot access property \$commonName on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null\.$#' + identifier: property.nonObject count: 4 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaListingProjector.php - - message: "#^Cannot access property \\$email on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null\\.$#" + message: '#^Cannot access property \$email on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null\.$#' + identifier: property.nonObject count: 4 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaListingProjector.php - - message: "#^Cannot access property \\$role on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RaListing\\|null\\.$#" + message: '#^Cannot access property \$role on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RaListing\|null\.$#' + identifier: property.nonObject count: 2 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaListingProjector.php - - message: "#^Parameter \\#1 \\$raListingEntry of method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\RaListingRepository\\:\\:save\\(\\) expects Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RaListing, Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RaListing\\|null given\\.$#" + message: '#^Parameter \#1 \$raListingEntry of method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RaListingRepository\:\:save\(\) expects Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RaListing, Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RaListing\|null given\.$#' + identifier: argument.type count: 2 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaListingProjector.php - - message: "#^Cannot access property \\$documentNumber on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RaSecondFactor\\|null\\.$#" + message: '#^Cannot access property \$documentNumber on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RaSecondFactor\|null\.$#' + identifier: property.nonObject count: 3 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaSecondFactorProjector.php - - message: "#^Cannot access property \\$id on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null\\.$#" + message: '#^Cannot access property \$id on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null\.$#' + identifier: property.nonObject count: 2 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaSecondFactorProjector.php - - message: "#^Cannot access property \\$institution on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null\\.$#" + message: '#^Cannot access property \$institution on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null\.$#' + identifier: property.nonObject count: 2 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaSecondFactorProjector.php - - message: "#^Cannot access property \\$status on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RaSecondFactor\\|null\\.$#" + message: '#^Cannot access property \$status on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RaSecondFactor\|null\.$#' + identifier: property.nonObject count: 4 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaSecondFactorProjector.php - - message: "#^Cannot call method getDocumentNumber\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingType\\|null\\.$#" + message: '#^Cannot call method getDocumentNumber\(\) on Surfnet\\Stepup\\Identity\\Value\\VettingType\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaSecondFactorProjector.php - - message: "#^Parameter \\#1 \\$secondFactor of method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\RaSecondFactorRepository\\:\\:save\\(\\) expects Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RaSecondFactor, Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RaSecondFactor\\|null given\\.$#" + message: '#^Parameter \#1 \$secondFactor of method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RaSecondFactorRepository\:\:save\(\) expects Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RaSecondFactor, Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RaSecondFactor\|null given\.$#' + identifier: argument.type count: 3 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaSecondFactorProjector.php - - message: "#^Cannot access property \\$status on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RecoveryToken\\|null\\.$#" + message: '#^Cannot access property \$status on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RecoveryToken\|null\.$#' + identifier: property.nonObject count: 2 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RecoveryTokenProjector.php - - message: "#^Parameter \\#1 \\$entry of method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\RecoveryTokenRepository\\:\\:save\\(\\) expects Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RecoveryToken, Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RecoveryToken\\|null given\\.$#" + message: '#^Parameter \#1 \$entry of method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RecoveryTokenRepository\:\:save\(\) expects Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RecoveryToken, Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RecoveryToken\|null given\.$#' + identifier: argument.type count: 2 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RecoveryTokenProjector.php - - message: "#^Cannot access property \\$secondFactorIdentifier on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\UnverifiedSecondFactor\\|null\\.$#" + message: '#^Cannot access property \$secondFactorIdentifier on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\UnverifiedSecondFactor\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SecondFactorProjector.php - - message: "#^Parameter \\#1 \\$secondFactor of method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\UnverifiedSecondFactorRepository\\:\\:remove\\(\\) expects Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\UnverifiedSecondFactor, Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\UnverifiedSecondFactor\\|null given\\.$#" + message: '#^Parameter \#1 \$secondFactor of method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\UnverifiedSecondFactorRepository\:\:remove\(\) expects Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\UnverifiedSecondFactor, Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\UnverifiedSecondFactor\|null given\.$#' + identifier: argument.type count: 3 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SecondFactorProjector.php - - message: "#^Parameter \\#1 \\$secondFactor of method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\VerifiedSecondFactorRepository\\:\\:remove\\(\\) expects Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\VerifiedSecondFactor, Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\VerifiedSecondFactor\\|null given\\.$#" + message: '#^Parameter \#1 \$secondFactor of method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\VerifiedSecondFactorRepository\:\:remove\(\) expects Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\VerifiedSecondFactor, Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\VerifiedSecondFactor\|null given\.$#' + identifier: argument.type count: 4 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SecondFactorProjector.php - - message: "#^Parameter \\#1 \\$secondFactor of method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\VettedSecondFactorRepository\\:\\:remove\\(\\) expects Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\VettedSecondFactor, Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\VettedSecondFactor\\|null given\\.$#" + message: '#^Parameter \#1 \$secondFactor of method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\VettedSecondFactorRepository\:\:remove\(\) expects Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\VettedSecondFactor, Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\VettedSecondFactor\|null given\.$#' + identifier: argument.type count: 2 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SecondFactorProjector.php - - message: "#^Parameter \\#1 \\$institution of static method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\WhitelistEntry\\:\\:createFrom\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution, mixed given\\.$#" - count: 3 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/WhitelistProjector.php - - - - message: "#^Parameter \\#1 \\$institutions of method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\WhitelistEntryRepository\\:\\:findEntriesByInstitutions\\(\\) expects array\\, array\\, mixed\\> given\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\AuditLogRepository\:\:createSecondFactorSearchQuery\(\) return type with generic class Doctrine\\ORM\\Query does not specify its types\: TKey, TResult$#' + identifier: missingType.generics count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/WhitelistProjector.php + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuditLogRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\AuditLogRepository\\:\\:findByIdentityId\\(\\) should return array\\ but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\AuditLogRepository\:\:findByIdentityId\(\) should return array\ but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuditLogRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\AuditLogRepository\\:\\:findEntriesWhereIdentityIsActorOnly\\(\\) should return array\\ but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\AuditLogRepository\:\:findEntriesWhereIdentityIsActorOnly\(\) should return array\ but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuditLogRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\AuditLogRepository\\:\\:saveAll\\(\\) has parameter \\$entries with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\AuditLogRepository\:\:saveAll\(\) has parameter \$entries with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuditLogRepository.php - - message: "#^Cannot access offset 'institution' on mixed\\.$#" + message: '#^Cannot access offset ''institution'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 5 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuthorizationRepository.php - - message: "#^Cannot cast mixed to string\\.$#" + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string count: 3 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuthorizationRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\AuthorizationRepository\\:\\:getAllowedIdentityRoles\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\AuthorizationRepository\:\:getAllowedIdentityRoles\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuthorizationRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\AuthorizationRepository\\:\\:getAllowedInstitutionRoles\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\AuthorizationRepository\:\:getAllowedInstitutionRoles\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuthorizationRepository.php - - message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" + message: '#^Parameter \#2 \.\.\.\$values of function sprintf expects bool\|float\|int\|string\|null, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuthorizationRepository.php - - message: "#^Parameter \\#3 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" + message: '#^Parameter \#3 \.\.\.\$values of function sprintf expects bool\|float\|int\|string\|null, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuthorizationRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\IdentityRepository\\:\\:findByNameIdsIndexed\\(\\) should return array\\ but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\IdentityRepository\:\:createSearchQuery\(\) return type with generic class Doctrine\\ORM\\Query does not specify its types\: TKey, TResult$#' + identifier: missingType.generics count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/IdentityRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\IdentityRepository\\:\\:findOneByNameIdAndInstitution\\(\\) should return Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\IdentityRepository\:\:findByNameIdsIndexed\(\) should return array\ but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/IdentityRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\RaCandidateRepository\\:\\:findOneByIdentityId\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\IdentityRepository\:\:findOneByNameIdAndInstitution\(\) should return Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/IdentityRepository.php + + - + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RaCandidateRepository\:\:createOptionsQuery\(\) return type with generic class Doctrine\\ORM\\Query does not specify its types\: TKey, TResult$#' + identifier: missingType.generics count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaCandidateRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\RaCandidateRepository\\:\\:findOneByIdentityId\\(\\) should return array\\|null but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RaCandidateRepository\:\:createSearchQuery\(\) return type with generic class Doctrine\\ORM\\Query does not specify its types\: TKey, TResult$#' + identifier: missingType.generics count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaCandidateRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\RaListingRepository\\:\\:findByIdentityId\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RaCandidateRepository\:\:findOneByIdentityId\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaListingRepository.php + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaCandidateRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\RaListingRepository\\:\\:findByIdentityIdAndRaInstitutionWithContext\\(\\) should return Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RaListing\\|null but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RaCandidateRepository\:\:findOneByIdentityId\(\) should return array\|null but returns mixed\.$#' + identifier: return.type count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaListingRepository.php + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaCandidateRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\RaListingRepository\\:\\:listRasFor\\(\\) return type with generic class Doctrine\\\\Common\\\\Collections\\\\ArrayCollection does not specify its types\\: TKey, T$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RaListingRepository\:\:createOptionsQuery\(\) return type with generic class Doctrine\\ORM\\Query does not specify its types\: TKey, TResult$#' + identifier: missingType.generics count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaListingRepository.php - - message: "#^Parameter \\#1 \\$elements of class Doctrine\\\\Common\\\\Collections\\\\ArrayCollection constructor expects array\\, mixed given\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RaListingRepository\:\:createSearchQuery\(\) return type with generic class Doctrine\\ORM\\Query does not specify its types\: TKey, TResult$#' + identifier: missingType.generics count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaListingRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\SraaRepository\\:\\:saveAll\\(\\) has parameter \\$sraaList with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RaListingRepository\:\:findByIdentityId\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/SraaRepository.php + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaListingRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\VerifiedSecondFactorRepository\\:\\:findByDate\\(\\) should return array\\ but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RaListingRepository\:\:findByIdentityIdAndRaInstitutionWithContext\(\) should return Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RaListing\|null but returns mixed\.$#' + identifier: return.type count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/VerifiedSecondFactorRepository.php + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaListingRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\WhitelistEntryRepository\\:\\:findEntriesByInstitutions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RaListingRepository\:\:listRasFor\(\) return type with generic class Doctrine\\Common\\Collections\\ArrayCollection does not specify its types\: TKey, T$#' + identifier: missingType.generics count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/WhitelistEntryRepository.php + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaListingRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\WhitelistEntryRepository\\:\\:findEntriesByInstitutions\\(\\) should return array but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RaListingRepository\:\:listRasFor\(\) should return Doctrine\\Common\\Collections\\ArrayCollection&iterable\ but returns Doctrine\\Common\\Collections\\ArrayCollection\<\(int\|string\), mixed\>\.$#' + identifier: return.type count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/WhitelistEntryRepository.php + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaListingRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Repository\\\\WhitelistEntryRepository\\:\\:getAll\\(\\) return type with generic class Doctrine\\\\Common\\\\Collections\\\\ArrayCollection does not specify its types\\: TKey, T$#" + message: '#^Parameter \#1 \$elements of class Doctrine\\Common\\Collections\\ArrayCollection constructor expects array\, mixed given\.$#' + identifier: argument.type count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/WhitelistEntryRepository.php + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaListingRepository.php - - message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RaSecondFactorRepository\:\:createOptionsQuery\(\) return type with generic class Doctrine\\ORM\\Query does not specify its types\: TKey, TResult$#' + identifier: missingType.generics count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/AbstractSearchService.php + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaSecondFactorRepository.php - - message: "#^Cannot cast mixed to string\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RaSecondFactorRepository\:\:createSearchQuery\(\) return type with generic class Doctrine\\ORM\\Query does not specify its types\: TKey, TResult$#' + identifier: missingType.generics count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/AbstractSearchService.php + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaSecondFactorRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Service\\\\AbstractSearchService\\:\\:createPaginatorFrom\\(\\) return type with generic class Pagerfanta\\\\Pagerfanta does not specify its types\\: T$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RecoveryTokenRepository\:\:createOptionsQuery\(\) return type with generic class Doctrine\\ORM\\Query does not specify its types\: TKey, TResult$#' + identifier: missingType.generics count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/AbstractSearchService.php + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RecoveryTokenRepository.php - - message: "#^Parameter \\#1 \\$raListings of static method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Value\\\\RegistrationAuthorityCredentials\\:\\:fromRaListings\\(\\) expects array\\, array\\|null given\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\RecoveryTokenRepository\:\:createSearchQuery\(\) return type with generic class Doctrine\\ORM\\Query does not specify its types\: TKey, TResult$#' + identifier: missingType.generics count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/IdentityService.php + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RecoveryTokenRepository.php - - message: "#^Cannot call method getInstitution\\(\\) on mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\SraaRepository\:\:saveAll\(\) has parameter \$sraaList with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaCandidateService.php + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/SraaRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Service\\\\RaCandidateService\\:\\:findOneByIdentityId\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\UnverifiedSecondFactorRepository\:\:createSearchQuery\(\) return type with generic class Doctrine\\ORM\\Query does not specify its types\: TKey, TResult$#' + identifier: missingType.generics + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/UnverifiedSecondFactorRepository.php + + - + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\VerifiedSecondFactorRepository\:\:createSearchForIdentityQuery\(\) return type with generic class Doctrine\\ORM\\Query does not specify its types\: TKey, TResult$#' + identifier: missingType.generics + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/VerifiedSecondFactorRepository.php + + - + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\VerifiedSecondFactorRepository\:\:createSearchQuery\(\) return type with generic class Doctrine\\ORM\\Query does not specify its types\: TKey, TResult$#' + identifier: missingType.generics + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/VerifiedSecondFactorRepository.php + + - + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\VerifiedSecondFactorRepository\:\:findByDate\(\) should return array\ but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/VerifiedSecondFactorRepository.php + + - + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\VettedSecondFactorRepository\:\:createSearchQuery\(\) return type with generic class Doctrine\\ORM\\Query does not specify its types\: TKey, TResult$#' + identifier: missingType.generics + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/VettedSecondFactorRepository.php + + - + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\WhitelistEntryRepository\:\:findEntriesByInstitutions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/WhitelistEntryRepository.php + + - + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\WhitelistEntryRepository\:\:findEntriesByInstitutions\(\) should return array but returns mixed\.$#' + identifier: return.type + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/WhitelistEntryRepository.php + + - + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Repository\\WhitelistEntryRepository\:\:getAll\(\) return type with generic class Doctrine\\Common\\Collections\\ArrayCollection does not specify its types\: TKey, T$#' + identifier: missingType.generics + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/WhitelistEntryRepository.php + + - + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/AbstractSearchService.php + + - + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/AbstractSearchService.php + + - + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Service\\AbstractSearchService\:\:createPaginatorFrom\(\) should return Pagerfanta\\Pagerfanta\ but returns Pagerfanta\\Pagerfanta\\.$#' + identifier: return.type + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/AbstractSearchService.php + + - + message: '#^Possibly invalid array key type mixed\.$#' + identifier: offsetAccess.invalidOffset + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/AbstractSearchService.php + + - + message: '#^Parameter \#1 \$raListings of static method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Value\\RegistrationAuthorityCredentials\:\:fromRaListings\(\) expects array\, array\|null given\.$#' + identifier: argument.type + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/IdentityService.php + + - + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Service\\RaCandidateService\:\:findOneByIdentityId\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaCandidateService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Service\\\\RaCandidateService\\:\\:getFilterOptions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Service\\RaCandidateService\:\:getFilterOptions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaCandidateService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Service\\\\RaCandidateService\\:\\:setUseRaInstitutionsOnRaCandidate\\(\\) has parameter \\$raCandidate with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Service\\RaCandidateService\:\:setUseRaInstitutionsOnRaCandidate\(\) has parameter \$raCandidate with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaCandidateService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Service\\\\RaCandidateService\\:\\:setUseRaInstitutionsOnRaCandidate\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Service\\RaCandidateService\:\:setUseRaInstitutionsOnRaCandidate\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaCandidateService.php - - message: "#^Parameter \\#1 \\$func of method Doctrine\\\\Common\\\\Collections\\\\ArrayCollection\\<\\(int\\|string\\),mixed\\>\\:\\:map\\(\\) expects Closure\\(mixed\\)\\: Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Value\\\\RegistrationAuthorityCredentials, Closure\\(Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\RaListing\\)\\: Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Value\\\\RegistrationAuthorityCredentials given\\.$#" + message: '#^Parameter \#1 \$func of method Doctrine\\Common\\Collections\\ArrayCollection\<\(int\|string\),mixed\>\:\:map\(\) expects Closure\(mixed\)\: Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Value\\RegistrationAuthorityCredentials, Closure\(Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\RaListing\)\: Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Value\\RegistrationAuthorityCredentials given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaListingService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Service\\\\RaSecondFactorService\\:\\:getFilterOptions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Service\\RaSecondFactorService\:\:getFilterOptions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaSecondFactorService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Service\\\\RaSecondFactorService\\:\\:searchUnpaginated\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Service\\RaSecondFactorService\:\:searchUnpaginated\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaSecondFactorService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Service\\\\RaSecondFactorService\\:\\:searchUnpaginated\\(\\) should return array but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Service\\RaSecondFactorService\:\:searchUnpaginated\(\) should return array but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaSecondFactorService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Service\\\\RecoveryTokenService\\:\\:getFilterOptions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Service\\RecoveryTokenService\:\:getFilterOptions\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RecoveryTokenService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Specification\\\\SpecificationInterface\\:\\:apply\\(\\) has parameter \\$entityRepository with generic class Doctrine\\\\ORM\\\\EntityRepository but does not specify its types\\: TEntityClass$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Service\\SecondFactorService\:\:searchUnverifiedSecondFactors\(\) should return Pagerfanta\\Pagerfanta\ but returns Pagerfanta\\Pagerfanta\\.$#' + identifier: return.type + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/SecondFactorService.php + + - + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Service\\SecondFactorService\:\:searchVerifiedSecondFactors\(\) should return Pagerfanta\\Pagerfanta\ but returns Pagerfanta\\Pagerfanta\\.$#' + identifier: return.type + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/SecondFactorService.php + + - + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Service\\SecondFactorService\:\:searchVerifiedSecondFactorsOfIdentity\(\) should return Pagerfanta\\Pagerfanta\ but returns Pagerfanta\\Pagerfanta\\.$#' + identifier: return.type + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/SecondFactorService.php + + - + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Service\\SecondFactorService\:\:searchVettedSecondFactors\(\) should return Pagerfanta\\Pagerfanta\ but returns Pagerfanta\\Pagerfanta\\.$#' + identifier: return.type + count: 1 + path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/SecondFactorService.php + + - + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Specification\\SpecificationInterface\:\:apply\(\) has parameter \$entityRepository with generic class Doctrine\\ORM\\EntityRepository but does not specify its types\: TEntityClass$#' + identifier: missingType.generics count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Specification/SpecificationInterface.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Value\\\\AuthorizedInstitutionCollection\\:\\:getAuthorizations\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Value\\AuthorizedInstitutionCollection\:\:getAuthorizations\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Value/AuthorizedInstitutionCollection.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Value\\\\Profile\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Value\\Profile\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Value/Profile.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Value\\\\RegistrationAuthorityCredentials\\:\\:getContactInformation\\(\\) should return string but returns Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\ContactInformation\\|null\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Value\\RegistrationAuthorityCredentials\:\:getContactInformation\(\) should return string but returns Surfnet\\Stepup\\Identity\\Value\\ContactInformation\|null\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Value/RegistrationAuthorityCredentials.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Value\\\\RegistrationAuthorityCredentials\\:\\:getLocation\\(\\) should return string but returns Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Location\\|null\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Value\\RegistrationAuthorityCredentials\:\:getLocation\(\) should return string but returns Surfnet\\Stepup\\Identity\\Value\\Location\|null\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Value/RegistrationAuthorityCredentials.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Value\\\\RegistrationAuthorityCredentials\\:\\:jsonSerialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Value\\RegistrationAuthorityCredentials\:\:jsonSerialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Identity/Value/RegistrationAuthorityCredentials.php - - message: "#^Cannot access offset 'command' on mixed\\.$#" + message: '#^Cannot access offset ''command'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 4 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Request/CommandValueResolver.php - - message: "#^Cannot access offset 'name' on mixed\\.$#" - count: 2 + message: '#^Cannot access offset ''name'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 3 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Request/CommandValueResolver.php - - message: "#^Cannot access offset 'payload' on mixed\\.$#" - count: 1 + message: '#^Cannot access offset ''payload'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Request/CommandValueResolver.php - - message: "#^Cannot access offset 'uuid' on mixed\\.$#" - count: 1 + message: '#^Cannot access offset ''uuid'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible + count: 2 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Request/CommandValueResolver.php - - message: "#^Cannot cast mixed to string\\.$#" + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string count: 3 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Request/CommandValueResolver.php - - message: "#^Cannot access property \\$meta on mixed\\.$#" + message: '#^Cannot access property \$meta on mixed\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Request/MetadataValueResolver.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Response\\\\JsonAuthorizationResponse\\:\\:__construct\\(\\) has parameter \\$errors with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Response\\JsonAuthorizationResponse\:\:__construct\(\) has parameter \$errors with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Response/JsonAuthorizationResponse.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Response\\\\JsonCollectionResponse\\:\\:__construct\\(\\) has parameter \\$collection with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Response\\JsonCollectionResponse\:\:__construct\(\) has parameter \$collection with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Response/JsonCollectionResponse.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Response\\\\JsonCollectionResponse\\:\\:__construct\\(\\) has parameter \\$filters with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Response\\JsonCollectionResponse\:\:__construct\(\) has parameter \$filters with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Response/JsonCollectionResponse.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Response\\\\JsonCollectionResponse\\:\\:__construct\\(\\) has parameter \\$headers with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Response\\JsonCollectionResponse\:\:__construct\(\) has parameter \$headers with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Response/JsonCollectionResponse.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Response\\\\JsonCollectionResponse\\:\\:fromPaginator\\(\\) has parameter \\$filters with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Response\\JsonCollectionResponse\:\:fromPaginator\(\) has parameter \$filters with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Response/JsonCollectionResponse.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Response\\\\JsonCollectionResponse\\:\\:fromPaginator\\(\\) has parameter \\$paginator with generic class Pagerfanta\\\\Pagerfanta but does not specify its types\\: T$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Response\\JsonCollectionResponse\:\:fromPaginator\(\) has parameter \$paginator with generic class Pagerfanta\\Pagerfanta but does not specify its types\: T$#' + identifier: missingType.generics count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Response/JsonCollectionResponse.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Response\\\\JsonNotFoundResponse\\:\\:__construct\\(\\) has parameter \\$headers with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Response\\JsonNotFoundResponse\:\:__construct\(\) has parameter \$headers with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Response/JsonNotFoundResponse.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Service\\\\DeprovisionService\\:\\:readUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Service\\DeprovisionService\:\:readUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Service/DeprovisionService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Service\\\\DeprovisionServiceInterface\\:\\:readUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Service\\DeprovisionServiceInterface\:\:readUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Service/DeprovisionServiceInterface.php - - message: "#^Cannot call method getValue\\(\\) on Doctrine\\\\ORM\\\\Query\\\\Parameter\\|null\\.$#" + message: '#^Cannot call method getValue\(\) on Doctrine\\ORM\\Query\\Parameter\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Authorization/Filter/InstitutionAuthorizationRepositoryFilterTest.php - - message: "#^Cannot call method getInstitution\\(\\) on mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Authorization/Service/AuthorizationContextServiceTest.php - - - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Tests\\\\Configuration\\\\Service\\\\InstitutionAuthorizationServiceTest\\:\\:buildAuthorizations\\(\\) has parameter \\$expectedInstitutions with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Configuration\\Service\\InstitutionAuthorizationServiceTest\:\:buildAuthorizations\(\) has parameter \$expectedInstitutions with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Service/InstitutionAuthorizationServiceTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Tests\\\\Doctrine\\\\Type\\\\RecoveryTokenStatusTypeTest\\:\\:invalidDatabaseValues\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Doctrine\\Type\\RecoveryTokenStatusTypeTest\:\:invalidDatabaseValues\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/RecoveryTokenStatusTypeTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Tests\\\\Doctrine\\\\Type\\\\RecoveryTokenStatusTypeTest\\:\\:invalidPhpValues\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Doctrine\\Type\\RecoveryTokenStatusTypeTest\:\:invalidPhpValues\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/RecoveryTokenStatusTypeTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Tests\\\\Doctrine\\\\Type\\\\RecoveryTokenStatusTypeTest\\:\\:validDatabaseValues\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Doctrine\\Type\\RecoveryTokenStatusTypeTest\:\:validDatabaseValues\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/RecoveryTokenStatusTypeTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Tests\\\\Doctrine\\\\Type\\\\RecoveryTokenStatusTypeTest\\:\\:validPhpValues\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Doctrine\\Type\\RecoveryTokenStatusTypeTest\:\:validPhpValues\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/RecoveryTokenStatusTypeTest.php - - message: "#^Parameter \\#1 \\$other of method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Value\\\\RecoveryTokenStatus\\:\\:equals\\(\\) expects Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Value\\\\RecoveryTokenStatus, mixed given\\.$#" + message: '#^Parameter \#1 \$other of method Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Value\\RecoveryTokenStatus\:\:equals\(\) expects Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Value\\RecoveryTokenStatus, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/RecoveryTokenStatusTypeTest.php - - message: "#^Cannot call method equals\\(\\) on mixed\\.$#" + message: '#^Cannot call method equals\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/SecondFactorStatusTypeTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Tests\\\\Doctrine\\\\Type\\\\SecondFactorStatusTypeTest\\:\\:invalidDatabaseValues\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Doctrine\\Type\\SecondFactorStatusTypeTest\:\:invalidDatabaseValues\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/SecondFactorStatusTypeTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Tests\\\\Doctrine\\\\Type\\\\SecondFactorStatusTypeTest\\:\\:invalidPhpValues\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Doctrine\\Type\\SecondFactorStatusTypeTest\:\:invalidPhpValues\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/SecondFactorStatusTypeTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Tests\\\\Doctrine\\\\Type\\\\SecondFactorStatusTypeTest\\:\\:validDatabaseValues\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Doctrine\\Type\\SecondFactorStatusTypeTest\:\:validDatabaseValues\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/SecondFactorStatusTypeTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Tests\\\\Doctrine\\\\Type\\\\SecondFactorStatusTypeTest\\:\\:validPhpValues\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Doctrine\\Type\\SecondFactorStatusTypeTest\:\:validPhpValues\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/SecondFactorStatusTypeTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Tests\\\\Endpoint\\\\ConfiguredInstitutionControllerTest\\:\\:invalidHttpMethodProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Endpoint\\ConfiguredInstitutionControllerTest\:\:invalidHttpMethodProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Endpoint/ConfiguredInstitutionControllerTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Tests\\\\Endpoint\\\\SraaControllerTest\\:\\:invalidHttpMethodProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Endpoint\\SraaControllerTest\:\:invalidHttpMethodProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Endpoint/SraaControllerTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Tests\\\\Identity\\\\Projector\\\\AuditLogProjectorTest\\:\\:auditable_events\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Identity\\Projector\\AuditLogProjectorTest\:\:auditable_events\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Identity/Projector/AuditLogProjectorTest.php - - message: "#^Cannot access offset 0 on iterable\\\\.$#" + message: '#^Cannot access offset 0 on iterable\\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 4 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/CommandValueResolverTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Tests\\\\Request\\\\CommandValueResolverTest\\:\\:convertibleCommandNames\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Request\\CommandValueResolverTest\:\:convertibleCommandNames\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/CommandValueResolverTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Tests\\\\Request\\\\CommandValueResolverTest\\:\\:invalidCommandJsonStructures\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Request\\CommandValueResolverTest\:\:invalidCommandJsonStructures\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/CommandValueResolverTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Tests\\\\Request\\\\CommandValueResolverTest\\:\\:invalidCommandNames\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Request\\CommandValueResolverTest\:\:invalidCommandNames\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/CommandValueResolverTest.php - - message: "#^Parameter \\#1 \\$expected of method PHPUnit\\\\Framework\\\\Assert\\:\\:assertInstanceOf\\(\\) expects class\\-string\\, string given\\.$#" + message: '#^Parameter \#1 \$expected of method PHPUnit\\Framework\\Assert\:\:assertInstanceOf\(\) expects class\-string\, string given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/CommandValueResolverTest.php - - message: "#^Cannot access offset 0 on iterable\\\\.$#" + message: '#^Cannot access offset 0 on iterable\\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/InstitutionValueResolverTest.php - - message: "#^Property Symfony\\\\Component\\\\HttpFoundation\\\\Request\\:\\:\\$query \\(Symfony\\\\Component\\\\HttpFoundation\\\\InputBag\\\\) does not accept Mockery\\\\MockInterface&Symfony\\\\Component\\\\HttpFoundation\\\\ParameterBag\\.$#" - count: 2 + message: '#^Method Surfnet\\StepupMiddleware\\ApiBundle\\Tests\\Request\\InstitutionValueResolverTest\:\:mockQuery\(\) return type with generic class Symfony\\Component\\HttpFoundation\\InputBag does not specify its types\: TValue$#' + identifier: missingType.generics + count: 1 path: ../../src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/InstitutionValueResolverTest.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$allowedSecondFactors type has no value type specified in iterable type array\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Command\\ReconfigureInstitutionConfigurationOptionsCommand\:\:\$allowedSecondFactors type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Configuration/Command/ReconfigureInstitutionConfigurationOptionsCommand.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$selectRaaOption type has no value type specified in iterable type array\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Command\\ReconfigureInstitutionConfigurationOptionsCommand\:\:\$selectRaaOption type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Configuration/Command/ReconfigureInstitutionConfigurationOptionsCommand.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$useRaOption type has no value type specified in iterable type array\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Command\\ReconfigureInstitutionConfigurationOptionsCommand\:\:\$useRaOption type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Configuration/Command/ReconfigureInstitutionConfigurationOptionsCommand.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$useRaaOption type has no value type specified in iterable type array\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Command\\ReconfigureInstitutionConfigurationOptionsCommand\:\:\$useRaaOption type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Configuration/Command/ReconfigureInstitutionConfigurationOptionsCommand.php - - message: "#^Cannot call method getInstitution\\(\\) on mixed\\.$#" - count: 3 - path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Configuration/Processor/InstitutionConfigurationProcessor.php - - - - message: "#^Negated boolean expression is always false\\.$#" + message: '#^Negated boolean expression is always false\.$#' + identifier: booleanNot.alwaysFalse count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/DependencyInjection/CompilerPass/AddPipelineStagesCompilerPass.php - - message: "#^Comparison operation \"\\>\" between 0 and 0 is always false\\.$#" + message: '#^Call to method scalarNode\(\) on an unknown class Symfony\\Component\\Config\\Definition\\Builder\\NodeBuilder\\.$#' + identifier: class.notFound count: 1 - path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/EventHandling/BufferedEventBus.php + path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/DependencyInjection/Configuration.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\EventHandling\\\\BufferedEventBus\\:\\:\\$buffer \\(array\\\\) does not accept array\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\EventHandling\\BufferedEventBus\:\:\$buffer \(array\\) does not accept array\\.$#' + identifier: assign.propertyType count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/EventHandling/BufferedEventBus.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Command\\\\AddToWhitelistCommand\\:\\:\\$institutionsToBeAdded type has no value type specified in iterable type array\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Identity\\Command\\AddToWhitelistCommand\:\:\$institutionsToBeAdded type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Command/AddToWhitelistCommand.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Command\\\\RemoveFromWhitelistCommand\\:\\:\\$institutionsToBeRemoved type has no value type specified in iterable type array\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Identity\\Command\\RemoveFromWhitelistCommand\:\:\$institutionsToBeRemoved type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Command/RemoveFromWhitelistCommand.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Command\\\\ReplaceWhitelistCommand\\:\\:\\$institutions type has no value type specified in iterable type array\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Identity\\Command\\ReplaceWhitelistCommand\:\:\$institutions type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Command/ReplaceWhitelistCommand.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Command\\\\SaveVettingTypeHintCommand\\:\\:\\$hints type has no value type specified in iterable type array\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Identity\\Command\\SaveVettingTypeHintCommand\:\:\$hints type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Command/SaveVettingTypeHintCommand.php - - message: "#^Cannot call method getType\\(\\) on Surfnet\\\\Stepup\\\\Identity\\\\Entity\\\\VettedSecondFactor\\|null\\.$#" + message: '#^Cannot call method getType\(\) on Surfnet\\Stepup\\Identity\\Entity\\VettedSecondFactor\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/CommandHandler/IdentityCommandHandler.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\CommandHandler\\\\WhitelistCommandHandler\\:\\:mapArrayToInstitutions\\(\\) has parameter \\$institutions with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Identity\\CommandHandler\\WhitelistCommandHandler\:\:mapArrayToInstitutions\(\) has parameter \$institutions with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/CommandHandler/WhitelistCommandHandler.php - - message: "#^Cannot access property \\$htmlContent on Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Dto\\\\EmailTemplate\\|null\\.$#" + message: '#^Cannot access property \$htmlContent on Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Dto\\EmailTemplate\|null\.$#' + identifier: property.nonObject count: 3 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/EmailVerificationMailService.php - - message: "#^Cannot access property \\$htmlContent on Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Dto\\\\EmailTemplate\\|null\\.$#" + message: '#^Cannot access property \$htmlContent on Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Dto\\EmailTemplate\|null\.$#' + identifier: property.nonObject count: 6 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RecoveryTokenMailService.php - - message: "#^Cannot access property \\$commonName on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null\\.$#" + message: '#^Cannot access property \$commonName on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null\.$#' + identifier: property.nonObject count: 3 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php - - message: "#^Cannot access property \\$email on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null\\.$#" + message: '#^Cannot access property \$email on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null\.$#' + identifier: property.nonObject count: 3 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php - - message: "#^Cannot access property \\$htmlContent on Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Dto\\\\EmailTemplate\\|null\\.$#" + message: '#^Cannot access property \$htmlContent on Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Dto\\EmailTemplate\|null\.$#' + identifier: property.nonObject count: 6 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php - - message: "#^Cannot access property \\$institution on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null\\.$#" + message: '#^Cannot access property \$institution on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null\.$#' + identifier: property.nonObject count: 2 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php - - message: "#^Cannot access property \\$preferredLocale on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null\\.$#" + message: '#^Cannot access property \$preferredLocale on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null\.$#' + identifier: property.nonObject count: 3 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php - - message: "#^Cannot access property \\$registrationCode on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\VerifiedSecondFactor\\|null\\.$#" + message: '#^Cannot access property \$registrationCode on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\VerifiedSecondFactor\|null\.$#' + identifier: property.nonObject count: 3 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php - - message: "#^Cannot access property \\$registrationRequestedAt on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\VerifiedSecondFactor\\|null\\.$#" + message: '#^Cannot access property \$registrationRequestedAt on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\VerifiedSecondFactor\|null\.$#' + identifier: property.nonObject count: 3 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php - - message: "#^Cannot access property \\$showRaaContactInformationOption on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\InstitutionConfigurationOptions\\|null\\.$#" + message: '#^Cannot access property \$showRaaContactInformationOption on Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\InstitutionConfigurationOptions\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php - - message: "#^Cannot access property \\$useRaLocationsOption on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\InstitutionConfigurationOptions\\|null\\.$#" + message: '#^Cannot access property \$useRaLocationsOption on Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\InstitutionConfigurationOptions\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Service\\\\RegistrationMailService\\:\\:sendRegistrationEmailWithRaLocations\\(\\) has parameter \\$raLocations with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Identity\\Service\\RegistrationMailService\:\:sendRegistrationEmailWithRaLocations\(\) has parameter \$raLocations with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Service\\\\RegistrationMailService\\:\\:sendRegistrationEmailWithRas\\(\\) has parameter \\$ras with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Identity\\Service\\RegistrationMailService\:\:sendRegistrationEmailWithRas\(\) has parameter \$ras with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php - - message: "#^Parameter \\#6 \\$raLocations of method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Service\\\\RegistrationMailService\\:\\:sendRegistrationEmailWithRaLocations\\(\\) expects array, array\\\\|null given\\.$#" + message: '#^Parameter \#6 \$raLocations of method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Identity\\Service\\RegistrationMailService\:\:sendRegistrationEmailWithRaLocations\(\) expects array, array\\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php - - message: "#^Cannot access property \\$htmlContent on Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Dto\\\\EmailTemplate\\|null\\.$#" + message: '#^Cannot access property \$htmlContent on Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Dto\\EmailTemplate\|null\.$#' + identifier: property.nonObject count: 2 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/SecondFactorRevocationMailService.php - - message: "#^Cannot access property \\$htmlContent on Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Dto\\\\EmailTemplate\\|null\\.$#" + message: '#^Cannot access property \$htmlContent on Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Dto\\EmailTemplate\|null\.$#' + identifier: property.nonObject count: 3 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/SecondFactorVettedMailService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Service\\\\VettingTypeHintService\\:\\:__construct\\(\\) has parameter \\$locales with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Identity\\Service\\VettingTypeHintService\:\:__construct\(\) has parameter \$locales with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/VettingTypeHintService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Service\\\\VettingTypeHintService\\:\\:collectionFrom\\(\\) has parameter \\$hints with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Identity\\Service\\VettingTypeHintService\:\:collectionFrom\(\) has parameter \$hints with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/VettingTypeHintService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Pipeline\\\\AuthorizingStage\\:\\:clientHasAtLeastOneRole\\(\\) has parameter \\$rolesToCheck with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Pipeline\\AuthorizingStage\:\:clientHasAtLeastOneRole\(\) has parameter \$rolesToCheck with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Pipeline/AuthorizingStage.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Pipeline\\\\Exception\\\\InvalidCommandException\\:\\:__construct\\(\\) has parameter \\$errors with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Pipeline\\Exception\\InvalidCommandException\:\:__construct\(\) has parameter \$errors with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Pipeline/Exception/InvalidCommandException.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Pipeline\\\\Exception\\\\InvalidCommandException\\:\\:mapViolationsToErrorStrings\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Pipeline\\Exception\\InvalidCommandException\:\:mapViolationsToErrorStrings\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Pipeline/Exception/InvalidCommandException.php - - message: "#^Cannot call method getIdentityId\\(\\) on Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\SensitiveData\\\\EventSourcing\\\\SensitiveDataMessage\\|null\\.$#" + message: '#^Cannot call method getIdentityId\(\) on Surfnet\\StepupMiddleware\\CommandHandlingBundle\\SensitiveData\\EventSourcing\\SensitiveDataMessage\|null\.$#' + identifier: method.nonObject count: 2 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/EventSourcing/SensitiveDataMessageStream.php - - message: "#^Cannot call method getSensitiveData\\(\\) on Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\SensitiveData\\\\EventSourcing\\\\SensitiveDataMessage\\|null\\.$#" + message: '#^Cannot call method getSensitiveData\(\) on Surfnet\\StepupMiddleware\\CommandHandlingBundle\\SensitiveData\\EventSourcing\\SensitiveDataMessage\|null\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/EventSourcing/SensitiveDataMessageStream.php - - message: "#^Cannot call method getPayload\\(\\) on mixed\\.$#" + message: '#^Cannot call method getPayload\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/EventStore/SensitiveDataEventStoreDecorator.php - - message: "#^Parameter \\#1 \\$identityId of class Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\SensitiveData\\\\EventSourcing\\\\SensitiveDataMessage constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$identityId of class Surfnet\\StepupMiddleware\\CommandHandlingBundle\\SensitiveData\\EventSourcing\\SensitiveDataMessage constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/EventStore/SensitiveDataEventStoreDecorator.php - - message: "#^Parameter \\#1 \\$identityId of method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\SensitiveData\\\\Repository\\\\SensitiveDataMessageRepository\\:\\:findByIdentityId\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\IdentityId, mixed given\\.$#" + message: '#^Parameter \#1 \$identityId of method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\SensitiveData\\Repository\\SensitiveDataMessageRepository\:\:findByIdentityId\(\) expects Surfnet\\Stepup\\Identity\\Value\\IdentityId, mixed given\.$#' + identifier: argument.type count: 2 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/EventStore/SensitiveDataEventStoreDecorator.php - - message: "#^Cannot cast mixed to int\\.$#" + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/Repository/SensitiveDataMessageRepository.php - - message: "#^Parameter \\#1 \\$data of static method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\SensitiveData\\\\SensitiveData\\:\\:deserialize\\(\\) expects array, mixed given\\.$#" + message: '#^Parameter \#1 \$data of static method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\SensitiveData\\SensitiveData\:\:deserialize\(\) expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/Repository/SensitiveDataMessageRepository.php - - message: "#^Parameter \\#1 \\$json of static method Surfnet\\\\Stepup\\\\Helper\\\\JsonHelper\\:\\:decode\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$json of static method Surfnet\\Stepup\\Helper\\JsonHelper\:\:decode\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/Repository/SensitiveDataMessageRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\SensitiveData\\\\RightToObtainDataInterface\\:\\:getAllowlist\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\SensitiveData\\RightToObtainDataInterface\:\:getAllowlist\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/RightToObtainDataInterface.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\SensitiveData\\\\RightToObtainDataInterface\\:\\:obtainUserData\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\SensitiveData\\RightToObtainDataInterface\:\:obtainUserData\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/RightToObtainDataInterface.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\SensitiveData\\\\SensitiveData\\:\\:deserialize\\(\\) has parameter \\$data with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\SensitiveData\\SensitiveData\:\:deserialize\(\) has parameter \$data with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/SensitiveData.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\SensitiveData\\\\SensitiveData\\:\\:serialize\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\SensitiveData\\SensitiveData\:\:serialize\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/SensitiveData.php - - message: "#^Parameter \\#1 \\$type of static method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenIdentifierFactory\\:\\:forType\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenType, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\RecoveryTokenType\\|null given\\.$#" + message: '#^Parameter \#1 \$type of static method Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenIdentifierFactory\:\:forType\(\) expects Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenType, Surfnet\\Stepup\\Identity\\Value\\RecoveryTokenType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/SensitiveData.php - - message: "#^Parameter \\#1 \\$type of static method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorIdentifierFactory\\:\\:forType\\(\\) expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null given\\.$#" + message: '#^Parameter \#1 \$type of static method Surfnet\\Stepup\\Identity\\Value\\SecondFactorIdentifierFactory\:\:forType\(\) expects Surfnet\\StepupBundle\\Value\\SecondFactorType, Surfnet\\StepupBundle\\Value\\SecondFactorType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/SensitiveData.php - - message: "#^Parameter \\#1 \\$type of static method Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\SecondFactorIdentifierFactory\\:\\:unknownForType\\(\\) expects Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType, Surfnet\\\\StepupBundle\\\\Value\\\\SecondFactorType\\|null given\\.$#" + message: '#^Parameter \#1 \$type of static method Surfnet\\Stepup\\Identity\\Value\\SecondFactorIdentifierFactory\:\:unknownForType\(\) expects Surfnet\\StepupBundle\\Value\\SecondFactorType, Surfnet\\StepupBundle\\Value\\SecondFactorType\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/SensitiveData.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\Configuration\\\\CommandHandler\\\\ConfigurationCommandHandlerTest\\:\\:createConfigurationUpdatedEvents\\(\\) has parameter \\$newConfiguration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\Configuration\\CommandHandler\\ConfigurationCommandHandlerTest\:\:createConfigurationUpdatedEvents\(\) has parameter \$newConfiguration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/CommandHandler/ConfigurationCommandHandlerTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\Configuration\\\\CommandHandler\\\\ConfigurationCommandHandlerTest\\:\\:createConfigurationUpdatedEvents\\(\\) has parameter \\$oldConfiguration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\Configuration\\CommandHandler\\ConfigurationCommandHandlerTest\:\:createConfigurationUpdatedEvents\(\) has parameter \$oldConfiguration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/CommandHandler/ConfigurationCommandHandlerTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\Configuration\\\\CommandHandler\\\\ConfigurationCommandHandlerTest\\:\\:createConfigurationUpdatedEvents\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\Configuration\\CommandHandler\\ConfigurationCommandHandlerTest\:\:createConfigurationUpdatedEvents\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/CommandHandler/ConfigurationCommandHandlerTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\Configuration\\\\CommandHandler\\\\ConfigurationCommandHandlerTest\\:\\:createUpdateCommand\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\Configuration\\CommandHandler\\ConfigurationCommandHandlerTest\:\:createUpdateCommand\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/CommandHandler/ConfigurationCommandHandlerTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\Identity\\\\CommandHandler\\\\IdentityCommandHandlerMoveTokenTest\\:\\:setUpInstitutionConfiguration\\(\\) has parameter \\$allowedTokenTypes with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\Identity\\CommandHandler\\IdentityCommandHandlerMoveTokenTest\:\:setUpInstitutionConfiguration\(\) has parameter \$allowedTokenTypes with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerMoveTokenTest.php - - message: "#^Parameter \\#2 \\$nameId of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorVettedEvent constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\NameId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\NameId\\|null given\\.$#" + message: '#^Parameter \#2 \$nameId of class Surfnet\\Stepup\\Identity\\Event\\SecondFactorVettedEvent constructor expects Surfnet\\Stepup\\Identity\\Value\\NameId, Surfnet\\Stepup\\Identity\\Value\\NameId\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerSelfAssertedTokensTest.php - - message: "#^Parameter \\#2 \\$nameId of class Surfnet\\\\Stepup\\\\Identity\\\\Event\\\\SecondFactorVettedWithoutTokenProofOfPossession constructor expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\NameId, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\NameId\\|null given\\.$#" + message: '#^Parameter \#2 \$nameId of class Surfnet\\Stepup\\Identity\\Event\\SecondFactorVettedWithoutTokenProofOfPossession constructor expects Surfnet\\Stepup\\Identity\\Value\\NameId, Surfnet\\Stepup\\Identity\\Value\\NameId\|null given\.$#' + identifier: argument.type count: 4 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerSelfAssertedTokensTest.php - - message: "#^Cannot call method getPayload\\(\\) on mixed\\.$#" + message: '#^Cannot call method getPayload\(\) on mixed\.$#' + identifier: method.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityIdEnforcingEventStoreDecorator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\Identity\\\\CommandHandler\\\\WhitelistCommandHandlerTest\\:\\:mapStringValuesToInstitutions\\(\\) has parameter \\$institutions with no value type specified in iterable type array\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/WhitelistCommandHandlerTest.php - - - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\Identity\\\\CommandHandler\\\\WhitelistCommandHandlerTest\\:\\:mapStringValuesToInstitutions\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\Identity\\CommandHandler\\WhitelistCommandHandlerTest\:\:mapStringValuesToInstitutions\(\) has parameter \$institutions with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/WhitelistCommandHandlerTest.php - - message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" + message: '#^Parameter \#2 \.\.\.\$values of function sprintf expects bool\|float\|int\|string\|null, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Mockery/HasInstitutionMatcher.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\Mockery\\\\HasInstitutionMatcherTest\\:\\:has_institution_matcher_only_matches_objects_against_a_given_institution\\(\\) has parameter \\$nonObject with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\Mockery\\HasInstitutionMatcherTest\:\:has_institution_matcher_only_matches_objects_against_a_given_institution\(\) has parameter \$nonObject with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Mockery/HasInstitutionMatcherTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\Mockery\\\\HasInstitutionMatcherTest\\:\\:nonObjectProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\Mockery\\HasInstitutionMatcherTest\:\:nonObjectProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Mockery/HasInstitutionMatcherTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\Mockery\\\\HasInstitutionMatcherTest\\:\\:nonStringProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\Mockery\\HasInstitutionMatcherTest\:\:nonStringProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Mockery/HasInstitutionMatcherTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\Pipeline\\\\AuthorizingStageTest\\:\\:interfaceToRoleMappingProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\Pipeline\\AuthorizingStageTest\:\:interfaceToRoleMappingProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/AuthorizingStageTest.php - - message: "#^Cannot access property \\$sensitiveData on mixed\\.$#" + message: '#^Cannot access property \$sensitiveData on mixed\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/EventSourcing/SensitiveDataMessageStreamTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\SensitiveData\\\\EventSourcing\\\\SensitiveDataMessageStreamTest\\:\\:apply\\(\\) has parameter \\$domainMessages with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\SensitiveData\\EventSourcing\\SensitiveDataMessageStreamTest\:\:apply\(\) has parameter \$domainMessages with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/EventSourcing/SensitiveDataMessageStreamTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\SensitiveData\\\\EventSourcing\\\\SensitiveDataMessageStreamTest\\:\\:apply\\(\\) has parameter \\$sensitiveDataMessages with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\SensitiveData\\EventSourcing\\SensitiveDataMessageStreamTest\:\:apply\(\) has parameter \$sensitiveDataMessages with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/EventSourcing/SensitiveDataMessageStreamTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\SensitiveData\\\\SensitiveDataTest\\:\\:it_serialises_and_deserialises\\(\\) has parameter \\$getterExpectations with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\SensitiveData\\SensitiveDataTest\:\:it_serialises_and_deserialises\(\) has parameter \$getterExpectations with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/SensitiveDataTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\SensitiveData\\\\SensitiveDataTest\\:\\:sensitiveDataToSerialise\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\SensitiveData\\SensitiveDataTest\:\:sensitiveDataToSerialise\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/SensitiveDataTest.php - - message: "#^Parameter \\#1 \\$data of static method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\SensitiveData\\\\SensitiveData\\:\\:deserialize\\(\\) expects array, mixed given\\.$#" + message: '#^Parameter \#1 \$data of static method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\SensitiveData\\SensitiveData\:\:deserialize\(\) expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/SensitiveDataTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\Twig\\\\BackwardsCompatibleExtensionTest\\:\\:templateProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\Twig\\BackwardsCompatibleExtensionTest\:\:templateProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Twig/BackwardsCompatibleExtensionTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Tests\\\\Value\\\\InstitutionTest\\:\\:nonStringOrNonEmptyStringProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Tests\\Value\\InstitutionTest\:\:nonStringOrNonEmptyStringProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Value/InstitutionTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\GatewayBundle\\\\Entity\\\\SamlEntity\\:\\:createIdentityProvider\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\GatewayBundle\\Entity\\SamlEntity\:\:createIdentityProvider\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/GatewayBundle/Entity/SamlEntity.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\GatewayBundle\\\\Entity\\\\SamlEntity\\:\\:createServiceProvider\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\GatewayBundle\\Entity\\SamlEntity\:\:createServiceProvider\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/GatewayBundle/Entity/SamlEntity.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\GatewayBundle\\\\Entity\\\\SamlEntityRepository\\:\\:replaceAllIdps\\(\\) has parameter \\$newSamlEntities with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\GatewayBundle\\Entity\\SamlEntityRepository\:\:replaceAllIdps\(\) has parameter \$newSamlEntities with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/GatewayBundle/Entity/SamlEntityRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\GatewayBundle\\\\Entity\\\\SamlEntityRepository\\:\\:replaceAllOfType\\(\\) has parameter \\$newSamlEntities with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\GatewayBundle\\Entity\\SamlEntityRepository\:\:replaceAllOfType\(\) has parameter \$newSamlEntities with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/GatewayBundle/Entity/SamlEntityRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\GatewayBundle\\\\Entity\\\\SamlEntityRepository\\:\\:replaceAllSps\\(\\) has parameter \\$newSamlEntities with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\GatewayBundle\\Entity\\SamlEntityRepository\:\:replaceAllSps\(\) has parameter \$newSamlEntities with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/GatewayBundle/Entity/SamlEntityRepository.php - - message: "#^Parameter \\#1 \\$vettingType of method Surfnet\\\\StepupMiddleware\\\\GatewayBundle\\\\Projector\\\\SecondFactorProjector\\:\\:isIdentityVetted\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingType, Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\VettingType\\|null given\\.$#" + message: '#^Parameter \#1 \$vettingType of method Surfnet\\StepupMiddleware\\GatewayBundle\\Projector\\SecondFactorProjector\:\:isIdentityVetted\(\) expects Surfnet\\Stepup\\Identity\\Value\\VettingType, Surfnet\\Stepup\\Identity\\Value\\VettingType\|null given\.$#' + identifier: argument.type count: 2 path: ../../src/Surfnet/StepupMiddleware/GatewayBundle/Projector/SecondFactorProjector.php - - message: "#^Parameter \\#1 \\$institution of static method Surfnet\\\\StepupMiddleware\\\\GatewayBundle\\\\Entity\\\\WhitelistEntry\\:\\:createFrom\\(\\) expects Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution, mixed given\\.$#" - count: 3 - path: ../../src/Surfnet/StepupMiddleware/GatewayBundle/Projector/WhitelistProjector.php - - - - message: "#^Parameter \\#1 \\$institutions of method Surfnet\\\\StepupMiddleware\\\\GatewayBundle\\\\Repository\\\\WhitelistEntryRepository\\:\\:findEntriesByInstitutions\\(\\) expects array\\, array\\, mixed\\> given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/GatewayBundle/Projector/WhitelistProjector.php - - - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\GatewayBundle\\\\Repository\\\\WhitelistEntryRepository\\:\\:findEntriesByInstitutions\\(\\) should return array\\ but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\GatewayBundle\\Repository\\WhitelistEntryRepository\:\:findEntriesByInstitutions\(\) should return array\ but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/GatewayBundle/Repository/WhitelistEntryRepository.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Configuration\\\\Entity\\\\EmailTemplate\\:\\:getId\\(\\) should return string but returns string\\|null\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Configuration\\Entity\\EmailTemplate\:\:getId\(\) should return string but returns string\|null\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Configuration/Entity/EmailTemplate.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Configuration\\\\Repository\\\\EmailTemplateRepository\\:\\:findOneByName\\(\\) should return Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Configuration\\\\Entity\\\\EmailTemplate\\|null but returns mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Configuration\\Repository\\EmailTemplateRepository\:\:findOneByName\(\) should return Surfnet\\StepupMiddleware\\ManagementBundle\\Configuration\\Entity\\EmailTemplate\|null but returns mixed\.$#' + identifier: return.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Configuration/Repository/EmailTemplateRepository.php - - message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Cannot access offset 'allow_self_asserted…' on mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Cannot access offset 'allowed_second…' on mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Cannot access offset 'number_of_tokens…' on mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Cannot access offset 'select_raa' on mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Cannot access offset 'self_vet' on mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Cannot access offset 'show_raa_contact…' on mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Cannot access offset 'sso_on_2fa' on mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Cannot access offset 'sso_registration…' on mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Cannot access offset 'use_ra' on mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Cannot access offset 'use_ra_locations' on mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Cannot access offset 'use_raa' on mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Cannot access offset 'verify_email' on mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$allowedSecondFactors \\(array\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$institution \\(string\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$numberOfTokensPerIdentityOption \\(int\\) does not accept mixed\\.$#" + message: '#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$selectRaaOption \\(array\\|null\\) does not accept mixed\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Command\\ReconfigureInstitutionConfigurationOptionsCommand\:\:\$allowedSecondFactors \(array\) does not accept mixed\.$#' + identifier: assign.propertyType count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$selfAssertedTokensOption \\(bool\\|null\\) does not accept mixed\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Command\\ReconfigureInstitutionConfigurationOptionsCommand\:\:\$institution \(string\) does not accept mixed\.$#' + identifier: assign.propertyType count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$selfVetOption \\(bool\\|null\\) does not accept mixed\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Command\\ReconfigureInstitutionConfigurationOptionsCommand\:\:\$numberOfTokensPerIdentityOption \(int\) does not accept mixed\.$#' + identifier: assign.propertyType count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$showRaaContactInformationOption \\(bool\\) does not accept mixed\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Command\\ReconfigureInstitutionConfigurationOptionsCommand\:\:\$showRaaContactInformationOption \(bool\) does not accept mixed\.$#' + identifier: assign.propertyType count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$ssoOn2faOption \\(bool\\|null\\) does not accept mixed\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Command\\ReconfigureInstitutionConfigurationOptionsCommand\:\:\$useRaLocationsOption \(bool\) does not accept mixed\.$#' + identifier: assign.propertyType count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$ssoRegistrationBypassOption \\(bool\\|null\\) does not accept mixed\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Command\\ReconfigureInstitutionConfigurationOptionsCommand\:\:\$useRaOption \(array\|null\) does not accept mixed\.$#' + identifier: assign.propertyType count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$useRaLocationsOption \\(bool\\) does not accept mixed\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Command\\ReconfigureInstitutionConfigurationOptionsCommand\:\:\$verifyEmailOption \(bool\) does not accept mixed\.$#' + identifier: assign.propertyType count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$useRaOption \\(array\\|null\\) does not accept mixed\\.$#" + message: '#^Cannot access offset ''institution'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$useRaaOption \\(array\\|null\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Command\\\\ReconfigureInstitutionConfigurationOptionsCommand\\:\\:\\$verifyEmailOption \\(bool\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php + path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/RightToBeForgottenController.php - - message: "#^Cannot access offset 'institution' on mixed\\.$#" + message: '#^Cannot access offset ''name_id'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/RightToBeForgottenController.php - - message: "#^Cannot access offset 'name_id' on mixed\\.$#" + message: '#^Parameter \#1 \$institution of class Surfnet\\Stepup\\Identity\\Value\\Institution constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/RightToBeForgottenController.php - - message: "#^Parameter \\#1 \\$institution of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$value of class Surfnet\\Stepup\\Identity\\Value\\NameId constructor expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/RightToBeForgottenController.php - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\NameId constructor expects string, mixed given\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Identity\\Command\\ForgetIdentityCommand\:\:\$institution \(string\) does not accept mixed\.$#' + identifier: assign.propertyType count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/RightToBeForgottenController.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Command\\\\ForgetIdentityCommand\\:\\:\\$institution \\(string\\) does not accept mixed\\.$#" + message: '#^Property Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Identity\\Command\\ForgetIdentityCommand\:\:\$nameId \(string\) does not accept mixed\.$#' + identifier: assign.propertyType count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/RightToBeForgottenController.php - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Command\\\\ForgetIdentityCommand\\:\\:\\$nameId \\(string\\) does not accept mixed\\.$#" + message: '#^Cannot access offset ''institutions'' on mixed\.$#' + identifier: offsetAccess.nonOffsetAccessible count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/RightToBeForgottenController.php + path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/WhitelistController.php - - message: "#^Cannot access offset 'institutions' on mixed\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Controller\\WhitelistController\:\:getInstitutionsFromBody\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/WhitelistController.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Controller\\\\WhitelistController\\:\\:getInstitutionsFromBody\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Call to method scalarNode\(\) on an unknown class Symfony\\Component\\Config\\Definition\\Builder\\NodeBuilder\\.$#' + identifier: class.notFound count: 1 - path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Controller/WhitelistController.php + path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/DependencyInjection/Configuration.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Tests\\\\Controller\\\\ConfigurationControllerTest\\:\\:invalidHttpMethodProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Tests\\Controller\\ConfigurationControllerTest\:\:invalidHttpMethodProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Controller/ConfigurationControllerTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Tests\\\\Controller\\\\InstitutionConfigurationControllerTest\\:\\:invalidHttpMethodProvider\\(\\) return type has no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Tests\\Controller\\InstitutionConfigurationControllerTest\:\:invalidHttpMethodProvider\(\) return type has no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Controller/InstitutionConfigurationControllerTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Tests\\\\Validator\\\\ConfigurationValidationTest\\:\\:it_rejects_invalid_configuration\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Tests\\Validator\\ConfigurationValidationTest\:\:it_rejects_invalid_configuration\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Validator/ConfigurationValidationTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Tests\\\\Validator\\\\ReconfigureInstitutionRequestValidatorTest\\:\\:it_rejects_invalid_configuration\\(\\) has parameter \\$reconfigureRequest with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Tests\\Validator\\ReconfigureInstitutionRequestValidatorTest\:\:it_rejects_invalid_configuration\(\) has parameter \$reconfigureRequest with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Validator/ReconfigureInstitutionRequestValidatorTest.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\Assert\\:\\:keysMatch\\(\\) has parameter \\$keys with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\Assert\:\:keysMatch\(\) has parameter \$keys with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/Assert.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\Assert\\:\\:keysMatch\\(\\) has parameter \\$value with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\Assert\:\:keysMatch\(\) has parameter \$value with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/Assert.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\Assert\\:\\:requiredAndOptionalOptions\\(\\) has parameter \\$optional with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\Assert\:\:requiredAndOptionalOptions\(\) has parameter \$optional with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/Assert.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\Assert\\:\\:requiredAndOptionalOptions\\(\\) has parameter \\$required with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\Assert\:\:requiredAndOptionalOptions\(\) has parameter \$required with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/Assert.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\Assert\\:\\:requiredAndOptionalOptions\\(\\) has parameter \\$value with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\Assert\:\:requiredAndOptionalOptions\(\) has parameter \$value with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/Assert.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ConfigurationStructureValidator\\:\\:validateGatewayConfiguration\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ConfigurationStructureValidator\:\:validateGatewayConfiguration\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ConfigurationStructureValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ConfigurationStructureValidator\\:\\:validateRoot\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ConfigurationStructureValidator\:\:validateRoot\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ConfigurationStructureValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ConfigurationStructureValidator\\:\\:validateSraaConfiguration\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ConfigurationStructureValidator\:\:validateSraaConfiguration\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ConfigurationStructureValidator.php - - message: "#^Parameter \\#1 \\$configuration of method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ConfigurationStructureValidator\\:\\:validateRoot\\(\\) expects array, mixed given\\.$#" + message: '#^Parameter \#1 \$configuration of method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ConfigurationStructureValidator\:\:validateRoot\(\) expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ConfigurationStructureValidator.php - - message: "#^Parameter \\#1 \\$path of method Symfony\\\\Component\\\\Validator\\\\Violation\\\\ConstraintViolationBuilderInterface\\:\\:atPath\\(\\) expects string, string\\|null given\\.$#" + message: '#^Parameter \#1 \$path of method Symfony\\Component\\Validator\\Violation\\ConstraintViolationBuilderInterface\:\:atPath\(\) expects string, string\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ConfigurationStructureValidator.php - - message: "#^Parameter \\#1 \\$rawValue of method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ConfigurationStructureValidator\\:\\:decodeJson\\(\\) expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$rawValue of method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ConfigurationStructureValidator\:\:decodeJson\(\) expects string, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ConfigurationStructureValidator.php - - message: "#^Parameter \\#1 \\$identityProviders of method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\GatewayConfigurationValidator\\:\\:validateIdentityProviders\\(\\) expects array\\\\>, mixed given\\.$#" + message: '#^Parameter \#1 \$identityProviders of method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\GatewayConfigurationValidator\:\:validateIdentityProviders\(\) expects array\\>, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/GatewayConfigurationValidator.php - - message: "#^Parameter \\#1 \\$serviceProviders of method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\GatewayConfigurationValidator\\:\\:validateServiceProviders\\(\\) expects array\\\\>, mixed given\\.$#" + message: '#^Parameter \#1 \$serviceProviders of method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\GatewayConfigurationValidator\:\:validateServiceProviders\(\) expects array\\>, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/GatewayConfigurationValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\IdentityProviderConfigurationValidator\\:\\:validateBooleanValue\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\IdentityProviderConfigurationValidator\:\:validateBooleanValue\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/IdentityProviderConfigurationValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\IdentityProviderConfigurationValidator\\:\\:validateLoaDefinition\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\IdentityProviderConfigurationValidator\:\:validateLoaDefinition\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/IdentityProviderConfigurationValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\IdentityProviderConfigurationValidator\\:\\:validateStringValue\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\IdentityProviderConfigurationValidator\:\:validateStringValue\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/IdentityProviderConfigurationValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ReconfigureInstitutionRequestValidator\\:\\:validateAuthorizationSettings\\(\\) has parameter \\$authorizationSettings with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ReconfigureInstitutionRequestValidator\:\:validateAuthorizationSettings\(\) has parameter \$authorizationSettings with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ReconfigureInstitutionRequestValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ReconfigureInstitutionRequestValidator\\:\\:validateInstitutionConfigurationOptions\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ReconfigureInstitutionRequestValidator\:\:validateInstitutionConfigurationOptions\(\) has parameter \$options with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ReconfigureInstitutionRequestValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ReconfigureInstitutionRequestValidator\\:\\:validateInstitutionsExist\\(\\) has parameter \\$institutions with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ReconfigureInstitutionRequestValidator\:\:validateInstitutionsExist\(\) has parameter \$institutions with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ReconfigureInstitutionRequestValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ReconfigureInstitutionRequestValidator\\:\\:validateRoot\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ReconfigureInstitutionRequestValidator\:\:validateRoot\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ReconfigureInstitutionRequestValidator.php - - message: "#^Parameter \\#1 \\$configuration of method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ReconfigureInstitutionRequestValidator\\:\\:validateRoot\\(\\) expects array, mixed given\\.$#" + message: '#^Parameter \#1 \$configuration of method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ReconfigureInstitutionRequestValidator\:\:validateRoot\(\) expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ReconfigureInstitutionRequestValidator.php - - message: "#^Parameter \\#1 \\$path of method Symfony\\\\Component\\\\Validator\\\\Violation\\\\ConstraintViolationBuilderInterface\\:\\:atPath\\(\\) expects string, string\\|null given\\.$#" + message: '#^Parameter \#1 \$path of method Symfony\\Component\\Validator\\Violation\\ConstraintViolationBuilderInterface\:\:atPath\(\) expects string, string\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ReconfigureInstitutionRequestValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ServiceProviderConfigurationValidator\\:\\:assertValidInstitutionIdentifiers\\(\\) has parameter \\$spLoaConfiguration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ServiceProviderConfigurationValidator\:\:assertValidInstitutionIdentifiers\(\) has parameter \$spLoaConfiguration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ServiceProviderConfigurationValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ServiceProviderConfigurationValidator\\:\\:validateAssertionConsumerUrls\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ServiceProviderConfigurationValidator\:\:validateAssertionConsumerUrls\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ServiceProviderConfigurationValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ServiceProviderConfigurationValidator\\:\\:validateBooleanValue\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ServiceProviderConfigurationValidator\:\:validateBooleanValue\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ServiceProviderConfigurationValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ServiceProviderConfigurationValidator\\:\\:validateListOfNameIdPatterns\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ServiceProviderConfigurationValidator\:\:validateListOfNameIdPatterns\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ServiceProviderConfigurationValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ServiceProviderConfigurationValidator\\:\\:validateLoaDefinition\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ServiceProviderConfigurationValidator\:\:validateLoaDefinition\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ServiceProviderConfigurationValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ServiceProviderConfigurationValidator\\:\\:validateStringValue\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ServiceProviderConfigurationValidator\:\:validateStringValue\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ServiceProviderConfigurationValidator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\ManagementBundle\\\\Validator\\\\ServiceProviderConfigurationValidator\\:\\:validateStringValues\\(\\) has parameter \\$configuration with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\ManagementBundle\\Validator\\ServiceProviderConfigurationValidator\:\:validateStringValues\(\) has parameter \$configuration with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ServiceProviderConfigurationValidator.php - - message: "#^Parameter \\#1 \\$actorId of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:enrichEventMetadata\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$institution of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution constructor expects string, mixed given\\.$#" + message: '#^Cannot access property \$id on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null\.$#' + identifier: property.nonObject count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$institution of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:requiresMailVerification\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$registrationStatus of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:validRegistrationStatus\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$tokenType of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:vetSecondFactor\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\NameId constructor expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php - - - - message: "#^Parameter \\#2 \\$actorId of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:vetSecondFactor\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php - - - - message: "#^Parameter \\#2 \\$tokenType of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:verifyEmail\\(\\) expects string, mixed given\\.$#" - count: 2 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php - - - - message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" - count: 9 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php - - - - message: "#^Parameter \\#3 \\$tokenType of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:proveGsspPossession\\(\\) expects string, mixed given\\.$#" - count: 3 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php - - - - message: "#^Parameter \\#3 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" - count: 2 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php - - - - message: "#^Parameter \\#4 \\$tokenIdentifier of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:proveGsspPossession\\(\\) expects string, mixed given\\.$#" - count: 3 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php - - - - message: "#^Parameter \\#5 \\$secondFactorIdentifier of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:vetSecondFactor\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$actorId of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:enrichEventMetadata\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityCommand.php - - - - message: "#^Parameter \\#1 \\$institution of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution constructor expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityCommand.php - - - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\NameId constructor expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityCommand.php - - - - message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityCommand.php - - - - message: "#^Parameter \\#3 \\$commonName of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:createIdentity\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityCommand.php - - - - message: "#^Parameter \\#4 \\$email of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:createIdentity\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityCommand.php - - - - message: "#^Parameter \\#5 \\$preferredLocale of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:createIdentity\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityCommand.php - - - - message: "#^Parameter \\#1 \\$institution of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution constructor expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityWithYubikeySecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\NameId constructor expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityWithYubikeySecondFactorCommand.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Command\\\\BootstrapIdentityWithYubikeySecondFactorCommand\\:\\:\\$commonName \\(string\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityWithYubikeySecondFactorCommand.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Command\\\\BootstrapIdentityWithYubikeySecondFactorCommand\\:\\:\\$email \\(string\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityWithYubikeySecondFactorCommand.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Command\\\\BootstrapIdentityWithYubikeySecondFactorCommand\\:\\:\\$institution \\(string\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityWithYubikeySecondFactorCommand.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Command\\\\BootstrapIdentityWithYubikeySecondFactorCommand\\:\\:\\$nameId \\(string\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityWithYubikeySecondFactorCommand.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Command\\\\BootstrapIdentityWithYubikeySecondFactorCommand\\:\\:\\$preferredLocale \\(string\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityWithYubikeySecondFactorCommand.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Command\\\\BootstrapIdentityWithYubikeySecondFactorCommand\\:\\:\\$yubikeyPublicId \\(string\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityWithYubikeySecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$actorId of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:enrichEventMetadata\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapSmsSecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$institution of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution constructor expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapSmsSecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$institution of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:requiresMailVerification\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapSmsSecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$registrationStatus of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:validRegistrationStatus\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapSmsSecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\NameId constructor expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapSmsSecondFactorCommand.php - - - - message: "#^Parameter \\#2 \\$actorId of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:vetSecondFactor\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapSmsSecondFactorCommand.php - - - - message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapSmsSecondFactorCommand.php - - - - message: "#^Parameter \\#3 \\$phoneNumber of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:provePhonePossession\\(\\) expects string, mixed given\\.$#" - count: 3 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapSmsSecondFactorCommand.php - - - - message: "#^Parameter \\#5 \\$secondFactorIdentifier of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:vetSecondFactor\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapSmsSecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$actorId of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:enrichEventMetadata\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapYubikeySecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$institution of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution constructor expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapYubikeySecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$institution of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:requiresMailVerification\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapYubikeySecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$registrationStatus of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:validRegistrationStatus\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapYubikeySecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\NameId constructor expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapYubikeySecondFactorCommand.php - - - - message: "#^Parameter \\#2 \\$actorId of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:vetSecondFactor\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapYubikeySecondFactorCommand.php - - - - message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapYubikeySecondFactorCommand.php - - - - message: "#^Parameter \\#3 \\$yubikeyPublicId of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:proveYubikeyPossession\\(\\) expects string, mixed given\\.$#" - count: 3 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapYubikeySecondFactorCommand.php - - - - message: "#^Parameter \\#5 \\$secondFactorIdentifier of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:vetSecondFactor\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapYubikeySecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$value of static method Assert\\\\Assertion\\:\\:nullOrDate\\(\\) expects string\\|null, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/EmailVerifiedSecondFactorRemindersCommand.php - - - - message: "#^Parameter \\#2 \\$datetime of static method DateTime\\:\\:createFromFormat\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/EmailVerifiedSecondFactorRemindersCommand.php - - - - message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/EmailVerifiedSecondFactorRemindersCommand.php - - - - message: "#^Property Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Identity\\\\Command\\\\SendVerifiedSecondFactorRemindersCommand\\:\\:\\$dryRun \\(bool\\) does not accept mixed\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/EmailVerifiedSecondFactorRemindersCommand.php - - - - message: "#^Cannot access property \\$id on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null\\.$#" - count: 2 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/MigrateSecondFactorCommand.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Console\\\\Command\\\\MigrateSecondFactorCommand\\:\\:tokenExists\\(\\) has parameter \\$targetSecondFactors with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\MiddlewareBundle\\Console\\Command\\MigrateSecondFactorCommand\:\:tokenExists\(\) has parameter \$targetSecondFactors with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/MigrateSecondFactorCommand.php - - message: "#^Parameter \\#1 \\$identity of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:getVettedSecondFactorsFromIdentity\\(\\) expects Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity, Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null given\\.$#" - count: 2 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/MigrateSecondFactorCommand.php - - - - message: "#^Parameter \\#1 \\$institution of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\Institution constructor expects string, mixed given\\.$#" + message: '#^Parameter \#1 \$identity of method Surfnet\\StepupMiddleware\\MiddlewareBundle\\Service\\BootstrapCommandService\:\:getVettedSecondFactorsFromIdentity\(\) expects Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity, Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/MigrateSecondFactorCommand.php - - message: "#^Parameter \\#1 \\$sourceIdentity of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:migrateVettedSecondFactor\\(\\) expects Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity, Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null given\\.$#" + message: '#^Parameter \#2 \$targetIdentity of method Surfnet\\StepupMiddleware\\MiddlewareBundle\\Service\\BootstrapCommandService\:\:migrateVettedSecondFactor\(\) expects Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity, Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/MigrateSecondFactorCommand.php - - message: "#^Parameter \\#1 \\$value of class Surfnet\\\\Stepup\\\\Identity\\\\Value\\\\NameId constructor expects string, mixed given\\.$#" - count: 2 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/MigrateSecondFactorCommand.php - - - - message: "#^Parameter \\#2 \\$sourceIdentity of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Console\\\\Command\\\\MigrateSecondFactorCommand\\:\\:createIdentity\\(\\) expects Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity, Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/MigrateSecondFactorCommand.php - - - - message: "#^Parameter \\#2 \\$targetIdentity of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:migrateVettedSecondFactor\\(\\) expects Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity, Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/MigrateSecondFactorCommand.php - - - - message: "#^Parameter \\#4 \\$email of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\BootstrapCommandService\\:\\:createIdentity\\(\\) expects string, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/MigrateSecondFactorCommand.php - - - - message: "#^Cannot cast mixed to int\\.$#" + message: '#^Parameter \#1 \$projector of method Surfnet\\StepupMiddleware\\MiddlewareBundle\\Service\\TransactionAwareEventDispatcher\:\:registerProjector\(\) expects Broadway\\EventHandling\\EventListener, mixed given\.$#' + identifier: argument.type count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/ReplayEventsCommand.php - - - - message: "#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#" - count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/ReplayEventsCommand.php + path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/ReplaySpecificEventsCommand.php - - message: "#^Parameter \\#1 \\$projector of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\TransactionAwareEventDispatcher\\:\\:registerProjector\\(\\) expects Broadway\\\\EventHandling\\\\EventListener, mixed given\\.$#" + message: '#^Parameter \#1 \$projectorNames of method Surfnet\\StepupMiddleware\\MiddlewareBundle\\EventSourcing\\ProjectorCollection\:\:selectByNames\(\) expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/ReplaySpecificEventsCommand.php - - message: "#^Parameter \\#1 \\$projectorNames of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\EventSourcing\\\\ProjectorCollection\\:\\:selectByNames\\(\\) expects array, mixed given\\.$#" + message: '#^Parameter \#1 \$subset of method Surfnet\\StepupMiddleware\\MiddlewareBundle\\EventSourcing\\EventCollection\:\:select\(\) expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/ReplaySpecificEventsCommand.php - - message: "#^Parameter \\#1 \\$subset of method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\EventSourcing\\\\EventCollection\\:\\:select\\(\\) expects array, mixed given\\.$#" + message: '#^Call to method arrayNode\(\) on an unknown class Symfony\\Component\\Config\\Definition\\Builder\\NodeBuilder\\.$#' + identifier: class.notFound count: 1 - path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/ReplaySpecificEventsCommand.php + path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/DependencyInjection/Configuration.php - - message: "#^Cannot cast mixed to int\\.$#" + message: '#^Cannot cast mixed to int\.$#' + identifier: cast.int count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/EventSourcing/DBALEventHydrator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\EventSourcing\\\\DBALEventHydrator\\:\\:deserializeEvent\\(\\) has parameter \\$row with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\MiddlewareBundle\\EventSourcing\\DBALEventHydrator\:\:deserializeEvent\(\) has parameter \$row with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/EventSourcing/DBALEventHydrator.php - - message: "#^Parameter \\#1 \\$data of static method Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\SensitiveData\\\\SensitiveData\\:\\:deserialize\\(\\) expects array, mixed given\\.$#" + message: '#^Parameter \#1 \$data of static method Surfnet\\StepupMiddleware\\CommandHandlingBundle\\SensitiveData\\SensitiveData\:\:deserialize\(\) expects array, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/EventSourcing/DBALEventHydrator.php - - message: "#^Parameter \\#1 \\$serializedObject of method Broadway\\\\Serializer\\\\SimpleInterfaceSerializer\\:\\:deserialize\\(\\) expects array, mixed given\\.$#" + message: '#^Parameter \#1 \$serializedObject of method Broadway\\Serializer\\SimpleInterfaceSerializer\:\:deserialize\(\) expects array, mixed given\.$#' + identifier: argument.type count: 2 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/EventSourcing/DBALEventHydrator.php - - message: "#^Parameter \\#3 \\$metadata of class Broadway\\\\Domain\\\\DomainMessage constructor expects Broadway\\\\Domain\\\\Metadata, mixed given\\.$#" + message: '#^Parameter \#3 \$metadata of class Broadway\\Domain\\DomainMessage constructor expects Broadway\\Domain\\Metadata, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/EventSourcing/DBALEventHydrator.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\EventSourcing\\\\EventCollection\\:\\:select\\(\\) has parameter \\$subset with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\MiddlewareBundle\\EventSourcing\\EventCollection\:\:select\(\) has parameter \$subset with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/EventSourcing/EventCollection.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\EventSourcing\\\\ProjectorCollection\\:\\:selectByNames\\(\\) has parameter \\$projectorNames with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\MiddlewareBundle\\EventSourcing\\ProjectorCollection\:\:selectByNames\(\) has parameter \$projectorNames with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/EventSourcing/ProjectorCollection.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Migrations\\\\InstitutionConfiguration\\\\MappedInstitutionConfiguration\\:\\:__construct\\(\\) has parameter \\$raLocations with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\MiddlewareBundle\\Migrations\\InstitutionConfiguration\\MappedInstitutionConfiguration\:\:__construct\(\) has parameter \$raLocations with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Migrations/InstitutionConfiguration/MappedInstitutionConfiguration.php - - message: "#^Cannot access property \\$id on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null\\.$#" + message: '#^Cannot access property \$id on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/BootstrapCommandService.php - - message: "#^Cannot access property \\$institution on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\Identity\\|null\\.$#" + message: '#^Cannot access property \$institution on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\Identity\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/BootstrapCommandService.php - - message: "#^Cannot access property \\$registrationCode on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\VerifiedSecondFactor\\|null\\.$#" + message: '#^Cannot access property \$registrationCode on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\VerifiedSecondFactor\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/BootstrapCommandService.php - - message: "#^Cannot access property \\$verificationNonce on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Identity\\\\Entity\\\\UnverifiedSecondFactor\\|null\\.$#" + message: '#^Cannot access property \$verificationNonce on Surfnet\\StepupMiddleware\\ApiBundle\\Identity\\Entity\\UnverifiedSecondFactor\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/BootstrapCommandService.php - - message: "#^Parameter \\#2 \\$criteria of method Doctrine\\\\DBAL\\\\Connection\\:\\:delete\\(\\) expects array\\, array\\ given\\.$#" + message: '#^Parameter \#2 \$criteria of method Doctrine\\DBAL\\Connection\:\:delete\(\) expects array\, array\ given\.$#' + identifier: argument.type count: 2 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/EventStreamReplayer.php - - message: "#^Argument of an invalid type array\\\\|null supplied for foreach, only iterables are supported\\.$#" + message: '#^Argument of an invalid type array\\|null supplied for foreach, only iterables are supported\.$#' + identifier: foreach.nonIterable count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/ReplayingEventDispatcher.php - - message: "#^Parameter \\#1 \\$domainMessage of method Broadway\\\\EventHandling\\\\EventListener\\:\\:handle\\(\\) expects Broadway\\\\Domain\\\\DomainMessage, mixed given\\.$#" + message: '#^Parameter \#1 \$domainMessage of method Broadway\\EventHandling\\EventListener\:\:handle\(\) expects Broadway\\Domain\\DomainMessage, mixed given\.$#' + identifier: argument.type count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/ReplayingEventDispatcher.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Service\\\\SecondFactorDisplayNameResolverService\\:\\:__construct\\(\\) has parameter \\$secondFactors with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\MiddlewareBundle\\Service\\SecondFactorDisplayNameResolverService\:\:__construct\(\) has parameter \$secondFactors with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/SecondFactorDisplayNameResolverService.php - - message: "#^Cannot access property \\$htmlContent on Surfnet\\\\StepupMiddleware\\\\CommandHandlingBundle\\\\Configuration\\\\Dto\\\\EmailTemplate\\|null\\.$#" + message: '#^Cannot access property \$htmlContent on Surfnet\\StepupMiddleware\\CommandHandlingBundle\\Configuration\\Dto\\EmailTemplate\|null\.$#' + identifier: property.nonObject count: 2 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/VerifiedSecondFactorReminderMailService.php - - message: "#^Cannot access property \\$showRaaContactInformationOption on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\InstitutionConfigurationOptions\\|null\\.$#" + message: '#^Cannot access property \$showRaaContactInformationOption on Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\InstitutionConfigurationOptions\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/VerifiedSecondFactorReminderMailService.php - - message: "#^Cannot access property \\$useRaLocationsOption on Surfnet\\\\StepupMiddleware\\\\ApiBundle\\\\Configuration\\\\Entity\\\\InstitutionConfigurationOptions\\|null\\.$#" + message: '#^Cannot access property \$useRaLocationsOption on Surfnet\\StepupMiddleware\\ApiBundle\\Configuration\\Entity\\InstitutionConfigurationOptions\|null\.$#' + identifier: property.nonObject count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/VerifiedSecondFactorReminderMailService.php - - message: "#^Method Surfnet\\\\StepupMiddleware\\\\MiddlewareBundle\\\\Tests\\\\EventSourcing\\\\EventCollectionTest\\:\\:an_event_collection_must_be_created_from_an_array_of_non_empty_strings\\(\\) has parameter \\$emptyOrNonString with no value type specified in iterable type array\\.$#" + message: '#^Method Surfnet\\StepupMiddleware\\MiddlewareBundle\\Tests\\EventSourcing\\EventCollectionTest\:\:an_event_collection_must_be_created_from_an_array_of_non_empty_strings\(\) has parameter \$emptyOrNonString with no value type specified in iterable type array\.$#' + identifier: missingType.iterableValue count: 1 path: ../../src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/EventSourcing/EventCollectionTest.php diff --git a/ci/qa/phpstan.neon b/ci/qa/phpstan.neon index baa9bb720..2a2553a08 100644 --- a/ci/qa/phpstan.neon +++ b/ci/qa/phpstan.neon @@ -5,6 +5,7 @@ includes: - ../../vendor/phpstan/phpstan-symfony/extension.neon parameters: + treatPhpDocTypesAsCertain: false level: 9 paths: - ../../src diff --git a/ci/qa/phpunit b/ci/qa/phpunit index e402c8609..a6390e7e5 100755 --- a/ci/qa/phpunit +++ b/ci/qa/phpunit @@ -7,5 +7,5 @@ cd $(dirname $0)/../../ # PHPUnit Bridge should always be used in Symfony applications. (https://symfony.com/doc/current/components/phpunit_bridge.html) # This will create a phpunit executable in /bin/ instead of /vendor/bin/ -./vendor/bin/phpunit --configuration=ci/qa/phpunit.xml --coverage-text --stop-on-error $1 +./vendor/bin/phpunit --configuration=ci/qa/phpunit.xml --stop-on-error $@ ./vendor/bin/phpunit --configuration=ci/qa/phpunit.xml --testsuite=database diff --git a/ci/qa/phpunit.xml b/ci/qa/phpunit.xml index 84ae926ca..91193bae7 100644 --- a/ci/qa/phpunit.xml +++ b/ci/qa/phpunit.xml @@ -1,18 +1,19 @@ - - - - ../../src - - + - @@ -23,8 +24,4 @@ ../../tests/database - - - - diff --git a/ci/qa/rector.php b/ci/qa/rector.php new file mode 100644 index 000000000..2dcd41602 --- /dev/null +++ b/ci/qa/rector.php @@ -0,0 +1,29 @@ +withPaths([ + __DIR__ . '/../../config', + __DIR__ . '/../../src', + __DIR__ . '/../../tests', + __DIR__ . '/../../templates', + ]) + ->withPhpSets() + ->withAttributesSets(all: true) + ->withComposerBased(symfony: true, twig: true, doctrine: true, phpunit: true) + ->withTypeCoverageLevel(10) + ->withDeadCodeLevel(10) + ->withCodeQualityLevel(10) + ->withSkip([ + ReadOnlyClassRector::class, + ReadOnlyPropertyRector::class, + ClassPropertyAssignToConstructorPromotionRector::class, + RestoreDefaultNullToNullableTypePropertyRector::class, + ]); diff --git a/ci/qa/rector.sh b/ci/qa/rector.sh new file mode 100755 index 000000000..b2b585710 --- /dev/null +++ b/ci/qa/rector.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env sh + +# Ensure we run from project root +cd "$(dirname "$0")/../../" || exit 1 +./vendor/bin/rector --config=ci/qa/rector.php "$@" diff --git a/component_info b/component_info index 7c1720a07..22d3e04a3 100644 --- a/component_info +++ b/component_info @@ -1,5 +1,5 @@ PHP_VERSION=82 -SYMFONY_VERSION=6 +SYMFONY_VERSION=7 ENCORE=no ASSETIC=no NODE_VERSION=20 diff --git a/composer.json b/composer.json index 59a58e6f3..aa25c08ba 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ "ext-pdo": "*", "broadway/broadway": "^2.5", "broadway/event-store-dbal": "^0.6", - "doctrine/annotations": "^2.0.2", + "doctrine/annotations": "^2.0", "doctrine/doctrine-bundle": "^2.13.2", "doctrine/doctrine-migrations-bundle": "^3.4.1", "doctrine/orm": "^3.3.2", @@ -35,46 +35,46 @@ "openconext/monitor-bundle": "^4.3.1", "pagerfanta/pagerfanta": "^4.7.1", "ramsey/uuid": "^4.7.6", - "surfnet/stepup-bundle": "^6.0.17", - "symfony/asset": "6.4.*", - "symfony/expression-language": "6.4.*", + "surfnet/stepup-bundle": "^7.0", + "symfony/asset": "7.4.*", + "symfony/expression-language": "7.4.*", "symfony/flex": "^2.4.7", - "symfony/form": "6.4.*", - "symfony/framework-bundle": "6.4.*", - "symfony/intl": "6.4.*", - "symfony/mailer": "6.4.*", + "symfony/form": "7.4.*", + "symfony/framework-bundle": "7.4.*", + "symfony/intl": "7.4.*", + "symfony/mailer": "7.4.*", "symfony/monolog-bundle": "^3.10", - "symfony/password-hasher": "6.4.*", - "symfony/runtime": "6.4.*", - "symfony/security-bundle": "6.4.*", - "symfony/translation": "6.4.*", - "symfony/twig-bundle": "6.4.*", - "symfony/validator": "6.4.*", + "symfony/password-hasher": "7.4.*", + "symfony/runtime": "7.4.*", + "symfony/security-bundle": "7.4.*", + "symfony/translation": "7.4.*", + "symfony/twig-bundle": "7.4.*", + "symfony/validator": "7.4.*", "twig/extra-bundle": "^3.20", "twig/intl-extra": "^3.20", "twig/twig": "^3.20" }, "require-dev": { - "doctrine/data-fixtures": "^1.8.1", - "doctrine/doctrine-fixtures-bundle": "^3.7.1", - "liip/test-fixtures-bundle": "^2.9.2", + "doctrine/data-fixtures": "^2.2", + "doctrine/doctrine-fixtures-bundle": "^4.3", + "irstea/phpcpd-shim": "^6.0", + "liip/test-fixtures-bundle": "^3.6", "malukenho/docheader": "^1.1", "mockery/mockery": "1.7.x-dev", - "moontoast/math": "^1.2.1", "overtrue/phplint": ">=9.5.6", "phpmd/phpmd": "^2.15", - "phpstan/phpstan": "^1.11.x-dev", - "phpstan/phpstan-doctrine": "^1.5.7", - "phpstan/phpstan-mockery": "^1.1.3", - "phpstan/phpstan-symfony": "^1.4.13", - "phpunit/phpunit": "^9.6.22", - "rector/rector": "^1.2.10", - "sebastian/phpcpd": "^6.0.3", - "squizlabs/php_codesniffer": "^3.11.3", - "symfony/browser-kit": "6.4.*", - "symfony/phpunit-bridge": "^6.4.16", - "symfony/stopwatch": "6.4.*", - "symfony/web-profiler-bundle": "6.4.*" + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-doctrine": "^2.0", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-symfony": "^2.0", + "phpunit/phpunit": "^10", + "rector/rector": "^2.2", + "slevomat/coding-standard": "^8.25", + "squizlabs/php_codesniffer": "^4", + "symfony/browser-kit": "7.4.*", + "symfony/phpunit-bridge": "7.4.*", + "symfony/stopwatch": "7.4.*", + "symfony/web-profiler-bundle": "7.4.*" }, "scripts": { "auto-scripts": { @@ -82,6 +82,11 @@ "assets:install %PUBLIC_DIR%": "symfony-cmd" }, "check": [ + "@check-ci", + "@rector", + "composer audit" + ], + "check-ci": [ "@phplint", "@phpmd", "@phpcs", @@ -93,11 +98,13 @@ "phplint": "./ci/qa/phplint", "phpmd": "./ci/qa/phpmd", "license-headers": "./ci/qa/docheader", + "rector": "./ci/qa/rector.sh --dry-run", + "rector-fix": "./ci/qa/rector.sh", "phpstan": "./ci/qa/phpstan", "phpcs": "./ci/qa/phpcs", "phpcbf": "./ci/qa/phpcbf", "phpcpd": "./ci/qa/phpcpd", - "phpunit": "./ci/qa/phpunit --", + "phpunit": "./ci/qa/phpunit", "post-install-cmd": [ "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", @@ -128,6 +135,7 @@ }, "config": { "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true, "endroid/installer": false, "symfony/flex": true, "symfony/runtime": true @@ -144,7 +152,7 @@ }, "symfony": { "allow-contrib": false, - "require": "6.4.*" + "require": "7.4.*" }, "runtime": { "disable_dotenv": true diff --git a/composer.lock b/composer.lock index a1627c113..f21aa6cd1 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": "d03ad781575588900fdee3214b539c50", + "content-hash": "e6f4c60a781be36f8c5e5a5cff4133e7", "packages": [ { "name": "beberlei/assert", @@ -75,25 +75,25 @@ }, { "name": "brick/math", - "version": "0.12.2", + "version": "0.14.1", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "901eddb1e45a8e0f689302e40af871c181ecbe40" + "reference": "f05858549e5f9d7bb45875a75583240a38a281d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/901eddb1e45a8e0f689302e40af871c181ecbe40", - "reference": "901eddb1e45a8e0f689302e40af871c181ecbe40", + "url": "https://api.github.com/repos/brick/math/zipball/f05858549e5f9d7bb45875a75583240a38a281d0", + "reference": "f05858549e5f9d7bb45875a75583240a38a281d0", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^8.2" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^10.1", - "vimeo/psalm": "6.8.8" + "phpstan/phpstan": "2.1.22", + "phpunit/phpunit": "^11.5" }, "type": "library", "autoload": { @@ -123,7 +123,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.12.2" + "source": "https://github.com/brick/math/tree/0.14.1" }, "funding": [ { @@ -131,7 +131,7 @@ "type": "github" } ], - "time": "2025-02-26T10:21:45+00:00" + "time": "2025-11-24T14:40:29+00:00" }, { "name": "broadway/broadway", @@ -346,16 +346,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.5.5", + "version": "1.5.9", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "08c50d5ec4c6ced7d0271d2862dec8c1033283e6" + "reference": "1905981ee626e6f852448b7aaa978f8666c5bc54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/08c50d5ec4c6ced7d0271d2862dec8c1033283e6", - "reference": "08c50d5ec4c6ced7d0271d2862dec8c1033283e6", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/1905981ee626e6f852448b7aaa978f8666c5bc54", + "reference": "1905981ee626e6f852448b7aaa978f8666c5bc54", "shasum": "" }, "require": { @@ -402,7 +402,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.5" + "source": "https://github.com/composer/ca-bundle/tree/1.5.9" }, "funding": [ { @@ -412,13 +412,9 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2025-01-08T16:17:16+00:00" + "time": "2025-11-06T11:46:17+00:00" }, { "name": "doctrine/annotations", @@ -494,126 +490,34 @@ "issues": "https://github.com/doctrine/annotations/issues", "source": "https://github.com/doctrine/annotations/tree/2.0.2" }, + "abandoned": true, "time": "2024-09-05T10:17:24+00:00" }, - { - "name": "doctrine/cache", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2022-05-20T20:07:39+00:00" - }, { "name": "doctrine/collections", - "version": "2.2.2", + "version": "2.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "d8af7f248c74f195f7347424600fd9e17b57af59" + "reference": "9acfeea2e8666536edff3d77c531261c63680160" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/d8af7f248c74f195f7347424600fd9e17b57af59", - "reference": "d8af7f248c74f195f7347424600fd9e17b57af59", + "url": "https://api.github.com/repos/doctrine/collections/zipball/9acfeea2e8666536edff3d77c531261c63680160", + "reference": "9acfeea2e8666536edff3d77c531261c63680160", "shasum": "" }, "require": { "doctrine/deprecations": "^1", - "php": "^8.1" + "php": "^8.1", + "symfony/polyfill-php84": "^1.30" }, "require-dev": { - "doctrine/coding-standard": "^12", + "doctrine/coding-standard": "^14", "ext-json": "*", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.11" + "phpstan/phpstan": "^2.1.30", + "phpstan/phpstan-phpunit": "^2.0.7", + "phpunit/phpunit": "^10.5.58 || ^11.5.42 || ^12.4" }, "type": "library", "autoload": { @@ -657,7 +561,7 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/2.2.2" + "source": "https://github.com/doctrine/collections/tree/2.4.0" }, "funding": [ { @@ -673,40 +577,43 @@ "type": "tidelift" } ], - "time": "2024-04-18T06:56:21+00:00" + "time": "2025-10-25T09:18:13+00:00" }, { "name": "doctrine/dbal", - "version": "3.9.4", + "version": "3.10.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "ec16c82f20be1a7224e65ac67144a29199f87959" + "reference": "65edaca19a752730f290ec2fb89d593cb40afb43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/ec16c82f20be1a7224e65ac67144a29199f87959", - "reference": "ec16c82f20be1a7224e65ac67144a29199f87959", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/65edaca19a752730f290ec2fb89d593cb40afb43", + "reference": "65edaca19a752730f290ec2fb89d593cb40afb43", "shasum": "" }, "require": { "composer-runtime-api": "^2", - "doctrine/cache": "^1.11|^2.0", "doctrine/deprecations": "^0.5.3|^1", "doctrine/event-manager": "^1|^2", "php": "^7.4 || ^8.0", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, + "conflict": { + "doctrine/cache": "< 1.11" + }, "require-dev": { - "doctrine/coding-standard": "12.0.0", + "doctrine/cache": "^1.11|^2.0", + "doctrine/coding-standard": "14.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "2.1.1", + "phpstan/phpstan": "2.1.30", "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "9.6.22", - "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.10.2", + "phpunit/phpunit": "9.6.29", + "slevomat/coding-standard": "8.24.0", + "squizlabs/php_codesniffer": "4.0.0", "symfony/cache": "^5.4|^6.0|^7.0", "symfony/console": "^4.4|^5.4|^6.0|^7.0" }, @@ -768,7 +675,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.9.4" + "source": "https://github.com/doctrine/dbal/tree/3.10.3" }, "funding": [ { @@ -784,30 +691,33 @@ "type": "tidelift" } ], - "time": "2025-01-16T08:28:55+00:00" + "time": "2025-10-09T09:05:12+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.4", + "version": "1.1.5", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9" + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9", - "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=13" + }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12", - "phpstan/phpstan": "1.4.10 || 2.0.3", + "doctrine/coding-standard": "^9 || ^12 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", "psr/log": "^1 || ^2 || ^3" }, "suggest": { @@ -827,68 +737,69 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.4" + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" }, - "time": "2024-12-07T21:18:45+00:00" + "time": "2025-04-07T20:06:18+00:00" }, { "name": "doctrine/doctrine-bundle", - "version": "2.13.2", + "version": "2.18.1", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "2363c43d9815a11657e452625cd64172d5587486" + "reference": "b769877014de053da0e5cbbb63d0ea2f3b2fea76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/2363c43d9815a11657e452625cd64172d5587486", - "reference": "2363c43d9815a11657e452625cd64172d5587486", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/b769877014de053da0e5cbbb63d0ea2f3b2fea76", + "reference": "b769877014de053da0e5cbbb63d0ea2f3b2fea76", "shasum": "" }, "require": { - "doctrine/cache": "^1.11 || ^2.0", "doctrine/dbal": "^3.7.0 || ^4.0", - "doctrine/persistence": "^2.2 || ^3", + "doctrine/deprecations": "^1.0", + "doctrine/persistence": "^3.1 || ^4", "doctrine/sql-formatter": "^1.0.1", - "php": "^7.4 || ^8.0", - "symfony/cache": "^5.4 || ^6.0 || ^7.0", - "symfony/config": "^5.4 || ^6.0 || ^7.0", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", - "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/doctrine-bridge": "^5.4.46 || ~6.3.12 || ^6.4.3 || ^7.0.3", - "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", - "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" + "php": "^8.1", + "symfony/cache": "^6.4 || ^7.0", + "symfony/config": "^6.4 || ^7.0", + "symfony/console": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/doctrine-bridge": "^6.4.3 || ^7.0.3", + "symfony/framework-bundle": "^6.4 || ^7.0", + "symfony/service-contracts": "^2.5 || ^3" }, "conflict": { "doctrine/annotations": ">=3.0", + "doctrine/cache": "< 1.11", "doctrine/orm": "<2.17 || >=4.0", - "twig/twig": "<1.34 || >=2.0 <2.4" + "symfony/var-exporter": "< 6.4.1 || 7.0.0", + "twig/twig": "<2.13 || >=3.0 <3.0.4" }, "require-dev": { "doctrine/annotations": "^1 || ^2", - "doctrine/coding-standard": "^12", - "doctrine/deprecations": "^1.0", - "doctrine/orm": "^2.17 || ^3.0", + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^14", + "doctrine/orm": "^2.17 || ^3.1", "friendsofphp/proxy-manager-lts": "^1.0", "phpstan/phpstan": "2.1.1", "phpstan/phpstan-phpunit": "2.0.3", "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "^9.5.26", + "phpunit/phpunit": "^10.5.53 || ^12.3.10", "psr/log": "^1.1.4 || ^2.0 || ^3.0", - "symfony/phpunit-bridge": "^6.1 || ^7.0", - "symfony/property-info": "^5.4 || ^6.0 || ^7.0", - "symfony/proxy-manager-bridge": "^5.4 || ^6.0", - "symfony/security-bundle": "^5.4 || ^6.0 || ^7.0", - "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", - "symfony/string": "^5.4 || ^6.0 || ^7.0", - "symfony/twig-bridge": "^5.4 || ^6.0 || ^7.0", - "symfony/validator": "^5.4 || ^6.0 || ^7.0", - "symfony/var-exporter": "^5.4 || ^6.2 || ^7.0", - "symfony/web-profiler-bundle": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0", - "twig/twig": "^1.34 || ^2.12 || ^3.0" + "symfony/doctrine-messenger": "^6.4 || ^7.0", + "symfony/expression-language": "^6.4 || ^7.0", + "symfony/messenger": "^6.4 || ^7.0", + "symfony/property-info": "^6.4 || ^7.0", + "symfony/security-bundle": "^6.4 || ^7.0", + "symfony/stopwatch": "^6.4 || ^7.0", + "symfony/string": "^6.4 || ^7.0", + "symfony/twig-bridge": "^6.4 || ^7.0", + "symfony/validator": "^6.4 || ^7.0", + "symfony/var-exporter": "^6.4.1 || ^7.0.1", + "symfony/web-profiler-bundle": "^6.4 || ^7.0", + "symfony/yaml": "^6.4 || ^7.0", + "twig/twig": "^2.14.7 || ^3.0.4" }, "suggest": { "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", @@ -933,7 +844,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.2" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.18.1" }, "funding": [ { @@ -949,42 +860,41 @@ "type": "tidelift" } ], - "time": "2025-01-15T11:12:38+00:00" + "time": "2025-11-05T14:42:10+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", - "version": "3.4.1", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "e858ce0f5c12b266dce7dce24834448355155da7" + "reference": "1e380c6dd8ac8488217f39cff6b77e367f1a644b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/e858ce0f5c12b266dce7dce24834448355155da7", - "reference": "e858ce0f5c12b266dce7dce24834448355155da7", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/1e380c6dd8ac8488217f39cff6b77e367f1a644b", + "reference": "1e380c6dd8ac8488217f39cff6b77e367f1a644b", "shasum": "" }, "require": { - "doctrine/doctrine-bundle": "^2.4", + "doctrine/doctrine-bundle": "^2.4 || ^3.0", "doctrine/migrations": "^3.2", "php": "^7.2 || ^8.0", "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0" + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "require-dev": { "composer/semver": "^3.0", - "doctrine/coding-standard": "^12", + "doctrine/coding-standard": "^12 || ^14", "doctrine/orm": "^2.6 || ^3", - "doctrine/persistence": "^2.0 || ^3", "phpstan/phpstan": "^1.4 || ^2", "phpstan/phpstan-deprecation-rules": "^1 || ^2", "phpstan/phpstan-phpunit": "^1 || ^2", "phpstan/phpstan-strict-rules": "^1.1 || ^2", "phpstan/phpstan-symfony": "^1.3 || ^2", "phpunit/phpunit": "^8.5 || ^9.5", - "symfony/phpunit-bridge": "^6.3 || ^7", - "symfony/var-exporter": "^5.4 || ^6 || ^7" + "symfony/phpunit-bridge": "^6.3 || ^7 || ^8", + "symfony/var-exporter": "^5.4 || ^6 || ^7 || ^8" }, "type": "symfony-bundle", "autoload": { @@ -1019,7 +929,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", - "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.4.1" + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.7.0" }, "funding": [ { @@ -1035,7 +945,7 @@ "type": "tidelift" } ], - "time": "2025-01-27T22:48:22+00:00" + "time": "2025-11-15T19:02:59+00:00" }, { "name": "doctrine/event-manager", @@ -1130,33 +1040,32 @@ }, { "name": "doctrine/inflector", - "version": "2.0.10", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^11.0", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^8.5 || ^9.5", - "vimeo/psalm": "^4.25 || ^5.4" + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + "Doctrine\\Inflector\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1201,7 +1110,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.10" + "source": "https://github.com/doctrine/inflector/tree/2.1.0" }, "funding": [ { @@ -1217,7 +1126,7 @@ "type": "tidelift" } ], - "time": "2024-02-18T20:23:39+00:00" + "time": "2025-08-10T19:31:58+00:00" }, { "name": "doctrine/instantiator", @@ -1368,16 +1277,16 @@ }, { "name": "doctrine/migrations", - "version": "3.8.2", + "version": "3.9.5", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "5007eb1168691225ac305fe16856755c20860842" + "reference": "1b823afbc40f932dae8272574faee53f2755eac5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/5007eb1168691225ac305fe16856755c20860842", - "reference": "5007eb1168691225ac305fe16856755c20860842", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/1b823afbc40f932dae8272574faee53f2755eac5", + "reference": "1b823afbc40f932dae8272574faee53f2755eac5", "shasum": "" }, "require": { @@ -1387,29 +1296,29 @@ "doctrine/event-manager": "^1.2 || ^2.0", "php": "^8.1", "psr/log": "^1.1.3 || ^2 || ^3", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", - "symfony/var-exporter": "^6.2 || ^7.0" + "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/var-exporter": "^6.2 || ^7.0 || ^8.0" }, "conflict": { "doctrine/orm": "<2.12 || >=4" }, "require-dev": { - "doctrine/coding-standard": "^12", + "doctrine/coding-standard": "^14", "doctrine/orm": "^2.13 || ^3", - "doctrine/persistence": "^2 || ^3", + "doctrine/persistence": "^2 || ^3 || ^4", "doctrine/sql-formatter": "^1.0", "ext-pdo_sqlite": "*", "fig/log-test": "^1", - "phpstan/phpstan": "^1.10", - "phpstan/phpstan-deprecation-rules": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpstan/phpstan-strict-rules": "^1.4", - "phpstan/phpstan-symfony": "^1.3", - "phpunit/phpunit": "^10.3", - "symfony/cache": "^5.4 || ^6.0 || ^7.0", - "symfony/process": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-phpunit": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpstan/phpstan-symfony": "^2", + "phpunit/phpunit": "^10.3 || ^11.0 || ^12.0", + "symfony/cache": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/process": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "suggest": { "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", @@ -1451,7 +1360,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.8.2" + "source": "https://github.com/doctrine/migrations/tree/3.9.5" }, "funding": [ { @@ -1467,20 +1376,20 @@ "type": "tidelift" } ], - "time": "2024-10-10T21:35:27+00:00" + "time": "2025-11-20T11:15:36+00:00" }, { "name": "doctrine/orm", - "version": "3.3.2", + "version": "3.5.7", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "c9557c588b3a70ed93caff069d0aa75737f25609" + "reference": "f18de9d569f00ed6eb9dac4b33c7844d705d17da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/c9557c588b3a70ed93caff069d0aa75737f25609", - "reference": "c9557c588b3a70ed93caff069d0aa75737f25609", + "url": "https://api.github.com/repos/doctrine/orm/zipball/f18de9d569f00ed6eb9dac4b33c7844d705d17da", + "reference": "f18de9d569f00ed6eb9dac4b33c7844d705d17da", "shasum": "" }, "require": { @@ -1500,15 +1409,14 @@ "symfony/var-exporter": "^6.3.9 || ^7.0" }, "require-dev": { - "doctrine/coding-standard": "^12.0", + "doctrine/coding-standard": "^14.0", "phpbench/phpbench": "^1.0", "phpdocumentor/guides-cli": "^1.4", "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "2.0.3", + "phpstan/phpstan": "2.1.23", "phpstan/phpstan-deprecation-rules": "^2", - "phpunit/phpunit": "^10.4.0", + "phpunit/phpunit": "^10.5.0 || ^11.5", "psr/log": "^1 || ^2 || ^3", - "squizlabs/php_codesniffer": "3.7.2", "symfony/cache": "^5.4 || ^6.2 || ^7.0" }, "suggest": { @@ -1555,40 +1463,37 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/3.3.2" + "source": "https://github.com/doctrine/orm/tree/3.5.7" }, - "time": "2025-02-04T19:43:15+00:00" + "time": "2025-11-11T18:27:40+00:00" }, { "name": "doctrine/persistence", - "version": "3.4.0", + "version": "4.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff" + "reference": "b9c49ad3558bb77ef973f4e173f2e9c2eca9be09" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/0ea965320cec355dba75031c1b23d4c78362e3ff", - "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/b9c49ad3558bb77ef973f4e173f2e9c2eca9be09", + "reference": "b9c49ad3558bb77ef973f4e173f2e9c2eca9be09", "shasum": "" }, "require": { "doctrine/event-manager": "^1 || ^2", - "php": "^7.2 || ^8.0", + "php": "^8.1", "psr/cache": "^1.0 || ^2.0 || ^3.0" }, - "conflict": { - "doctrine/common": "<2.10" - }, "require-dev": { - "doctrine/coding-standard": "^12", - "doctrine/common": "^3.0", - "phpstan/phpstan": "1.12.7", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "^8.5.38 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0" + "doctrine/coding-standard": "^14", + "phpstan/phpstan": "2.1.30", + "phpstan/phpstan-phpunit": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.58 || ^12", + "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0", + "symfony/finder": "^4.4 || ^5.4 || ^6.0 || ^7.0" }, "type": "library", "autoload": { @@ -1637,7 +1542,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.4.0" + "source": "https://github.com/doctrine/persistence/tree/4.1.1" }, "funding": [ { @@ -1653,30 +1558,30 @@ "type": "tidelift" } ], - "time": "2024-10-30T19:48:12+00:00" + "time": "2025-10-16T20:13:18+00:00" }, { "name": "doctrine/sql-formatter", - "version": "1.5.2", + "version": "1.5.3", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8" + "reference": "a8af23a8e9d622505baa2997465782cbe8bb7fc7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d6d00aba6fd2957fe5216fe2b7673e9985db20c8", - "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/a8af23a8e9d622505baa2997465782cbe8bb7fc7", + "reference": "a8af23a8e9d622505baa2997465782cbe8bb7fc7", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^12", - "ergebnis/phpunit-slow-test-detector": "^2.14", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5" + "doctrine/coding-standard": "^14", + "ergebnis/phpunit-slow-test-detector": "^2.20", + "phpstan/phpstan": "^2.1.31", + "phpunit/phpunit": "^10.5.58" }, "bin": [ "bin/sql-formatter" @@ -1706,22 +1611,22 @@ ], "support": { "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.5.2" + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.3" }, - "time": "2025-01-24T11:45:48+00:00" + "time": "2025-10-26T09:35:14+00:00" }, { "name": "egulias/email-validator", - "version": "4.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "b115554301161fa21467629f1e1391c1936de517" + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b115554301161fa21467629f1e1391c1936de517", - "reference": "b115554301161fa21467629f1e1391c1936de517", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", "shasum": "" }, "require": { @@ -1767,7 +1672,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.3" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" }, "funding": [ { @@ -1775,7 +1680,7 @@ "type": "github" } ], - "time": "2024-12-27T00:36:43+00:00" + "time": "2025-03-06T22:45:56+00:00" }, { "name": "endroid/installer", @@ -1839,22 +1744,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.9.2", + "version": "7.10.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b" + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.3", - "guzzlehttp/psr7": "^2.7.0", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1945,7 +1850,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.2" + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" }, "funding": [ { @@ -1961,20 +1866,20 @@ "type": "tidelift" } ], - "time": "2024-07-24T11:22:20+00:00" + "time": "2025-08-23T22:36:01+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.4", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" + "reference": "481557b130ef3790cf82b713667b43030dc9c957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", - "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", "shasum": "" }, "require": { @@ -1982,7 +1887,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "type": "library", "extra": { @@ -2028,7 +1933,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.4" + "source": "https://github.com/guzzle/promises/tree/2.3.0" }, "funding": [ { @@ -2044,20 +1949,20 @@ "type": "tidelift" } ], - "time": "2024-10-17T10:06:22+00:00" + "time": "2025-08-22T14:34:08+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.7.0", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" + "reference": "21dc724a0583619cd1652f673303492272778051" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", + "reference": "21dc724a0583619cd1652f673303492272778051", "shasum": "" }, "require": { @@ -2073,7 +1978,7 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "0.9.0", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -2144,7 +2049,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.7.0" + "source": "https://github.com/guzzle/psr7/tree/2.8.0" }, "funding": [ { @@ -2160,32 +2065,32 @@ "type": "tidelift" } ], - "time": "2024-07-18T11:15:46+00:00" + "time": "2025-08-23T21:21:41+00:00" }, { "name": "incenteev/composer-parameter-handler", - "version": "v2.2.0", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/Incenteev/ParameterHandler.git", - "reference": "90bffce926e96b365579a2ef024aab457f4b80c5" + "reference": "4d9a7c72322daaa11343fb885c15dc3fa096e3ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/90bffce926e96b365579a2ef024aab457f4b80c5", - "reference": "90bffce926e96b365579a2ef024aab457f4b80c5", + "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/4d9a7c72322daaa11343fb885c15dc3fa096e3ac", + "reference": "4d9a7c72322daaa11343fb885c15dc3fa096e3ac", "shasum": "" }, "require": { "php": ">=7.4", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + "symfony/yaml": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "require-dev": { "composer/composer": "^2.0@dev", "phpspec/prophecy-phpunit": "^2.1", "phpunit/phpunit": "^9.6", - "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", - "symfony/phpunit-bridge": "^6.4.1 || ^7.0.1" + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/phpunit-bridge": "^6.4.1 || ^7.0.1 || ^8.0" }, "type": "library", "extra": { @@ -2215,9 +2120,9 @@ ], "support": { "issues": "https://github.com/Incenteev/ParameterHandler/issues", - "source": "https://github.com/Incenteev/ParameterHandler/tree/v2.2.0" + "source": "https://github.com/Incenteev/ParameterHandler/tree/v2.3.0" }, - "time": "2023-12-09T10:31:14+00:00" + "time": "2025-11-26T14:10:46+00:00" }, { "name": "jms/translation-bundle", @@ -2306,16 +2211,16 @@ }, { "name": "monolog/monolog", - "version": "3.8.1", + "version": "3.9.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4" + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", "shasum": "" }, "require": { @@ -2393,7 +2298,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.8.1" + "source": "https://github.com/Seldaek/monolog/tree/3.9.0" }, "funding": [ { @@ -2405,20 +2310,20 @@ "type": "tidelift" } ], - "time": "2024-12-05T17:15:07+00:00" + "time": "2025-03-24T10:02:05+00:00" }, { "name": "nelmio/security-bundle", - "version": "v3.4.2", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioSecurityBundle.git", - "reference": "3c4739628eafe886c001210aa0d97b33f3551599" + "reference": "f3a7bf628a0873788172a0d05d20c0224080f5eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioSecurityBundle/zipball/3c4739628eafe886c001210aa0d97b33f3551599", - "reference": "3c4739628eafe886c001210aa0d97b33f3551599", + "url": "https://api.github.com/repos/nelmio/NelmioSecurityBundle/zipball/f3a7bf628a0873788172a0d05d20c0224080f5eb", + "reference": "f3a7bf628a0873788172a0d05d20c0224080f5eb", "shasum": "" }, "require": { @@ -2477,22 +2382,22 @@ ], "support": { "issues": "https://github.com/nelmio/NelmioSecurityBundle/issues", - "source": "https://github.com/nelmio/NelmioSecurityBundle/tree/v3.4.2" + "source": "https://github.com/nelmio/NelmioSecurityBundle/tree/v3.6.0" }, - "time": "2024-09-10T13:22:26+00:00" + "time": "2025-09-19T08:24:46+00:00" }, { "name": "nikic/php-parser", - "version": "v5.4.0", + "version": "v5.6.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494" + "reference": "3a454ca033b9e06b63282ce19562e892747449bb" }, "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/3a454ca033b9e06b63282ce19562e892747449bb", + "reference": "3a454ca033b9e06b63282ce19562e892747449bb", "shasum": "" }, "require": { @@ -2511,7 +2416,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -2535,9 +2440,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.2" }, - "time": "2024-12-30T11:07:19+00:00" + "time": "2025-10-21T19:32:17+00:00" }, { "name": "openconext/monitor-bundle", @@ -2596,16 +2501,16 @@ }, { "name": "pagerfanta/pagerfanta", - "version": "v4.7.1", + "version": "v4.7.2", "source": { "type": "git", "url": "https://github.com/BabDev/Pagerfanta.git", - "reference": "b09216fc53665c4d8a39b7f60e421165cb4693e4" + "reference": "9320a542e1ed8d1a099a3d380685870e8bb5d553" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/BabDev/Pagerfanta/zipball/b09216fc53665c4d8a39b7f60e421165cb4693e4", - "reference": "b09216fc53665c4d8a39b7f60e421165cb4693e4", + "url": "https://api.github.com/repos/BabDev/Pagerfanta/zipball/9320a542e1ed8d1a099a3d380685870e8bb5d553", + "reference": "9320a542e1ed8d1a099a3d380685870e8bb5d553", "shasum": "" }, "require": { @@ -2635,7 +2540,7 @@ "pagerfanta/twig": "self.version" }, "require-dev": { - "dg/bypass-finals": "^1.5.1", + "dg/bypass-finals": "^1.9", "doctrine/collections": "^1.8 || ^2.0", "doctrine/dbal": "^3.5 || ^4.0", "doctrine/mongodb-odm": "^2.4", @@ -2643,10 +2548,10 @@ "doctrine/phpcr-odm": "^1.7 || ^2.0", "jackalope/jackalope-doctrine-dbal": "^1.9 || ^2.0", "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "2.0.3", - "phpstan/phpstan-phpunit": "2.0.1", - "phpunit/phpunit": "10.5.39", - "rector/rector": "2.0.3", + "phpstan/phpstan": "2.1.31", + "phpstan/phpstan-phpunit": "2.0.7", + "phpunit/phpunit": "10.5.58", + "rector/rector": "2.2.3", "ruflin/elastica": "^7.3 || ^8.0", "solarium/solarium": "^6.2", "symfony/cache": "^5.4 || ^6.3 || ^7.0", @@ -2685,7 +2590,7 @@ ], "support": { "issues": "https://github.com/BabDev/Pagerfanta/issues", - "source": "https://github.com/BabDev/Pagerfanta/tree/v4.7.1" + "source": "https://github.com/BabDev/Pagerfanta/tree/v4.7.2" }, "funding": [ { @@ -2693,7 +2598,7 @@ "type": "github" } ], - "time": "2024-12-13T15:12:11+00:00" + "time": "2025-10-12T17:35:33+00:00" }, { "name": "psr/cache", @@ -3151,16 +3056,16 @@ }, { "name": "ramsey/collection", - "version": "2.0.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", "shasum": "" }, "require": { @@ -3168,25 +3073,22 @@ }, "require-dev": { "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.28.3", - "fakerphp/faker": "^1.21", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^1.0", - "mockery/mockery": "^1.5", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpcsstandards/phpcsutils": "^1.0.0-rc1", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18.4", - "ramsey/coding-standard": "^2.0.3", - "ramsey/conventional-commits": "^1.3", - "vimeo/psalm": "^5.4" + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" }, "type": "library", "extra": { @@ -3224,37 +3126,26 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.0.0" + "source": "https://github.com/ramsey/collection/tree/2.1.1" }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2022-12-31T21:50:55+00:00" + "time": "2025-03-22T05:38:12+00:00" }, { "name": "ramsey/uuid", - "version": "4.7.6", + "version": "4.9.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "91039bc1faa45ba123c4328958e620d382ec7088" + "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", - "reference": "91039bc1faa45ba123c4328958e620d382ec7088", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/81f941f6f729b1e3ceea61d9d014f8b6c6800440", + "reference": "81f941f6f729b1e3ceea61d9d014f8b6c6800440", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", - "ext-json": "*", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" }, @@ -3262,26 +3153,23 @@ "rhumsaa/uuid": "self.version" }, "require-dev": { - "captainhook/captainhook": "^5.10", + "captainhook/captainhook": "^5.25", "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.8", - "ergebnis/composer-normalize": "^2.15", - "mockery/mockery": "^1.3", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "ergebnis/composer-normalize": "^2.47", + "mockery/mockery": "^1.6", "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.2", - "php-mock/php-mock-mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^8.5 || ^9", - "ramsey/composer-repl": "^1.4", - "slevomat/coding-standard": "^8.4", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.9" + "php-mock/php-mock": "^2.6", + "php-mock/php-mock-mockery": "^1.5", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", @@ -3316,19 +3204,9 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.6" + "source": "https://github.com/ramsey/uuid/tree/4.9.1" }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", - "type": "tidelift" - } - ], - "time": "2024-04-27T21:32:50+00:00" + "time": "2025-09-04T20:59:21+00:00" }, { "name": "robrichards/xmlseclibs", @@ -3374,16 +3252,16 @@ }, { "name": "simplesamlphp/saml2", - "version": "v4.16.14", + "version": "v4.19.0", "source": { "type": "git", "url": "https://github.com/simplesamlphp/saml2.git", - "reference": "fe6c7bdda5e166e326d19d78f230d959ab51d01d" + "reference": "a1e25f1351591c2b007449735c0e62e016696576" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/simplesamlphp/saml2/zipball/fe6c7bdda5e166e326d19d78f230d959ab51d01d", - "reference": "fe6c7bdda5e166e326d19d78f230d959ab51d01d", + "url": "https://api.github.com/repos/simplesamlphp/saml2/zipball/a1e25f1351591c2b007449735c0e62e016696576", + "reference": "a1e25f1351591c2b007449735c0e62e016696576", "shasum": "" }, "require": { @@ -3429,22 +3307,22 @@ "description": "SAML2 PHP library from SimpleSAMLphp", "support": { "issues": "https://github.com/simplesamlphp/saml2/issues", - "source": "https://github.com/simplesamlphp/saml2/tree/v4.16.14" + "source": "https://github.com/simplesamlphp/saml2/tree/v4.19.0" }, - "time": "2024-12-01T22:26:30+00:00" + "time": "2025-09-05T23:47:51+00:00" }, { "name": "surfnet/stepup-bundle", - "version": "6.0.17", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/OpenConext/Stepup-bundle.git", - "reference": "0565138f262cc8c33864d1635ee90386f389cdc0" + "reference": "aa3203a0f39a55a71941682b34b5ae3b1defdbc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/OpenConext/Stepup-bundle/zipball/0565138f262cc8c33864d1635ee90386f389cdc0", - "reference": "0565138f262cc8c33864d1635ee90386f389cdc0", + "url": "https://api.github.com/repos/OpenConext/Stepup-bundle/zipball/aa3203a0f39a55a71941682b34b5ae3b1defdbc6", + "reference": "aa3203a0f39a55a71941682b34b5ae3b1defdbc6", "shasum": "" }, "require": { @@ -3454,26 +3332,28 @@ "guzzlehttp/guzzle": "^7.8", "monolog/monolog": "^3", "php": "^8.2", - "surfnet/stepup-saml-bundle": "^6.0", - "symfony/config": "^5.4|^6.3", - "symfony/dependency-injection": "^5.4|^6.3", - "symfony/form": "^5.4|^6.3", - "symfony/framework-bundle": "^5.4|^6.3", - "symfony/http-kernel": "^5.4|^6.3", - "symfony/twig-bridge": "^5.4|^6.3", - "symfony/validator": "^5.4|^6.3" + "surfnet/stepup-saml-bundle": "^7.0", + "symfony/config": "^6.3|^7.0", + "symfony/dependency-injection": "^6.3|^7.0", + "symfony/form": "^6.3|^7.0", + "symfony/framework-bundle": "^6.3|^7.0", + "symfony/http-kernel": "^6.3|^7.0", + "symfony/twig-bridge": "^6.3|^7.0", + "symfony/validator": "^6.3|^7.0" }, "require-dev": { + "irstea/phpcpd-shim": "^6.0", + "malukenho/docheader": "^1.1", "mockery/mockery": "^1.5", "overtrue/phplint": "*", "phpmd/phpmd": "^2.13", - "phpstan/phpstan": "^1.10", - "phpstan/phpstan-symfony": "^1.3", - "phpunit/phpunit": "^9.6", - "sebastian/phpcpd": "^6.0", - "slevomat/coding-standard": "^8.13", - "squizlabs/php_codesniffer": "^3.7.1", - "symfony/phpunit-bridge": "^5.4|^6.3" + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-symfony": "^2.0", + "phpunit/phpunit": "^11.0.0", + "rector/rector": "^2.2", + "slevomat/coding-standard": "^8.24", + "squizlabs/php_codesniffer": "^4.0", + "symfony/phpunit-bridge": "^7.3" }, "type": "library", "extra": { @@ -3481,6 +3361,10 @@ "includes": [ "./ci/qa/extension.neon" ] + }, + "symfony": { + "require": "7.0.*", + "allow-contrib": false } }, "autoload": { @@ -3500,50 +3384,53 @@ ], "support": { "issues": "https://github.com/OpenConext/Stepup-bundle/issues", - "source": "https://github.com/OpenConext/Stepup-bundle/tree/6.0.17" + "source": "https://github.com/OpenConext/Stepup-bundle/tree/7.0.0" }, - "time": "2024-05-24T13:37:46+00:00" + "time": "2025-11-17T12:11:21+00:00" }, { "name": "surfnet/stepup-saml-bundle", - "version": "6.1.0", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/OpenConext/Stepup-saml-bundle.git", - "reference": "61eeee56e5f976c9dbafd6fe46b2cc3631de2645" + "reference": "175cd2bb64c6235285f5b5fcb561389e66d4264e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/OpenConext/Stepup-saml-bundle/zipball/61eeee56e5f976c9dbafd6fe46b2cc3631de2645", - "reference": "61eeee56e5f976c9dbafd6fe46b2cc3631de2645", + "url": "https://api.github.com/repos/OpenConext/Stepup-saml-bundle/zipball/175cd2bb64c6235285f5b5fcb561389e66d4264e", + "reference": "175cd2bb64c6235285f5b5fcb561389e66d4264e", "shasum": "" }, "require": { "ext-dom": "*", "ext-openssl": "*", "php": "^8.1", + "psr/log": "^3.0", "robrichards/xmlseclibs": "^3.1.1", "simplesamlphp/saml2": "^4.6", - "symfony/dependency-injection": "^6.3", - "symfony/framework-bundle": "^6.3", - "symfony/security-bundle": "^6.3", - "symfony/templating": "^6.3", + "symfony/dependency-injection": "^6.3|^7.0", + "symfony/framework-bundle": "^6.3|^7.0", + "symfony/security-bundle": "^6.3|^7.0", + "symfony/templating": "^6.3|7.0", "twig/twig": "^3" }, "require-dev": { + "ext-libxml": "*", "ext-zlib": "*", - "mbhsoft/phpunit-xsdvalidation": "^3.0", + "irstea/phpcpd-shim": "^6.0", + "malukenho/docheader": "^1.1", "mockery/mockery": "^1.5", "overtrue/phplint": "*", "phpmd/phpmd": "^2.6", - "phpstan/extension-installer": "^1.3", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.5", - "psr/log": "~1.0", - "sebastian/exporter": "^4.0.5", - "sebastian/phpcpd": "^6.0", - "squizlabs/php_codesniffer": "^3.7.1", - "symfony/phpunit-bridge": "^6.3" + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpunit/phpunit": "^11.0.0", + "rector/rector": "^2.2", + "sebastian/exporter": "^6.3", + "slevomat/coding-standard": "^8.24", + "squizlabs/php_codesniffer": "^4.0", + "symfony/phpunit-bridge": "^7.3.4" }, "type": "symfony-bundle", "extra": { @@ -3562,7 +3449,7 @@ "license": [ "Apache-2.0" ], - "description": "A Symfony 6 bundle that integrates the simplesamlphp\\saml2 library with Symfony.", + "description": "A Symfony 7 bundle that integrates the simplesamlphp\\saml2 library with Symfony.", "keywords": [ "SAML2", "saml", @@ -3572,34 +3459,34 @@ ], "support": { "issues": "https://github.com/OpenConext/Stepup-saml-bundle/issues", - "source": "https://github.com/OpenConext/Stepup-saml-bundle/tree/6.1.0" + "source": "https://github.com/OpenConext/Stepup-saml-bundle/tree/7.0.0" }, - "time": "2024-06-24T09:29:13+00:00" + "time": "2025-11-17T11:27:41+00:00" }, { "name": "symfony/asset", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "2466c17d61d14539cddf77e57ebb9cc971185302" + "reference": "0f7bccb9ffa1f373cbd659774d90629b2773464f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/2466c17d61d14539cddf77e57ebb9cc971185302", - "reference": "2466c17d61d14539cddf77e57ebb9cc971185302", + "url": "https://api.github.com/repos/symfony/asset/zipball/0f7bccb9ffa1f373cbd659774d90629b2773464f", + "reference": "0f7bccb9ffa1f373cbd659774d90629b2773464f", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "conflict": { - "symfony/http-foundation": "<5.4" + "symfony/http-foundation": "<6.4" }, "require-dev": { - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0" + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -3627,7 +3514,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset/tree/v6.4.13" + "source": "https://github.com/symfony/asset/tree/v7.4.0" }, "funding": [ { @@ -3638,40 +3525,47 @@ "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:07:50+00:00" + "time": "2025-08-04T07:05:15+00:00" }, { "name": "symfony/cache", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "b209751ed25f735ea90ca4c9c969d9413a17dfee" + "reference": "a7a1325a5de2e54ddb45fda002ff528162e48293" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/b209751ed25f735ea90ca4c9c969d9413a17dfee", - "reference": "b209751ed25f735ea90ca4c9c969d9413a17dfee", + "url": "https://api.github.com/repos/symfony/cache/zipball/a7a1325a5de2e54ddb45fda002ff528162e48293", + "reference": "a7a1325a5de2e54ddb45fda002ff528162e48293", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/cache": "^2.0|^3.0", "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^2.5|^3", + "symfony/cache-contracts": "^3.6", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.3.6|^7.0" + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "conflict": { - "doctrine/dbal": "<2.13.1", - "symfony/dependency-injection": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/var-dumper": "<5.4" + "doctrine/dbal": "<3.6", + "ext-redis": "<6.1", + "ext-relay": "<0.12.1", + "symfony/dependency-injection": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/var-dumper": "<6.4" }, "provide": { "psr/cache-implementation": "2.0|3.0", @@ -3680,15 +3574,16 @@ }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/filesystem": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -3723,7 +3618,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.18" + "source": "https://github.com/symfony/cache/tree/v7.4.0" }, "funding": [ { @@ -3734,25 +3629,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-01-22T14:13:52+00:00" + "time": "2025-11-16T10:14:42+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b" + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", - "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/5d68a57d66910405e5c0b63d6f0af941e66fc868", + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868", "shasum": "" }, "require": { @@ -3766,7 +3665,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -3799,7 +3698,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/cache-contracts/tree/v3.6.0" }, "funding": [ { @@ -3815,24 +3714,24 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-03-13T15:25:07+00:00" }, { "name": "symfony/clock", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "b2bf55c4dd115003309eafa87ee7df9ed3dde81b" + "reference": "9169f24776edde469914c1e7a1442a50f7a4e110" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/b2bf55c4dd115003309eafa87ee7df9ed3dde81b", - "reference": "b2bf55c4dd115003309eafa87ee7df9ed3dde81b", + "url": "https://api.github.com/repos/symfony/clock/zipball/9169f24776edde469914c1e7a1442a50f7a4e110", + "reference": "9169f24776edde469914c1e7a1442a50f7a4e110", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/clock": "^1.0", "symfony/polyfill-php83": "^1.28" }, @@ -3873,7 +3772,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v6.4.13" + "source": "https://github.com/symfony/clock/tree/v7.4.0" }, "funding": [ { @@ -3884,43 +3783,47 @@ "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-25T14:18:03+00:00" + "time": "2025-11-12T15:39:26+00:00" }, { "name": "symfony/config", - "version": "v6.4.14", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef" + "reference": "f76c74e93bce2b9285f2dad7fbd06fa8182a7a41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/4e55e7e4ffddd343671ea972216d4509f46c22ef", - "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef", + "url": "https://api.github.com/repos/symfony/config/zipball/f76c74e93bce2b9285f2dad7fbd06fa8182a7a41", + "reference": "f76c74e93bce2b9285f2dad7fbd06fa8182a7a41", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^7.1|^8.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<5.4", + "symfony/finder": "<6.4", "symfony/service-contracts": "<2.5" }, "require-dev": { - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -3948,7 +3851,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.4.14" + "source": "https://github.com/symfony/config/tree/v7.4.0" }, "funding": [ { @@ -3959,56 +3862,60 @@ "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-04T11:33:53+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/console", - "version": "v6.4.17", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "799445db3f15768ecc382ac5699e6da0520a0a04" + "reference": "0bc0f45254b99c58d45a8fbf9fb955d46cbd1bb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/799445db3f15768ecc382ac5699e6da0520a0a04", - "reference": "799445db3f15768ecc382ac5699e6da0520a0a04", + "url": "https://api.github.com/repos/symfony/console/zipball/0bc0f45254b99c58d45a8fbf9fb955d46cbd1bb8", + "reference": "0bc0f45254b99c58d45a8fbf9fb955d46cbd1bb8", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^7.2|^8.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4042,7 +3949,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.17" + "source": "https://github.com/symfony/console/tree/v7.4.0" }, "funding": [ { @@ -4053,49 +3960,52 @@ "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-12-07T12:07:30+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.16", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "7a379d8871f6a36f01559c14e11141cc02eb8dc8" + "reference": "3972ca7bbd649467b21a54870721b9e9f3652f9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/7a379d8871f6a36f01559c14e11141cc02eb8dc8", - "reference": "7a379d8871f6a36f01559c14e11141cc02eb8dc8", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/3972ca7bbd649467b21a54870721b9e9f3652f9b", + "reference": "3972ca7bbd649467b21a54870721b9e9f3652f9b", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/service-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.2.10|^7.0" + "symfony/service-contracts": "^3.6", + "symfony/var-exporter": "^6.4.20|^7.2.5|^8.0" }, "conflict": { "ext-psr": "<1.1|>=2", - "symfony/config": "<6.1", - "symfony/finder": "<5.4", - "symfony/proxy-manager-bridge": "<6.3", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/finder": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "psr/container-implementation": "1.1|2.0", "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/config": "^6.1|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4123,7 +4033,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.4.16" + "source": "https://github.com/symfony/dependency-injection/tree/v7.4.0" }, "funding": [ { @@ -4134,25 +4044,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-11-25T14:52:46+00:00" + "time": "2025-11-27T13:27:24+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": { @@ -4165,7 +4079,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -4190,7 +4104,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": [ { @@ -4206,71 +4120,72 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/doctrine-bridge", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "fd0094d4648bf6bbdafcd1f0c8aafb6e93d735e6" + "reference": "7b511891a81ca14e993b6c88fd35d6bf656085f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/fd0094d4648bf6bbdafcd1f0c8aafb6e93d735e6", - "reference": "fd0094d4648bf6bbdafcd1f0c8aafb6e93d735e6", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/7b511891a81ca14e993b6c88fd35d6bf656085f7", + "reference": "7b511891a81ca14e993b6c88fd35d6bf656085f7", "shasum": "" }, "require": { - "doctrine/event-manager": "^1.2|^2", - "doctrine/persistence": "^2.5|^3.1|^4", - "php": ">=8.1", + "doctrine/event-manager": "^2", + "doctrine/persistence": "^3.1|^4", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "doctrine/dbal": "<2.13.1", + "doctrine/collections": "<1.8", + "doctrine/dbal": "<3.6", "doctrine/lexer": "<1.1", "doctrine/orm": "<2.15", - "symfony/cache": "<5.4", - "symfony/dependency-injection": "<6.2", - "symfony/form": "<5.4.38|>=6,<6.4.6|>=7,<7.0.6", - "symfony/http-foundation": "<6.3", - "symfony/http-kernel": "<6.2", - "symfony/lock": "<6.3", - "symfony/messenger": "<5.4", - "symfony/property-info": "<5.4", - "symfony/security-bundle": "<5.4", + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/form": "<6.4.6|>=7,<7.0.6", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/lock": "<6.4", + "symfony/messenger": "<6.4", + "symfony/property-info": "<6.4", + "symfony/security-bundle": "<6.4", "symfony/security-core": "<6.4", - "symfony/validator": "<6.4" + "symfony/validator": "<7.4" }, "require-dev": { - "doctrine/collections": "^1.0|^2.0", + "doctrine/collections": "^1.8|^2.0", "doctrine/data-fixtures": "^1.1|^2", - "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/dbal": "^3.6|^4", "doctrine/orm": "^2.15|^3", "psr/log": "^1|^2|^3", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^6.2|^7.0", - "symfony/doctrine-messenger": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/form": "^5.4.38|^6.4.6|^7.0.6", - "symfony/http-kernel": "^6.3|^7.0", - "symfony/lock": "^6.3|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/proxy-manager-bridge": "^6.4", - "symfony/security-core": "^6.4|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/doctrine-messenger": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/form": "^7.2|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/security-core": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/type-info": "^7.1.8|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "symfony-bridge", "autoload": { @@ -4298,7 +4213,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.18" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.4.0" }, "funding": [ { @@ -4309,40 +4224,47 @@ "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-01-25T08:04:58+00:00" + "time": "2025-11-04T03:05:49+00:00" }, { "name": "symfony/error-handler", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "e8d3b5b1975e67812a54388b1ba8e9ec28eb770e" + "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/e8d3b5b1975e67812a54388b1ba8e9ec28eb770e", - "reference": "e8d3b5b1975e67812a54388b1ba8e9ec28eb770e", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/48be2b0653594eea32dcef130cca1c811dcf25c2", + "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/polyfill-php85": "^1.32", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "conflict": { "symfony/deprecation-contracts": "<2.5", "symfony/http-kernel": "<6.4" }, "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^5.4|^6.0|^7.0" + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -4373,7 +4295,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.18" + "source": "https://github.com/symfony/error-handler/tree/v7.4.0" }, "funding": [ { @@ -4384,33 +4306,37 @@ "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-01-06T09:38:16+00:00" + "time": "2025-11-05T14:29:59+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e" + "reference": "9dddcddff1ef974ad87b3708e4b442dc38b2261d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e", - "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9dddcddff1ef974ad87b3708e4b442dc38b2261d", + "reference": "9dddcddff1ef974ad87b3708e4b442dc38b2261d", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -4419,13 +4345,14 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/stopwatch": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4453,7 +4380,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.13" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.0" }, "funding": [ { @@ -4464,25 +4391,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-25T14:18:03+00:00" + "time": "2025-10-28T09:38:46+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", "shasum": "" }, "require": { @@ -4496,7 +4427,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -4529,7 +4460,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" }, "funding": [ { @@ -4545,25 +4476,25 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/expression-language", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "3524904fb026356a5230cd197f9a4e6a61e0e7df" + "reference": "8b9bbbb8c71f79a09638f6ea77c531e511139efa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/3524904fb026356a5230cd197f9a4e6a61e0e7df", - "reference": "3524904fb026356a5230cd197f9a4e6a61e0e7df", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/8b9bbbb8c71f79a09638f6ea77c531e511139efa", + "reference": "8b9bbbb8c71f79a09638f6ea77c531e511139efa", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/cache": "^5.4|^6.0|^7.0", + "php": ">=8.2", + "symfony/cache": "^6.4|^7.0|^8.0", "symfony/deprecation-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3" }, @@ -4593,7 +4524,7 @@ "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/expression-language/tree/v6.4.13" + "source": "https://github.com/symfony/expression-language/tree/v7.4.0" }, "funding": [ { @@ -4604,34 +4535,38 @@ "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-09T08:40:40+00:00" + "time": "2025-11-12T15:39:26+00:00" }, { "name": "symfony/filesystem", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3" + "reference": "d551b38811096d0be9c4691d406991b47c0c630a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d551b38811096d0be9c4691d406991b47c0c630a", + "reference": "d551b38811096d0be9c4691d406991b47c0c630a", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^5.4|^6.4|^7.0" + "symfony/process": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4659,7 +4594,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.13" + "source": "https://github.com/symfony/filesystem/tree/v7.4.0" }, "funding": [ { @@ -4670,32 +4605,36 @@ "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:07:50+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/finder", - "version": "v6.4.17", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7" + "reference": "340b9ed7320570f319028a2cbec46d40535e94bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", - "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", + "url": "https://api.github.com/repos/symfony/finder/zipball/340b9ed7320570f319028a2cbec46d40535e94bd", + "reference": "340b9ed7320570f319028a2cbec46d40535e94bd", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0|^7.0" + "symfony/filesystem": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4723,7 +4662,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.17" + "source": "https://github.com/symfony/finder/tree/v7.4.0" }, "funding": [ { @@ -4734,40 +4673,45 @@ "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-12-29T13:51:37+00:00" + "time": "2025-11-05T05:42:40+00:00" }, { "name": "symfony/flex", - "version": "v2.4.7", + "version": "v2.10.0", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402" + "reference": "9cd384775973eabbf6e8b05784dda279fc67c28d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/92f4fba342161ff36072bd3b8e0b3c6c23160402", - "reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402", + "url": "https://api.github.com/repos/symfony/flex/zipball/9cd384775973eabbf6e8b05784dda279fc67c28d", + "reference": "9cd384775973eabbf6e8b05784dda279fc67c28d", "shasum": "" }, "require": { "composer-plugin-api": "^2.1", - "php": ">=8.0" + "php": ">=8.1" }, "conflict": { - "composer/semver": "<1.7.2" + "composer/semver": "<1.7.2", + "symfony/dotenv": "<5.4" }, "require-dev": { "composer/composer": "^2.1", - "symfony/dotenv": "^5.4|^6.0", - "symfony/filesystem": "^5.4|^6.0", - "symfony/phpunit-bridge": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0" + "symfony/dotenv": "^6.4|^7.4|^8.0", + "symfony/filesystem": "^6.4|^7.4|^8.0", + "symfony/phpunit-bridge": "^6.4|^7.4|^8.0", + "symfony/process": "^6.4|^7.4|^8.0" }, "type": "composer-plugin", "extra": { @@ -4791,7 +4735,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v2.4.7" + "source": "https://github.com/symfony/flex/tree/v2.10.0" }, "funding": [ { @@ -4802,65 +4746,71 @@ "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-07T08:51:54+00:00" + "time": "2025-11-16T09:38:19+00:00" }, { "name": "symfony/form", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "0fe17f90af23908ddc11dc23507db98e66572046" + "reference": "00b8d61709b323749aef317950abd276f309597b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/0fe17f90af23908ddc11dc23507db98e66572046", - "reference": "0fe17f90af23908ddc11dc23507db98e66572046", + "url": "https://api.github.com/repos/symfony/form/zipball/00b8d61709b323749aef317950abd276f309597b", + "reference": "00b8d61709b323749aef317950abd276f309597b", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/options-resolver": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/options-resolver": "^7.3|^8.0", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-icu": "^1.21", "symfony/polyfill-mbstring": "~1.0", - "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-access": "^6.4|^7.0|^8.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", - "symfony/doctrine-bridge": "<5.4.21|>=6,<6.2.7", - "symfony/error-handler": "<5.4", - "symfony/framework-bundle": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/error-handler": "<6.4", + "symfony/framework-bundle": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/intl": "<7.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.3" + "symfony/twig-bridge": "<6.4" }, "require-dev": { "doctrine/collections": "^1.0|^2.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/html-sanitizer": "^6.1|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", - "symfony/security-core": "^6.2|^7.0", - "symfony/security-csrf": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3", - "symfony/uid": "^5.4|^6.0|^7.0", - "symfony/validator": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/html-sanitizer": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^7.4|^8.0", + "symfony/security-core": "^6.4|^7.0|^8.0", + "symfony/security-csrf": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4.3|^7.0.3|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4.12|^7.1.5|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4888,7 +4838,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v6.4.13" + "source": "https://github.com/symfony/form/tree/v7.4.0" }, "funding": [ { @@ -4899,117 +4849,126 @@ "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-09T08:40:40+00:00" + "time": "2025-11-20T12:20:24+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "91df8ee37543ebc01756c9e5eaf94d1878ff1ccd" + "reference": "3c62a3437267ac55bcd40175689c74772250e943" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/91df8ee37543ebc01756c9e5eaf94d1878ff1ccd", - "reference": "91df8ee37543ebc01756c9e5eaf94d1878ff1ccd", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/3c62a3437267ac55bcd40175689c74772250e943", + "reference": "3c62a3437267ac55bcd40175689c74772250e943", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", "ext-xml": "*", - "php": ">=8.1", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/config": "^6.1|^7.0", - "symfony/dependency-injection": "^6.4.12|^7.0", + "php": ">=8.2", + "symfony/cache": "^6.4.12|^7.0|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.1|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4", + "symfony/error-handler": "^7.3|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/filesystem": "^7.1|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", "symfony/polyfill-mbstring": "~1.0", - "symfony/routing": "^6.4|^7.0" + "symfony/polyfill-php85": "^1.32", + "symfony/routing": "^7.4|^8.0" }, "conflict": { - "doctrine/annotations": "<1.13.1", "doctrine/persistence": "<1.3", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/asset": "<5.4", + "symfony/asset": "<6.4", "symfony/asset-mapper": "<6.4", - "symfony/clock": "<6.3", - "symfony/console": "<5.4|>=7.0", + "symfony/clock": "<6.4", + "symfony/console": "<6.4", "symfony/dom-crawler": "<6.4", - "symfony/dotenv": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<6.3", - "symfony/lock": "<5.4", - "symfony/mailer": "<5.4", - "symfony/messenger": "<6.3", + "symfony/dotenv": "<6.4", + "symfony/form": "<7.4", + "symfony/http-client": "<6.4", + "symfony/lock": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<7.4", "symfony/mime": "<6.4", - "symfony/property-access": "<5.4", - "symfony/property-info": "<5.4", - "symfony/runtime": "<5.4.45|>=6.0,<6.4.13|>=7.0,<7.1.6", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "symfony/runtime": "<6.4.13|>=7.0,<7.1.6", "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", - "symfony/security-core": "<5.4", - "symfony/security-csrf": "<5.4", - "symfony/serializer": "<6.4", - "symfony/stopwatch": "<5.4", - "symfony/translation": "<6.4", - "symfony/twig-bridge": "<5.4", - "symfony/twig-bundle": "<5.4", + "symfony/security-core": "<6.4", + "symfony/security-csrf": "<7.2", + "symfony/serializer": "<7.2.5", + "symfony/stopwatch": "<6.4", + "symfony/translation": "<7.3", + "symfony/twig-bridge": "<6.4", + "symfony/twig-bundle": "<6.4", "symfony/validator": "<6.4", "symfony/web-profiler-bundle": "<6.4", - "symfony/workflow": "<6.4" + "symfony/webhook": "<7.2", + "symfony/workflow": "<7.4" }, "require-dev": { - "doctrine/annotations": "^1.13.1|^2", "doctrine/persistence": "^1.3|^2|^3", "dragonmantank/cron-expression": "^3.1", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "seld/jsonlint": "^1.10", - "symfony/asset": "^5.4|^6.0|^7.0", - "symfony/asset-mapper": "^6.4|^7.0", - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/clock": "^6.2|^7.0", - "symfony/console": "^5.4.9|^6.0.9|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", - "symfony/dom-crawler": "^6.4|^7.0", - "symfony/dotenv": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/form": "^5.4|^6.0|^7.0", - "symfony/html-sanitizer": "^6.1|^7.0", - "symfony/http-client": "^6.3|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/mailer": "^5.4|^6.0|^7.0", - "symfony/messenger": "^6.3|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/notifier": "^5.4|^6.0|^7.0", + "symfony/asset": "^6.4|^7.0|^8.0", + "symfony/asset-mapper": "^6.4|^7.0|^8.0", + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/dom-crawler": "^6.4|^7.0|^8.0", + "symfony/dotenv": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/form": "^7.4|^8.0", + "symfony/html-sanitizer": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/json-streamer": "^7.3|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/mailer": "^6.4|^7.0|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/notifier": "^6.4|^7.0|^8.0", + "symfony/object-mapper": "^7.3|^8.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0", - "symfony/scheduler": "^6.4.4|^7.0.4", - "symfony/security-bundle": "^5.4|^6.0|^7.0", - "symfony/semaphore": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/string": "^5.4|^6.0|^7.0", - "symfony/translation": "^6.4|^7.0", - "symfony/twig-bundle": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/web-link": "^5.4|^6.0|^7.0", - "symfony/workflow": "^6.4|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0", - "twig/twig": "^2.10|^3.0.4" + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0", + "symfony/runtime": "^6.4.13|^7.1.6|^8.0", + "symfony/scheduler": "^6.4.4|^7.0.4|^8.0", + "symfony/security-bundle": "^6.4|^7.0|^8.0", + "symfony/semaphore": "^6.4|^7.0|^8.0", + "symfony/serializer": "^7.2.5|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/string": "^6.4|^7.0|^8.0", + "symfony/translation": "^7.3|^8.0", + "symfony/twig-bundle": "^6.4|^7.0|^8.0", + "symfony/type-info": "^7.1.8|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/web-link": "^6.4|^7.0|^8.0", + "symfony/webhook": "^7.2|^8.0", + "symfony/workflow": "^7.4|^8.0", + "symfony/yaml": "^7.3|^8.0", + "twig/twig": "^3.12" }, "type": "symfony-bundle", "autoload": { @@ -5037,7 +4996,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v6.4.18" + "source": "https://github.com/symfony/framework-bundle/tree/v7.4.0" }, "funding": [ { @@ -5048,45 +5007,50 @@ "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-01-28T18:47:02+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "d0492d6217e5ab48f51fca76f64cf8e78919d0db" + "reference": "769c1720b68e964b13b58529c17d4a385c62167b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d0492d6217e5ab48f51fca76f64cf8e78919d0db", - "reference": "d0492d6217e5ab48f51fca76f64cf8e78919d0db", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/769c1720b68e964b13b58529c17d4a385c62167b", + "reference": "769c1720b68e964b13b58529c17d4a385c62167b", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php83": "^1.27" + "symfony/polyfill-mbstring": "^1.1" }, "conflict": { + "doctrine/dbal": "<3.6", "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4.12|^7.1.5", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0" + "symfony/cache": "^6.4.12|^7.1.5|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -5114,7 +5078,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.18" + "source": "https://github.com/symfony/http-foundation/tree/v7.4.0" }, "funding": [ { @@ -5125,82 +5089,87 @@ "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-01-09T15:48:56+00:00" + "time": "2025-11-13T08:49:24+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "fca7197bfe9e99dfae7fb1ad3f7f5bd9ef80e1b7" + "reference": "7348193cd384495a755554382e4526f27c456085" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/fca7197bfe9e99dfae7fb1ad3f7f5bd9ef80e1b7", - "reference": "fca7197bfe9e99dfae7fb1ad3f7f5bd9ef80e1b7", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7348193cd384495a755554382e4526f27c456085", + "reference": "7348193cd384495a755554382e4526f27c456085", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^7.3|^8.0", + "symfony/http-foundation": "^7.4|^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.4", - "symfony/config": "<6.1", - "symfony/console": "<5.4", + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<5.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/flex": "<2.10", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/translation": "<5.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<5.4", + "symfony/twig-bridge": "<6.4", "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.3", - "twig/twig": "<2.13" + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.12" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/clock": "^6.2|^7.0", - "symfony/config": "^6.1|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/dom-crawler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/dom-crawler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4.5|^6.0.5|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4.4|^7.0.4", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^7.1|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/serializer": "^7.1|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.4|^7.0", - "symfony/var-exporter": "^6.2|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" }, "type": "library", "autoload": { @@ -5228,7 +5197,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.18" + "source": "https://github.com/symfony/http-kernel/tree/v7.4.0" }, "funding": [ { @@ -5239,34 +5208,41 @@ "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-01-29T07:25:58+00:00" + "time": "2025-11-27T13:38:24+00:00" }, { "name": "symfony/intl", - "version": "v6.4.15", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "b1d5e8d82615b60f229216edfee0b59e2ef66da6" + "reference": "2fa074de6c7faa6b54f2891fc22708f42245ed5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/b1d5e8d82615b60f229216edfee0b59e2ef66da6", - "reference": "b1d5e8d82615b60f229216edfee0b59e2ef66da6", + "url": "https://api.github.com/repos/symfony/intl/zipball/2fa074de6c7faa6b54f2891fc22708f42245ed5c", + "reference": "2fa074de6c7faa6b54f2891fc22708f42245ed5c", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/string": "<7.1" }, "require-dev": { - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/filesystem": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -5311,7 +5287,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v6.4.15" + "source": "https://github.com/symfony/intl/tree/v7.4.0" }, "funding": [ { @@ -5322,48 +5298,52 @@ "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-08T15:28:48+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "e93a6ae2767d7f7578c2b7961d9d8e27580b2b11" + "reference": "a3d9eea8cfa467ece41f0f54ba28185d74bd53fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/e93a6ae2767d7f7578c2b7961d9d8e27580b2b11", - "reference": "e93a6ae2767d7f7578c2b7961d9d8e27580b2b11", + "url": "https://api.github.com/repos/symfony/mailer/zipball/a3d9eea8cfa467ece41f0f54ba28185d74bd53fd", + "reference": "a3d9eea8cfa467ece41f0f54ba28185d74bd53fd", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.1", + "php": ">=8.2", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/mime": "^6.2|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/mime": "^7.2|^8.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", - "symfony/messenger": "<6.2", - "symfony/mime": "<6.2", - "symfony/twig-bridge": "<6.2.1" + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/messenger": "^6.2|^7.0", - "symfony/twig-bridge": "^6.2|^7.0" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/twig-bridge": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -5391,7 +5371,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.18" + "source": "https://github.com/symfony/mailer/tree/v7.4.0" }, "funding": [ { @@ -5402,29 +5382,33 @@ "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-01-24T15:27:15+00:00" + "time": "2025-11-21T15:26:00+00:00" }, { "name": "symfony/mime", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "917d77981eb1ea963608d5cda4d9c0cf72eaa68e" + "reference": "bdb02729471be5d047a3ac4a69068748f1a6be7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/917d77981eb1ea963608d5cda4d9c0cf72eaa68e", - "reference": "917d77981eb1ea963608d5cda4d9c0cf72eaa68e", + "url": "https://api.github.com/repos/symfony/mime/zipball/bdb02729471be5d047a3ac4a69068748f1a6be7a", + "reference": "bdb02729471be5d047a3ac4a69068748f1a6be7a", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" @@ -5433,18 +5417,18 @@ "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4", + "symfony/mailer": "<6.4", "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.4|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3" + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4.3|^7.0.3|^8.0" }, "type": "library", "autoload": { @@ -5476,7 +5460,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.18" + "source": "https://github.com/symfony/mime/tree/v7.4.0" }, "funding": [ { @@ -5487,47 +5471,51 @@ "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-01-23T13:10:52+00:00" + "time": "2025-11-16T10:14:42+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "9d14621e59f22c2b6d030d92d37ffe5ae1e60452" + "reference": "189d16466ff83d9c51fad26382bf0beeb41bda21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/9d14621e59f22c2b6d030d92d37ffe5ae1e60452", - "reference": "9d14621e59f22c2b6d030d92d37ffe5ae1e60452", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/189d16466ff83d9c51fad26382bf0beeb41bda21", + "reference": "189d16466ff83d9c51fad26382bf0beeb41bda21", "shasum": "" }, "require": { - "monolog/monolog": "^1.25.1|^2|^3", - "php": ">=8.1", + "monolog/monolog": "^3", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/console": "<5.4", - "symfony/http-foundation": "<5.4", - "symfony/security-core": "<5.4" + "symfony/console": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/security-core": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/mailer": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/security-core": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/mailer": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/security-core": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "symfony-bridge", "autoload": { @@ -5555,7 +5543,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v6.4.13" + "source": "https://github.com/symfony/monolog-bridge/tree/v7.4.0" }, "funding": [ { @@ -5566,53 +5554,52 @@ "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-14T08:49:08+00:00" + "time": "2025-11-01T09:17:33+00:00" }, { "name": "symfony/monolog-bundle", - "version": "v3.10.0", + "version": "v3.11.0", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bundle.git", - "reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181" + "reference": "e12eb92655b234cd50c21cda648088847a7ec777" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181", - "reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/e12eb92655b234cd50c21cda648088847a7ec777", + "reference": "e12eb92655b234cd50c21cda648088847a7ec777", "shasum": "" }, "require": { + "composer-runtime-api": "^2.0", "monolog/monolog": "^1.25.1 || ^2.0 || ^3.0", - "php": ">=7.2.5", - "symfony/config": "^5.4 || ^6.0 || ^7.0", - "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", - "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", - "symfony/monolog-bridge": "^5.4 || ^6.0 || ^7.0" + "php": ">=8.1", + "symfony/config": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/http-kernel": "^6.4 || ^7.0", + "symfony/monolog-bridge": "^6.4 || ^7.0", + "symfony/polyfill-php84": "^1.30" }, "require-dev": { - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/phpunit-bridge": "^6.3 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + "symfony/console": "^6.4 || ^7.0", + "symfony/phpunit-bridge": "^7.3.3", + "symfony/yaml": "^6.4 || ^7.0" }, "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Bundle\\MonologBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Bundle\\MonologBundle\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5636,7 +5623,7 @@ ], "support": { "issues": "https://github.com/symfony/monolog-bundle/issues", - "source": "https://github.com/symfony/monolog-bundle/tree/v3.10.0" + "source": "https://github.com/symfony/monolog-bundle/tree/v3.11.0" }, "funding": [ { @@ -5647,29 +5634,33 @@ "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": "2023-11-06T17:08:13+00:00" + "time": "2025-11-27T09:16:19+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.4.16", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "368128ad168f20e22c32159b9f761e456cec0c78" + "reference": "b38026df55197f9e39a44f3215788edf83187b80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/368128ad168f20e22c32159b9f761e456cec0c78", - "reference": "368128ad168f20e22c32159b9f761e456cec0c78", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b38026df55197f9e39a44f3215788edf83187b80", + "reference": "b38026df55197f9e39a44f3215788edf83187b80", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -5703,7 +5694,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.4.16" + "source": "https://github.com/symfony/options-resolver/tree/v7.4.0" }, "funding": [ { @@ -5714,36 +5705,40 @@ "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-20T10:57:02+00:00" + "time": "2025-11-12T15:39:26+00:00" }, { "name": "symfony/password-hasher", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/password-hasher.git", - "reference": "e97a1b31f60b8bdfc1fdedab4398538da9441d47" + "reference": "aa075ce6f54fe931f03c1e382597912f4fd94e1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/password-hasher/zipball/e97a1b31f60b8bdfc1fdedab4398538da9441d47", - "reference": "e97a1b31f60b8bdfc1fdedab4398538da9441d47", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/aa075ce6f54fe931f03c1e382597912f4fd94e1e", + "reference": "aa075ce6f54fe931f03c1e382597912f4fd94e1e", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "conflict": { - "symfony/security-core": "<5.4" + "symfony/security-core": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/security-core": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/security-core": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -5775,7 +5770,7 @@ "password" ], "support": { - "source": "https://github.com/symfony/password-hasher/tree/v6.4.13" + "source": "https://github.com/symfony/password-hasher/tree/v7.4.0" }, "funding": [ { @@ -5786,16 +5781,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-25T14:18:03+00:00" + "time": "2025-08-13T16:46:49+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", @@ -5854,7 +5853,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": [ { @@ -5865,6 +5864,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" @@ -5874,16 +5877,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": { @@ -5932,7 +5935,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": [ { @@ -5943,25 +5946,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": "2025-06-27T09:58:17+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78" + "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", - "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c", + "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c", "shasum": "" }, "require": { @@ -6016,7 +6023,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.33.0" }, "funding": [ { @@ -6027,25 +6034,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": "2025-06-20T22:24:30+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", - "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", "shasum": "" }, "require": { @@ -6099,7 +6110,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" }, "funding": [ { @@ -6110,16 +6121,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": "2024-09-10T14:38:51+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", @@ -6180,7 +6195,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": [ { @@ -6191,6 +6206,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" @@ -6200,19 +6219,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": { @@ -6260,7 +6280,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": [ { @@ -6271,25 +6291,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/polyfill-php80", - "version": "v1.31.0", + "name": "symfony/polyfill-php83", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", "shasum": "" }, "require": { @@ -6307,7 +6331,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Polyfill\\Php83\\": "" }, "classmap": [ "Resources/stubs" @@ -6319,9 +6343,85 @@ ], "authors": [ { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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-07-08T02:45:35+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -6331,7 +6431,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -6340,7 +6440,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" }, "funding": [ { @@ -6351,25 +6451,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": "2025-06-24T13:30:11+00:00" }, { - "name": "symfony/polyfill-php83", - "version": "v1.31.0", + "name": "symfony/polyfill-php85", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", + "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", "shasum": "" }, "require": { @@ -6387,7 +6491,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" + "Symfony\\Polyfill\\Php85\\": "" }, "classmap": [ "Resources/stubs" @@ -6407,7 +6511,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -6416,7 +6520,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.33.0" }, "funding": [ { @@ -6427,34 +6531,38 @@ "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-23T16:12:55+00:00" }, { "name": "symfony/property-access", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "80e0378f2f058b60d87dedc3c760caec882e992c" + "reference": "537626149d2910ca43eb9ce465654366bf4442f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/80e0378f2f058b60d87dedc3c760caec882e992c", - "reference": "80e0378f2f058b60d87dedc3c760caec882e992c", + "url": "https://api.github.com/repos/symfony/property-access/zipball/537626149d2910ca43eb9ce465654366bf4442f4", + "reference": "537626149d2910ca43eb9ce465654366bf4442f4", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/property-info": "^5.4|^6.0|^7.0" + "php": ">=8.2", + "symfony/property-info": "^6.4|^7.0|^8.0" }, "require-dev": { - "symfony/cache": "^5.4|^6.0|^7.0" + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4.1|^7.0.1|^8.0" }, "type": "library", "autoload": { @@ -6493,7 +6601,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v6.4.18" + "source": "https://github.com/symfony/property-access/tree/v7.4.0" }, "funding": [ { @@ -6504,46 +6612,50 @@ "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-12-16T14:42:05+00:00" + "time": "2025-09-08T21:14:32+00:00" }, { "name": "symfony/property-info", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "94d18e5cc11a37fd92856d38b61d9cdf72536a1e" + "reference": "c3c686e3d3a33a99f6967e69d6d5832acb7c25a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/94d18e5cc11a37fd92856d38b61d9cdf72536a1e", - "reference": "94d18e5cc11a37fd92856d38b61d9cdf72536a1e", + "url": "https://api.github.com/repos/symfony/property-info/zipball/c3c686e3d3a33a99f6967e69d6d5832acb7c25a1", + "reference": "c3c686e3d3a33a99f6967e69d6d5832acb7c25a1", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/string": "^5.4|^6.0|^7.0" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0|^8.0", + "symfony/type-info": "^7.3.5|^8.0" }, "conflict": { - "doctrine/annotations": "<1.12", "phpdocumentor/reflection-docblock": "<5.2", "phpdocumentor/type-resolver": "<1.5.1", - "symfony/cache": "<5.4", - "symfony/dependency-injection": "<5.4|>=6.0,<6.4", - "symfony/serializer": "<5.4" + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/serializer": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", "phpdocumentor/reflection-docblock": "^5.2", "phpstan/phpdoc-parser": "^1.0|^2.0", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/serializer": "^5.4|^6.4|^7.0" + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -6579,7 +6691,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.4.18" + "source": "https://github.com/symfony/property-info/tree/v7.4.0" }, "funding": [ { @@ -6590,45 +6702,47 @@ "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-01-21T10:52:27+00:00" + "time": "2025-11-13T08:38:49+00:00" }, { "name": "symfony/routing", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "e9bfc94953019089acdfb9be51c1b9142c4afa68" + "reference": "4720254cb2644a0b876233d258a32bf017330db7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e9bfc94953019089acdfb9be51c1b9142c4afa68", - "reference": "e9bfc94953019089acdfb9be51c1b9142c4afa68", + "url": "https://api.github.com/repos/symfony/routing/zipball/4720254cb2644a0b876233d258a32bf017330db7", + "reference": "4720254cb2644a0b876233d258a32bf017330db7", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<6.2", - "symfony/dependency-injection": "<5.4", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^6.2|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -6662,7 +6776,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.18" + "source": "https://github.com/symfony/routing/tree/v7.4.0" }, "funding": [ { @@ -6673,40 +6787,44 @@ "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-01-09T08:51:02+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/runtime", - "version": "v6.4.14", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/runtime.git", - "reference": "4facd4174f45cd37c65860403412b67c7381136a" + "reference": "e3dd6c0f46a6810b3245726e8452cee45754e628" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/runtime/zipball/4facd4174f45cd37c65860403412b67c7381136a", - "reference": "4facd4174f45cd37c65860403412b67c7381136a", + "url": "https://api.github.com/repos/symfony/runtime/zipball/e3dd6c0f46a6810b3245726e8452cee45754e628", + "reference": "e3dd6c0f46a6810b3245726e8452cee45754e628", "shasum": "" }, "require": { "composer-plugin-api": "^1.0|^2.0", - "php": ">=8.1" + "php": ">=8.2" }, "conflict": { - "symfony/dotenv": "<5.4" + "symfony/dotenv": "<6.4" }, "require-dev": { - "composer/composer": "^1.0.2|^2.0", - "symfony/console": "^5.4.9|^6.0.9|^7.0", - "symfony/dotenv": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0" + "composer/composer": "^2.6", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dotenv": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0" }, "type": "composer-plugin", "extra": { @@ -6741,7 +6859,7 @@ "runtime" ], "support": { - "source": "https://github.com/symfony/runtime/tree/v6.4.14" + "source": "https://github.com/symfony/runtime/tree/v7.4.0" }, "funding": [ { @@ -6752,80 +6870,80 @@ "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-05T16:39:55+00:00" + "time": "2025-11-04T03:05:49+00:00" }, { "name": "symfony/security-bundle", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "181d1fcf5f88ef8212ed7f6434e5ff51c9d7dff3" + "reference": "48a64e746857464a5e8fd7bab84b31c9ba967eb9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/181d1fcf5f88ef8212ed7f6434e5ff51c9d7dff3", - "reference": "181d1fcf5f88ef8212ed7f6434e5ff51c9d7dff3", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/48a64e746857464a5e8fd7bab84b31c9ba967eb9", + "reference": "48a64e746857464a5e8fd7bab84b31c9ba967eb9", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", "ext-xml": "*", - "php": ">=8.1", - "symfony/clock": "^6.3|^7.0", - "symfony/config": "^6.1|^7.0", - "symfony/dependency-injection": "^6.4.11|^7.1.4", + "php": ">=8.2", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^6.4.11|^7.1.4|^8.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.2|^7.0", - "symfony/http-kernel": "^6.2", - "symfony/password-hasher": "^5.4|^6.0|^7.0", - "symfony/security-core": "^6.2|^7.0", - "symfony/security-csrf": "^5.4|^6.0|^7.0", - "symfony/security-http": "^6.3.6|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4.13|^7.1.6|^8.0", + "symfony/password-hasher": "^6.4|^7.0|^8.0", + "symfony/security-core": "^7.4|^8.0", + "symfony/security-csrf": "^6.4|^7.0|^8.0", + "symfony/security-http": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/console": "<5.4", + "symfony/browser-kit": "<6.4", + "symfony/console": "<6.4", "symfony/framework-bundle": "<6.4", - "symfony/http-client": "<5.4", - "symfony/ldap": "<5.4", + "symfony/http-client": "<6.4", + "symfony/ldap": "<6.4", "symfony/serializer": "<6.4", - "symfony/twig-bundle": "<5.4", + "symfony/twig-bundle": "<6.4", "symfony/validator": "<6.4" }, "require-dev": { - "symfony/asset": "^5.4|^6.0|^7.0", - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", - "symfony/dom-crawler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/form": "^5.4|^6.0|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/ldap": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", - "symfony/twig-bridge": "^5.4|^6.0|^7.0", - "symfony/twig-bundle": "^5.4|^6.0|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0", - "twig/twig": "^2.13|^3.0.4", - "web-token/jwt-checker": "^3.1", - "web-token/jwt-signature-algorithm-ecdsa": "^3.1", - "web-token/jwt-signature-algorithm-eddsa": "^3.1", - "web-token/jwt-signature-algorithm-hmac": "^3.1", - "web-token/jwt-signature-algorithm-none": "^3.1", - "web-token/jwt-signature-algorithm-rsa": "^3.1" + "symfony/asset": "^6.4|^7.0|^8.0", + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/dom-crawler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/form": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4.13|^7.1.6|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/ldap": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0", + "symfony/runtime": "^6.4.13|^7.1.6|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/twig-bridge": "^6.4|^7.0|^8.0", + "symfony/twig-bundle": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0", + "twig/twig": "^3.15", + "web-token/jwt-library": "^3.3.2|^4.0" }, "type": "symfony-bundle", "autoload": { @@ -6853,7 +6971,7 @@ "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-bundle/tree/v6.4.13" + "source": "https://github.com/symfony/security-bundle/tree/v7.4.0" }, "funding": [ { @@ -6864,54 +6982,59 @@ "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-25T14:18:03+00:00" + "time": "2025-11-14T09:57:20+00:00" }, { "name": "symfony/security-core", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "0ae7ae716968e00287ab9b7768405e0dc9cad109" + "reference": "fe4d25e5700a2f3b605bf23f520be57504ae5c51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/0ae7ae716968e00287ab9b7768405e0dc9cad109", - "reference": "0ae7ae716968e00287ab9b7768405e0dc9cad109", + "url": "https://api.github.com/repos/symfony/security-core/zipball/fe4d25e5700a2f3b605bf23f520be57504ae5c51", + "reference": "fe4d25e5700a2f3b605bf23f520be57504ae5c51", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/event-dispatcher-contracts": "^2.5|^3", - "symfony/password-hasher": "^5.4|^6.0|^7.0", + "symfony/password-hasher": "^6.4|^7.0|^8.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/event-dispatcher": "<5.4", - "symfony/http-foundation": "<5.4", - "symfony/ldap": "<5.4", - "symfony/security-guard": "<5.4", - "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3", - "symfony/validator": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/ldap": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/validator": "<6.4" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", "psr/container": "^1.1|^2.0", "psr/log": "^1|^2|^3", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/ldap": "^5.4|^6.0|^7.0", - "symfony/string": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3", - "symfony/validator": "^6.4|^7.0" + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/ldap": "^6.4|^7.0|^8.0", + "symfony/string": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4.3|^7.0.3|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -6939,7 +7062,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v6.4.18" + "source": "https://github.com/symfony/security-core/tree/v7.4.0" }, "funding": [ { @@ -6950,36 +7073,42 @@ "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-01-22T20:59:03+00:00" + "time": "2025-11-21T15:26:00+00:00" }, { "name": "symfony/security-csrf", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/security-csrf.git", - "reference": "c34421b7d34efbaef5d611ab2e646a0ec464ffe3" + "reference": "ec41009e83589d0b3d86bd131d07e6fc8ecf35ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/c34421b7d34efbaef5d611ab2e646a0ec464ffe3", - "reference": "c34421b7d34efbaef5d611ab2e646a0ec464ffe3", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/ec41009e83589d0b3d86bd131d07e6fc8ecf35ab", + "reference": "ec41009e83589d0b3d86bd131d07e6fc8ecf35ab", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/security-core": "^5.4|^6.0|^7.0" + "php": ">=8.2", + "symfony/security-core": "^6.4|^7.0|^8.0" }, "conflict": { - "symfony/http-foundation": "<5.4" + "symfony/http-foundation": "<6.4" }, "require-dev": { - "symfony/http-foundation": "^5.4|^6.0|^7.0" + "psr/log": "^1|^2|^3", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -7007,7 +7136,7 @@ "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-csrf/tree/v6.4.13" + "source": "https://github.com/symfony/security-csrf/tree/v7.4.0" }, "funding": [ { @@ -7018,56 +7147,60 @@ "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-25T14:18:03+00:00" + "time": "2025-11-21T15:26:00+00:00" }, { "name": "symfony/security-http", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "54f2ccce1f3822eee3fb3a85debd9a67d12762b8" + "reference": "92f9cc6494f3d29042ac35c2ee5209191bbbb781" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/54f2ccce1f3822eee3fb3a85debd9a67d12762b8", - "reference": "54f2ccce1f3822eee3fb3a85debd9a67d12762b8", + "url": "https://api.github.com/repos/symfony/security-http/zipball/92f9cc6494f3d29042ac35c2ee5209191bbbb781", + "reference": "92f9cc6494f3d29042ac35c2ee5209191bbbb781", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-foundation": "^6.2|^7.0", - "symfony/http-kernel": "^6.3|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", "symfony/polyfill-mbstring": "~1.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/security-core": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/security-core": "^7.3|^8.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/clock": "<6.3", - "symfony/event-dispatcher": "<5.4.9|>=6,<6.0.9", + "symfony/clock": "<6.4", "symfony/http-client-contracts": "<3.0", - "symfony/security-bundle": "<5.4", - "symfony/security-csrf": "<5.4" + "symfony/security-bundle": "<6.4", + "symfony/security-csrf": "<6.4" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/clock": "^6.3|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", "symfony/http-client-contracts": "^3.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/security-csrf": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", - "web-token/jwt-checker": "^3.1", - "web-token/jwt-signature-algorithm-ecdsa": "^3.1" + "symfony/rate-limiter": "^6.4|^7.0|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/security-csrf": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "web-token/jwt-library": "^3.3.2|^4.0" }, "type": "library", "autoload": { @@ -7095,7 +7228,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v6.4.18" + "source": "https://github.com/symfony/security-http/tree/v7.4.0" }, "funding": [ { @@ -7106,25 +7239,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-01-28T14:53:52+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.1", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "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/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { @@ -7142,7 +7279,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -7178,7 +7315,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -7189,29 +7326,33 @@ "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-25T14:20:29+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "2cae0a6f8d04937d02f6d19806251e2104d54f92" + "reference": "8a24af0a2e8a872fb745047180649b8418303084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2cae0a6f8d04937d02f6d19806251e2104d54f92", - "reference": "2cae0a6f8d04937d02f6d19806251e2104d54f92", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/8a24af0a2e8a872fb745047180649b8418303084", + "reference": "8a24af0a2e8a872fb745047180649b8418303084", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -7240,7 +7381,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.4.13" + "source": "https://github.com/symfony/stopwatch/tree/v7.4.0" }, "funding": [ { @@ -7251,31 +7392,36 @@ "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-25T14:18:03+00:00" + "time": "2025-08-04T07:05:15+00:00" }, { "name": "symfony/string", - "version": "v6.4.15", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f" + "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", - "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", + "url": "https://api.github.com/repos/symfony/string/zipball/d50e862cb0a0e0886f73ca1f31b865efbb795003", + "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-grapheme": "~1.33", "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0" }, @@ -7283,11 +7429,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/intl": "^6.2|^7.0", + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -7326,7 +7472,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.15" + "source": "https://github.com/symfony/string/tree/v7.4.0" }, "funding": [ { @@ -7337,25 +7483,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-11-13T13:31:12+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/templating", - "version": "v6.4.13", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/templating.git", - "reference": "e27b6ea8d737cb0dfd41b2f5f055c9ed677afa33" + "reference": "c55c6f96eafa9388390d3ba099fe844f892dbcd6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/templating/zipball/e27b6ea8d737cb0dfd41b2f5f055c9ed677afa33", - "reference": "e27b6ea8d737cb0dfd41b2f5f055c9ed677afa33", + "url": "https://api.github.com/repos/symfony/templating/zipball/c55c6f96eafa9388390d3ba099fe844f892dbcd6", + "reference": "c55c6f96eafa9388390d3ba099fe844f892dbcd6", "shasum": "" }, "require": { @@ -7392,7 +7542,7 @@ "description": "Provides all the tools needed to build any kind of template system", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/templating/tree/v6.4.13" + "source": "https://github.com/symfony/templating/tree/v6.4.24" }, "funding": [ { @@ -7403,60 +7553,65 @@ "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:07:50+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/translation", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66" + "reference": "2d01ca0da3f092f91eeedb46f24aa30d2fca8f68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bee9bfabfa8b4045a66bf82520e492cddbaffa66", - "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66", + "url": "https://api.github.com/repos/symfony/translation/zipball/2d01ca0da3f092f91eeedb46f24aa30d2fca8f68", + "reference": "2d01ca0da3f092f91eeedb46f24aa30d2fca8f68", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" + "symfony/translation-contracts": "^2.5.3|^3.3" }, "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", + "nikic/php-parser": "<5.0", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", + "symfony/http-kernel": "<6.4", "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.18|^5.0", + "nikic/php-parser": "^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/routing": "^6.4|^7.0|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -7487,7 +7642,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.13" + "source": "https://github.com/symfony/translation/tree/v7.4.0" }, "funding": [ { @@ -7498,25 +7653,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-27T18:14:25+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.1", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" + "reference": "65a8bc82080447fae78373aa10f8d13b38338977" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977", "shasum": "" }, "require": { @@ -7529,7 +7688,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -7565,7 +7724,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1" }, "funding": [ { @@ -7576,77 +7735,83 @@ "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-25T14:20:29+00:00" + "time": "2025-07-15T13:41:35+00:00" }, { "name": "symfony/twig-bridge", - "version": "v6.4.17", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "238e1aac992b5231c66faf10131ace7bdba97065" + "reference": "e96998da928007554b8b8c02e677861877daced9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/238e1aac992b5231c66faf10131ace7bdba97065", - "reference": "238e1aac992b5231c66faf10131ace7bdba97065", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/e96998da928007554b8b8c02e677861877daced9", + "reference": "e96998da928007554b8b8c02e677861877daced9", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/translation-contracts": "^2.5|^3", - "twig/twig": "^2.13|^3.0.4" + "twig/twig": "^3.21" }, "conflict": { "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/console": "<5.4", - "symfony/form": "<6.3", - "symfony/http-foundation": "<5.4", + "symfony/console": "<6.4", + "symfony/form": "<6.4", + "symfony/http-foundation": "<6.4", "symfony/http-kernel": "<6.4", - "symfony/mime": "<6.2", + "symfony/mime": "<6.4", "symfony/serializer": "<6.4", - "symfony/translation": "<5.4", - "symfony/workflow": "<5.4" + "symfony/translation": "<6.4", + "symfony/workflow": "<6.4" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/asset": "^5.4|^6.0|^7.0", - "symfony/asset-mapper": "^6.3|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/form": "^6.4|^7.0", - "symfony/html-sanitizer": "^6.1|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", - "symfony/mime": "^6.2|^7.0", + "symfony/asset": "^6.4|^7.0|^8.0", + "symfony/asset-mapper": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/emoji": "^7.1|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/form": "^6.4.20|^7.2.5|^8.0", + "symfony/html-sanitizer": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^7.3|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", "symfony/security-acl": "^2.8|^3.0", - "symfony/security-core": "^5.4|^6.0|^7.0", - "symfony/security-csrf": "^5.4|^6.0|^7.0", - "symfony/security-http": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^6.1|^7.0", - "symfony/web-link": "^5.4|^6.0|^7.0", - "symfony/workflow": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0", - "twig/cssinliner-extra": "^2.12|^3", - "twig/inky-extra": "^2.12|^3", - "twig/markdown-extra": "^2.12|^3" + "symfony/security-core": "^6.4|^7.0|^8.0", + "symfony/security-csrf": "^6.4|^7.0|^8.0", + "symfony/security-http": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4.3|^7.0.3|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0", + "symfony/web-link": "^6.4|^7.0|^8.0", + "symfony/workflow": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0", + "twig/cssinliner-extra": "^3", + "twig/inky-extra": "^3", + "twig/markdown-extra": "^3" }, "type": "symfony-bridge", "autoload": { @@ -7674,7 +7839,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.4.17" + "source": "https://github.com/symfony/twig-bridge/tree/v7.4.0" }, "funding": [ { @@ -7685,52 +7850,57 @@ "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-12-19T14:08:41+00:00" + "time": "2025-11-05T14:29:59+00:00" }, { "name": "symfony/twig-bundle", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "c3beeb5336aba1ea03c37e526968c2fde3ef25c4" + "reference": "f83f530d00d1bbc6f7fafeb433077887c83326ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/c3beeb5336aba1ea03c37e526968c2fde3ef25c4", - "reference": "c3beeb5336aba1ea03c37e526968c2fde3ef25c4", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/f83f530d00d1bbc6f7fafeb433077887c83326ef", + "reference": "f83f530d00d1bbc6f7fafeb433077887c83326ef", "shasum": "" }, "require": { "composer-runtime-api": ">=2.1", - "php": ">=8.1", - "symfony/config": "^6.1|^7.0", - "symfony/dependency-injection": "^6.1|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^6.2", - "symfony/twig-bridge": "^6.4", - "twig/twig": "^2.13|^3.0.4" + "php": ">=8.2", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4.13|^7.1.6|^8.0", + "symfony/twig-bridge": "^7.3|^8.0", + "twig/twig": "^3.12" }, "conflict": { - "symfony/framework-bundle": "<5.4", - "symfony/translation": "<5.4" + "symfony/framework-bundle": "<6.4", + "symfony/translation": "<6.4" }, "require-dev": { - "symfony/asset": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/form": "^5.4|^6.0|^7.0", - "symfony/framework-bundle": "^5.4|^6.0|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", - "symfony/web-link": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/asset": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/form": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4.13|^7.1.6|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/runtime": "^6.4.13|^7.1.6", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/web-link": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "symfony-bundle", "autoload": { @@ -7758,7 +7928,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v6.4.13" + "source": "https://github.com/symfony/twig-bundle/tree/v7.4.0" }, "funding": [ { @@ -7769,73 +7939,163 @@ "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-25T14:18:03+00:00" + "time": "2025-10-02T07:41:02+00:00" }, { - "name": "symfony/validator", - "version": "v6.4.18", + "name": "symfony/type-info", + "version": "v7.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/validator.git", - "reference": "ce20367d07b2592202e9c266b16a93fa50145207" + "url": "https://github.com/symfony/type-info.git", + "reference": "7f9743e921abcce92a03fc693530209c59e73076" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/ce20367d07b2592202e9c266b16a93fa50145207", - "reference": "ce20367d07b2592202e9c266b16a93fa50145207", + "url": "https://api.github.com/repos/symfony/type-info/zipball/7f9743e921abcce92a03fc693530209c59e73076", + "reference": "7f9743e921abcce92a03fc693530209c59e73076", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php83": "^1.27", - "symfony/translation-contracts": "^2.5|^3" + "php": ">=8.2", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.13", - "doctrine/lexer": "<1.1", - "symfony/dependency-injection": "<5.4", - "symfony/expression-language": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/intl": "<5.4", - "symfony/property-info": "<5.4", - "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3", - "symfony/yaml": "<5.4" + "phpstan/phpdoc-parser": "<1.30" }, "require-dev": { - "doctrine/annotations": "^1.13|^2", - "egulias/email-validator": "^2.1.10|^3|^4", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "phpstan/phpdoc-parser": "^1.30|^2.0" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Validator\\": "" + "Symfony\\Component\\TypeInfo\\": "" }, "exclude-from-classmap": [ - "/Tests/", - "/Resources/bin/" + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathias Arlaud", + "email": "mathias.arlaud@gmail.com" + }, + { + "name": "Baptiste LEDUC", + "email": "baptiste.leduc@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts PHP types information.", + "homepage": "https://symfony.com", + "keywords": [ + "PHPStan", + "phpdoc", + "symfony", + "type" + ], + "support": { + "source": "https://github.com/symfony/type-info/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "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-11-07T09:36:46+00:00" + }, + { + "name": "symfony/validator", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/validator.git", + "reference": "829d4acbecc6a9c097ca9cb118d7f96f46d33da9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/validator/zipball/829d4acbecc6a9c097ca9cb118d7f96f46d33da9", + "reference": "829d4acbecc6a9c097ca9cb118d7f96f46d33da9", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php83": "^1.27", + "symfony/translation-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/lexer": "<1.1", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<7.0", + "symfony/expression-language": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/intl": "<6.4", + "symfony/property-info": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/var-exporter": "<6.4.25|>=7.0,<7.3.3", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/string": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4.3|^7.0.3|^8.0", + "symfony/type-info": "^7.1.8", + "symfony/yaml": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Validator\\": "" + }, + "exclude-from-classmap": [ + "/Tests/", + "/Resources/bin/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -7855,7 +8115,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.18" + "source": "https://github.com/symfony/validator/tree/v7.4.0" }, "funding": [ { @@ -7866,43 +8126,45 @@ "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-01-27T16:05:44+00:00" + "time": "2025-11-18T13:23:20+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "4ad10cf8b020e77ba665305bb7804389884b4837" + "reference": "41fd6c4ae28c38b294b42af6db61446594a0dece" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/4ad10cf8b020e77ba665305bb7804389884b4837", - "reference": "4ad10cf8b020e77ba665305bb7804389884b4837", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/41fd6c4ae28c38b294b42af6db61446594a0dece", + "reference": "41fd6c4ae28c38b294b42af6db61446594a0dece", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "ext-iconv": "*", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^6.3|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" }, "bin": [ "Resources/bin/var-dump-server" @@ -7940,7 +8202,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.18" + "source": "https://github.com/symfony/var-dumper/tree/v7.4.0" }, "funding": [ { @@ -7951,35 +8213,39 @@ "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-01-17T11:26:11+00:00" + "time": "2025-10-27T20:36:44+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "0f605f72a363f8743001038a176eeb2a11223b51" + "reference": "03a60f169c79a28513a78c967316fbc8bf17816f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/0f605f72a363f8743001038a176eeb2a11223b51", - "reference": "0f605f72a363f8743001038a176eeb2a11223b51", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/03a60f169c79a28513a78c967316fbc8bf17816f", + "reference": "03a60f169c79a28513a78c967316fbc8bf17816f", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "require-dev": { - "symfony/property-access": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -8017,7 +8283,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.4.13" + "source": "https://github.com/symfony/var-exporter/tree/v7.4.0" }, "funding": [ { @@ -8028,37 +8294,41 @@ "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-25T14:18:03+00:00" + "time": "2025-09-11T10:15:23+00:00" }, { "name": "symfony/yaml", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5" + "reference": "6c84a4b55aee4cd02034d1c528e83f69ddf63810" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5", - "reference": "bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5", + "url": "https://api.github.com/repos/symfony/yaml/zipball/6c84a4b55aee4cd02034d1c528e83f69ddf63810", + "reference": "6c84a4b55aee4cd02034d1c528e83f69ddf63810", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0|^8.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -8089,7 +8359,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.18" + "source": "https://github.com/symfony/yaml/tree/v7.4.0" }, "funding": [ { @@ -8100,35 +8370,39 @@ "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-01-07T09:44:41+00:00" + "time": "2025-11-16T10:14:42+00:00" }, { "name": "twig/extra-bundle", - "version": "v3.20.0", + "version": "v3.22.1", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "9df5e1dbb6a68c0665ae5603f6f2c20815647876" + "reference": "b6534bc925bec930004facca92fccebd0c809247" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/9df5e1dbb6a68c0665ae5603f6f2c20815647876", - "reference": "9df5e1dbb6a68c0665ae5603f6f2c20815647876", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/b6534bc925bec930004facca92fccebd0c809247", + "reference": "b6534bc925bec930004facca92fccebd0c809247", "shasum": "" }, "require": { "php": ">=8.1.0", - "symfony/framework-bundle": "^5.4|^6.4|^7.0", - "symfony/twig-bundle": "^5.4|^6.4|^7.0", + "symfony/framework-bundle": "^5.4|^6.4|^7.0|^8.0", + "symfony/twig-bundle": "^5.4|^6.4|^7.0|^8.0", "twig/twig": "^3.2|^4.0" }, "require-dev": { - "league/commonmark": "^1.0|^2.0", + "league/commonmark": "^2.7", "symfony/phpunit-bridge": "^6.4|^7.0", "twig/cache-extra": "^3.0", "twig/cssinliner-extra": "^3.0", @@ -8167,7 +8441,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.20.0" + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.22.1" }, "funding": [ { @@ -8179,25 +8453,25 @@ "type": "tidelift" } ], - "time": "2025-02-08T09:47:15+00:00" + "time": "2025-11-02T11:00:49+00:00" }, { "name": "twig/intl-extra", - "version": "v3.20.0", + "version": "v3.22.1", "source": { "type": "git", "url": "https://github.com/twigphp/intl-extra.git", - "reference": "05bc5d46b9df9e62399eae53e7c0b0633298b146" + "reference": "93ac31e53cdd3f2e541f42690cd0c54ca8138ab1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/05bc5d46b9df9e62399eae53e7c0b0633298b146", - "reference": "05bc5d46b9df9e62399eae53e7c0b0633298b146", + "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/93ac31e53cdd3f2e541f42690cd0c54ca8138ab1", + "reference": "93ac31e53cdd3f2e541f42690cd0c54ca8138ab1", "shasum": "" }, "require": { "php": ">=8.1.0", - "symfony/intl": "^5.4|^6.4|^7.0", + "symfony/intl": "^5.4|^6.4|^7.0|^8.0", "twig/twig": "^3.13|^4.0" }, "require-dev": { @@ -8231,7 +8505,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/intl-extra/tree/v3.20.0" + "source": "https://github.com/twigphp/intl-extra/tree/v3.22.1" }, "funding": [ { @@ -8243,20 +8517,20 @@ "type": "tidelift" } ], - "time": "2025-01-31T20:45:36+00:00" + "time": "2025-11-02T11:00:49+00:00" }, { "name": "twig/twig", - "version": "v3.20.0", + "version": "v3.22.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "3468920399451a384bef53cf7996965f7cd40183" + "reference": "4509984193026de413baf4ba80f68590a7f2c51d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/3468920399451a384bef53cf7996965f7cd40183", - "reference": "3468920399451a384bef53cf7996965f7cd40183", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/4509984193026de413baf4ba80f68590a7f2c51d", + "reference": "4509984193026de413baf4ba80f68590a7f2c51d", "shasum": "" }, "require": { @@ -8310,7 +8584,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.20.0" + "source": "https://github.com/twigphp/Twig/tree/v3.22.0" }, "funding": [ { @@ -8322,20 +8596,20 @@ "type": "tidelift" } ], - "time": "2025-02-13T08:34:43+00:00" + "time": "2025-10-29T15:56:47+00:00" }, { "name": "ua-parser/uap-php", - "version": "v3.9.14", + "version": "v3.10.0", "source": { "type": "git", "url": "https://github.com/ua-parser/uap-php.git", - "reference": "b796c5ea5df588e65aeb4e2c6cce3811dec4fed6" + "reference": "f44bdd1b38198801cf60b0681d2d842980e47af5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ua-parser/uap-php/zipball/b796c5ea5df588e65aeb4e2c6cce3811dec4fed6", - "reference": "b796c5ea5df588e65aeb4e2c6cce3811dec4fed6", + "url": "https://api.github.com/repos/ua-parser/uap-php/zipball/f44bdd1b38198801cf60b0681d2d842980e47af5", + "reference": "f44bdd1b38198801cf60b0681d2d842980e47af5", "shasum": "" }, "require": { @@ -8383,34 +8657,34 @@ "description": "A multi-language port of Browserscope's user agent parser.", "support": { "issues": "https://github.com/ua-parser/uap-php/issues", - "source": "https://github.com/ua-parser/uap-php/tree/v3.9.14" + "source": "https://github.com/ua-parser/uap-php/tree/v3.10.0" }, - "time": "2020-10-02T23:36:20+00:00" + "time": "2025-07-17T15:43:24+00:00" }, { "name": "webmozart/assert", - "version": "1.11.0", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/9be6926d8b485f55b9229203f962b51ed377ba68", + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68", "shasum": "" }, "require": { "ext-ctype": "*", + "ext-date": "*", + "ext-filter": "*", "php": "^7.2 || ^8.0" }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" }, "type": "library", "extra": { @@ -8441,9 +8715,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "source": "https://github.com/webmozarts/assert/tree/1.12.1" }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2025-10-29T15:56:20+00:00" } ], "packages-dev": [ @@ -8593,37 +8867,39 @@ "time": "2024-05-06T16:37:16+00:00" }, { - "name": "doctrine/common", - "version": "3.5.0", + "name": "dealerdirect/phpcodesniffer-composer-installer", + "version": "v1.2.0", "source": { "type": "git", - "url": "https://github.com/doctrine/common.git", - "reference": "d9ea4a54ca2586db781f0265d36bea731ac66ec5" + "url": "https://github.com/PHPCSStandards/composer-installer.git", + "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/d9ea4a54ca2586db781f0265d36bea731ac66ec5", - "reference": "d9ea4a54ca2586db781f0265d36bea731ac66ec5", + "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/845eb62303d2ca9b289ef216356568ccc075ffd1", + "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1", "shasum": "" }, "require": { - "doctrine/persistence": "^2.0 || ^3.0 || ^4.0", - "php": "^7.1 || ^8.0" + "composer-plugin-api": "^2.2", + "php": ">=5.4", + "squizlabs/php_codesniffer": "^3.1.0 || ^4.0" }, "require-dev": { - "doctrine/coding-standard": "^9.0 || ^10.0", - "doctrine/collections": "^1", - "phpstan/phpstan": "^1.4.1", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", - "squizlabs/php_codesniffer": "^3.0", - "symfony/phpunit-bridge": "^6.1", - "vimeo/psalm": "^4.4" + "composer/composer": "^2.2", + "ext-json": "*", + "ext-zip": "*", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpcompatibility/php-compatibility": "^9.0 || ^10.0.0@dev", + "yoast/phpunit-polyfills": "^1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" }, - "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\": "src" + "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -8632,76 +8908,78 @@ ], "authors": [ { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "name": "Franck Nijhof", + "email": "opensource@frenck.dev", + "homepage": "https://frenck.dev", + "role": "Open source developer" }, { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors" } ], - "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", - "homepage": "https://www.doctrine-project.org/projects/common.html", + "description": "PHP_CodeSniffer Standards Composer Installer Plugin", "keywords": [ - "common", - "doctrine", - "php" + "PHPCodeSniffer", + "PHP_CodeSniffer", + "code quality", + "codesniffer", + "composer", + "installer", + "phpcbf", + "phpcs", + "plugin", + "qa", + "quality", + "standard", + "standards", + "style guide", + "stylecheck", + "tests" ], "support": { - "issues": "https://github.com/doctrine/common/issues", - "source": "https://github.com/doctrine/common/tree/3.5.0" + "issues": "https://github.com/PHPCSStandards/composer-installer/issues", + "security": "https://github.com/PHPCSStandards/composer-installer/security/policy", + "source": "https://github.com/PHPCSStandards/composer-installer" }, "funding": [ { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" + "url": "https://github.com/PHPCSStandards", + "type": "github" }, { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" + "url": "https://github.com/jrfnl", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcommon", - "type": "tidelift" + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" } ], - "time": "2025-01-01T22:12:03+00:00" + "time": "2025-11-11T04:32:07+00:00" }, { "name": "doctrine/data-fixtures", - "version": "1.8.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/data-fixtures.git", - "reference": "a367a09b7a2b4f63ed57f391bf5713e3e46c7c7b" + "reference": "7a615ba135e45d67674bb623d90f34f6c7b6bd97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/a367a09b7a2b4f63ed57f391bf5713e3e46c7c7b", - "reference": "a367a09b7a2b4f63ed57f391bf5713e3e46c7c7b", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/7a615ba135e45d67674bb623d90f34f6c7b6bd97", + "reference": "7a615ba135e45d67674bb623d90f34f6c7b6bd97", "shasum": "" }, "require": { - "doctrine/deprecations": "^0.5.3 || ^1.0", - "doctrine/persistence": "^2.0 || ^3.0", - "php": "^7.4 || ^8.0", - "symfony/polyfill-php80": "^1" + "doctrine/persistence": "^3.1 || ^4.0", + "php": "^8.1", + "psr/log": "^1.1 || ^2 || ^3" }, "conflict": { "doctrine/dbal": "<3.5 || >=5", @@ -8709,18 +8987,16 @@ "doctrine/phpcr-odm": "<1.3.0" }, "require-dev": { - "doctrine/annotations": "^1.12 || ^2", - "doctrine/coding-standard": "^12", + "doctrine/coding-standard": "^14", "doctrine/dbal": "^3.5 || ^4", "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", "doctrine/orm": "^2.14 || ^3", "ext-sqlite3": "*", "fig/log-test": "^1", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.6.13 || ^10.4.2", - "psr/log": "^1.1 || ^2 || ^3", - "symfony/cache": "^5.4 || ^6.3 || ^7", - "symfony/var-exporter": "^5.4 || ^6.3 || ^7" + "phpstan/phpstan": "2.1.31", + "phpunit/phpunit": "10.5.45 || 12.4.0", + "symfony/cache": "^6.4 || ^7", + "symfony/var-exporter": "^6.4 || ^7" }, "suggest": { "alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)", @@ -8751,7 +9027,7 @@ ], "support": { "issues": "https://github.com/doctrine/data-fixtures/issues", - "source": "https://github.com/doctrine/data-fixtures/tree/1.8.1" + "source": "https://github.com/doctrine/data-fixtures/tree/2.2.0" }, "funding": [ { @@ -8767,44 +9043,43 @@ "type": "tidelift" } ], - "time": "2024-12-10T07:00:20+00:00" + "time": "2025-10-17T20:06:20+00:00" }, { "name": "doctrine/doctrine-fixtures-bundle", - "version": "3.7.1", + "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", - "reference": "bd59519a7532b9e1a41cef4049d5326dfac7def9" + "reference": "11941deb6f2899b91e8b8680b07ffe63899d864b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/bd59519a7532b9e1a41cef4049d5326dfac7def9", - "reference": "bd59519a7532b9e1a41cef4049d5326dfac7def9", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/11941deb6f2899b91e8b8680b07ffe63899d864b", + "reference": "11941deb6f2899b91e8b8680b07ffe63899d864b", "shasum": "" }, "require": { - "doctrine/data-fixtures": "^1.5 || ^2.0", - "doctrine/doctrine-bundle": "^2.2", + "doctrine/data-fixtures": "^2.2", + "doctrine/doctrine-bundle": "^2.2 || ^3.0", "doctrine/orm": "^2.14.0 || ^3.0", - "doctrine/persistence": "^2.4 || ^3.0", - "php": "^7.4 || ^8.0", - "psr/log": "^1 || ^2 || ^3", - "symfony/config": "^5.4 || ^6.0 || ^7.0", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "doctrine/persistence": "^2.4 || ^3.0 || ^4.0", + "php": "^8.1", + "psr/log": "^2 || ^3", + "symfony/config": "^6.4 || ^7.0", + "symfony/console": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/doctrine-bridge": "^5.4.48 || ^6.4.16 || ^7.1.9", - "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0" + "symfony/doctrine-bridge": "^6.4.16 || ^7.1.9", + "symfony/http-kernel": "^6.4 || ^7.0" }, "conflict": { "doctrine/dbal": "< 3" }, "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^2", - "phpunit/phpunit": "^9.6.13", - "symfony/phpunit-bridge": "^6.3.6" + "doctrine/coding-standard": "14.0.0", + "phpstan/phpstan": "2.1.11", + "phpunit/phpunit": "^10.5.38 || 11.4.14" }, "type": "symfony-bundle", "autoload": { @@ -8838,7 +9113,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", - "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.7.1" + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/4.3.0" }, "funding": [ { @@ -8854,24 +9129,24 @@ "type": "tidelift" } ], - "time": "2024-12-03T17:07:51+00:00" + "time": "2025-10-20T06:18:40+00:00" }, { "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", "shasum": "" }, "require": { - "php": "^5.3|^7.0|^8.0" + "php": "^7.4|^8.0" }, "replace": { "cordoval/hamcrest-php": "*", @@ -8879,8 +9154,8 @@ "kodova/hamcrest-php": "*" }, "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { @@ -8903,28 +9178,69 @@ ], "support": { "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" + }, + "time": "2025-04-30T06:54:44+00:00" + }, + { + "name": "irstea/phpcpd-shim", + "version": "6.0.3", + "source": { + "type": "git", + "url": "https://gitlab.irstea.fr/pole-is/tools/phpcpd-shim.git", + "reference": "5829d11d1379fd92176b7e2105060c7f09f4fdda" }, - "time": "2020-07-09T08:09:16+00:00" + "require": { + "ext-dom": "*", + "php": ">=7.3" + }, + "replace": { + "sebastian/phpcpd": "self.version" + }, + "bin": [ + "phpcpd" + ], + "type": "library", + "autoload": { + "exclude-from-classmap": [ + "phpcpd" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Shim repository for sebastian/phpcpd", + "homepage": "https://github.com/sebastianbergmann/phpcpd", + "keywords": [ + "shim" + ], + "time": "2020-12-08T03:20:09+00:00" }, { "name": "liip/test-fixtures-bundle", - "version": "2.9.2", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/liip/LiipTestFixturesBundle.git", - "reference": "2b810cd0cc03f4f72a0265c911c03fc2553fb8de" + "reference": "29942037076433f0189f33ccd7d53198dd818fe7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/liip/LiipTestFixturesBundle/zipball/2b810cd0cc03f4f72a0265c911c03fc2553fb8de", - "reference": "2b810cd0cc03f4f72a0265c911c03fc2553fb8de", + "url": "https://api.github.com/repos/liip/LiipTestFixturesBundle/zipball/29942037076433f0189f33ccd7d53198dd818fe7", + "reference": "29942037076433f0189f33ccd7d53198dd818fe7", "shasum": "" }, "require": { - "doctrine/common": "^2.13 || ^3.0", - "doctrine/persistence": "^1.3.3 || ^2.0 || ^3.0", - "php": "^7.4 || ^8.0", + "doctrine/persistence": "^1.3.3 || ^2.0 || ^3.0 || ^4.0", + "php": "^8.1", "symfony/deprecation-contracts": "^2.1 || ^3.0", "symfony/event-dispatcher": "^5.4 || ^6.3 || ^7.0", "symfony/event-dispatcher-contracts": "^1 || ^2 || ^3", @@ -8933,28 +9249,22 @@ }, "conflict": { "doctrine/annotations": "<1.13.1 || >=3.0", - "doctrine/dbal": "<2.13.1 || ~3.0.0 || >=4.0", + "doctrine/dbal": "<2.13.1 || ~3.0.0 || >=5.0", "doctrine/mongodb-odm": "<2.2 || >=3.0", "doctrine/orm": "<2.14 || >=4.0" }, "require-dev": { - "doctrine/annotations": "^1.13.1 || ^2.0", - "doctrine/data-fixtures": "^1.4.4", - "doctrine/dbal": "^2.13.1 || ^3.1", - "doctrine/doctrine-bundle": "^2.2", - "doctrine/doctrine-fixtures-bundle": "^3.4.4 || ^4.0", - "doctrine/mongodb-odm": "^2.2", - "doctrine/mongodb-odm-bundle": "^4.2.1 || ^5.0", - "doctrine/orm": "^2.14 || ^3.0", - "doctrine/phpcr-bundle": "^2.4.3 || ^3.0", - "doctrine/phpcr-odm": "^1.7.2 || ^2.0", - "jackalope/jackalope-doctrine-dbal": "^1.10.1 || ^2.0", + "doctrine/data-fixtures": "^1.7 || ^2.0.1", + "doctrine/doctrine-bundle": "^2.11", + "doctrine/doctrine-fixtures-bundle": "^3.5.1 || ^4.0", + "doctrine/mongodb-odm": "^2.5", + "doctrine/mongodb-odm-bundle": "^4.4 || ^5.0", + "doctrine/orm": "^2.14 || ^3.1.0", "monolog/monolog": "^1.25.1 || ^2.0 || ^3.0", - "phpunit/phpunit": "^9.6.17 || ^10.5.11 || ^11.0.4", + "phpunit/phpunit": "^10.5.11 || ^11.0.4 || ^12.0.0", "symfony/doctrine-bridge": "^5.4 || ^6.3 || ^7.0", "symfony/monolog-bridge": "^5.4 || ^6.3 || ^7.0", "symfony/monolog-bundle": "^3.2", - "symfony/phpunit-bridge": "^7.0", "theofidry/alice-data-fixtures": "^1.5.2" }, "suggest": { @@ -8967,7 +9277,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { @@ -8997,9 +9307,9 @@ ], "support": { "issues": "https://github.com/liip/LiipTestFixturesBundle/issues", - "source": "https://github.com/liip/LiipTestFixturesBundle/tree/2.9.2" + "source": "https://github.com/liip/LiipTestFixturesBundle/tree/3.6.0" }, - "time": "2024-11-12T18:52:49+00:00" + "time": "2025-10-06T18:40:34+00:00" }, { "name": "malukenho/docheader", @@ -9061,16 +9371,16 @@ }, { "name": "masterminds/html5", - "version": "2.9.0", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" + "reference": "fcf91eb64359852f00d921887b219479b4f21251" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251", + "reference": "fcf91eb64359852f00d921887b219479b4f21251", "shasum": "" }, "require": { @@ -9122,9 +9432,9 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" + "source": "https://github.com/Masterminds/html5-php/tree/2.10.0" }, - "time": "2024-03-31T07:05:07+00:00" + "time": "2025-07-25T09:04:22+00:00" }, { "name": "mockery/mockery", @@ -9208,73 +9518,18 @@ }, "time": "2023-10-01T17:31:30+00:00" }, - { - "name": "moontoast/math", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/ramsey/moontoast-math.git", - "reference": "5f47d34c87767dbcc08b30377a9827df71de91fa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/moontoast-math/zipball/5f47d34c87767dbcc08b30377a9827df71de91fa", - "reference": "5f47d34c87767dbcc08b30377a9827df71de91fa", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpseclib/bcmath_compat": ">=1.0.3" - }, - "require-dev": { - "jakub-onderka/php-parallel-lint": "^0.9.0", - "phpunit/phpunit": "^4.8 || ^5.5 || ^6.5 || ^7.0", - "satooshi/php-coveralls": "^0.6.1", - "squizlabs/php_codesniffer": "^2.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Moontoast\\Math\\": "src/Moontoast/Math", - "Moontoast\\Math\\Exception\\": "src/Moontoast/Math/Exception" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "A mathematics library, providing functionality for large numbers", - "homepage": "https://github.com/ramsey/moontoast-math", - "keywords": [ - "bcmath", - "math" - ], - "support": { - "issues": "https://github.com/ramsey/moontoast-math/issues", - "source": "https://github.com/ramsey/moontoast-math" - }, - "abandoned": "brick/math", - "time": "2020-01-05T04:49:34+00:00" - }, { "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": { @@ -9313,7 +9568,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": [ { @@ -9321,20 +9576,20 @@ "type": "tidelift" } ], - "time": "2025-02-12T12:17:51+00:00" + "time": "2025-08-01T08:46:24+00:00" }, { "name": "overtrue/phplint", - "version": "9.5.6", + "version": "9.6.3", "source": { "type": "git", "url": "https://github.com/overtrue/phplint.git", - "reference": "3fdc395a816d1401091062c7a3bfb31252aed6c5" + "reference": "b0ec1d07b37a37e7fc872c8bdbddacadcecbe047" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/overtrue/phplint/zipball/3fdc395a816d1401091062c7a3bfb31252aed6c5", - "reference": "3fdc395a816d1401091062c7a3bfb31252aed6c5", + "url": "https://api.github.com/repos/overtrue/phplint/zipball/b0ec1d07b37a37e7fc872c8bdbddacadcecbe047", + "reference": "b0ec1d07b37a37e7fc872c8bdbddacadcecbe047", "shasum": "" }, "require": { @@ -9374,7 +9629,7 @@ "target-directory": "vendor-bin" }, "branch-alias": { - "dev-main": "9.5.x-dev" + "dev-main": "9.6.x-dev" } }, "autoload": { @@ -9406,7 +9661,7 @@ ], "support": { "issues": "https://github.com/overtrue/phplint/issues", - "source": "https://github.com/overtrue/phplint/tree/9.5.6" + "source": "https://github.com/overtrue/phplint/tree/9.6.3" }, "funding": [ { @@ -9414,124 +9669,7 @@ "type": "github" } ], - "time": "2025-01-15T05:41:15+00:00" - }, - { - "name": "paragonie/constant_time_encoding", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "df1e7fde177501eee2037dd159cf04f5f301a512" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", - "reference": "df1e7fde177501eee2037dd159cf04f5f301a512", - "shasum": "" - }, - "require": { - "php": "^8" - }, - "require-dev": { - "phpunit/phpunit": "^9", - "vimeo/psalm": "^4|^5" - }, - "type": "library", - "autoload": { - "psr-4": { - "ParagonIE\\ConstantTime\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com", - "role": "Maintainer" - }, - { - "name": "Steve 'Sc00bz' Thomas", - "email": "steve@tobtu.com", - "homepage": "https://www.tobtu.com", - "role": "Original Developer" - } - ], - "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", - "keywords": [ - "base16", - "base32", - "base32_decode", - "base32_encode", - "base64", - "base64_decode", - "base64_encode", - "bin2hex", - "encoding", - "hex", - "hex2bin", - "rfc4648" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/constant_time_encoding/issues", - "source": "https://github.com/paragonie/constant_time_encoding" - }, - "time": "2024-05-08T12:36:18+00:00" - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.100", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", - "shasum": "" - }, - "require": { - "php": ">= 7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/random_compat/issues", - "source": "https://github.com/paragonie/random_compat" - }, - "time": "2020-10-15T08:29:30+00:00" + "time": "2025-11-27T13:49:59+00:00" }, { "name": "pdepend/pdepend", @@ -9798,193 +9936,63 @@ "time": "2023-12-11T08:22:20+00:00" }, { - "name": "phpseclib/bcmath_compat", - "version": "2.0.3", + "name": "phpstan/phpdoc-parser", + "version": "2.3.0", "source": { "type": "git", - "url": "https://github.com/phpseclib/bcmath_compat.git", - "reference": "ae8f87ea0c96b2ef08ecf0d291d45372d0f7bc5a" + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/bcmath_compat/zipball/ae8f87ea0c96b2ef08ecf0d291d45372d0f7bc5a", - "reference": "ae8f87ea0c96b2ef08ecf0d291d45372d0f7bc5a", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", "shasum": "" }, "require": { - "phpseclib/phpseclib": "^3.0" - }, - "provide": { - "ext-bcmath": "8.1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", - "squizlabs/php_codesniffer": "^3.0" - }, - "suggest": { - "ext-gmp": "Will enable faster math operations" - }, - "type": "library", - "autoload": { - "files": [ - "lib/bcmath.php" - ], - "psr-4": { - "bcmath_compat\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "homepage": "http://phpseclib.sourceforge.net" - } - ], - "description": "PHP 5.x-8.x polyfill for bcmath extension", - "keywords": [ - "BigInteger", - "bcmath", - "bigdecimal", - "math", - "polyfill" - ], - "support": { - "email": "terrafrost@php.net", - "issues": "https://github.com/phpseclib/bcmath_compat/issues", - "source": "https://github.com/phpseclib/bcmath_compat" - }, - "time": "2024-06-06T14:17:54+00:00" - }, - { - "name": "phpseclib/phpseclib", - "version": "3.0.43", - "source": { - "type": "git", - "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "709ec107af3cb2f385b9617be72af8cf62441d02" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/709ec107af3cb2f385b9617be72af8cf62441d02", - "reference": "709ec107af3cb2f385b9617be72af8cf62441d02", - "shasum": "" - }, - "require": { - "paragonie/constant_time_encoding": "^1|^2|^3", - "paragonie/random_compat": "^1.4|^2.0|^9.99.99", - "php": ">=5.6.1" + "php": "^7.4 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "*" - }, - "suggest": { - "ext-dom": "Install the DOM extension to load XML formatted public keys.", - "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", - "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", - "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", - "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" }, "type": "library", "autoload": { - "files": [ - "phpseclib/bootstrap.php" - ], - "psr-4": { - "phpseclib3\\": "phpseclib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" - }, - { - "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" - }, - { - "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" - }, - { - "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "role": "Developer" - } - ], - "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "homepage": "http://phpseclib.sourceforge.net", - "keywords": [ - "BigInteger", - "aes", - "asn.1", - "asn1", - "blowfish", - "crypto", - "cryptography", - "encryption", - "rsa", - "security", - "sftp", - "signature", - "signing", - "ssh", - "twofish", - "x.509", - "x509" + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { - "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.43" + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0" }, - "funding": [ - { - "url": "https://github.com/terrafrost", - "type": "github" - }, - { - "url": "https://www.patreon.com/phpseclib", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", - "type": "tidelift" - } - ], - "time": "2024-12-14T21:12:59+00:00" + "time": "2025-08-30T15:50:23+00:00" }, { "name": "phpstan/phpstan", - "version": "1.12.x-dev", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "c42ba9bab7a940ed00092ecb1c77bad98896d789" - }, + "version": "2.1.32", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c42ba9bab7a940ed00092ecb1c77bad98896d789", - "reference": "c42ba9bab7a940ed00092ecb1c77bad98896d789", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e126cad1e30a99b137b8ed75a85a676450ebb227", + "reference": "e126cad1e30a99b137b8ed75a85a676450ebb227", "shasum": "" }, "require": { - "php": "^7.2|^8.0" + "php": "^7.4|^8.0" }, "conflict": { "phpstan/phpstan-shim": "*" @@ -10025,25 +10033,25 @@ "type": "github" } ], - "time": "2025-02-19T15:42:21+00:00" + "time": "2025-11-11T15:18:17+00:00" }, { "name": "phpstan/phpstan-doctrine", - "version": "1.5.7", + "version": "2.0.11", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-doctrine.git", - "reference": "231d3f795ed5ef54c98961fd3958868cbe091207" + "reference": "368ad1c713a6d95763890bc2292694a603ece7c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/231d3f795ed5ef54c98961fd3958868cbe091207", - "reference": "231d3f795ed5ef54c98961fd3958868cbe091207", + "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/368ad1c713a6d95763890bc2292694a603ece7c8", + "reference": "368ad1c713a6d95763890bc2292694a603ece7c8", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.12.12" + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^2.1.13" }, "conflict": { "doctrine/collections": "<1.0", @@ -10056,23 +10064,24 @@ "cache/array-adapter": "^1.1", "composer/semver": "^3.3.2", "cweagans/composer-patches": "^1.7.3", - "doctrine/annotations": "^1.11 || ^2.0", + "doctrine/annotations": "^2.0", "doctrine/collections": "^1.6 || ^2.1", "doctrine/common": "^2.7 || ^3.0", - "doctrine/dbal": "^2.13.8 || ^3.3.3", + "doctrine/dbal": "^3.3.8", "doctrine/lexer": "^2.0 || ^3.0", - "doctrine/mongodb-odm": "^1.3 || ^2.4.3", + "doctrine/mongodb-odm": "^2.4.3", "doctrine/orm": "^2.16.0", "doctrine/persistence": "^2.2.1 || ^3.2", "gedmo/doctrine-extensions": "^3.8", "nesbot/carbon": "^2.49", - "nikic/php-parser": "^4.13.2", "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-phpunit": "^1.3.13", - "phpstan/phpstan-strict-rules": "^1.5.1", + "phpstan/phpstan-deprecation-rules": "^2.0.2", + "phpstan/phpstan-phpunit": "^2.0.8", + "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^9.6.20", "ramsey/uuid": "^4.2", - "symfony/cache": "^5.4" + "symfony/cache": "^5.4", + "symfony/uid": "^5.4 || ^6.4 || ^7.3" }, "type": "phpstan-extension", "extra": { @@ -10095,35 +10104,34 @@ "description": "Doctrine extensions for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-doctrine/issues", - "source": "https://github.com/phpstan/phpstan-doctrine/tree/1.5.7" + "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.11" }, - "time": "2024-12-02T16:47:26+00:00" + "time": "2025-11-04T09:55:35+00:00" }, { "name": "phpstan/phpstan-mockery", - "version": "1.1.3", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-mockery.git", - "reference": "98cac6e256b4ee60fdeb26a7dd81bb271b454e80" + "reference": "89a949d0ac64298e88b7c7fa00caee565c198394" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-mockery/zipball/98cac6e256b4ee60fdeb26a7dd81bb271b454e80", - "reference": "98cac6e256b4ee60fdeb26a7dd81bb271b454e80", + "url": "https://api.github.com/repos/phpstan/phpstan-mockery/zipball/89a949d0ac64298e88b7c7fa00caee565c198394", + "reference": "89a949d0ac64298e88b7c7fa00caee565c198394", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.12" + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^2.0" }, "require-dev": { "mockery/mockery": "^1.6.11", - "nikic/php-parser": "^4.13.0", "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-phpunit": "^1.4", - "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "^9.5" + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6" }, "type": "phpstan-extension", "extra": { @@ -10145,39 +10153,38 @@ "description": "PHPStan Mockery extension", "support": { "issues": "https://github.com/phpstan/phpstan-mockery/issues", - "source": "https://github.com/phpstan/phpstan-mockery/tree/1.1.3" + "source": "https://github.com/phpstan/phpstan-mockery/tree/2.0.0" }, - "time": "2024-09-11T15:47:29+00:00" + "time": "2024-10-14T03:18:12+00:00" }, { "name": "phpstan/phpstan-symfony", - "version": "1.4.13", + "version": "2.0.8", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-symfony.git", - "reference": "dd1aaa7f85f9916222a2ce7e4d21072fe03958f4" + "reference": "8820c22d785c235f69bb48da3d41e688bc8a1796" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/dd1aaa7f85f9916222a2ce7e4d21072fe03958f4", - "reference": "dd1aaa7f85f9916222a2ce7e4d21072fe03958f4", + "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/8820c22d785c235f69bb48da3d41e688bc8a1796", + "reference": "8820c22d785c235f69bb48da3d41e688bc8a1796", "shasum": "" }, "require": { "ext-simplexml": "*", - "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.12" + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^2.1.13" }, "conflict": { "symfony/framework-bundle": "<3.0" }, "require-dev": { - "nikic/php-parser": "^4.13.0", "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-phpunit": "^1.3.11", - "phpstan/phpstan-strict-rules": "^1.5.1", - "phpunit/phpunit": "^8.5.29 || ^9.5", - "psr/container": "1.0 || 1.1.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "psr/container": "1.1.2", "symfony/config": "^5.4 || ^6.1", "symfony/console": "^5.4 || ^6.1", "symfony/dependency-injection": "^5.4 || ^6.1", @@ -10217,22 +10224,22 @@ "description": "Symfony Framework extensions and rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-symfony/issues", - "source": "https://github.com/phpstan/phpstan-symfony/tree/1.4.13" + "source": "https://github.com/phpstan/phpstan-symfony/tree/2.0.8" }, - "time": "2025-01-04T13:55:31+00:00" + "time": "2025-09-07T06:55:50+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.32", + "version": "10.1.16", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", - "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", "shasum": "" }, "require": { @@ -10240,18 +10247,18 @@ "ext-libxml": "*", "ext-xmlwriter": "*", "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-text-template": "^2.0.4", - "sebastian/code-unit-reverse-lookup": "^2.0.3", - "sebastian/complexity": "^2.0.3", - "sebastian/environment": "^5.1.5", - "sebastian/lines-of-code": "^1.0.4", - "sebastian/version": "^3.0.2", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^9.6" + "phpunit/phpunit": "^10.1" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -10260,7 +10267,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "9.2.x-dev" + "dev-main": "10.1.x-dev" } }, "autoload": { @@ -10289,7 +10296,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/9.2.32" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" }, "funding": [ { @@ -10297,32 +10304,32 @@ "type": "github" } ], - "time": "2024-08-22T04:23:01+00:00" + "time": "2024-08-22T04:31:57+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -10349,7 +10356,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" }, "funding": [ { @@ -10357,28 +10365,28 @@ "type": "github" } ], - "time": "2021-12-02T12:48:52+00:00" + "time": "2023-08-31T06:24:48+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.1.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-pcntl": "*" @@ -10386,7 +10394,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -10412,7 +10420,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, "funding": [ { @@ -10420,32 +10428,32 @@ "type": "github" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2023-02-03T06:56:09+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.4", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -10471,7 +10479,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, "funding": [ { @@ -10479,32 +10488,32 @@ "type": "github" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2023-08-31T14:07:24+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10530,7 +10539,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" }, "funding": [ { @@ -10538,54 +10547,52 @@ "type": "github" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2023-02-03T06:57:52+00:00" }, { "name": "phpunit/phpunit", - "version": "9.6.22", + "version": "10.5.58", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c" + "reference": "e24fb46da450d8e6a5788670513c1af1424f16ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f80235cb4d3caa59ae09be3adf1ded27521d1a9c", - "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e24fb46da450d8e6a5788670513c1af1424f16ca", + "reference": "e24fb46da450d8e6a5788670513c1af1424f16ca", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.5.0 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.1", + "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.32", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.4", - "phpunit/php-timer": "^5.0.3", - "sebastian/cli-parser": "^1.0.2", - "sebastian/code-unit": "^1.0.8", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.6", - "sebastian/environment": "^5.1.5", - "sebastian/exporter": "^4.0.6", - "sebastian/global-state": "^5.0.7", - "sebastian/object-enumerator": "^4.0.4", - "sebastian/resource-operations": "^3.0.4", - "sebastian/type": "^3.2.1", - "sebastian/version": "^3.0.2" + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.4", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.4", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.1", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" }, "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -10593,7 +10600,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.6-dev" + "dev-main": "10.5-dev" } }, "autoload": { @@ -10625,7 +10632,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.22" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.58" }, "funding": [ { @@ -10636,30 +10643,38 @@ "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/phpunit", "type": "tidelift" } ], - "time": "2024-12-05T13:48:26+00:00" + "time": "2025-09-28T12:04:46+00:00" }, { "name": "rector/rector", - "version": "1.2.10", + "version": "2.2.8", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "40f9cf38c05296bd32f444121336a521a293fa61" + "reference": "303aa811649ccd1d32e51e62d5c85949d01b5f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/40f9cf38c05296bd32f444121336a521a293fa61", - "reference": "40f9cf38c05296bd32f444121336a521a293fa61", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/303aa811649ccd1d32e51e62d5c85949d01b5f1b", + "reference": "303aa811649ccd1d32e51e62d5c85949d01b5f1b", "shasum": "" }, "require": { - "php": "^7.2|^8.0", - "phpstan/phpstan": "^1.12.5" + "php": "^7.4|^8.0", + "phpstan/phpstan": "^2.1.32" }, "conflict": { "rector/rector-doctrine": "*", @@ -10684,6 +10699,7 @@ "MIT" ], "description": "Instant Upgrade and Automated Refactoring of any PHP code", + "homepage": "https://getrector.com/", "keywords": [ "automation", "dev", @@ -10692,7 +10708,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/1.2.10" + "source": "https://github.com/rectorphp/rector/tree/2.2.8" }, "funding": [ { @@ -10700,32 +10716,32 @@ "type": "github" } ], - "time": "2024-11-08T13:59:10+00:00" + "time": "2025-11-12T18:38:00+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.2", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -10748,7 +10764,8 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" }, "funding": [ { @@ -10756,32 +10773,32 @@ "type": "github" } ], - "time": "2024-03-02T06:27:43+00:00" + "time": "2024-03-02T07:12:49+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -10804,7 +10821,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, "funding": [ { @@ -10812,32 +10829,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2023-02-03T06:58:43+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -10859,7 +10876,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { @@ -10867,34 +10884,36 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.8", + "version": "5.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e8e53097718d2b53cfb2aa859b06a41abf58c62e", + "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -10933,41 +10952,54 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.4" }, "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": "2022-09-14T12:41:17+00:00" + "time": "2025-09-07T05:25:07+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.3", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + "reference": "68ff824baeae169ec9f2137158ee529584553799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.2-dev" } }, "autoload": { @@ -10990,7 +11022,8 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" }, "funding": [ { @@ -10998,33 +11031,33 @@ "type": "github" } ], - "time": "2023-12-22T06:19:30+00:00" + "time": "2023-12-21T08:37:17+00:00" }, { "name": "sebastian/diff", - "version": "4.0.6", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -11056,7 +11089,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, "funding": [ { @@ -11064,27 +11098,27 @@ "type": "github" } ], - "time": "2024-03-02T06:30:58+00:00" + "time": "2024-03-02T07:15:17+00:00" }, { "name": "sebastian/environment", - "version": "5.1.5", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -11092,7 +11126,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -11111,7 +11145,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -11119,7 +11153,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" }, "funding": [ { @@ -11127,34 +11162,34 @@ "type": "github" } ], - "time": "2023-02-03T06:03:51+00:00" + "time": "2024-03-23T08:47:14+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.6", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + "reference": "0735b90f4da94969541dac1da743446e276defa6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6", + "reference": "0735b90f4da94969541dac1da743446e276defa6", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -11196,46 +11231,56 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4" }, "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-03-02T06:33:00+00:00" + "time": "2025-09-24T06:09:11+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.7", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -11254,13 +11299,14 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" }, "funding": [ { @@ -11268,33 +11314,33 @@ "type": "github" } ], - "time": "2024-03-02T06:35:11+00:00" + "time": "2024-03-02T07:19:19+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.4", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -11317,7 +11363,8 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" }, "funding": [ { @@ -11325,34 +11372,34 @@ "type": "github" } ], - "time": "2023-12-22T06:20:34+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -11374,7 +11421,7 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { @@ -11382,32 +11429,32 @@ "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -11429,68 +11476,7 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/phpcpd", - "version": "6.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpcpd.git", - "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/f3683aa0db2e8e09287c2bb33a595b2873ea9176", - "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0", - "phpunit/php-timer": "^5.0", - "sebastian/cli-parser": "^1.0", - "sebastian/version": "^3.0" - }, - "bin": [ - "phpcpd" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Copy/Paste Detector (CPD) for PHP code.", - "homepage": "https://github.com/sebastianbergmann/phpcpd", - "support": { - "issues": "https://github.com/sebastianbergmann/phpcpd/issues", - "source": "https://github.com/sebastianbergmann/phpcpd/tree/6.0.3" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { @@ -11498,33 +11484,32 @@ "type": "github" } ], - "abandoned": true, - "time": "2020-12-07T05:39:23+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.5", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a", + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -11554,40 +11539,53 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.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/recursion-context", + "type": "tidelift" } ], - "time": "2023-02-03T06:07:39+00:00" + "time": "2025-08-10T07:50:56+00:00" }, { - "name": "sebastian/resource-operations", - "version": "3.0.4", + "name": "sebastian/type", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -11602,13 +11600,15 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", "support": { - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, "funding": [ { @@ -11616,32 +11616,29 @@ "type": "github" } ], - "time": "2024-03-14T16:00:52+00:00" + "time": "2023-02-03T07:10:45+00:00" }, { - "name": "sebastian/type", - "version": "3.2.1", + "name": "sebastian/version", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -11660,11 +11657,11 @@ "role": "lead" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" }, "funding": [ { @@ -11672,94 +11669,101 @@ "type": "github" } ], - "time": "2023-02-03T06:13:03+00:00" + "time": "2023-02-07T11:34:05+00:00" }, { - "name": "sebastian/version", - "version": "3.0.2", + "name": "slevomat/coding-standard", + "version": "8.25.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "url": "https://github.com/slevomat/coding-standard.git", + "reference": "4caa5ec5a30b84b2305e80159c710d437f40cc40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/4caa5ec5a30b84b2305e80159c710d437f40cc40", + "reference": "4caa5ec5a30b84b2305e80159c710d437f40cc40", "shasum": "" }, "require": { - "php": ">=7.3" + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.2.0", + "php": "^7.4 || ^8.0", + "phpstan/phpdoc-parser": "^2.3.0", + "squizlabs/php_codesniffer": "^4.0.1" }, - "type": "library", + "require-dev": { + "phing/phing": "3.0.1|3.1.0", + "php-parallel-lint/php-parallel-lint": "1.4.0", + "phpstan/phpstan": "2.1.32", + "phpstan/phpstan-deprecation-rules": "2.0.3", + "phpstan/phpstan-phpunit": "2.0.8", + "phpstan/phpstan-strict-rules": "2.0.7", + "phpunit/phpunit": "9.6.8|10.5.48|11.4.4|11.5.36|12.4.4" + }, + "type": "phpcodesniffer-standard", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "8.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "SlevomatCodingStandard\\": "SlevomatCodingStandard/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } + "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", + "keywords": [ + "dev", + "phpcs" ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "issues": "https://github.com/slevomat/coding-standard/issues", + "source": "https://github.com/slevomat/coding-standard/tree/8.25.1" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/kukulich", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard", + "type": "tidelift" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2025-11-25T18:01:43+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.11.3", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10" + "reference": "0525c73950de35ded110cffafb9892946d7771b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", - "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0525c73950de35ded110cffafb9892946d7771b5", + "reference": "0525c73950de35ded110cffafb9892946d7771b5", "shasum": "" }, "require": { "ext-simplexml": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": ">=5.4.0" + "php": ">=7.2.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" + "phpunit/phpunit": "^8.4.0 || ^9.3.4 || ^10.5.32 || 11.3.3 - 11.5.28 || ^11.5.31" }, "bin": [ "bin/phpcbf", "bin/phpcs" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" @@ -11778,7 +11782,7 @@ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "description": "PHP_CodeSniffer tokenizes PHP files and detects violations of a defined set of coding standards.", "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ "phpcs", @@ -11805,35 +11809,36 @@ "type": "open_collective" }, { - "url": "https://thanks.dev/phpcsstandards", + "url": "https://thanks.dev/u/gh/phpcsstandards", "type": "thanks_dev" } ], - "time": "2025-01-23T17:04:15+00:00" + "time": "2025-11-10T16:43:36+00:00" }, { "name": "symfony/browser-kit", - "version": "v6.4.13", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "65d4b3fd9556e4b5b41287bef93c671f8f9f86ab" + "reference": "3bb26dafce31633b1f699894c86379eefc8af5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/65d4b3fd9556e4b5b41287bef93c671f8f9f86ab", - "reference": "65d4b3fd9556e4b5b41287bef93c671f8f9f86ab", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/3bb26dafce31633b1f699894c86379eefc8af5bb", + "reference": "3bb26dafce31633b1f699894c86379eefc8af5bb", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/dom-crawler": "^5.4|^6.0|^7.0" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/dom-crawler": "^6.4|^7.0|^8.0" }, "require-dev": { - "symfony/css-selector": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0" + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -11861,7 +11866,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v6.4.13" + "source": "https://github.com/symfony/browser-kit/tree/v7.4.0" }, "funding": [ { @@ -11872,35 +11877,40 @@ "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:07:50+00:00" + "time": "2025-11-05T14:29:59+00:00" }, { "name": "symfony/dom-crawler", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "fd07959d3e8992795029bdab3605c2e8e895034e" + "reference": "8f3e7464fe7e77294686e935956a6a8ccf7442c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/fd07959d3e8992795029bdab3605c2e8e895034e", - "reference": "fd07959d3e8992795029bdab3605c2e8e895034e", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/8f3e7464fe7e77294686e935956a6a8ccf7442c4", + "reference": "8f3e7464fe7e77294686e935956a6a8ccf7442c4", "shasum": "" }, "require": { "masterminds/html5": "^2.6", - "php": ">=8.1", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "symfony/css-selector": "^5.4|^6.0|^7.0" + "symfony/css-selector": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -11928,7 +11938,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.4.18" + "source": "https://github.com/symfony/dom-crawler/tree/v7.4.0" }, "funding": [ { @@ -11939,37 +11949,37 @@ "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-01-09T15:35:00+00:00" + "time": "2025-10-31T09:30:03+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v6.4.16", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "cebafe2f1ad2d1e745c1015b7c2519592341e4e6" + "reference": "059b051b38f2138ef104dd848fa48f0cbbb7d78b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/cebafe2f1ad2d1e745c1015b7c2519592341e4e6", - "reference": "cebafe2f1ad2d1e745c1015b7c2519592341e4e6", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/059b051b38f2138ef104dd848fa48f0cbbb7d78b", + "reference": "059b051b38f2138ef104dd848fa48f0cbbb7d78b", "shasum": "" }, "require": { - "php": ">=7.1.3" - }, - "conflict": { - "phpunit/phpunit": "<7.5|9.1.2" + "php": ">=8.1.0" }, "require-dev": { - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/polyfill-php81": "^1.27" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4.3|^7.0.3|^8.0" }, "bin": [ "bin/simple-phpunit" @@ -12009,8 +12019,11 @@ ], "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", + "keywords": [ + "testing" + ], "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v6.4.16" + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.4.0" }, "funding": [ { @@ -12021,29 +12034,33 @@ "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-13T15:06:22+00:00" + "time": "2025-10-28T22:44:23+00:00" }, { "name": "symfony/process", - "version": "v6.4.15", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "3cb242f059c14ae08591c5c4087d1fe443564392" + "reference": "7ca8dc2d0dcf4882658313aba8be5d9fd01026c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/3cb242f059c14ae08591c5c4087d1fe443564392", - "reference": "3cb242f059c14ae08591c5c4087d1fe443564392", + "url": "https://api.github.com/repos/symfony/process/zipball/7ca8dc2d0dcf4882658313aba8be5d9fd01026c8", + "reference": "7ca8dc2d0dcf4882658313aba8be5d9fd01026c8", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -12071,7 +12088,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.15" + "source": "https://github.com/symfony/process/tree/v7.4.0" }, "funding": [ { @@ -12082,47 +12099,55 @@ "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-06T14:19:14+00:00" + "time": "2025-10-16T11:21:06+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v6.4.18", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "979b623f12d1eb4f6f8f24fd321dfe1dee2444a2" + "reference": "dcd955ca9c60f2942194854518049f8ae4dbd696" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/979b623f12d1eb4f6f8f24fd321dfe1dee2444a2", - "reference": "979b623f12d1eb4f6f8f24fd321dfe1dee2444a2", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/dcd955ca9c60f2942194854518049f8ae4dbd696", + "reference": "dcd955ca9c60f2942194854518049f8ae4dbd696", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/twig-bundle": "^5.4|^6.0", - "twig/twig": "^2.13|^3.0.4" + "composer-runtime-api": ">=2.1", + "php": ">=8.2", + "symfony/config": "^7.3|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/framework-bundle": "^6.4.13|^7.1.6|^8.0", + "symfony/http-kernel": "^6.4.13|^7.1.6|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/twig-bundle": "^6.4|^7.0|^8.0", + "twig/twig": "^3.15" }, "conflict": { - "symfony/form": "<5.4", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/twig-bundle": ">=7.0" + "symfony/form": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/serializer": "<7.2", + "symfony/workflow": "<7.3" }, "require-dev": { - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/runtime": "^6.4.13|^7.1.6|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0" }, "type": "symfony-bundle", "autoload": { @@ -12153,7 +12178,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.18" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.4.0" }, "funding": [ { @@ -12164,25 +12189,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-12-23T18:38:04+00:00" + "time": "2025-11-19T14:48:01+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.3", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { @@ -12211,7 +12240,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, "funding": [ { @@ -12219,14 +12248,13 @@ "type": "github" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-11-17T20:03:58+00:00" } ], "aliases": [], "minimum-stability": "stable", "stability-flags": { - "mockery/mockery": 20, - "phpstan/phpstan": 20 + "mockery/mockery": 20 }, "prefer-stable": false, "prefer-lowest": false, diff --git a/config/openconext/parameters.yaml.dist b/config/openconext/parameters.yaml.dist index 5d5a233a6..c763d787a 100644 --- a/config/openconext/parameters.yaml.dist +++ b/config/openconext/parameters.yaml.dist @@ -18,7 +18,7 @@ parameters: # The database server version is used in the dbal configuration and is required to prevent issues when the database # connection is booted. See https://github.com/doctrine/DoctrineBundle/issues/351 for more details on this. # Also see: https://symfony.com/doc/current/reference/configuration/doctrine.html#doctrine-dbal-configuration - database_server_version: 10.0.38-MariaDB + database_server_version: 10.6.23-MariaDB database_middleware_name: middleware database_middleware_user: middleware_user database_middleware_password: middleware_secret diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml index 8ade4d971..b06a52151 100644 --- a/config/packages/doctrine.yaml +++ b/config/packages/doctrine.yaml @@ -12,6 +12,7 @@ doctrine: password: "%database_middleware_password%" server_version: "%database_server_version%" charset: utf8 + use_savepoints: true gateway: driver: "%database_driver%" host: "%database_host%" @@ -21,6 +22,7 @@ doctrine: password: "%database_gateway_password%" server_version: "%database_server_version%" charset: utf8 + use_savepoints: true deploy: driver: "%database_driver%" host: "%database_host%" @@ -30,91 +32,67 @@ doctrine: password: "%database_deploy_password%" server_version: "%database_server_version%" charset: utf8 + use_savepoints: true types: authority_role: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\AuthorityRoleType - commented: false institution: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\InstitutionType - commented: false stepup_contact_information: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\ContactInformationType - commented: false stepup_common_name: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\CommonNameType - commented: false stepup_datetime: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\DateTimeType - commented: false stepup_document_number: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\DocumentNumberType - commented: false stepup_email: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\EmailType - commented: false stepup_name_id: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\NameIdType - commented: false stepup_locale: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\LocaleType - commented: false stepup_location: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\LocationType - commented: false stepup_second_factor_status: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\SecondFactorStatusType - commented: false stepup_recovery_token_status: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\RecoveryTokenStatusType - commented: false stepup_ra_location_name: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\RaLocationNameType - commented: false stepup_configuration_institution: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\ConfigurationInstitutionType - commented: false stepup_configuration_contact_information: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\ConfigurationContactInformationType - commented: false stepup_configuration_location: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\ConfigurationLocationType - commented: false stepup_use_ra_locations_option: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\UseRaLocationsOptionType - commented: false stepup_show_raa_contact_information_option: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\ShowRaaContactInformationOptionType - commented: false stepup_second_factor_type: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\SecondFactorTypeType - commented: false stepup_verify_email_option: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\VerifyEmailOptionType - commented: false stepup_number_of_tokens_per_identity_option: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\NumberOfTokensPerIdentityType - commented: false stepup_self_vet_option: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\SelfVetOptionType - commented: false stepup_self_asserted_tokens_option: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\SelfAssertedTokensOptionType - commented: false stepup_sso_on_2fa_option: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\SsoOn2faOptionType - commented: false stepup_sso_registration_bypass_option: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\SsoRegistrationBypassOptionType - commented: false stepup_institution_role: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\InstitutionRoleType - commented: false stepup_vetting_type_hints: class: Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\VettingTypeHintsType - commented: false orm: default_entity_manager: middleware auto_generate_proxy_classes: "%kernel.debug%" + controller_resolver: + auto_mapping: false entity_managers: middleware: connection: middleware diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml index 2627cc5e7..2cf717b0a 100644 --- a/config/packages/framework.yaml +++ b/config/packages/framework.yaml @@ -14,6 +14,8 @@ framework: fragments: false php_errors: log: true + http_method_override: true + handle_all_throwables: true when@dev: framework: @@ -26,6 +28,7 @@ when@smoketest: &testOverride test: true profiler: collect: false + collect_serializer_data: true php_errors: log: false # prevents user deprecated warnings session: diff --git a/config/packages/monolog.yaml b/config/packages/monolog.yaml index 3221b6e56..16dc5215c 100644 --- a/config/packages/monolog.yaml +++ b/config/packages/monolog.yaml @@ -1,6 +1,5 @@ monolog: - channels: - - deprecation + channels: ['deprecation'] handlers: prod-signaler: type: fingers_crossed @@ -21,10 +20,15 @@ monolog: when@dev: &override monolog: handlers: + deprecation: + type: stream + path: "%kernel.logs_dir%/deprecation.log" + level: debug + channels: [ "deprecation" ] main_syslog: type: stream path: php://stderr - level: debug + level: error channels: ["!event", "!doctrine", "!deprecation", "!console"] console: type: console diff --git a/config/packages/nelmio_security.yaml b/config/packages/nelmio_security.yaml index 89ce0d2b6..8932ab883 100644 --- a/config/packages/nelmio_security.yaml +++ b/config/packages/nelmio_security.yaml @@ -23,9 +23,6 @@ nelmio_security: content_type: nosniff: true - xss_protection: - enabled: true - mode_block: true when@dev: &devOverride nelmio_security: diff --git a/config/packages/property_info.yaml b/config/packages/property_info.yaml new file mode 100644 index 000000000..dd31b9da2 --- /dev/null +++ b/config/packages/property_info.yaml @@ -0,0 +1,3 @@ +framework: + property_info: + with_constructor_extractor: true diff --git a/config/packages/twig.yaml b/config/packages/twig.yaml index d7764775c..c194f9370 100644 --- a/config/packages/twig.yaml +++ b/config/packages/twig.yaml @@ -2,7 +2,6 @@ twig: default_path: '%kernel.project_dir%/templates' debug: '%kernel.debug%' strict_variables: '%kernel.debug%' - exception_controller: null when@test: twig: diff --git a/config/reference.php b/config/reference.php new file mode 100644 index 000000000..ec488bddd --- /dev/null +++ b/config/reference.php @@ -0,0 +1,2088 @@ + [ + * 'App\\' => [ + * 'resource' => '../src/', + * ], + * ], + * ]); + * ``` + * + * @psalm-type ImportsConfig = list + * @psalm-type ParametersConfig = array|null>|null> + * @psalm-type ArgumentsType = list|array + * @psalm-type CallType = array|array{0:string, 1?:ArgumentsType, 2?:bool}|array{method:string, arguments?:ArgumentsType, returns_clone?:bool} + * @psalm-type TagsType = list>> // arrays inside the list must have only one element, with the tag name as the key + * @psalm-type CallbackType = string|array{0:string|ReferenceConfigurator,1:string}|\Closure|ReferenceConfigurator|ExpressionConfigurator + * @psalm-type DeprecationType = array{package: string, version: string, message?: string} + * @psalm-type DefaultsType = array{ + * public?: bool, + * tags?: TagsType, + * resource_tags?: TagsType, + * autowire?: bool, + * autoconfigure?: bool, + * bind?: array, + * } + * @psalm-type InstanceofType = array{ + * shared?: bool, + * lazy?: bool|string, + * public?: bool, + * properties?: array, + * configurator?: CallbackType, + * calls?: list, + * tags?: TagsType, + * resource_tags?: TagsType, + * autowire?: bool, + * bind?: array, + * constructor?: string, + * } + * @psalm-type DefinitionType = array{ + * class?: string, + * file?: string, + * parent?: string, + * shared?: bool, + * synthetic?: bool, + * lazy?: bool|string, + * public?: bool, + * abstract?: bool, + * deprecated?: DeprecationType, + * factory?: CallbackType, + * configurator?: CallbackType, + * arguments?: ArgumentsType, + * properties?: array, + * calls?: list, + * tags?: TagsType, + * resource_tags?: TagsType, + * decorates?: string, + * decoration_inner_name?: string, + * decoration_priority?: int, + * decoration_on_invalid?: 'exception'|'ignore'|null, + * autowire?: bool, + * autoconfigure?: bool, + * bind?: array, + * constructor?: string, + * from_callable?: CallbackType, + * } + * @psalm-type AliasType = string|array{ + * alias: string, + * public?: bool, + * deprecated?: DeprecationType, + * } + * @psalm-type PrototypeType = array{ + * resource: string, + * namespace?: string, + * exclude?: string|list, + * parent?: string, + * shared?: bool, + * lazy?: bool|string, + * public?: bool, + * abstract?: bool, + * deprecated?: DeprecationType, + * factory?: CallbackType, + * arguments?: ArgumentsType, + * properties?: array, + * configurator?: CallbackType, + * calls?: list, + * tags?: TagsType, + * resource_tags?: TagsType, + * autowire?: bool, + * autoconfigure?: bool, + * bind?: array, + * constructor?: string, + * } + * @psalm-type StackType = array{ + * stack: list>, + * public?: bool, + * deprecated?: DeprecationType, + * } + * @psalm-type ServicesConfig = array{ + * _defaults?: DefaultsType, + * _instanceof?: InstanceofType, + * ... + * } + * @psalm-type ExtensionType = array + * @psalm-type FrameworkConfig = array{ + * secret?: scalar|null, + * http_method_override?: bool, // Set true to enable support for the '_method' request parameter to determine the intended HTTP method on POST requests. // Default: false + * allowed_http_method_override?: list|null, + * trust_x_sendfile_type_header?: scalar|null, // Set true to enable support for xsendfile in binary file responses. // Default: "%env(bool:default::SYMFONY_TRUST_X_SENDFILE_TYPE_HEADER)%" + * ide?: scalar|null, // Default: null + * test?: bool, + * default_locale?: scalar|null, // Default: "en" + * set_locale_from_accept_language?: bool, // Whether to use the Accept-Language HTTP header to set the Request locale (only when the "_locale" request attribute is not passed). // Default: false + * set_content_language_from_locale?: bool, // Whether to set the Content-Language HTTP header on the Response using the Request locale. // Default: false + * enabled_locales?: list, + * trusted_hosts?: list, + * trusted_proxies?: mixed, // Default: ["%env(default::SYMFONY_TRUSTED_PROXIES)%"] + * trusted_headers?: list, + * error_controller?: scalar|null, // Default: "error_controller" + * handle_all_throwables?: bool, // HttpKernel will handle all kinds of \Throwable. // Default: true + * csrf_protection?: bool|array{ + * enabled?: scalar|null, // Default: null + * stateless_token_ids?: list, + * check_header?: scalar|null, // Whether to check the CSRF token in a header in addition to a cookie when using stateless protection. // Default: false + * cookie_name?: scalar|null, // The name of the cookie to use when using stateless protection. // Default: "csrf-token" + * }, + * form?: bool|array{ // Form configuration + * enabled?: bool, // Default: true + * csrf_protection?: array{ + * enabled?: scalar|null, // Default: null + * token_id?: scalar|null, // Default: null + * field_name?: scalar|null, // Default: "_token" + * field_attr?: array, + * }, + * }, + * http_cache?: bool|array{ // HTTP cache configuration + * enabled?: bool, // Default: false + * debug?: bool, // Default: "%kernel.debug%" + * trace_level?: "none"|"short"|"full", + * trace_header?: scalar|null, + * default_ttl?: int, + * private_headers?: list, + * skip_response_headers?: list, + * allow_reload?: bool, + * allow_revalidate?: bool, + * stale_while_revalidate?: int, + * stale_if_error?: int, + * terminate_on_cache_hit?: bool, + * }, + * esi?: bool|array{ // ESI configuration + * enabled?: bool, // Default: false + * }, + * ssi?: bool|array{ // SSI configuration + * enabled?: bool, // Default: false + * }, + * fragments?: bool|array{ // Fragments configuration + * enabled?: bool, // Default: false + * hinclude_default_template?: scalar|null, // Default: null + * path?: scalar|null, // Default: "/_fragment" + * }, + * profiler?: bool|array{ // Profiler configuration + * enabled?: bool, // Default: false + * collect?: bool, // Default: true + * collect_parameter?: scalar|null, // The name of the parameter to use to enable or disable collection on a per request basis. // Default: null + * only_exceptions?: bool, // Default: false + * only_main_requests?: bool, // Default: false + * dsn?: scalar|null, // Default: "file:%kernel.cache_dir%/profiler" + * collect_serializer_data?: bool, // Enables the serializer data collector and profiler panel. // Default: false + * }, + * workflows?: bool|array{ + * enabled?: bool, // Default: false + * workflows?: array, + * definition_validators?: list, + * support_strategy?: scalar|null, + * initial_marking?: list, + * events_to_dispatch?: list|null, + * places?: list, + * }>, + * transitions: list, + * to?: list, + * weight?: int, // Default: 1 + * metadata?: list, + * }>, + * metadata?: list, + * }>, + * }, + * router?: bool|array{ // Router configuration + * enabled?: bool, // Default: false + * resource: scalar|null, + * type?: scalar|null, + * cache_dir?: scalar|null, // Deprecated: Setting the "framework.router.cache_dir.cache_dir" configuration option is deprecated. It will be removed in version 8.0. // Default: "%kernel.build_dir%" + * default_uri?: scalar|null, // The default URI used to generate URLs in a non-HTTP context. // Default: null + * http_port?: scalar|null, // Default: 80 + * https_port?: scalar|null, // Default: 443 + * strict_requirements?: scalar|null, // set to true to throw an exception when a parameter does not match the requirements set to false to disable exceptions when a parameter does not match the requirements (and return null instead) set to null to disable parameter checks against requirements 'true' is the preferred configuration in development mode, while 'false' or 'null' might be preferred in production // Default: true + * utf8?: bool, // Default: true + * }, + * session?: bool|array{ // Session configuration + * enabled?: bool, // Default: false + * storage_factory_id?: scalar|null, // Default: "session.storage.factory.native" + * handler_id?: scalar|null, // Defaults to using the native session handler, or to the native *file* session handler if "save_path" is not null. + * name?: scalar|null, + * cookie_lifetime?: scalar|null, + * cookie_path?: scalar|null, + * cookie_domain?: scalar|null, + * cookie_secure?: true|false|"auto", // Default: "auto" + * cookie_httponly?: bool, // Default: true + * cookie_samesite?: null|"lax"|"strict"|"none", // Default: "lax" + * use_cookies?: bool, + * gc_divisor?: scalar|null, + * gc_probability?: scalar|null, + * gc_maxlifetime?: scalar|null, + * save_path?: scalar|null, // Defaults to "%kernel.cache_dir%/sessions" if the "handler_id" option is not null. + * metadata_update_threshold?: int, // Seconds to wait between 2 session metadata updates. // Default: 0 + * sid_length?: int, // Deprecated: Setting the "framework.session.sid_length.sid_length" configuration option is deprecated. It will be removed in version 8.0. No alternative is provided as PHP 8.4 has deprecated the related option. + * sid_bits_per_character?: int, // Deprecated: Setting the "framework.session.sid_bits_per_character.sid_bits_per_character" configuration option is deprecated. It will be removed in version 8.0. No alternative is provided as PHP 8.4 has deprecated the related option. + * }, + * request?: bool|array{ // Request configuration + * enabled?: bool, // Default: false + * formats?: array>, + * }, + * assets?: bool|array{ // Assets configuration + * enabled?: bool, // Default: true + * strict_mode?: bool, // Throw an exception if an entry is missing from the manifest.json. // Default: false + * version_strategy?: scalar|null, // Default: null + * version?: scalar|null, // Default: null + * version_format?: scalar|null, // Default: "%%s?%%s" + * json_manifest_path?: scalar|null, // Default: null + * base_path?: scalar|null, // Default: "" + * base_urls?: list, + * packages?: array, + * }>, + * }, + * asset_mapper?: bool|array{ // Asset Mapper configuration + * enabled?: bool, // Default: false + * paths?: array, + * excluded_patterns?: list, + * exclude_dotfiles?: bool, // If true, any files starting with "." will be excluded from the asset mapper. // Default: true + * server?: bool, // If true, a "dev server" will return the assets from the public directory (true in "debug" mode only by default). // Default: false + * public_prefix?: scalar|null, // The public path where the assets will be written to (and served from when "server" is true). // Default: "/assets/" + * missing_import_mode?: "strict"|"warn"|"ignore", // Behavior if an asset cannot be found when imported from JavaScript or CSS files - e.g. "import './non-existent.js'". "strict" means an exception is thrown, "warn" means a warning is logged, "ignore" means the import is left as-is. // Default: "warn" + * extensions?: array, + * importmap_path?: scalar|null, // The path of the importmap.php file. // Default: "%kernel.project_dir%/importmap.php" + * importmap_polyfill?: scalar|null, // The importmap name that will be used to load the polyfill. Set to false to disable. // Default: "es-module-shims" + * importmap_script_attributes?: array, + * vendor_dir?: scalar|null, // The directory to store JavaScript vendors. // Default: "%kernel.project_dir%/assets/vendor" + * precompress?: bool|array{ // Precompress assets with Brotli, Zstandard and gzip. + * enabled?: bool, // Default: false + * formats?: list, + * extensions?: list, + * }, + * }, + * translator?: bool|array{ // Translator configuration + * enabled?: bool, // Default: true + * fallbacks?: list, + * logging?: bool, // Default: false + * formatter?: scalar|null, // Default: "translator.formatter.default" + * cache_dir?: scalar|null, // Default: "%kernel.cache_dir%/translations" + * default_path?: scalar|null, // The default path used to load translations. // Default: "%kernel.project_dir%/translations" + * paths?: list, + * pseudo_localization?: bool|array{ + * enabled?: bool, // Default: false + * accents?: bool, // Default: true + * expansion_factor?: float, // Default: 1.0 + * brackets?: bool, // Default: true + * parse_html?: bool, // Default: false + * localizable_html_attributes?: list, + * }, + * providers?: array, + * locales?: list, + * }>, + * globals?: array, + * domain?: string, + * }>, + * }, + * validation?: bool|array{ // Validation configuration + * enabled?: bool, // Default: true + * cache?: scalar|null, // Deprecated: Setting the "framework.validation.cache.cache" configuration option is deprecated. It will be removed in version 8.0. + * enable_attributes?: bool, // Default: true + * static_method?: list, + * translation_domain?: scalar|null, // Default: "validators" + * email_validation_mode?: "html5"|"html5-allow-no-tld"|"strict"|"loose", // Default: "html5" + * mapping?: array{ + * paths?: list, + * }, + * not_compromised_password?: bool|array{ + * enabled?: bool, // When disabled, compromised passwords will be accepted as valid. // Default: true + * endpoint?: scalar|null, // API endpoint for the NotCompromisedPassword Validator. // Default: null + * }, + * disable_translation?: bool, // Default: false + * auto_mapping?: array, + * }>, + * }, + * annotations?: bool|array{ + * enabled?: bool, // Default: false + * }, + * serializer?: bool|array{ // Serializer configuration + * enabled?: bool, // Default: false + * enable_attributes?: bool, // Default: true + * name_converter?: scalar|null, + * circular_reference_handler?: scalar|null, + * max_depth_handler?: scalar|null, + * mapping?: array{ + * paths?: list, + * }, + * default_context?: list, + * named_serializers?: array, + * include_built_in_normalizers?: bool, // Whether to include the built-in normalizers // Default: true + * include_built_in_encoders?: bool, // Whether to include the built-in encoders // Default: true + * }>, + * }, + * property_access?: bool|array{ // Property access configuration + * enabled?: bool, // Default: true + * magic_call?: bool, // Default: false + * magic_get?: bool, // Default: true + * magic_set?: bool, // Default: true + * throw_exception_on_invalid_index?: bool, // Default: false + * throw_exception_on_invalid_property_path?: bool, // Default: true + * }, + * type_info?: bool|array{ // Type info configuration + * enabled?: bool, // Default: true + * aliases?: array, + * }, + * property_info?: bool|array{ // Property info configuration + * enabled?: bool, // Default: true + * with_constructor_extractor?: bool, // Registers the constructor extractor. + * }, + * cache?: array{ // Cache configuration + * prefix_seed?: scalar|null, // Used to namespace cache keys when using several apps with the same shared backend. // Default: "_%kernel.project_dir%.%kernel.container_class%" + * app?: scalar|null, // App related cache pools configuration. // Default: "cache.adapter.filesystem" + * system?: scalar|null, // System related cache pools configuration. // Default: "cache.adapter.system" + * directory?: scalar|null, // Default: "%kernel.share_dir%/pools/app" + * default_psr6_provider?: scalar|null, + * default_redis_provider?: scalar|null, // Default: "redis://localhost" + * default_valkey_provider?: scalar|null, // Default: "valkey://localhost" + * default_memcached_provider?: scalar|null, // Default: "memcached://localhost" + * default_doctrine_dbal_provider?: scalar|null, // Default: "database_connection" + * default_pdo_provider?: scalar|null, // Default: null + * pools?: array, + * tags?: scalar|null, // Default: null + * public?: bool, // Default: false + * default_lifetime?: scalar|null, // Default lifetime of the pool. + * provider?: scalar|null, // Overwrite the setting from the default provider for this adapter. + * early_expiration_message_bus?: scalar|null, + * clearer?: scalar|null, + * }>, + * }, + * php_errors?: array{ // PHP errors handling configuration + * log?: mixed, // Use the application logger instead of the PHP logger for logging PHP errors. // Default: true + * throw?: bool, // Throw PHP errors as \ErrorException instances. // Default: false + * }, + * exceptions?: array, + * web_link?: bool|array{ // Web links configuration + * enabled?: bool, // Default: false + * }, + * lock?: bool|string|array{ // Lock configuration + * enabled?: bool, // Default: false + * resources?: array>, + * }, + * semaphore?: bool|string|array{ // Semaphore configuration + * enabled?: bool, // Default: false + * resources?: array, + * }, + * messenger?: bool|array{ // Messenger configuration + * enabled?: bool, // Default: false + * routing?: array, + * }>, + * serializer?: array{ + * default_serializer?: scalar|null, // Service id to use as the default serializer for the transports. // Default: "messenger.transport.native_php_serializer" + * symfony_serializer?: array{ + * format?: scalar|null, // Serialization format for the messenger.transport.symfony_serializer service (which is not the serializer used by default). // Default: "json" + * context?: array, + * }, + * }, + * transports?: array, + * failure_transport?: scalar|null, // Transport name to send failed messages to (after all retries have failed). // Default: null + * retry_strategy?: string|array{ + * service?: scalar|null, // Service id to override the retry strategy entirely. // Default: null + * max_retries?: int, // Default: 3 + * delay?: int, // Time in ms to delay (or the initial value when multiplier is used). // Default: 1000 + * multiplier?: float, // If greater than 1, delay will grow exponentially for each retry: this delay = (delay * (multiple ^ retries)). // Default: 2 + * max_delay?: int, // Max time in ms that a retry should ever be delayed (0 = infinite). // Default: 0 + * jitter?: float, // Randomness to apply to the delay (between 0 and 1). // Default: 0.1 + * }, + * rate_limiter?: scalar|null, // Rate limiter name to use when processing messages. // Default: null + * }>, + * failure_transport?: scalar|null, // Transport name to send failed messages to (after all retries have failed). // Default: null + * stop_worker_on_signals?: list, + * default_bus?: scalar|null, // Default: null + * buses?: array, + * }>, + * }>, + * }, + * scheduler?: bool|array{ // Scheduler configuration + * enabled?: bool, // Default: false + * }, + * disallow_search_engine_index?: bool, // Enabled by default when debug is enabled. // Default: false + * http_client?: bool|array{ // HTTP Client configuration + * enabled?: bool, // Default: false + * max_host_connections?: int, // The maximum number of connections to a single host. + * default_options?: array{ + * headers?: array, + * vars?: list, + * max_redirects?: int, // The maximum number of redirects to follow. + * http_version?: scalar|null, // The default HTTP version, typically 1.1 or 2.0, leave to null for the best version. + * resolve?: array, + * proxy?: scalar|null, // The URL of the proxy to pass requests through or null for automatic detection. + * no_proxy?: scalar|null, // A comma separated list of hosts that do not require a proxy to be reached. + * timeout?: float, // The idle timeout, defaults to the "default_socket_timeout" ini parameter. + * max_duration?: float, // The maximum execution time for the request+response as a whole. + * bindto?: scalar|null, // A network interface name, IP address, a host name or a UNIX socket to bind to. + * verify_peer?: bool, // Indicates if the peer should be verified in a TLS context. + * verify_host?: bool, // Indicates if the host should exist as a certificate common name. + * cafile?: scalar|null, // A certificate authority file. + * capath?: scalar|null, // A directory that contains multiple certificate authority files. + * local_cert?: scalar|null, // A PEM formatted certificate file. + * local_pk?: scalar|null, // A private key file. + * passphrase?: scalar|null, // The passphrase used to encrypt the "local_pk" file. + * ciphers?: scalar|null, // A list of TLS ciphers separated by colons, commas or spaces (e.g. "RC3-SHA:TLS13-AES-128-GCM-SHA256"...) + * peer_fingerprint?: array{ // Associative array: hashing algorithm => hash(es). + * sha1?: mixed, + * pin-sha256?: mixed, + * md5?: mixed, + * }, + * crypto_method?: scalar|null, // The minimum version of TLS to accept; must be one of STREAM_CRYPTO_METHOD_TLSv*_CLIENT constants. + * extra?: list, + * rate_limiter?: scalar|null, // Rate limiter name to use for throttling requests. // Default: null + * caching?: bool|array{ // Caching configuration. + * enabled?: bool, // Default: false + * cache_pool?: string, // The taggable cache pool to use for storing the responses. // Default: "cache.http_client" + * shared?: bool, // Indicates whether the cache is shared (public) or private. // Default: true + * max_ttl?: int, // The maximum TTL (in seconds) allowed for cached responses. Null means no cap. // Default: null + * }, + * retry_failed?: bool|array{ + * enabled?: bool, // Default: false + * retry_strategy?: scalar|null, // service id to override the retry strategy. // Default: null + * http_codes?: array, + * }>, + * max_retries?: int, // Default: 3 + * delay?: int, // Time in ms to delay (or the initial value when multiplier is used). // Default: 1000 + * multiplier?: float, // If greater than 1, delay will grow exponentially for each retry: delay * (multiple ^ retries). // Default: 2 + * max_delay?: int, // Max time in ms that a retry should ever be delayed (0 = infinite). // Default: 0 + * jitter?: float, // Randomness in percent (between 0 and 1) to apply to the delay. // Default: 0.1 + * }, + * }, + * mock_response_factory?: scalar|null, // The id of the service that should generate mock responses. It should be either an invokable or an iterable. + * scoped_clients?: array, + * headers?: array, + * max_redirects?: int, // The maximum number of redirects to follow. + * http_version?: scalar|null, // The default HTTP version, typically 1.1 or 2.0, leave to null for the best version. + * resolve?: array, + * proxy?: scalar|null, // The URL of the proxy to pass requests through or null for automatic detection. + * no_proxy?: scalar|null, // A comma separated list of hosts that do not require a proxy to be reached. + * timeout?: float, // The idle timeout, defaults to the "default_socket_timeout" ini parameter. + * max_duration?: float, // The maximum execution time for the request+response as a whole. + * bindto?: scalar|null, // A network interface name, IP address, a host name or a UNIX socket to bind to. + * verify_peer?: bool, // Indicates if the peer should be verified in a TLS context. + * verify_host?: bool, // Indicates if the host should exist as a certificate common name. + * cafile?: scalar|null, // A certificate authority file. + * capath?: scalar|null, // A directory that contains multiple certificate authority files. + * local_cert?: scalar|null, // A PEM formatted certificate file. + * local_pk?: scalar|null, // A private key file. + * passphrase?: scalar|null, // The passphrase used to encrypt the "local_pk" file. + * ciphers?: scalar|null, // A list of TLS ciphers separated by colons, commas or spaces (e.g. "RC3-SHA:TLS13-AES-128-GCM-SHA256"...). + * peer_fingerprint?: array{ // Associative array: hashing algorithm => hash(es). + * sha1?: mixed, + * pin-sha256?: mixed, + * md5?: mixed, + * }, + * crypto_method?: scalar|null, // The minimum version of TLS to accept; must be one of STREAM_CRYPTO_METHOD_TLSv*_CLIENT constants. + * extra?: list, + * rate_limiter?: scalar|null, // Rate limiter name to use for throttling requests. // Default: null + * caching?: bool|array{ // Caching configuration. + * enabled?: bool, // Default: false + * cache_pool?: string, // The taggable cache pool to use for storing the responses. // Default: "cache.http_client" + * shared?: bool, // Indicates whether the cache is shared (public) or private. // Default: true + * max_ttl?: int, // The maximum TTL (in seconds) allowed for cached responses. Null means no cap. // Default: null + * }, + * retry_failed?: bool|array{ + * enabled?: bool, // Default: false + * retry_strategy?: scalar|null, // service id to override the retry strategy. // Default: null + * http_codes?: array, + * }>, + * max_retries?: int, // Default: 3 + * delay?: int, // Time in ms to delay (or the initial value when multiplier is used). // Default: 1000 + * multiplier?: float, // If greater than 1, delay will grow exponentially for each retry: delay * (multiple ^ retries). // Default: 2 + * max_delay?: int, // Max time in ms that a retry should ever be delayed (0 = infinite). // Default: 0 + * jitter?: float, // Randomness in percent (between 0 and 1) to apply to the delay. // Default: 0.1 + * }, + * }>, + * }, + * mailer?: bool|array{ // Mailer configuration + * enabled?: bool, // Default: true + * message_bus?: scalar|null, // The message bus to use. Defaults to the default bus if the Messenger component is installed. // Default: null + * dsn?: scalar|null, // Default: null + * transports?: array, + * envelope?: array{ // Mailer Envelope configuration + * sender?: scalar|null, + * recipients?: list, + * allowed_recipients?: list, + * }, + * headers?: array, + * dkim_signer?: bool|array{ // DKIM signer configuration + * enabled?: bool, // Default: false + * key?: scalar|null, // Key content, or path to key (in PEM format with the `file://` prefix) // Default: "" + * domain?: scalar|null, // Default: "" + * select?: scalar|null, // Default: "" + * passphrase?: scalar|null, // The private key passphrase // Default: "" + * options?: array, + * }, + * smime_signer?: bool|array{ // S/MIME signer configuration + * enabled?: bool, // Default: false + * key?: scalar|null, // Path to key (in PEM format) // Default: "" + * certificate?: scalar|null, // Path to certificate (in PEM format without the `file://` prefix) // Default: "" + * passphrase?: scalar|null, // The private key passphrase // Default: null + * extra_certificates?: scalar|null, // Default: null + * sign_options?: int, // Default: null + * }, + * smime_encrypter?: bool|array{ // S/MIME encrypter configuration + * enabled?: bool, // Default: false + * repository?: scalar|null, // S/MIME certificate repository service. This service shall implement the `Symfony\Component\Mailer\EventListener\SmimeCertificateRepositoryInterface`. // Default: "" + * cipher?: int, // A set of algorithms used to encrypt the message // Default: null + * }, + * }, + * secrets?: bool|array{ + * enabled?: bool, // Default: true + * vault_directory?: scalar|null, // Default: "%kernel.project_dir%/config/secrets/%kernel.runtime_environment%" + * local_dotenv_file?: scalar|null, // Default: "%kernel.project_dir%/.env.%kernel.runtime_environment%.local" + * decryption_env_var?: scalar|null, // Default: "base64:default::SYMFONY_DECRYPTION_SECRET" + * }, + * notifier?: bool|array{ // Notifier configuration + * enabled?: bool, // Default: false + * message_bus?: scalar|null, // The message bus to use. Defaults to the default bus if the Messenger component is installed. // Default: null + * chatter_transports?: array, + * texter_transports?: array, + * notification_on_failed_messages?: bool, // Default: false + * channel_policy?: array>, + * admin_recipients?: list, + * }, + * rate_limiter?: bool|array{ // Rate limiter configuration + * enabled?: bool, // Default: false + * limiters?: array, + * limit?: int, // The maximum allowed hits in a fixed interval or burst. + * interval?: scalar|null, // Configures the fixed interval if "policy" is set to "fixed_window" or "sliding_window". The value must be a number followed by "second", "minute", "hour", "day", "week" or "month" (or their plural equivalent). + * rate?: array{ // Configures the fill rate if "policy" is set to "token_bucket". + * interval?: scalar|null, // Configures the rate interval. The value must be a number followed by "second", "minute", "hour", "day", "week" or "month" (or their plural equivalent). + * amount?: int, // Amount of tokens to add each interval. // Default: 1 + * }, + * }>, + * }, + * uid?: bool|array{ // Uid configuration + * enabled?: bool, // Default: false + * default_uuid_version?: 7|6|4|1, // Default: 7 + * name_based_uuid_version?: 5|3, // Default: 5 + * name_based_uuid_namespace?: scalar|null, + * time_based_uuid_version?: 7|6|1, // Default: 7 + * time_based_uuid_node?: scalar|null, + * }, + * html_sanitizer?: bool|array{ // HtmlSanitizer configuration + * enabled?: bool, // Default: false + * sanitizers?: array, + * block_elements?: list, + * drop_elements?: list, + * allow_attributes?: array, + * drop_attributes?: array, + * force_attributes?: array>, + * force_https_urls?: bool, // Transforms URLs using the HTTP scheme to use the HTTPS scheme instead. // Default: false + * allowed_link_schemes?: list, + * allowed_link_hosts?: list|null, + * allow_relative_links?: bool, // Allows relative URLs to be used in links href attributes. // Default: false + * allowed_media_schemes?: list, + * allowed_media_hosts?: list|null, + * allow_relative_medias?: bool, // Allows relative URLs to be used in media source attributes (img, audio, video, ...). // Default: false + * with_attribute_sanitizers?: list, + * without_attribute_sanitizers?: list, + * max_input_length?: int, // The maximum length allowed for the sanitized input. // Default: 0 + * }>, + * }, + * webhook?: bool|array{ // Webhook configuration + * enabled?: bool, // Default: false + * message_bus?: scalar|null, // The message bus to use. // Default: "messenger.default_bus" + * routing?: array, + * }, + * remote-event?: bool|array{ // RemoteEvent configuration + * enabled?: bool, // Default: false + * }, + * json_streamer?: bool|array{ // JSON streamer configuration + * enabled?: bool, // Default: false + * }, + * } + * @psalm-type NelmioSecurityConfig = array{ + * signed_cookie?: array{ + * names?: list, + * secret?: scalar|null, // Default: "%kernel.secret%" + * hash_algo?: scalar|null, + * legacy_hash_algo?: scalar|null, // Fallback algorithm to allow for frictionless hash algorithm upgrades. Use with caution and as a temporary measure as it allows for downgrade attacks. // Default: null + * separator?: scalar|null, // Default: "." + * }, + * clickjacking?: array{ + * hosts?: list, + * paths?: array, + * content_types?: list, + * }, + * external_redirects?: array{ + * abort?: bool, // Default: false + * override?: scalar|null, // Default: null + * forward_as?: scalar|null, // Default: null + * log?: bool, // Default: false + * allow_list?: list, + * }, + * flexible_ssl?: bool|array{ + * enabled?: bool, // Default: false + * cookie_name?: scalar|null, // Default: "auth" + * unsecured_logout?: bool, // Default: false + * }, + * forced_ssl?: bool|array{ + * enabled?: bool, // Default: false + * hsts_max_age?: scalar|null, // Default: null + * hsts_subdomains?: bool, // Default: false + * hsts_preload?: bool, // Default: false + * allow_list?: list, + * hosts?: list, + * redirect_status_code?: scalar|null, // Default: 302 + * }, + * content_type?: array{ + * nosniff?: bool, // Default: false + * }, + * xss_protection?: array{ // Deprecated: The "xss_protection" option is deprecated, use Content Security Policy without allowing "unsafe-inline" scripts instead. + * enabled?: bool, // Default: false + * mode_block?: bool, // Default: false + * report_uri?: scalar|null, // Default: null + * }, + * csp?: bool|array{ + * enabled?: bool, // Default: true + * request_matcher?: scalar|null, // Default: null + * hosts?: list, + * content_types?: list, + * report_endpoint?: array{ + * log_channel?: scalar|null, // Default: null + * log_formatter?: scalar|null, // Default: "nelmio_security.csp_report.log_formatter" + * log_level?: "alert"|"critical"|"debug"|"emergency"|"error"|"info"|"notice"|"warning", // Default: "notice" + * filters?: array{ + * domains?: bool, // Default: true + * schemes?: bool, // Default: true + * browser_bugs?: bool, // Default: true + * injected_scripts?: bool, // Default: true + * }, + * dismiss?: list>, + * }, + * compat_headers?: bool, // Default: true + * report_logger_service?: scalar|null, // Default: "logger" + * hash?: array{ + * algorithm?: "sha256"|"sha384"|"sha512", // The algorithm to use for hashes // Default: "sha256" + * }, + * report?: array{ + * level1_fallback?: bool, // Provides CSP Level 1 fallback when using hash or nonce (CSP level 2) by adding 'unsafe-inline' source. See https://www.w3.org/TR/CSP2/#directive-script-src and https://www.w3.org/TR/CSP2/#directive-style-src // Default: true + * browser_adaptive?: bool|array{ // Do not send directives that browser do not support + * enabled?: bool, // Default: false + * parser?: scalar|null, // Default: "nelmio_security.ua_parser.ua_php" + * }, + * default-src?: list, + * base-uri?: list, + * block-all-mixed-content?: bool, // Default: false + * child-src?: list, + * connect-src?: list, + * font-src?: list, + * form-action?: list, + * frame-ancestors?: list, + * frame-src?: list, + * img-src?: list, + * manifest-src?: list, + * media-src?: list, + * object-src?: list, + * plugin-types?: list, + * script-src?: list, + * style-src?: list, + * upgrade-insecure-requests?: bool, // Default: false + * report-uri?: list, + * worker-src?: list, + * prefetch-src?: list, + * report-to?: scalar|null, + * }, + * enforce?: array{ + * level1_fallback?: bool, // Provides CSP Level 1 fallback when using hash or nonce (CSP level 2) by adding 'unsafe-inline' source. See https://www.w3.org/TR/CSP2/#directive-script-src and https://www.w3.org/TR/CSP2/#directive-style-src // Default: true + * browser_adaptive?: bool|array{ // Do not send directives that browser do not support + * enabled?: bool, // Default: false + * parser?: scalar|null, // Default: "nelmio_security.ua_parser.ua_php" + * }, + * default-src?: list, + * base-uri?: list, + * block-all-mixed-content?: bool, // Default: false + * child-src?: list, + * connect-src?: list, + * font-src?: list, + * form-action?: list, + * frame-ancestors?: list, + * frame-src?: list, + * img-src?: list, + * manifest-src?: list, + * media-src?: list, + * object-src?: list, + * plugin-types?: list, + * script-src?: list, + * style-src?: list, + * upgrade-insecure-requests?: bool, // Default: false + * report-uri?: list, + * worker-src?: list, + * prefetch-src?: list, + * report-to?: scalar|null, + * }, + * }, + * referrer_policy?: bool|array{ + * enabled?: bool, // Default: false + * policies?: list, + * }, + * permissions_policy?: bool|array{ + * enabled?: bool, // Default: false + * policies?: array{ + * accelerometer?: mixed, // Default: null + * ambient_light_sensor?: mixed, // Default: null + * attribution_reporting?: mixed, // Default: null + * autoplay?: mixed, // Default: null + * bluetooth?: mixed, // Default: null + * browsing_topics?: mixed, // Default: null + * camera?: mixed, // Default: null + * captured_surface_control?: mixed, // Default: null + * compute_pressure?: mixed, // Default: null + * cross_origin_isolated?: mixed, // Default: null + * deferred_fetch?: mixed, // Default: null + * deferred_fetch_minimal?: mixed, // Default: null + * display_capture?: mixed, // Default: null + * encrypted_media?: mixed, // Default: null + * fullscreen?: mixed, // Default: null + * gamepad?: mixed, // Default: null + * geolocation?: mixed, // Default: null + * gyroscope?: mixed, // Default: null + * hid?: mixed, // Default: null + * identity_credentials_get?: mixed, // Default: null + * idle_detection?: mixed, // Default: null + * interest_cohort?: mixed, // Default: null + * language_detector?: mixed, // Default: null + * local_fonts?: mixed, // Default: null + * magnetometer?: mixed, // Default: null + * microphone?: mixed, // Default: null + * midi?: mixed, // Default: null + * otp_credentials?: mixed, // Default: null + * payment?: mixed, // Default: null + * picture_in_picture?: mixed, // Default: null + * publickey_credentials_create?: mixed, // Default: null + * publickey_credentials_get?: mixed, // Default: null + * screen_wake_lock?: mixed, // Default: null + * serial?: mixed, // Default: null + * speaker_selection?: mixed, // Default: null + * storage_access?: mixed, // Default: null + * summarizer?: mixed, // Default: null + * translator?: mixed, // Default: null + * usb?: mixed, // Default: null + * web_share?: mixed, // Default: null + * window_management?: mixed, // Default: null + * xr_spatial_tracking?: mixed, // Default: null + * }, + * }, + * } + * @psalm-type OpenConextMonitorConfig = array + * @psalm-type SurfnetStepupConfig = array{ + * logging: array{ + * application_name: scalar|null, // This is the application name that is included with each log message + * }, + * loa_definition?: bool|array{ + * enabled?: bool, // Default: true + * loa1?: scalar|null, + * loa2?: scalar|null, + * loa3?: scalar|null, + * loa_self_asserted?: scalar|null, + * }, + * attach_request_id_injector_to?: list, + * gateway_api?: bool|array{ // Gateway API configuration + * enabled?: bool, // Default: false + * credentials?: array{ // Basic authentication credentials + * username: scalar|null, // Username for the Gateway API + * password: scalar|null, // Password for the Gateway API + * }, + * url: scalar|null, // The URL to the Gateway application (e.g. https://gateway.tld) + * }, + * sms: bool|array{ // SMS configuration + * enabled?: bool, // Default: true + * service?: scalar|null, // The ID of the SMS service used for sending SMS messages. Must implement "Surfnet\StepupBundle\Service\SmsService". // Default: "surfnet_stepup.service.gateway_api_sms" + * originator?: scalar|null, // Originator (sender) for SMS messages + * otp_expiry_interval?: int, // After how many seconds an SMS challenge OTP expires + * maximum_otp_requests?: int, // How many challenges a user may request during a session + * }, + * locale_cookie?: bool|array{ // Cookie settings for locale cookie + * enabled?: bool, // Default: true + * name?: scalar|null, // Name for the cookie // Default: "stepup_locale" + * domain?: scalar|null, // Domain the cookie is scoped to // Default: "example.org" + * expire?: int, // Defines a specific number of seconds for when the browser should delete the cookie. // Default: 0 + * path?: scalar|null, // Path the cookie is scoped to // Default: "/" + * secure?: bool, // Only transmit cookie over secure connections? // Default: true + * http_only?: bool, // Directs browsers not to expose cookies through channels other than HTTP (and HTTPS) requests // Default: true + * }, + * } + * @psalm-type MonologConfig = array{ + * use_microseconds?: scalar|null, // Default: true + * channels?: list, + * handlers?: array, + * excluded_http_codes?: list, + * }>, + * accepted_levels?: list, + * min_level?: scalar|null, // Default: "DEBUG" + * max_level?: scalar|null, // Default: "EMERGENCY" + * buffer_size?: scalar|null, // Default: 0 + * flush_on_overflow?: bool, // Default: false + * handler?: scalar|null, + * url?: scalar|null, + * exchange?: scalar|null, + * exchange_name?: scalar|null, // Default: "log" + * room?: scalar|null, + * message_format?: scalar|null, // Default: "text" + * api_version?: scalar|null, // Default: null + * channel?: scalar|null, // Default: null + * bot_name?: scalar|null, // Default: "Monolog" + * use_attachment?: scalar|null, // Default: true + * use_short_attachment?: scalar|null, // Default: false + * include_extra?: scalar|null, // Default: false + * icon_emoji?: scalar|null, // Default: null + * webhook_url?: scalar|null, + * exclude_fields?: list, + * team?: scalar|null, + * notify?: scalar|null, // Default: false + * nickname?: scalar|null, // Default: "Monolog" + * token?: scalar|null, + * region?: scalar|null, + * source?: scalar|null, + * use_ssl?: bool, // Default: true + * user?: mixed, + * title?: scalar|null, // Default: null + * host?: scalar|null, // Default: null + * port?: scalar|null, // Default: 514 + * config?: list, + * members?: list, + * connection_string?: scalar|null, + * timeout?: scalar|null, + * time?: scalar|null, // Default: 60 + * deduplication_level?: scalar|null, // Default: 400 + * store?: scalar|null, // Default: null + * connection_timeout?: scalar|null, + * persistent?: bool, + * dsn?: scalar|null, + * hub_id?: scalar|null, // Default: null + * client_id?: scalar|null, // Default: null + * auto_log_stacks?: scalar|null, // Default: false + * release?: scalar|null, // Default: null + * environment?: scalar|null, // Default: null + * message_type?: scalar|null, // Default: 0 + * parse_mode?: scalar|null, // Default: null + * disable_webpage_preview?: bool|null, // Default: null + * disable_notification?: bool|null, // Default: null + * split_long_messages?: bool, // Default: false + * delay_between_messages?: bool, // Default: false + * topic?: int, // Default: null + * factor?: int, // Default: 1 + * tags?: list, + * console_formater_options?: mixed, // Deprecated: "monolog.handlers..console_formater_options.console_formater_options" is deprecated, use "monolog.handlers..console_formater_options.console_formatter_options" instead. + * console_formatter_options?: mixed, // Default: [] + * formatter?: scalar|null, + * nested?: bool, // Default: false + * publisher?: string|array{ + * id?: scalar|null, + * hostname?: scalar|null, + * port?: scalar|null, // Default: 12201 + * chunk_size?: scalar|null, // Default: 1420 + * encoder?: "json"|"compressed_json", + * }, + * mongo?: string|array{ + * id?: scalar|null, + * host?: scalar|null, + * port?: scalar|null, // Default: 27017 + * user?: scalar|null, + * pass?: scalar|null, + * database?: scalar|null, // Default: "monolog" + * collection?: scalar|null, // Default: "logs" + * }, + * mongodb?: string|array{ + * id?: scalar|null, // ID of a MongoDB\Client service + * uri?: scalar|null, + * username?: scalar|null, + * password?: scalar|null, + * database?: scalar|null, // Default: "monolog" + * collection?: scalar|null, // Default: "logs" + * }, + * elasticsearch?: string|array{ + * id?: scalar|null, + * hosts?: list, + * host?: scalar|null, + * port?: scalar|null, // Default: 9200 + * transport?: scalar|null, // Default: "Http" + * user?: scalar|null, // Default: null + * password?: scalar|null, // Default: null + * }, + * index?: scalar|null, // Default: "monolog" + * document_type?: scalar|null, // Default: "logs" + * ignore_error?: scalar|null, // Default: false + * redis?: string|array{ + * id?: scalar|null, + * host?: scalar|null, + * password?: scalar|null, // Default: null + * port?: scalar|null, // Default: 6379 + * database?: scalar|null, // Default: 0 + * key_name?: scalar|null, // Default: "monolog_redis" + * }, + * predis?: string|array{ + * id?: scalar|null, + * host?: scalar|null, + * }, + * from_email?: scalar|null, + * to_email?: list, + * subject?: scalar|null, + * content_type?: scalar|null, // Default: null + * headers?: list, + * mailer?: scalar|null, // Default: null + * email_prototype?: string|array{ + * id: scalar|null, + * method?: scalar|null, // Default: null + * }, + * lazy?: bool, // Default: true + * verbosity_levels?: array{ + * VERBOSITY_QUIET?: scalar|null, // Default: "ERROR" + * VERBOSITY_NORMAL?: scalar|null, // Default: "WARNING" + * VERBOSITY_VERBOSE?: scalar|null, // Default: "NOTICE" + * VERBOSITY_VERY_VERBOSE?: scalar|null, // Default: "INFO" + * VERBOSITY_DEBUG?: scalar|null, // Default: "DEBUG" + * }, + * channels?: string|array{ + * type?: scalar|null, + * elements?: list, + * }, + * }>, + * } + * @psalm-type DoctrineConfig = array{ + * dbal?: array{ + * default_connection?: scalar|null, + * types?: array, + * driver_schemes?: array, + * connections?: array, + * mapping_types?: array, + * default_table_options?: array, + * schema_manager_factory?: scalar|null, // Default: "doctrine.dbal.legacy_schema_manager_factory" + * result_cache?: scalar|null, + * slaves?: array, + * replicas?: array, + * }>, + * }, + * orm?: array{ + * default_entity_manager?: scalar|null, + * auto_generate_proxy_classes?: scalar|null, // Auto generate mode possible values are: "NEVER", "ALWAYS", "FILE_NOT_EXISTS", "EVAL", "FILE_NOT_EXISTS_OR_CHANGED", this option is ignored when the "enable_native_lazy_objects" option is true // Default: false + * enable_lazy_ghost_objects?: bool, // Enables the new implementation of proxies based on lazy ghosts instead of using the legacy implementation // Default: true + * enable_native_lazy_objects?: bool, // Enables the new native implementation of PHP lazy objects instead of generated proxies // Default: false + * proxy_dir?: scalar|null, // Configures the path where generated proxy classes are saved when using non-native lazy objects, this option is ignored when the "enable_native_lazy_objects" option is true // Default: "%kernel.build_dir%/doctrine/orm/Proxies" + * proxy_namespace?: scalar|null, // Defines the root namespace for generated proxy classes when using non-native lazy objects, this option is ignored when the "enable_native_lazy_objects" option is true // Default: "Proxies" + * controller_resolver?: bool|array{ + * enabled?: bool, // Default: true + * auto_mapping?: bool|null, // Set to false to disable using route placeholders as lookup criteria when the primary key doesn't match the argument name // Default: null + * evict_cache?: bool, // Set to true to fetch the entity from the database instead of using the cache, if any // Default: false + * }, + * entity_managers?: array, + * }>, + * }>, + * }, + * connection?: scalar|null, + * class_metadata_factory_name?: scalar|null, // Default: "Doctrine\\ORM\\Mapping\\ClassMetadataFactory" + * default_repository_class?: scalar|null, // Default: "Doctrine\\ORM\\EntityRepository" + * auto_mapping?: scalar|null, // Default: false + * naming_strategy?: scalar|null, // Default: "doctrine.orm.naming_strategy.default" + * quote_strategy?: scalar|null, // Default: "doctrine.orm.quote_strategy.default" + * typed_field_mapper?: scalar|null, // Default: "doctrine.orm.typed_field_mapper.default" + * entity_listener_resolver?: scalar|null, // Default: null + * fetch_mode_subselect_batch_size?: scalar|null, + * repository_factory?: scalar|null, // Default: "doctrine.orm.container_repository_factory" + * schema_ignore_classes?: list, + * report_fields_where_declared?: bool, // Set to "true" to opt-in to the new mapping driver mode that was added in Doctrine ORM 2.16 and will be mandatory in ORM 3.0. See https://github.com/doctrine/orm/pull/10455. // Default: true + * validate_xml_mapping?: bool, // Set to "true" to opt-in to the new mapping driver mode that was added in Doctrine ORM 2.14. See https://github.com/doctrine/orm/pull/6728. // Default: false + * second_level_cache?: array{ + * region_cache_driver?: string|array{ + * type?: scalar|null, // Default: null + * id?: scalar|null, + * pool?: scalar|null, + * }, + * region_lock_lifetime?: scalar|null, // Default: 60 + * log_enabled?: bool, // Default: false + * region_lifetime?: scalar|null, // Default: 3600 + * enabled?: bool, // Default: true + * factory?: scalar|null, + * regions?: array, + * loggers?: array, + * }, + * hydrators?: array, + * mappings?: array, + * dql?: array{ + * string_functions?: array, + * numeric_functions?: array, + * datetime_functions?: array, + * }, + * filters?: array, + * }>, + * identity_generation_preferences?: array, + * }>, + * resolve_target_entities?: array, + * }, + * } + * @psalm-type DoctrineMigrationsConfig = array{ + * enable_service_migrations?: bool, // Whether to enable fetching migrations from the service container. // Default: false + * migrations_paths?: array, + * services?: array, + * factories?: array, + * storage?: array{ // Storage to use for migration status metadata. + * table_storage?: array{ // The default metadata storage, implemented as a table in the database. + * table_name?: scalar|null, // Default: null + * version_column_name?: scalar|null, // Default: null + * version_column_length?: scalar|null, // Default: null + * executed_at_column_name?: scalar|null, // Default: null + * execution_time_column_name?: scalar|null, // Default: null + * }, + * }, + * migrations?: list, + * connection?: scalar|null, // Connection name to use for the migrations database. // Default: null + * em?: scalar|null, // Entity manager name to use for the migrations database (available when doctrine/orm is installed). // Default: null + * all_or_nothing?: scalar|null, // Run all migrations in a transaction. // Default: false + * check_database_platform?: scalar|null, // Adds an extra check in the generated migrations to allow execution only on the same platform as they were initially generated on. // Default: true + * custom_template?: scalar|null, // Custom template path for generated migration classes. // Default: null + * organize_migrations?: scalar|null, // Organize migrations mode. Possible values are: "BY_YEAR", "BY_YEAR_AND_MONTH", false // Default: false + * enable_profiler?: bool, // Whether or not to enable the profiler collector to calculate and visualize migration status. This adds some queries overhead. // Default: false + * transactional?: bool, // Whether or not to wrap migrations in a single transaction. // Default: true + * } + * @psalm-type LiipTestFixturesConfig = array{ + * cache_db?: array{ + * sqlite?: scalar|null, // Default: null + * ... + * }, + * keep_database_and_schema?: bool, // Default: false + * cache_metadata?: bool, // Default: true + * } + * @psalm-type TwigExtraConfig = array{ + * cache?: bool|array{ + * enabled?: bool, // Default: false + * }, + * html?: bool|array{ + * enabled?: bool, // Default: false + * }, + * markdown?: bool|array{ + * enabled?: bool, // Default: false + * }, + * intl?: bool|array{ + * enabled?: bool, // Default: true + * }, + * cssinliner?: bool|array{ + * enabled?: bool, // Default: false + * }, + * inky?: bool|array{ + * enabled?: bool, // Default: false + * }, + * string?: bool|array{ + * enabled?: bool, // Default: false + * }, + * commonmark?: array{ + * renderer?: array{ // Array of options for rendering HTML. + * block_separator?: scalar|null, + * inner_separator?: scalar|null, + * soft_break?: scalar|null, + * }, + * html_input?: "strip"|"allow"|"escape", // How to handle HTML input. + * allow_unsafe_links?: bool, // Remove risky link and image URLs by setting this to false. // Default: true + * max_nesting_level?: int, // The maximum nesting level for blocks. // Default: 9223372036854775807 + * max_delimiters_per_line?: int, // The maximum number of strong/emphasis delimiters per line. // Default: 9223372036854775807 + * slug_normalizer?: array{ // Array of options for configuring how URL-safe slugs are created. + * instance?: mixed, + * max_length?: int, // Default: 255 + * unique?: mixed, + * }, + * commonmark?: array{ // Array of options for configuring the CommonMark core extension. + * enable_em?: bool, // Default: true + * enable_strong?: bool, // Default: true + * use_asterisk?: bool, // Default: true + * use_underscore?: bool, // Default: true + * unordered_list_markers?: list, + * }, + * ... + * }, + * } + * @psalm-type TwigConfig = array{ + * form_themes?: list, + * globals?: array, + * autoescape_service?: scalar|null, // Default: null + * autoescape_service_method?: scalar|null, // Default: null + * base_template_class?: scalar|null, // Deprecated: The child node "base_template_class" at path "twig.base_template_class" is deprecated. + * cache?: scalar|null, // Default: true + * charset?: scalar|null, // Default: "%kernel.charset%" + * debug?: bool, // Default: "%kernel.debug%" + * strict_variables?: bool, // Default: "%kernel.debug%" + * auto_reload?: scalar|null, + * optimizations?: int, + * default_path?: scalar|null, // The default path used to load templates. // Default: "%kernel.project_dir%/templates" + * file_name_pattern?: list, + * paths?: array, + * date?: array{ // The default format options used by the date filter. + * format?: scalar|null, // Default: "F j, Y H:i" + * interval_format?: scalar|null, // Default: "%d days" + * timezone?: scalar|null, // The timezone used when formatting dates, when set to null, the timezone returned by date_default_timezone_get() is used. // Default: null + * }, + * number_format?: array{ // The default format options for the number_format filter. + * decimals?: int, // Default: 0 + * decimal_point?: scalar|null, // Default: "." + * thousands_separator?: scalar|null, // Default: "," + * }, + * mailer?: array{ + * html_to_text_converter?: scalar|null, // A service implementing the "Symfony\Component\Mime\HtmlToTextConverter\HtmlToTextConverterInterface". // Default: null + * }, + * } + * @psalm-type SecurityConfig = array{ + * access_denied_url?: scalar|null, // Default: null + * session_fixation_strategy?: "none"|"migrate"|"invalidate", // Default: "migrate" + * hide_user_not_found?: bool, // Deprecated: The "hide_user_not_found" option is deprecated and will be removed in 8.0. Use the "expose_security_errors" option instead. + * expose_security_errors?: \Symfony\Component\Security\Http\Authentication\ExposeSecurityLevel::None|\Symfony\Component\Security\Http\Authentication\ExposeSecurityLevel::AccountStatus|\Symfony\Component\Security\Http\Authentication\ExposeSecurityLevel::All, // Default: "none" + * erase_credentials?: bool, // Default: true + * access_decision_manager?: array{ + * strategy?: "affirmative"|"consensus"|"unanimous"|"priority", + * service?: scalar|null, + * strategy_service?: scalar|null, + * allow_if_all_abstain?: bool, // Default: false + * allow_if_equal_granted_denied?: bool, // Default: true + * }, + * password_hashers?: array, + * hash_algorithm?: scalar|null, // Name of hashing algorithm for PBKDF2 (i.e. sha256, sha512, etc..) See hash_algos() for a list of supported algorithms. // Default: "sha512" + * key_length?: scalar|null, // Default: 40 + * ignore_case?: bool, // Default: false + * encode_as_base64?: bool, // Default: true + * iterations?: scalar|null, // Default: 5000 + * cost?: int, // Default: null + * memory_cost?: scalar|null, // Default: null + * time_cost?: scalar|null, // Default: null + * id?: scalar|null, + * }>, + * providers?: array, + * }, + * entity?: array{ + * class: scalar|null, // The full entity class name of your user class. + * property?: scalar|null, // Default: null + * manager_name?: scalar|null, // Default: null + * }, + * memory?: array{ + * users?: array, + * }>, + * }, + * ldap?: array{ + * service: scalar|null, + * base_dn: scalar|null, + * search_dn?: scalar|null, // Default: null + * search_password?: scalar|null, // Default: null + * extra_fields?: list, + * default_roles?: list, + * role_fetcher?: scalar|null, // Default: null + * uid_key?: scalar|null, // Default: "sAMAccountName" + * filter?: scalar|null, // Default: "({uid_key}={user_identifier})" + * password_attribute?: scalar|null, // Default: null + * }, + * }>, + * firewalls: array, + * security?: bool, // Default: true + * user_checker?: scalar|null, // The UserChecker to use when authenticating users in this firewall. // Default: "security.user_checker" + * request_matcher?: scalar|null, + * access_denied_url?: scalar|null, + * access_denied_handler?: scalar|null, + * entry_point?: scalar|null, // An enabled authenticator name or a service id that implements "Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface". + * provider?: scalar|null, + * stateless?: bool, // Default: false + * lazy?: bool, // Default: false + * context?: scalar|null, + * logout?: array{ + * enable_csrf?: bool|null, // Default: null + * csrf_token_id?: scalar|null, // Default: "logout" + * csrf_parameter?: scalar|null, // Default: "_csrf_token" + * csrf_token_manager?: scalar|null, + * path?: scalar|null, // Default: "/logout" + * target?: scalar|null, // Default: "/" + * invalidate_session?: bool, // Default: true + * clear_site_data?: list<"*"|"cache"|"cookies"|"storage"|"executionContexts">, + * delete_cookies?: array, + * }, + * switch_user?: array{ + * provider?: scalar|null, + * parameter?: scalar|null, // Default: "_switch_user" + * role?: scalar|null, // Default: "ROLE_ALLOWED_TO_SWITCH" + * target_route?: scalar|null, // Default: null + * }, + * required_badges?: list, + * custom_authenticators?: list, + * login_throttling?: array{ + * limiter?: scalar|null, // A service id implementing "Symfony\Component\HttpFoundation\RateLimiter\RequestRateLimiterInterface". + * max_attempts?: int, // Default: 5 + * interval?: scalar|null, // Default: "1 minute" + * lock_factory?: scalar|null, // The service ID of the lock factory used by the login rate limiter (or null to disable locking). // Default: null + * cache_pool?: string, // The cache pool to use for storing the limiter state // Default: "cache.rate_limiter" + * storage_service?: string, // The service ID of a custom storage implementation, this precedes any configured "cache_pool" // Default: null + * }, + * x509?: array{ + * provider?: scalar|null, + * user?: scalar|null, // Default: "SSL_CLIENT_S_DN_Email" + * credentials?: scalar|null, // Default: "SSL_CLIENT_S_DN" + * user_identifier?: scalar|null, // Default: "emailAddress" + * }, + * remote_user?: array{ + * provider?: scalar|null, + * user?: scalar|null, // Default: "REMOTE_USER" + * }, + * login_link?: array{ + * check_route: scalar|null, // Route that will validate the login link - e.g. "app_login_link_verify". + * check_post_only?: scalar|null, // If true, only HTTP POST requests to "check_route" will be handled by the authenticator. // Default: false + * signature_properties: list, + * lifetime?: int, // The lifetime of the login link in seconds. // Default: 600 + * max_uses?: int, // Max number of times a login link can be used - null means unlimited within lifetime. // Default: null + * used_link_cache?: scalar|null, // Cache service id used to expired links of max_uses is set. + * success_handler?: scalar|null, // A service id that implements Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface. + * failure_handler?: scalar|null, // A service id that implements Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface. + * provider?: scalar|null, // The user provider to load users from. + * secret?: scalar|null, // Default: "%kernel.secret%" + * always_use_default_target_path?: bool, // Default: false + * default_target_path?: scalar|null, // Default: "/" + * login_path?: scalar|null, // Default: "/login" + * target_path_parameter?: scalar|null, // Default: "_target_path" + * use_referer?: bool, // Default: false + * failure_path?: scalar|null, // Default: null + * failure_forward?: bool, // Default: false + * failure_path_parameter?: scalar|null, // Default: "_failure_path" + * }, + * form_login?: array{ + * provider?: scalar|null, + * remember_me?: bool, // Default: true + * success_handler?: scalar|null, + * failure_handler?: scalar|null, + * check_path?: scalar|null, // Default: "/login_check" + * use_forward?: bool, // Default: false + * login_path?: scalar|null, // Default: "/login" + * username_parameter?: scalar|null, // Default: "_username" + * password_parameter?: scalar|null, // Default: "_password" + * csrf_parameter?: scalar|null, // Default: "_csrf_token" + * csrf_token_id?: scalar|null, // Default: "authenticate" + * enable_csrf?: bool, // Default: false + * post_only?: bool, // Default: true + * form_only?: bool, // Default: false + * always_use_default_target_path?: bool, // Default: false + * default_target_path?: scalar|null, // Default: "/" + * target_path_parameter?: scalar|null, // Default: "_target_path" + * use_referer?: bool, // Default: false + * failure_path?: scalar|null, // Default: null + * failure_forward?: bool, // Default: false + * failure_path_parameter?: scalar|null, // Default: "_failure_path" + * }, + * form_login_ldap?: array{ + * provider?: scalar|null, + * remember_me?: bool, // Default: true + * success_handler?: scalar|null, + * failure_handler?: scalar|null, + * check_path?: scalar|null, // Default: "/login_check" + * use_forward?: bool, // Default: false + * login_path?: scalar|null, // Default: "/login" + * username_parameter?: scalar|null, // Default: "_username" + * password_parameter?: scalar|null, // Default: "_password" + * csrf_parameter?: scalar|null, // Default: "_csrf_token" + * csrf_token_id?: scalar|null, // Default: "authenticate" + * enable_csrf?: bool, // Default: false + * post_only?: bool, // Default: true + * form_only?: bool, // Default: false + * always_use_default_target_path?: bool, // Default: false + * default_target_path?: scalar|null, // Default: "/" + * target_path_parameter?: scalar|null, // Default: "_target_path" + * use_referer?: bool, // Default: false + * failure_path?: scalar|null, // Default: null + * failure_forward?: bool, // Default: false + * failure_path_parameter?: scalar|null, // Default: "_failure_path" + * service?: scalar|null, // Default: "ldap" + * dn_string?: scalar|null, // Default: "{user_identifier}" + * query_string?: scalar|null, + * search_dn?: scalar|null, // Default: "" + * search_password?: scalar|null, // Default: "" + * }, + * json_login?: array{ + * provider?: scalar|null, + * remember_me?: bool, // Default: true + * success_handler?: scalar|null, + * failure_handler?: scalar|null, + * check_path?: scalar|null, // Default: "/login_check" + * use_forward?: bool, // Default: false + * login_path?: scalar|null, // Default: "/login" + * username_path?: scalar|null, // Default: "username" + * password_path?: scalar|null, // Default: "password" + * }, + * json_login_ldap?: array{ + * provider?: scalar|null, + * remember_me?: bool, // Default: true + * success_handler?: scalar|null, + * failure_handler?: scalar|null, + * check_path?: scalar|null, // Default: "/login_check" + * use_forward?: bool, // Default: false + * login_path?: scalar|null, // Default: "/login" + * username_path?: scalar|null, // Default: "username" + * password_path?: scalar|null, // Default: "password" + * service?: scalar|null, // Default: "ldap" + * dn_string?: scalar|null, // Default: "{user_identifier}" + * query_string?: scalar|null, + * search_dn?: scalar|null, // Default: "" + * search_password?: scalar|null, // Default: "" + * }, + * access_token?: array{ + * provider?: scalar|null, + * remember_me?: bool, // Default: true + * success_handler?: scalar|null, + * failure_handler?: scalar|null, + * realm?: scalar|null, // Default: null + * token_extractors?: list, + * token_handler: string|array{ + * id?: scalar|null, + * oidc_user_info?: string|array{ + * base_uri: scalar|null, // Base URI of the userinfo endpoint on the OIDC server, or the OIDC server URI to use the discovery (require "discovery" to be configured). + * discovery?: array{ // Enable the OIDC discovery. + * cache?: array{ + * id: scalar|null, // Cache service id to use to cache the OIDC discovery configuration. + * }, + * }, + * claim?: scalar|null, // Claim which contains the user identifier (e.g. sub, email, etc.). // Default: "sub" + * client?: scalar|null, // HttpClient service id to use to call the OIDC server. + * }, + * oidc?: array{ + * discovery?: array{ // Enable the OIDC discovery. + * base_uri: list, + * cache?: array{ + * id: scalar|null, // Cache service id to use to cache the OIDC discovery configuration. + * }, + * }, + * claim?: scalar|null, // Claim which contains the user identifier (e.g.: sub, email..). // Default: "sub" + * audience: scalar|null, // Audience set in the token, for validation purpose. + * issuers: list, + * algorithm?: array, + * algorithms: list, + * key?: scalar|null, // Deprecated: The "key" option is deprecated and will be removed in 8.0. Use the "keyset" option instead. // JSON-encoded JWK used to sign the token (must contain a "kty" key). + * keyset?: scalar|null, // JSON-encoded JWKSet used to sign the token (must contain a list of valid public keys). + * encryption?: bool|array{ + * enabled?: bool, // Default: false + * enforce?: bool, // When enabled, the token shall be encrypted. // Default: false + * algorithms: list, + * keyset: scalar|null, // JSON-encoded JWKSet used to decrypt the token (must contain a list of valid private keys). + * }, + * }, + * cas?: array{ + * validation_url: scalar|null, // CAS server validation URL + * prefix?: scalar|null, // CAS prefix // Default: "cas" + * http_client?: scalar|null, // HTTP Client service // Default: null + * }, + * oauth2?: scalar|null, + * }, + * }, + * http_basic?: array{ + * provider?: scalar|null, + * realm?: scalar|null, // Default: "Secured Area" + * }, + * http_basic_ldap?: array{ + * provider?: scalar|null, + * realm?: scalar|null, // Default: "Secured Area" + * service?: scalar|null, // Default: "ldap" + * dn_string?: scalar|null, // Default: "{user_identifier}" + * query_string?: scalar|null, + * search_dn?: scalar|null, // Default: "" + * search_password?: scalar|null, // Default: "" + * }, + * remember_me?: array{ + * secret?: scalar|null, // Default: "%kernel.secret%" + * service?: scalar|null, + * user_providers?: list, + * catch_exceptions?: bool, // Default: true + * signature_properties?: list, + * token_provider?: string|array{ + * service?: scalar|null, // The service ID of a custom remember-me token provider. + * doctrine?: bool|array{ + * enabled?: bool, // Default: false + * connection?: scalar|null, // Default: null + * }, + * }, + * token_verifier?: scalar|null, // The service ID of a custom rememberme token verifier. + * name?: scalar|null, // Default: "REMEMBERME" + * lifetime?: int, // Default: 31536000 + * path?: scalar|null, // Default: "/" + * domain?: scalar|null, // Default: null + * secure?: true|false|"auto", // Default: null + * httponly?: bool, // Default: true + * samesite?: null|"lax"|"strict"|"none", // Default: "lax" + * always_remember_me?: bool, // Default: false + * remember_me_parameter?: scalar|null, // Default: "_remember_me" + * }, + * }>, + * access_control?: list, + * attributes?: array, + * route?: scalar|null, // Default: null + * methods?: list, + * allow_if?: scalar|null, // Default: null + * roles?: list, + * }>, + * role_hierarchy?: array>, + * } + * @psalm-type WebProfilerConfig = array{ + * toolbar?: bool|array{ // Profiler toolbar configuration + * enabled?: bool, // Default: false + * ajax_replace?: bool, // Replace toolbar on AJAX requests // Default: false + * }, + * intercept_redirects?: bool, // Default: false + * excluded_ajax_paths?: scalar|null, // Default: "^/((index|app(_[\\w]+)?)\\.php/)?_wdt" + * } + * @psalm-type SurfnetStepupMiddlewareApiConfig = array{ + * http_basic_realm?: scalar|null, // Default: "Secure Gateway API" + * } + * @psalm-type SurfnetStepupMiddlewareCommandHandlingConfig = array{ + * self_service_email_verification_url_template: scalar|null, // Configures the URL where registrants can verify e-mail address ownership. + * self_service_url: scalar|null, // Configures the URL for Self Service. + * email_sender: array{ // Configures the sender used for all outgoing e-mail messages + * name: scalar|null, + * email: scalar|null, + * }, + * email_fallback_locale: scalar|null, + * } + * @psalm-type SurfnetStepupMiddlewareGatewayConfig = array + * @psalm-type SurfnetStepupMiddlewareManagementConfig = array{ + * email_required_locale: scalar|null, + * } + * @psalm-type SurfnetStepupMiddlewareMiddlewareConfig = array{ + * second_factors_display_name: list, + * email_verification_window?: scalar|null, // The amount of seconds after which the email verification url/code expires // Default: 3600 + * enabled_generic_second_factors: list, + * } + * @psalm-type SurfnetSamlConfig = array + * @psalm-type ConfigType = array{ + * imports?: ImportsConfig, + * parameters?: ParametersConfig, + * services?: ServicesConfig, + * framework?: FrameworkConfig, + * nelmio_security?: NelmioSecurityConfig, + * open_conext_monitor?: OpenConextMonitorConfig, + * surfnet_stepup?: SurfnetStepupConfig, + * monolog?: MonologConfig, + * doctrine?: DoctrineConfig, + * doctrine_migrations?: DoctrineMigrationsConfig, + * twig_extra?: TwigExtraConfig, + * twig?: TwigConfig, + * security?: SecurityConfig, + * surfnet_stepup_middleware_api?: SurfnetStepupMiddlewareApiConfig, + * surfnet_stepup_middleware_command_handling?: SurfnetStepupMiddlewareCommandHandlingConfig, + * surfnet_stepup_middleware_gateway?: SurfnetStepupMiddlewareGatewayConfig, + * surfnet_stepup_middleware_management?: SurfnetStepupMiddlewareManagementConfig, + * surfnet_stepup_middleware_middleware?: SurfnetStepupMiddlewareMiddlewareConfig, + * "when@dev"?: array{ + * imports?: ImportsConfig, + * parameters?: ParametersConfig, + * services?: ServicesConfig, + * framework?: FrameworkConfig, + * nelmio_security?: NelmioSecurityConfig, + * open_conext_monitor?: OpenConextMonitorConfig, + * surfnet_stepup?: SurfnetStepupConfig, + * monolog?: MonologConfig, + * doctrine?: DoctrineConfig, + * doctrine_migrations?: DoctrineMigrationsConfig, + * liip_test_fixtures?: LiipTestFixturesConfig, + * twig_extra?: TwigExtraConfig, + * twig?: TwigConfig, + * security?: SecurityConfig, + * web_profiler?: WebProfilerConfig, + * surfnet_stepup_middleware_api?: SurfnetStepupMiddlewareApiConfig, + * surfnet_stepup_middleware_command_handling?: SurfnetStepupMiddlewareCommandHandlingConfig, + * surfnet_stepup_middleware_gateway?: SurfnetStepupMiddlewareGatewayConfig, + * surfnet_stepup_middleware_management?: SurfnetStepupMiddlewareManagementConfig, + * surfnet_stepup_middleware_middleware?: SurfnetStepupMiddlewareMiddlewareConfig, + * }, + * "when@dev_event_replay"?: array{ + * imports?: ImportsConfig, + * parameters?: ParametersConfig, + * services?: ServicesConfig, + * framework?: FrameworkConfig, + * nelmio_security?: NelmioSecurityConfig, + * open_conext_monitor?: OpenConextMonitorConfig, + * surfnet_stepup?: SurfnetStepupConfig, + * monolog?: MonologConfig, + * doctrine?: DoctrineConfig, + * doctrine_migrations?: DoctrineMigrationsConfig, + * twig_extra?: TwigExtraConfig, + * twig?: TwigConfig, + * security?: SecurityConfig, + * web_profiler?: WebProfilerConfig, + * surfnet_stepup_middleware_api?: SurfnetStepupMiddlewareApiConfig, + * surfnet_stepup_middleware_command_handling?: SurfnetStepupMiddlewareCommandHandlingConfig, + * surfnet_stepup_middleware_gateway?: SurfnetStepupMiddlewareGatewayConfig, + * surfnet_stepup_middleware_management?: SurfnetStepupMiddlewareManagementConfig, + * surfnet_stepup_middleware_middleware?: SurfnetStepupMiddlewareMiddlewareConfig, + * }, + * "when@prod"?: array{ + * imports?: ImportsConfig, + * parameters?: ParametersConfig, + * services?: ServicesConfig, + * framework?: FrameworkConfig, + * nelmio_security?: NelmioSecurityConfig, + * open_conext_monitor?: OpenConextMonitorConfig, + * surfnet_stepup?: SurfnetStepupConfig, + * monolog?: MonologConfig, + * doctrine?: DoctrineConfig, + * doctrine_migrations?: DoctrineMigrationsConfig, + * twig_extra?: TwigExtraConfig, + * twig?: TwigConfig, + * security?: SecurityConfig, + * surfnet_stepup_middleware_api?: SurfnetStepupMiddlewareApiConfig, + * surfnet_stepup_middleware_command_handling?: SurfnetStepupMiddlewareCommandHandlingConfig, + * surfnet_stepup_middleware_gateway?: SurfnetStepupMiddlewareGatewayConfig, + * surfnet_stepup_middleware_management?: SurfnetStepupMiddlewareManagementConfig, + * surfnet_stepup_middleware_middleware?: SurfnetStepupMiddlewareMiddlewareConfig, + * }, + * "when@prod_event_replay"?: array{ + * imports?: ImportsConfig, + * parameters?: ParametersConfig, + * services?: ServicesConfig, + * framework?: FrameworkConfig, + * nelmio_security?: NelmioSecurityConfig, + * open_conext_monitor?: OpenConextMonitorConfig, + * surfnet_stepup?: SurfnetStepupConfig, + * monolog?: MonologConfig, + * doctrine?: DoctrineConfig, + * doctrine_migrations?: DoctrineMigrationsConfig, + * twig_extra?: TwigExtraConfig, + * twig?: TwigConfig, + * security?: SecurityConfig, + * web_profiler?: WebProfilerConfig, + * surfnet_stepup_middleware_api?: SurfnetStepupMiddlewareApiConfig, + * surfnet_stepup_middleware_command_handling?: SurfnetStepupMiddlewareCommandHandlingConfig, + * surfnet_stepup_middleware_gateway?: SurfnetStepupMiddlewareGatewayConfig, + * surfnet_stepup_middleware_management?: SurfnetStepupMiddlewareManagementConfig, + * surfnet_stepup_middleware_middleware?: SurfnetStepupMiddlewareMiddlewareConfig, + * }, + * "when@smoketes"?: array{ + * imports?: ImportsConfig, + * parameters?: ParametersConfig, + * services?: ServicesConfig, + * framework?: FrameworkConfig, + * nelmio_security?: NelmioSecurityConfig, + * open_conext_monitor?: OpenConextMonitorConfig, + * surfnet_stepup?: SurfnetStepupConfig, + * monolog?: MonologConfig, + * doctrine?: DoctrineConfig, + * doctrine_migrations?: DoctrineMigrationsConfig, + * twig_extra?: TwigExtraConfig, + * twig?: TwigConfig, + * security?: SecurityConfig, + * surfnet_stepup_middleware_api?: SurfnetStepupMiddlewareApiConfig, + * surfnet_stepup_middleware_command_handling?: SurfnetStepupMiddlewareCommandHandlingConfig, + * surfnet_stepup_middleware_gateway?: SurfnetStepupMiddlewareGatewayConfig, + * surfnet_stepup_middleware_management?: SurfnetStepupMiddlewareManagementConfig, + * surfnet_stepup_middleware_middleware?: SurfnetStepupMiddlewareMiddlewareConfig, + * }, + * "when@smoketest"?: array{ + * imports?: ImportsConfig, + * parameters?: ParametersConfig, + * services?: ServicesConfig, + * framework?: FrameworkConfig, + * nelmio_security?: NelmioSecurityConfig, + * open_conext_monitor?: OpenConextMonitorConfig, + * surfnet_stepup?: SurfnetStepupConfig, + * monolog?: MonologConfig, + * doctrine?: DoctrineConfig, + * doctrine_migrations?: DoctrineMigrationsConfig, + * liip_test_fixtures?: LiipTestFixturesConfig, + * twig_extra?: TwigExtraConfig, + * twig?: TwigConfig, + * security?: SecurityConfig, + * web_profiler?: WebProfilerConfig, + * surfnet_stepup_middleware_api?: SurfnetStepupMiddlewareApiConfig, + * surfnet_stepup_middleware_command_handling?: SurfnetStepupMiddlewareCommandHandlingConfig, + * surfnet_stepup_middleware_gateway?: SurfnetStepupMiddlewareGatewayConfig, + * surfnet_stepup_middleware_management?: SurfnetStepupMiddlewareManagementConfig, + * surfnet_stepup_middleware_middleware?: SurfnetStepupMiddlewareMiddlewareConfig, + * }, + * "when@smoketest_event_replay"?: array{ + * imports?: ImportsConfig, + * parameters?: ParametersConfig, + * services?: ServicesConfig, + * framework?: FrameworkConfig, + * nelmio_security?: NelmioSecurityConfig, + * open_conext_monitor?: OpenConextMonitorConfig, + * surfnet_stepup?: SurfnetStepupConfig, + * monolog?: MonologConfig, + * doctrine?: DoctrineConfig, + * doctrine_migrations?: DoctrineMigrationsConfig, + * liip_test_fixtures?: LiipTestFixturesConfig, + * twig_extra?: TwigExtraConfig, + * twig?: TwigConfig, + * security?: SecurityConfig, + * web_profiler?: WebProfilerConfig, + * surfnet_stepup_middleware_api?: SurfnetStepupMiddlewareApiConfig, + * surfnet_stepup_middleware_command_handling?: SurfnetStepupMiddlewareCommandHandlingConfig, + * surfnet_stepup_middleware_gateway?: SurfnetStepupMiddlewareGatewayConfig, + * surfnet_stepup_middleware_management?: SurfnetStepupMiddlewareManagementConfig, + * surfnet_stepup_middleware_middleware?: SurfnetStepupMiddlewareMiddlewareConfig, + * }, + * "when@sometest_event_replay"?: array{ + * imports?: ImportsConfig, + * parameters?: ParametersConfig, + * services?: ServicesConfig, + * framework?: FrameworkConfig, + * nelmio_security?: NelmioSecurityConfig, + * open_conext_monitor?: OpenConextMonitorConfig, + * surfnet_stepup?: SurfnetStepupConfig, + * monolog?: MonologConfig, + * doctrine?: DoctrineConfig, + * doctrine_migrations?: DoctrineMigrationsConfig, + * twig_extra?: TwigExtraConfig, + * twig?: TwigConfig, + * security?: SecurityConfig, + * surfnet_stepup_middleware_api?: SurfnetStepupMiddlewareApiConfig, + * surfnet_stepup_middleware_command_handling?: SurfnetStepupMiddlewareCommandHandlingConfig, + * surfnet_stepup_middleware_gateway?: SurfnetStepupMiddlewareGatewayConfig, + * surfnet_stepup_middleware_management?: SurfnetStepupMiddlewareManagementConfig, + * surfnet_stepup_middleware_middleware?: SurfnetStepupMiddlewareMiddlewareConfig, + * }, + * "when@test"?: array{ + * imports?: ImportsConfig, + * parameters?: ParametersConfig, + * services?: ServicesConfig, + * framework?: FrameworkConfig, + * nelmio_security?: NelmioSecurityConfig, + * open_conext_monitor?: OpenConextMonitorConfig, + * surfnet_stepup?: SurfnetStepupConfig, + * monolog?: MonologConfig, + * doctrine?: DoctrineConfig, + * doctrine_migrations?: DoctrineMigrationsConfig, + * liip_test_fixtures?: LiipTestFixturesConfig, + * twig_extra?: TwigExtraConfig, + * twig?: TwigConfig, + * security?: SecurityConfig, + * web_profiler?: WebProfilerConfig, + * surfnet_stepup_middleware_api?: SurfnetStepupMiddlewareApiConfig, + * surfnet_stepup_middleware_command_handling?: SurfnetStepupMiddlewareCommandHandlingConfig, + * surfnet_stepup_middleware_gateway?: SurfnetStepupMiddlewareGatewayConfig, + * surfnet_stepup_middleware_management?: SurfnetStepupMiddlewareManagementConfig, + * surfnet_stepup_middleware_middleware?: SurfnetStepupMiddlewareMiddlewareConfig, + * }, + * "when@test_event_replay"?: array{ + * imports?: ImportsConfig, + * parameters?: ParametersConfig, + * services?: ServicesConfig, + * framework?: FrameworkConfig, + * nelmio_security?: NelmioSecurityConfig, + * open_conext_monitor?: OpenConextMonitorConfig, + * surfnet_stepup?: SurfnetStepupConfig, + * monolog?: MonologConfig, + * doctrine?: DoctrineConfig, + * doctrine_migrations?: DoctrineMigrationsConfig, + * twig_extra?: TwigExtraConfig, + * twig?: TwigConfig, + * security?: SecurityConfig, + * surfnet_stepup_middleware_api?: SurfnetStepupMiddlewareApiConfig, + * surfnet_stepup_middleware_command_handling?: SurfnetStepupMiddlewareCommandHandlingConfig, + * surfnet_stepup_middleware_gateway?: SurfnetStepupMiddlewareGatewayConfig, + * surfnet_stepup_middleware_management?: SurfnetStepupMiddlewareManagementConfig, + * surfnet_stepup_middleware_middleware?: SurfnetStepupMiddlewareMiddlewareConfig, + * }, + * ..., + * }> + * } + */ +final class App +{ + /** + * @param ConfigType $config + * + * @psalm-return ConfigType + */ + public static function config(array $config): array + { + return AppReference::config($config); + } +} + +namespace Symfony\Component\Routing\Loader\Configurator; + +/** + * This class provides array-shapes for configuring the routes of an application. + * + * Example: + * + * ```php + * // config/routes.php + * namespace Symfony\Component\Routing\Loader\Configurator; + * + * return Routes::config([ + * 'controllers' => [ + * 'resource' => 'routing.controllers', + * ], + * ]); + * ``` + * + * @psalm-type RouteConfig = array{ + * path: string|array, + * controller?: string, + * methods?: string|list, + * requirements?: array, + * defaults?: array, + * options?: array, + * host?: string|array, + * schemes?: string|list, + * condition?: string, + * locale?: string, + * format?: string, + * utf8?: bool, + * stateless?: bool, + * } + * @psalm-type ImportConfig = array{ + * resource: string, + * type?: string, + * exclude?: string|list, + * prefix?: string|array, + * name_prefix?: string, + * trailing_slash_on_root?: bool, + * controller?: string, + * methods?: string|list, + * requirements?: array, + * defaults?: array, + * options?: array, + * host?: string|array, + * schemes?: string|list, + * condition?: string, + * locale?: string, + * format?: string, + * utf8?: bool, + * stateless?: bool, + * } + * @psalm-type AliasConfig = array{ + * alias: string, + * deprecated?: array{package:string, version:string, message?:string}, + * } + * @psalm-type RoutesConfig = array{ + * "when@dev"?: array, + * "when@dev_event_replay"?: array, + * "when@prod"?: array, + * "when@prod_event_replay"?: array, + * "when@smoketes"?: array, + * "when@smoketest"?: array, + * "when@smoketest_event_replay"?: array, + * "when@sometest_event_replay"?: array, + * "when@test"?: array, + * "when@test_event_replay"?: array, + * ... + * } + */ +final class Routes +{ + /** + * @param RoutesConfig $config + * + * @psalm-return RoutesConfig + */ + public static function config(array $config): array + { + return $config; + } +} diff --git a/config/services.yaml b/config/services.yaml index 93190a767..77270a418 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -9,15 +9,23 @@ services: autoconfigure: true public: false +# # Load services from src/ directory +# Surfnet\: +# resource: '../src/Surfnet/' +# exclude: +# - '../src/Surfnet/DataFixtures/' +# - '../src/Surfnet/Migrations/' +# - '../src/Surfnet/**/Tests/' +# - '../src/Surfnet/*/Entity/' +# - '../src/Surfnet/*/Event/' +# - '../src/Surfnet/*/Value/' +# - '../src/Surfnet/StepupMiddleware/CommandHandlingBundle/*/Command/' + Surfnet\Stepup\Helper\SecondFactorProvePossessionHelper: arguments: - "@surfnet_stepup.service.second_factor_type" - '%skip_prove_possession_second_factors%' - Surfnet\StepupMiddleware\CommandHandlingBundle\Twig\BackwardsCompatibleExtension: - arguments: [ "@twig.extension.intl"] - tags: [{ name: twig.extension }] - twig.extension.stringloader: class: Twig\Extension\StringLoaderExtension tags: [{ name: twig.extension }] diff --git a/src/Surfnet/Stepup/Configuration/Event/ConfigurationEvent.php b/src/Surfnet/Stepup/Configuration/Event/ConfigurationEvent.php index b3ff80122..20518680c 100644 --- a/src/Surfnet/Stepup/Configuration/Event/ConfigurationEvent.php +++ b/src/Surfnet/Stepup/Configuration/Event/ConfigurationEvent.php @@ -19,8 +19,6 @@ namespace Surfnet\Stepup\Configuration\Event; use Broadway\Serializer\Serializable as SerializableInterface; -use Surfnet\Stepup\Configuration\Configuration; -use Symfony\Component\Form\Exception\LogicException; abstract class ConfigurationEvent implements SerializableInterface { diff --git a/src/Surfnet/Stepup/Configuration/Event/NewInstitutionConfigurationCreatedEvent.php b/src/Surfnet/Stepup/Configuration/Event/NewInstitutionConfigurationCreatedEvent.php index fc5e21289..b6d79c90b 100644 --- a/src/Surfnet/Stepup/Configuration/Event/NewInstitutionConfigurationCreatedEvent.php +++ b/src/Surfnet/Stepup/Configuration/Event/NewInstitutionConfigurationCreatedEvent.php @@ -38,7 +38,7 @@ class NewInstitutionConfigurationCreatedEvent implements SerializableInterface { /** - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings("PHPMD.ExcessiveParameterList") */ public function __construct( public InstitutionConfigurationId $institutionConfigurationId, diff --git a/src/Surfnet/Stepup/Configuration/InstitutionConfiguration.php b/src/Surfnet/Stepup/Configuration/InstitutionConfiguration.php index ea7171707..bbb96438a 100644 --- a/src/Surfnet/Stepup/Configuration/InstitutionConfiguration.php +++ b/src/Surfnet/Stepup/Configuration/InstitutionConfiguration.php @@ -70,11 +70,11 @@ * the aggregate but by playing the events onto the aggregate. * 2. If one of the configuration options should be nullable, take a look at the applyUseRaOptionChangedEvent doc block * - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) Events and value objects - * @SuppressWarnings(PHPMD.TooManyMethods) AggregateRoot - * @SuppressWarnings(PHPMD.TooManyPublicMethods) AggregateRoot - * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) AggregateRoot - * @SuppressWarnings(PHPMD.TooManyFields) AggregateRoot + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") Events and value objects + * @SuppressWarnings("PHPMD.TooManyMethods") AggregateRoot + * @SuppressWarnings("PHPMD.TooManyPublicMethods") AggregateRoot + * @SuppressWarnings("PHPMD.ExcessiveClassComplexity") AggregateRoot + * @SuppressWarnings("PHPMD.TooManyFields") AggregateRoot */ class InstitutionConfiguration extends EventSourcedAggregateRoot implements InstitutionConfigurationInterface { @@ -297,7 +297,7 @@ public function configureSelfVetOption(SelfVetOption $selfVetOption): void public function configureSelfAssertedTokensOption(SelfAssertedTokensOption $selfAssertedTokensOption): void { - if ($this->selfAssertedTokensOption instanceof \Surfnet\Stepup\Configuration\Value\SelfAssertedTokensOption && + if ($this->selfAssertedTokensOption instanceof SelfAssertedTokensOption && $this->selfAssertedTokensOption->equals($selfAssertedTokensOption) ) { return; @@ -314,7 +314,7 @@ public function configureSelfAssertedTokensOption(SelfAssertedTokensOption $self public function configureSsoOn2faOption(SsoOn2faOption $ssoOn2faOption): void { - if ($this->ssoOn2faOption instanceof \Surfnet\Stepup\Configuration\Value\SsoOn2faOption && $this->ssoOn2faOption->equals($ssoOn2faOption)) { + if ($this->ssoOn2faOption instanceof SsoOn2faOption && $this->ssoOn2faOption->equals($ssoOn2faOption)) { return; } @@ -345,7 +345,7 @@ public function configureSsoRegistrationBypassOption(SsoRegistrationBypassOption public function updateUseRaOption(InstitutionAuthorizationOption $useRaOption): void { - if ($this->useRaOption instanceof \Surfnet\Stepup\Configuration\Value\InstitutionAuthorizationOption + if ($this->useRaOption instanceof InstitutionAuthorizationOption && $this->useRaOption->equals($useRaOption) ) { return; @@ -362,7 +362,7 @@ public function updateUseRaOption(InstitutionAuthorizationOption $useRaOption): public function updateUseRaaOption(InstitutionAuthorizationOption $useRaaOption): void { - if ($this->useRaaOption instanceof \Surfnet\Stepup\Configuration\Value\InstitutionAuthorizationOption + if ($this->useRaaOption instanceof InstitutionAuthorizationOption && $this->useRaaOption->equals($useRaaOption) ) { return; @@ -379,7 +379,7 @@ public function updateUseRaaOption(InstitutionAuthorizationOption $useRaaOption) public function updateSelectRaaOption(InstitutionAuthorizationOption $selectRaaOption): void { - if ($this->selectRaaOption instanceof \Surfnet\Stepup\Configuration\Value\InstitutionAuthorizationOption + if ($this->selectRaaOption instanceof InstitutionAuthorizationOption && $this->selectRaaOption->equals($selectRaaOption) ) { return; @@ -397,7 +397,7 @@ public function updateSelectRaaOption(InstitutionAuthorizationOption $selectRaaO public function updateAllowedSecondFactorList(AllowedSecondFactorList $allowedSecondFactorList): void { // AllowedSecondFactorList can be null for InstitutionConfigurations for which this functionality did not exist - if ($this->allowedSecondFactorList instanceof \Surfnet\Stepup\Configuration\Value\AllowedSecondFactorList + if ($this->allowedSecondFactorList instanceof AllowedSecondFactorList && $this->allowedSecondFactorList->equals($allowedSecondFactorList) ) { return; @@ -669,7 +669,7 @@ protected function applyRaLocationRemovedEvent(RaLocationRemovedEvent $event): v } /** - * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * @SuppressWarnings("PHPMD.UnusedFormalParameter") */ protected function applyInstitutionConfigurationRemovedEvent(InstitutionConfigurationRemovedEvent $event): void { diff --git a/src/Surfnet/Stepup/Configuration/Value/ContactInformation.php b/src/Surfnet/Stepup/Configuration/Value/ContactInformation.php index 34c1ebc10..f1c7d2a62 100644 --- a/src/Surfnet/Stepup/Configuration/Value/ContactInformation.php +++ b/src/Surfnet/Stepup/Configuration/Value/ContactInformation.php @@ -22,7 +22,6 @@ use JsonSerializable; use Stringable; -use Surfnet\Stepup\Exception\InvalidArgumentException; final class ContactInformation implements JsonSerializable, Stringable { diff --git a/src/Surfnet/Stepup/Configuration/Value/InstitutionSet.php b/src/Surfnet/Stepup/Configuration/Value/InstitutionSet.php index ac697de4a..8f5e96a6f 100644 --- a/src/Surfnet/Stepup/Configuration/Value/InstitutionSet.php +++ b/src/Surfnet/Stepup/Configuration/Value/InstitutionSet.php @@ -83,7 +83,7 @@ public function getInstitutions(): array public function toScalarArray(): array { - return array_map('strval', $this->institutions); + return array_map(strval(...), $this->institutions); } /** diff --git a/src/Surfnet/Stepup/Configuration/Value/Location.php b/src/Surfnet/Stepup/Configuration/Value/Location.php index ebd280928..f9b55272c 100644 --- a/src/Surfnet/Stepup/Configuration/Value/Location.php +++ b/src/Surfnet/Stepup/Configuration/Value/Location.php @@ -22,7 +22,6 @@ use JsonSerializable; use Stringable; -use Surfnet\Stepup\Exception\InvalidArgumentException; final class Location implements JsonSerializable, Stringable { diff --git a/src/Surfnet/Stepup/Configuration/Value/NumberOfTokensPerIdentityOption.php b/src/Surfnet/Stepup/Configuration/Value/NumberOfTokensPerIdentityOption.php index be205d30e..716d49cdf 100644 --- a/src/Surfnet/Stepup/Configuration/Value/NumberOfTokensPerIdentityOption.php +++ b/src/Surfnet/Stepup/Configuration/Value/NumberOfTokensPerIdentityOption.php @@ -19,7 +19,6 @@ namespace Surfnet\Stepup\Configuration\Value; use JsonSerializable; -use Surfnet\Stepup\Exception\InvalidArgumentException; class NumberOfTokensPerIdentityOption implements JsonSerializable { diff --git a/src/Surfnet/Stepup/Configuration/Value/ShowRaaContactInformationOption.php b/src/Surfnet/Stepup/Configuration/Value/ShowRaaContactInformationOption.php index fb791c3a7..7630cd49b 100644 --- a/src/Surfnet/Stepup/Configuration/Value/ShowRaaContactInformationOption.php +++ b/src/Surfnet/Stepup/Configuration/Value/ShowRaaContactInformationOption.php @@ -19,7 +19,6 @@ namespace Surfnet\Stepup\Configuration\Value; use JsonSerializable; -use Surfnet\Stepup\Exception\InvalidArgumentException; final class ShowRaaContactInformationOption implements JsonSerializable { diff --git a/src/Surfnet/Stepup/Configuration/Value/UseRaLocationsOption.php b/src/Surfnet/Stepup/Configuration/Value/UseRaLocationsOption.php index 4d10a31ee..4a9954a8f 100644 --- a/src/Surfnet/Stepup/Configuration/Value/UseRaLocationsOption.php +++ b/src/Surfnet/Stepup/Configuration/Value/UseRaLocationsOption.php @@ -19,7 +19,6 @@ namespace Surfnet\Stepup\Configuration\Value; use JsonSerializable; -use Surfnet\Stepup\Exception\InvalidArgumentException; final class UseRaLocationsOption implements JsonSerializable { diff --git a/src/Surfnet/Stepup/Configuration/Value/VerifyEmailOption.php b/src/Surfnet/Stepup/Configuration/Value/VerifyEmailOption.php index 4422063f4..3b7a03bad 100644 --- a/src/Surfnet/Stepup/Configuration/Value/VerifyEmailOption.php +++ b/src/Surfnet/Stepup/Configuration/Value/VerifyEmailOption.php @@ -19,7 +19,6 @@ namespace Surfnet\Stepup\Configuration\Value; use JsonSerializable; -use Surfnet\Stepup\Exception\InvalidArgumentException; final class VerifyEmailOption implements JsonSerializable { diff --git a/src/Surfnet/Stepup/DateTime/DateTime.php b/src/Surfnet/Stepup/DateTime/DateTime.php index 4a038ec1b..7ecab8e0f 100644 --- a/src/Surfnet/Stepup/DateTime/DateTime.php +++ b/src/Surfnet/Stepup/DateTime/DateTime.php @@ -22,11 +22,12 @@ use DateTime as CoreDateTime; use Stringable; use Surfnet\Stepup\Exception\InvalidArgumentException; -use TypeError; /** - * @SuppressWarnings(PHPMD.TooManyMethods) - * @SuppressWarnings(PHPMD.TooManyPublicMethods) + * Do not confuse with \Surfnet\StepupBundle\DateTime\DateTime + * + * @SuppressWarnings("PHPMD.TooManyMethods") + * @SuppressWarnings("PHPMD.TooManyPublicMethods") */ class DateTime implements Stringable { diff --git a/src/Surfnet/Stepup/Exception/DomainException.php b/src/Surfnet/Stepup/Exception/DomainException.php index e11e84741..d0caa8a03 100644 --- a/src/Surfnet/Stepup/Exception/DomainException.php +++ b/src/Surfnet/Stepup/Exception/DomainException.php @@ -18,6 +18,7 @@ namespace Surfnet\Stepup\Exception; +// phpcs:ignore SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly class DomainException extends \DomainException implements Exception { } diff --git a/src/Surfnet/Stepup/Exception/InvalidArgumentException.php b/src/Surfnet/Stepup/Exception/InvalidArgumentException.php index dbe864320..ec215daa0 100644 --- a/src/Surfnet/Stepup/Exception/InvalidArgumentException.php +++ b/src/Surfnet/Stepup/Exception/InvalidArgumentException.php @@ -18,6 +18,7 @@ namespace Surfnet\Stepup\Exception; +// phpcs:ignore SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly class InvalidArgumentException extends \InvalidArgumentException implements Exception { public static function invalidType(string $expected, string $parameterName, mixed $parameter): self diff --git a/src/Surfnet/Stepup/Exception/LogicException.php b/src/Surfnet/Stepup/Exception/LogicException.php index cf8fc4858..b4f1dd745 100644 --- a/src/Surfnet/Stepup/Exception/LogicException.php +++ b/src/Surfnet/Stepup/Exception/LogicException.php @@ -18,6 +18,7 @@ namespace Surfnet\Stepup\Exception; +// phpcs:ignore SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly class LogicException extends \LogicException implements Exception { } diff --git a/src/Surfnet/Stepup/Helper/JsonHelper.php b/src/Surfnet/Stepup/Helper/JsonHelper.php index 02e2acf45..cbe197294 100644 --- a/src/Surfnet/Stepup/Helper/JsonHelper.php +++ b/src/Surfnet/Stepup/Helper/JsonHelper.php @@ -18,7 +18,6 @@ namespace Surfnet\Stepup\Helper; -use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Exception\JsonException; final class JsonHelper diff --git a/src/Surfnet/Stepup/Helper/UserDataFormatter.php b/src/Surfnet/Stepup/Helper/UserDataFormatter.php index dc8b32bee..11c8c5ec2 100644 --- a/src/Surfnet/Stepup/Helper/UserDataFormatter.php +++ b/src/Surfnet/Stepup/Helper/UserDataFormatter.php @@ -27,7 +27,7 @@ public function format(array $userData, array $errors): array { $data = []; foreach ($userData as $name => $event) { - $name = explode('-', $name)[1]; + $name = explode('-', (string) $name)[1]; $data[] = [ 'name' => $name, 'value' => $event, diff --git a/src/Surfnet/Stepup/Identity/Api/Identity.php b/src/Surfnet/Stepup/Identity/Api/Identity.php index 8eae07146..8ccd6e281 100644 --- a/src/Surfnet/Stepup/Identity/Api/Identity.php +++ b/src/Surfnet/Stepup/Identity/Api/Identity.php @@ -19,7 +19,6 @@ namespace Surfnet\Stepup\Identity\Api; use Broadway\Domain\AggregateRoot; -use Broadway\EventSourcing\EventSourcedAggregateRoot; use Surfnet\Stepup\Configuration\InstitutionConfiguration; use Surfnet\Stepup\Exception\DomainException; use Surfnet\Stepup\Helper\SecondFactorProvePossessionHelper; @@ -125,7 +124,7 @@ public function verifyEmail(string $verificationNonce): void; * Attempts to vet another identity's verified second factor. * * - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings("PHPMD.ExcessiveParameterList") */ public function vetSecondFactor( Identity $registrant, diff --git a/src/Surfnet/Stepup/Identity/Collection/InstitutionCollection.php b/src/Surfnet/Stepup/Identity/Collection/InstitutionCollection.php index 016765f9e..caee8f4b5 100644 --- a/src/Surfnet/Stepup/Identity/Collection/InstitutionCollection.php +++ b/src/Surfnet/Stepup/Identity/Collection/InstitutionCollection.php @@ -28,11 +28,15 @@ /** * @implements IteratorAggregate + * @phpstan-type InstitutionArray array */ final class InstitutionCollection implements IteratorAggregate, JsonSerializable, SerializableInterface { private array $elements = []; + /** + * @param list $institutions + */ public function __construct(array $institutions = []) { foreach ($institutions as $institution) { @@ -111,7 +115,7 @@ public function jsonSerialize(): array public static function deserialize(array $data): self { - $institutions = array_map(fn($institution): Institution => new Institution($institution), $data); + $institutions = array_values(array_map(static fn($institution): Institution => new Institution($institution), $data)); return new self($institutions); } @@ -121,6 +125,9 @@ public function serialize(): array return array_map(fn(Institution $institution): string => (string)$institution, $this->elements); } + /** + * @return Iterator + */ public function getIterator(): Iterator { return new ArrayIterator($this->elements); diff --git a/src/Surfnet/Stepup/Identity/Entity/RegistrationAuthority.php b/src/Surfnet/Stepup/Identity/Entity/RegistrationAuthority.php index aec69096a..84b905a77 100644 --- a/src/Surfnet/Stepup/Identity/Entity/RegistrationAuthority.php +++ b/src/Surfnet/Stepup/Identity/Entity/RegistrationAuthority.php @@ -25,7 +25,7 @@ use Surfnet\Stepup\Identity\Value\RegistrationAuthorityRole; /** - * @SuppressWarnings(PHPMD.UnusedPrivateField) + * @SuppressWarnings("PHPMD.UnusedPrivateField") */ final class RegistrationAuthority extends SimpleEventSourcedEntity { diff --git a/src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php b/src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php index 3c9569364..64ef4c682 100644 --- a/src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php +++ b/src/Surfnet/Stepup/Identity/Entity/UnverifiedSecondFactor.php @@ -36,7 +36,7 @@ * A second factor whose possession has been proven by the registrant. The registrant must verify his/her e-mail * address to verify this second factor. * - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class UnverifiedSecondFactor extends AbstractSecondFactor { diff --git a/src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php b/src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php index 478cc917b..3e2558878 100644 --- a/src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php +++ b/src/Surfnet/Stepup/Identity/Entity/VerifiedSecondFactor.php @@ -20,7 +20,6 @@ use DateInterval; use Surfnet\Stepup\DateTime\DateTime; -use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Identity\Api\Identity; use Surfnet\Stepup\Identity\Event\CompliedWithVerifiedSecondFactorRevocationEvent; use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; @@ -39,8 +38,8 @@ * A second factor whose possession has been proven by the registrant and the registrant's e-mail address has been * verified. The registrant must visit a registration authority next. * - * @SuppressWarnings(PHPMD.UnusedPrivateFields) - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.UnusedPrivateFields") + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class VerifiedSecondFactor extends AbstractSecondFactor { diff --git a/src/Surfnet/Stepup/Identity/Entity/VettedSecondFactor.php b/src/Surfnet/Stepup/Identity/Entity/VettedSecondFactor.php index 107a84adc..e25dbf40e 100644 --- a/src/Surfnet/Stepup/Identity/Entity/VettedSecondFactor.php +++ b/src/Surfnet/Stepup/Identity/Entity/VettedSecondFactor.php @@ -31,7 +31,7 @@ /** * A second factor whose possession and its Registrant's identity has been vetted by a Registration Authority. * - * @SuppressWarnings(PHPMD.UnusedPrivateFields) + * @SuppressWarnings("PHPMD.UnusedPrivateFields") */ class VettedSecondFactor extends AbstractSecondFactor { diff --git a/src/Surfnet/Stepup/Identity/Event/EmailVerifiedEvent.php b/src/Surfnet/Stepup/Identity/Event/EmailVerifiedEvent.php index 64d8f6dad..5ecaad9e4 100644 --- a/src/Surfnet/Stepup/Identity/Event/EmailVerifiedEvent.php +++ b/src/Surfnet/Stepup/Identity/Event/EmailVerifiedEvent.php @@ -65,7 +65,7 @@ class EmailVerifiedEvent extends IdentityEvent implements * @param Email $email * @param Locale $preferredLocale * - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings("PHPMD.ExcessiveParameterList") */ public function __construct( IdentityId $identityId, diff --git a/src/Surfnet/Stepup/Identity/Event/GssfPossessionProvenAndVerifiedEvent.php b/src/Surfnet/Stepup/Identity/Event/GssfPossessionProvenAndVerifiedEvent.php index a516cd6a1..edf6d71fc 100644 --- a/src/Surfnet/Stepup/Identity/Event/GssfPossessionProvenAndVerifiedEvent.php +++ b/src/Surfnet/Stepup/Identity/Event/GssfPossessionProvenAndVerifiedEvent.php @@ -65,7 +65,7 @@ class GssfPossessionProvenAndVerifiedEvent extends IdentityEvent implements * @param DateTime $registrationRequestedAt * @param string $registrationCode * - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings("PHPMD.ExcessiveParameterList") */ public function __construct( IdentityId $identityId, diff --git a/src/Surfnet/Stepup/Identity/Event/GssfPossessionProvenEvent.php b/src/Surfnet/Stepup/Identity/Event/GssfPossessionProvenEvent.php index 63d32f304..07569a331 100644 --- a/src/Surfnet/Stepup/Identity/Event/GssfPossessionProvenEvent.php +++ b/src/Surfnet/Stepup/Identity/Event/GssfPossessionProvenEvent.php @@ -50,7 +50,7 @@ class GssfPossessionProvenEvent extends IdentityEvent implements Forgettable, Ri ]; /** - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings("PHPMD.ExcessiveParameterList") */ public function __construct( IdentityId $identityId, diff --git a/src/Surfnet/Stepup/Identity/Event/IdentityEvent.php b/src/Surfnet/Stepup/Identity/Event/IdentityEvent.php index 952dcd893..f62562a2f 100644 --- a/src/Surfnet/Stepup/Identity/Event/IdentityEvent.php +++ b/src/Surfnet/Stepup/Identity/Event/IdentityEvent.php @@ -23,7 +23,7 @@ use Surfnet\Stepup\Identity\Value\Institution; /** - * @SuppressWarnings(PHPMD.NumberOfChildren) + * @SuppressWarnings("PHPMD.NumberOfChildren") */ abstract class IdentityEvent implements AuditableEvent, SerializableInterface { diff --git a/src/Surfnet/Stepup/Identity/Event/PhonePossessionProvenEvent.php b/src/Surfnet/Stepup/Identity/Event/PhonePossessionProvenEvent.php index e2994aef2..b565fb5bd 100644 --- a/src/Surfnet/Stepup/Identity/Event/PhonePossessionProvenEvent.php +++ b/src/Surfnet/Stepup/Identity/Event/PhonePossessionProvenEvent.php @@ -60,7 +60,7 @@ class PhonePossessionProvenEvent extends IdentityEvent implements Forgettable, R * @param Email $email * @param Locale $preferredLocale * - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings("PHPMD.ExcessiveParameterList") */ public function __construct( IdentityId $identityId, diff --git a/src/Surfnet/Stepup/Identity/Event/SecondFactorMigratedEvent.php b/src/Surfnet/Stepup/Identity/Event/SecondFactorMigratedEvent.php index eab9c6949..99890e469 100644 --- a/src/Surfnet/Stepup/Identity/Event/SecondFactorMigratedEvent.php +++ b/src/Surfnet/Stepup/Identity/Event/SecondFactorMigratedEvent.php @@ -38,7 +38,7 @@ use function array_key_exists; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class SecondFactorMigratedEvent extends IdentityEvent implements Forgettable, RightToObtainDataInterface { @@ -60,7 +60,7 @@ class SecondFactorMigratedEvent extends IdentityEvent implements Forgettable, Ri ]; /** - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings("PHPMD.ExcessiveParameterList") */ public function __construct( IdentityId $identityId, diff --git a/src/Surfnet/Stepup/Identity/Event/SecondFactorMigratedToEvent.php b/src/Surfnet/Stepup/Identity/Event/SecondFactorMigratedToEvent.php index aaf1caa3c..b8433ba9a 100644 --- a/src/Surfnet/Stepup/Identity/Event/SecondFactorMigratedToEvent.php +++ b/src/Surfnet/Stepup/Identity/Event/SecondFactorMigratedToEvent.php @@ -30,7 +30,7 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\SensitiveData\SensitiveData; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class SecondFactorMigratedToEvent extends IdentityEvent implements Forgettable, RightToObtainDataInterface { @@ -48,7 +48,7 @@ class SecondFactorMigratedToEvent extends IdentityEvent implements Forgettable, ]; /** - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings("PHPMD.ExcessiveParameterList") */ public function __construct( IdentityId $identityId, diff --git a/src/Surfnet/Stepup/Identity/Event/SecondFactorVettedEvent.php b/src/Surfnet/Stepup/Identity/Event/SecondFactorVettedEvent.php index c5e0fd903..118162723 100644 --- a/src/Surfnet/Stepup/Identity/Event/SecondFactorVettedEvent.php +++ b/src/Surfnet/Stepup/Identity/Event/SecondFactorVettedEvent.php @@ -36,7 +36,7 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\SensitiveData\SensitiveData; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class SecondFactorVettedEvent extends IdentityEvent implements Forgettable, RightToObtainDataInterface { @@ -57,7 +57,7 @@ class SecondFactorVettedEvent extends IdentityEvent implements Forgettable, Righ ]; /** - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings("PHPMD.ExcessiveParameterList") */ public function __construct( IdentityId $identityId, diff --git a/src/Surfnet/Stepup/Identity/Event/SecondFactorVettedWithoutTokenProofOfPossession.php b/src/Surfnet/Stepup/Identity/Event/SecondFactorVettedWithoutTokenProofOfPossession.php index 7ad05ede4..21fd76bc5 100644 --- a/src/Surfnet/Stepup/Identity/Event/SecondFactorVettedWithoutTokenProofOfPossession.php +++ b/src/Surfnet/Stepup/Identity/Event/SecondFactorVettedWithoutTokenProofOfPossession.php @@ -37,7 +37,7 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\SensitiveData\SensitiveData; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class SecondFactorVettedWithoutTokenProofOfPossession extends IdentityEvent implements Forgettable, @@ -65,7 +65,7 @@ class SecondFactorVettedWithoutTokenProofOfPossession extends IdentityEvent impl public DocumentNumber $documentNumber; /** - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings("PHPMD.ExcessiveParameterList") */ public function __construct( IdentityId $identityId, diff --git a/src/Surfnet/Stepup/Identity/Event/U2fDevicePossessionProvenEvent.php b/src/Surfnet/Stepup/Identity/Event/U2fDevicePossessionProvenEvent.php index 6d6327061..1543d738b 100644 --- a/src/Surfnet/Stepup/Identity/Event/U2fDevicePossessionProvenEvent.php +++ b/src/Surfnet/Stepup/Identity/Event/U2fDevicePossessionProvenEvent.php @@ -22,7 +22,6 @@ use Surfnet\Stepup\Identity\Value\CommonName; use Surfnet\Stepup\Identity\Value\Email; use Surfnet\Stepup\Identity\Value\EmailVerificationWindow; -use Surfnet\Stepup\Identity\Value\GssfId; use Surfnet\Stepup\Identity\Value\IdentityId; use Surfnet\Stepup\Identity\Value\Institution; use Surfnet\Stepup\Identity\Value\Locale; @@ -65,7 +64,7 @@ class U2fDevicePossessionProvenEvent extends IdentityEvent implements Forgettabl * @param Email $email * @param Locale $preferredLocale * - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings("PHPMD.ExcessiveParameterList") */ public function __construct( IdentityId $identityId, diff --git a/src/Surfnet/Stepup/Identity/Event/YubikeyPossessionProvenEvent.php b/src/Surfnet/Stepup/Identity/Event/YubikeyPossessionProvenEvent.php index 31dc8a188..a559e98c2 100644 --- a/src/Surfnet/Stepup/Identity/Event/YubikeyPossessionProvenEvent.php +++ b/src/Surfnet/Stepup/Identity/Event/YubikeyPossessionProvenEvent.php @@ -55,7 +55,7 @@ class YubikeyPossessionProvenEvent extends IdentityEvent implements Forgettable, public DateTime $emailVerificationRequestedAt; /** - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings("PHPMD.ExcessiveParameterList") */ public function __construct( IdentityId $identityId, diff --git a/src/Surfnet/Stepup/Identity/Identity.php b/src/Surfnet/Stepup/Identity/Identity.php index 023e9a51c..f033216bf 100644 --- a/src/Surfnet/Stepup/Identity/Identity.php +++ b/src/Surfnet/Stepup/Identity/Identity.php @@ -52,8 +52,8 @@ use Surfnet\Stepup\Identity\Event\IdentityCreatedEvent; use Surfnet\Stepup\Identity\Event\IdentityEmailChangedEvent; use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; -use Surfnet\Stepup\Identity\Event\IdentityRestoredEvent; use Surfnet\Stepup\Identity\Event\IdentityRenamedEvent; +use Surfnet\Stepup\Identity\Event\IdentityRestoredEvent; use Surfnet\Stepup\Identity\Event\LocalePreferenceExpressedEvent; use Surfnet\Stepup\Identity\Event\PhonePossessionProvenAndVerifiedEvent; use Surfnet\Stepup\Identity\Event\PhonePossessionProvenEvent; @@ -111,11 +111,11 @@ use Surfnet\StepupBundle\Value\SecondFactorType; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - * @SuppressWarnings(PHPMD.TooManyMethods) - * @SuppressWarnings(PHPMD.TooManyPublicMethods) - * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) - * @SuppressWarnings(PHPMD.ExcessiveClassLength) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") + * @SuppressWarnings("PHPMD.TooManyMethods") + * @SuppressWarnings("PHPMD.TooManyPublicMethods") + * @SuppressWarnings("PHPMD.ExcessiveClassComplexity") + * @SuppressWarnings("PHPMD.ExcessiveClassLength") */ class Identity extends EventSourcedAggregateRoot implements IdentityApi { @@ -489,7 +489,7 @@ public function verifyEmail(string $verificationNonce): void } /** - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings("PHPMD.ExcessiveParameterList") */ public function vetSecondFactor( IdentityApi $registrant, @@ -516,7 +516,7 @@ public function vetSecondFactor( ); $registrantsSecondFactor = $registrant->getVerifiedSecondFactor($registrantsSecondFactorId); - if (!$registrantsSecondFactor instanceof \Surfnet\Stepup\Identity\Entity\VerifiedSecondFactor) { + if (!$registrantsSecondFactor instanceof VerifiedSecondFactor) { throw new DomainException( sprintf('Registrant second factor with ID %s does not exist', $registrantsSecondFactorId), ); diff --git a/src/Surfnet/Stepup/Identity/Value/ContactInformation.php b/src/Surfnet/Stepup/Identity/Value/ContactInformation.php index 33906678d..03cf63ad7 100644 --- a/src/Surfnet/Stepup/Identity/Value/ContactInformation.php +++ b/src/Surfnet/Stepup/Identity/Value/ContactInformation.php @@ -22,7 +22,6 @@ use JsonSerializable; use Stringable; -use Surfnet\Stepup\Exception\InvalidArgumentException; final class ContactInformation implements JsonSerializable, Stringable { diff --git a/src/Surfnet/Stepup/Identity/Value/IdentityId.php b/src/Surfnet/Stepup/Identity/Value/IdentityId.php index 068c45344..de4663f4d 100644 --- a/src/Surfnet/Stepup/Identity/Value/IdentityId.php +++ b/src/Surfnet/Stepup/Identity/Value/IdentityId.php @@ -19,7 +19,6 @@ namespace Surfnet\Stepup\Identity\Value; use JsonSerializable; -use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Identity\Api\Id; final class IdentityId implements Id, JsonSerializable diff --git a/src/Surfnet/Stepup/Identity/Value/Locale.php b/src/Surfnet/Stepup/Identity/Value/Locale.php index 349dc60f2..b3b995af7 100644 --- a/src/Surfnet/Stepup/Identity/Value/Locale.php +++ b/src/Surfnet/Stepup/Identity/Value/Locale.php @@ -20,7 +20,6 @@ use JsonSerializable; use Stringable; -use Surfnet\Stepup\Exception\InvalidArgumentException; final readonly class Locale implements JsonSerializable, Stringable { diff --git a/src/Surfnet/Stepup/Identity/Value/Location.php b/src/Surfnet/Stepup/Identity/Value/Location.php index 97540db66..230610218 100644 --- a/src/Surfnet/Stepup/Identity/Value/Location.php +++ b/src/Surfnet/Stepup/Identity/Value/Location.php @@ -22,7 +22,6 @@ use JsonSerializable; use Stringable; -use Surfnet\Stepup\Exception\InvalidArgumentException; final class Location implements JsonSerializable, Stringable { diff --git a/src/Surfnet/Stepup/Identity/Value/RecoveryTokenId.php b/src/Surfnet/Stepup/Identity/Value/RecoveryTokenId.php index c8c9a94e1..f8bf82f5e 100644 --- a/src/Surfnet/Stepup/Identity/Value/RecoveryTokenId.php +++ b/src/Surfnet/Stepup/Identity/Value/RecoveryTokenId.php @@ -18,7 +18,6 @@ namespace Surfnet\Stepup\Identity\Value; -use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Identity\Api\Id; final class RecoveryTokenId implements Id diff --git a/src/Surfnet/Stepup/Identity/Value/RegistrationAuthorityRole.php b/src/Surfnet/Stepup/Identity/Value/RegistrationAuthorityRole.php index 15e2872ed..5c89d3be3 100644 --- a/src/Surfnet/Stepup/Identity/Value/RegistrationAuthorityRole.php +++ b/src/Surfnet/Stepup/Identity/Value/RegistrationAuthorityRole.php @@ -40,7 +40,7 @@ public function __construct(private int $role) } /** - * @SuppressWarnings(PHPMD.ShortMethodName) no use in lengthening a domain term for the sake of shutting up PHPMD + * @SuppressWarnings("PHPMD.ShortMethodName") no use in lengthening a domain term for the sake of shutting up PHPMD */ public static function ra(): self { diff --git a/src/Surfnet/Stepup/Identity/Value/SafeStore.php b/src/Surfnet/Stepup/Identity/Value/SafeStore.php index 3c54f0e0c..1dab3098d 100644 --- a/src/Surfnet/Stepup/Identity/Value/SafeStore.php +++ b/src/Surfnet/Stepup/Identity/Value/SafeStore.php @@ -18,7 +18,6 @@ namespace Surfnet\Stepup\Identity\Value; -use Surfnet\Stepup\Exception\DomainException; use Surfnet\Stepup\Exception\RuntimeException; /** diff --git a/src/Surfnet/Stepup/Identity/Value/SecondFactorId.php b/src/Surfnet/Stepup/Identity/Value/SecondFactorId.php index 985439c40..935096fc4 100644 --- a/src/Surfnet/Stepup/Identity/Value/SecondFactorId.php +++ b/src/Surfnet/Stepup/Identity/Value/SecondFactorId.php @@ -18,7 +18,6 @@ namespace Surfnet\Stepup\Identity\Value; -use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Identity\Api\Id; final class SecondFactorId implements Id diff --git a/src/Surfnet/Stepup/Identity/Value/VettingTypeFactory.php b/src/Surfnet/Stepup/Identity/Value/VettingTypeFactory.php index 5b33c2843..1db7aea8d 100644 --- a/src/Surfnet/Stepup/Identity/Value/VettingTypeFactory.php +++ b/src/Surfnet/Stepup/Identity/Value/VettingTypeFactory.php @@ -37,10 +37,7 @@ public static function fromData(array $data): VettingType } } // BC fix for older events without a vetting type, they default back to ON_PREMISE. - if ($vettingType instanceof UnknownVettingType && - isset($data['document_number']) && - $data['document_number'] !== null - ) { + if ($vettingType instanceof UnknownVettingType && isset($data['document_number'])) { $vettingType = new OnPremiseVettingType(new DocumentNumber($data['document_number'])); } diff --git a/src/Surfnet/Stepup/Identity/Value/VettingTypeHint.php b/src/Surfnet/Stepup/Identity/Value/VettingTypeHint.php index f5e672f04..e9102631d 100644 --- a/src/Surfnet/Stepup/Identity/Value/VettingTypeHint.php +++ b/src/Surfnet/Stepup/Identity/Value/VettingTypeHint.php @@ -19,8 +19,9 @@ namespace Surfnet\Stepup\Identity\Value; use JsonSerializable; +use Stringable; -class VettingTypeHint implements JsonSerializable, \Stringable +class VettingTypeHint implements JsonSerializable, Stringable { public function __construct( private readonly string $locale, diff --git a/src/Surfnet/Stepup/Projector/Projector.php b/src/Surfnet/Stepup/Projector/Projector.php index 96d5efa63..c83aae2f6 100644 --- a/src/Surfnet/Stepup/Projector/Projector.php +++ b/src/Surfnet/Stepup/Projector/Projector.php @@ -23,7 +23,7 @@ use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; /** - * @SuppressWarnings(PHPMD.NumberOfChildren) we simply have a lot of projectors + * @SuppressWarnings("PHPMD.NumberOfChildren") we simply have a lot of projectors */ abstract class Projector extends BroadwayProjector implements EventListener { diff --git a/src/Surfnet/Stepup/Tests/Configuration/Event/EventSerializationAndDeserializationTest.php b/src/Surfnet/Stepup/Tests/Configuration/Event/EventSerializationAndDeserializationTest.php index b95b92177..d885ba635 100644 --- a/src/Surfnet/Stepup/Tests/Configuration/Event/EventSerializationAndDeserializationTest.php +++ b/src/Surfnet/Stepup/Tests/Configuration/Event/EventSerializationAndDeserializationTest.php @@ -20,6 +20,9 @@ use Broadway\Serializer\Serializable as SerializableInterface; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Ramsey\Uuid\Uuid; use Surfnet\Stepup\Configuration\Configuration; @@ -64,12 +67,9 @@ class EventSerializationAndDeserializationTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * - * @dataProvider institutionConfigurationEventsProvider - */ + #[Test] + #[DataProvider('institutionConfigurationEventsProvider')] + #[Group('domain')] public function an_event_should_be_the_same_after_serialization_and_deserialization( SerializableInterface $unserializedEvent, ): void { @@ -80,7 +80,7 @@ public function an_event_should_be_the_same_after_serialization_and_deserializat $this->assertEquals($unserializedEvent, $deserializedEvent); } - public function institutionConfigurationEventsProvider(): array + public static function institutionConfigurationEventsProvider(): array { $institution = new Institution('A test institution'); $institutionConfigurationId = InstitutionConfigurationId::from($institution); diff --git a/src/Surfnet/Stepup/Tests/Configuration/InstitutionConfigurationTest.php b/src/Surfnet/Stepup/Tests/Configuration/InstitutionConfigurationTest.php index 48b8ce800..357168671 100644 --- a/src/Surfnet/Stepup/Tests/Configuration/InstitutionConfigurationTest.php +++ b/src/Surfnet/Stepup/Tests/Configuration/InstitutionConfigurationTest.php @@ -20,6 +20,8 @@ use Broadway\EventSourcing\Testing\AggregateRootScenarioTestCase; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use Surfnet\Stepup\Configuration\Event\AllowedSecondFactorListUpdatedEvent; use Surfnet\Stepup\Configuration\Event\InstitutionConfigurationRemovedEvent; use Surfnet\Stepup\Configuration\Event\NewInstitutionConfigurationCreatedEvent; @@ -47,10 +49,8 @@ class InstitutionConfigurationTest extends AggregateRootScenarioTestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group aggregate - */ + #[Test] + #[Group('aggregate')] public function use_ra_locations_option_is_set_to_false_by_default_upon_creation_of_an_institution_configuration(): void { $institution = new Institution('Institution'); @@ -68,7 +68,7 @@ public function use_ra_locations_option_is_set_to_false_by_default_upon_creation $selectRaaOption = InstitutionAuthorizationOption::getDefault(InstitutionRole::selectRaa()); $this->scenario - ->when(fn(): \Surfnet\Stepup\Configuration\InstitutionConfiguration => InstitutionConfiguration::create( + ->when(fn(): InstitutionConfiguration => InstitutionConfiguration::create( $institutionConfigurationId, $institution, ))->then([ @@ -107,10 +107,8 @@ public function use_ra_locations_option_is_set_to_false_by_default_upon_creation ]); } - /** - * @test - * @group aggregate - */ + #[Test] + #[Group('aggregate')] public function show_raa_contact_information_option_is_set_to_true_by_default_upon_creation_of_an_institution_configuration(): void { $institution = new Institution('Institution'); @@ -128,7 +126,7 @@ public function show_raa_contact_information_option_is_set_to_true_by_default_up $selectRaaOption = InstitutionAuthorizationOption::getDefault(InstitutionRole::selectRaa()); $this->scenario - ->when(fn(): \Surfnet\Stepup\Configuration\InstitutionConfiguration => InstitutionConfiguration::create( + ->when(fn(): InstitutionConfiguration => InstitutionConfiguration::create( $institutionConfigurationId, $institution, ))->then([ @@ -167,10 +165,8 @@ public function show_raa_contact_information_option_is_set_to_true_by_default_up ]); } - /** - * @test - * @group aggregate - */ + #[Test] + #[Group('aggregate')] public function use_ra_locations_option_is_not_changed_if_its_given_value_is_not_different_from_the_current_value(): void { $institution = new Institution('Institution'); @@ -186,7 +182,7 @@ public function use_ra_locations_option_is_not_changed_if_its_given_value_is_not $theSameUseRaLocationsOption = $originalUseRaLocationsOption; $this->scenario - ->withAggregateId((string)$institutionConfigurationId->getInstitutionConfigurationId()) + ->withAggregateId($institutionConfigurationId->getInstitutionConfigurationId()) ->given([ new NewInstitutionConfigurationCreatedEvent( $institutionConfigurationId, @@ -209,10 +205,8 @@ function (InstitutionConfiguration $institutionConfiguration) use ($theSameUseRa ->then([]); } - /** - * @test - * @group aggregate - */ + #[Test] + #[Group('aggregate')] public function show_raa_contact_information_option_is_not_changed_if_its_given_value_is_not_different_from_the_current_value(): void { $institution = new Institution('Institution'); @@ -228,7 +222,7 @@ public function show_raa_contact_information_option_is_not_changed_if_its_given_ $sameShowRaaContactInformationOption = $originalShowRaaContactInformationOption; $this->scenario - ->withAggregateId((string)$institutionConfigurationId->getInstitutionConfigurationId()) + ->withAggregateId($institutionConfigurationId->getInstitutionConfigurationId()) ->given([ new NewInstitutionConfigurationCreatedEvent( $institutionConfigurationId, @@ -254,10 +248,8 @@ function (InstitutionConfiguration $institutionConfiguration) use ($sameShowRaaC ->then([]); } - /** - * @test - * @group aggregate - */ + #[Test] + #[Group('aggregate')] public function use_ra_locations_option_is_changed_if_its_given_value_is_different_from_the_current_value(): void { $institution = new Institution('Institution'); @@ -273,7 +265,7 @@ public function use_ra_locations_option_is_changed_if_its_given_value_is_differe $expectedUseRaLocationsOption = new UseRaLocationsOption(false); $this->scenario - ->withAggregateId((string)$institutionConfigurationId->getInstitutionConfigurationId()) + ->withAggregateId($institutionConfigurationId->getInstitutionConfigurationId()) ->given([ new NewInstitutionConfigurationCreatedEvent( $institutionConfigurationId, @@ -303,10 +295,8 @@ function (InstitutionConfiguration $institutionConfiguration) use ($expectedUseR ]); } - /** - * @test - * @group aggregate - */ + #[Test] + #[Group('aggregate')] public function show_raa_contact_information_option_is_changed_if_its_given_value_is_different_from_the_current_value(): void { $institution = new Institution('Institution'); @@ -322,7 +312,7 @@ public function show_raa_contact_information_option_is_changed_if_its_given_valu $expectedShowRaaContactInformationOption = new ShowRaaContactInformationOption(false); $this->scenario - ->withAggregateId((string)$institutionConfigurationId->getInstitutionConfigurationId()) + ->withAggregateId($institutionConfigurationId->getInstitutionConfigurationId()) ->given([ new NewInstitutionConfigurationCreatedEvent( $institutionConfigurationId, @@ -355,10 +345,8 @@ function (InstitutionConfiguration $institutionConfiguration) use ( ]); } - /** - * @test - * @group aggregate - */ + #[Test] + #[Group('aggregate')] public function test_the_setting_of_fga_options_on_an_institution_configuration(): void { $institution = new Institution('Institution'); diff --git a/src/Surfnet/Stepup/Tests/Configuration/Value/AllowedSecondFactorListTest.php b/src/Surfnet/Stepup/Tests/Configuration/Value/AllowedSecondFactorListTest.php index 2d4873afa..2f7a54cc0 100644 --- a/src/Surfnet/Stepup/Tests/Configuration/Value/AllowedSecondFactorListTest.php +++ b/src/Surfnet/Stepup/Tests/Configuration/Value/AllowedSecondFactorListTest.php @@ -19,7 +19,10 @@ namespace Surfnet\Stepup\Tests\Configuration\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Configuration\Value\AllowedSecondFactorList; use Surfnet\StepupBundle\Service\SecondFactorTypeService; use Surfnet\StepupBundle\Value\SecondFactorType; @@ -28,10 +31,8 @@ class AllowedSecondFactorListTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_allowed_second_factor_list_deduplicates_its_second_factors_upon_creation(): void { $allowedSecondFactorList = AllowedSecondFactorList::ofTypes([ @@ -47,13 +48,13 @@ public function an_allowed_second_factor_list_deduplicates_its_second_factors_up } /** - * @test - * @group domain * - * @dataProvider availableSecondFactorTypeProvider * @param $availableSecondFactorType */ - public function a_blank_allowed_second_factor_list_allows_all_second_factors(\Surfnet\StepupBundle\Value\SecondFactorType $availableSecondFactorType): void + #[Test] + #[DataProvider('availableSecondFactorTypeProvider')] + #[Group('domain')] + public function a_blank_allowed_second_factor_list_allows_all_second_factors(SecondFactorType $availableSecondFactorType): void { $allowedSecondFactorList = AllowedSecondFactorList::blank(); @@ -62,10 +63,8 @@ public function a_blank_allowed_second_factor_list_allows_all_second_factors(\Su $this->assertTrue($isSecondFactorAllowed); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_allowed_second_factor_list_contains_a_given_second_factor(): void { $allowedSecondFactorList = AllowedSecondFactorList::ofTypes([new SecondFactorType('sms')]); @@ -79,10 +78,8 @@ public function an_allowed_second_factor_list_contains_a_given_second_factor(): ); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_allowed_second_factor_list_does_not_contain_a_given_second_factor(): void { $allowedSecondFactorList = AllowedSecondFactorList::ofTypes([new SecondFactorType('sms')]); @@ -96,10 +93,8 @@ public function an_allowed_second_factor_list_does_not_contain_a_given_second_fa ); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_allowed_second_factor_list_contains_the_given_second_factors(): void { $secondFactorTypes = [ @@ -107,17 +102,13 @@ public function an_allowed_second_factor_list_contains_the_given_second_factors( new SecondFactorType('yubikey'), ]; - $allowedSecondFactorList = AllowedSecondFactorList::ofTypes($secondFactorTypes); - - foreach ($allowedSecondFactorList as $index => $actualSecondFactorType) { + foreach (iterator_to_array(AllowedSecondFactorList::ofTypes($secondFactorTypes)) as $index => $actualSecondFactorType) { $this->assertTrue($secondFactorTypes[$index]->equals($actualSecondFactorType)); } } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function a_second_factor_on_the_allowed_second_factor_list_is_allowed(): void { $allowedSecondFactorList = AllowedSecondFactorList::ofTypes([new SecondFactorType('sms')]); @@ -131,10 +122,8 @@ public function a_second_factor_on_the_allowed_second_factor_list_is_allowed(): ); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function a_second_factor_not_on_the_allowed_second_factor_list_is_not_allowed(): void { $allowedSecondFactorList = AllowedSecondFactorList::ofTypes([new SecondFactorType('sms')]); @@ -149,13 +138,12 @@ public function a_second_factor_not_on_the_allowed_second_factor_list_is_not_all } /** - * @test - * @group domain - * - * @dataProvider differentAllowedSecondFactorListsProvider * @param SecondFactorType[] $firstList * @param SecondFactorType[] $secondList */ + #[Test] + #[DataProvider('differentAllowedSecondFactorListsProvider')] + #[Group('domain')] public function allowed_second_factor_lists_with_different_elements_are_not_considered_equal( array $firstList, array $secondList, @@ -167,13 +155,12 @@ public function allowed_second_factor_lists_with_different_elements_are_not_cons } /** - * @test - * @group domain - * - * @dataProvider sameAllowedSecondFactorListsProvider * @param SecondFactorType[] $firstList * @param SecondFactorType[] $secondList */ + #[Test] + #[DataProvider('sameAllowedSecondFactorListsProvider')] + #[Group('domain')] public function allowed_second_factor_lists_with_the_same_elements_are_considered_equal( array $firstList, array $secondList, @@ -184,7 +171,7 @@ public function allowed_second_factor_lists_with_the_same_elements_are_considere $this->assertTrue($base->equals($other)); } - public function differentAllowedSecondFactorListsProvider(): array + public static function differentAllowedSecondFactorListsProvider(): array { return [ 'Different second factor types' => [ @@ -206,7 +193,7 @@ public function differentAllowedSecondFactorListsProvider(): array ]; } - public function sameAllowedSecondFactorListsProvider(): array + public static function sameAllowedSecondFactorListsProvider(): array { return [ 'Same second factor types' => [ @@ -228,7 +215,7 @@ public function sameAllowedSecondFactorListsProvider(): array ]; } - public function availableSecondFactorTypeProvider(): array + public static function availableSecondFactorTypeProvider(): array { $service = new SecondFactorTypeService([ 'biometric' => ['loa' => 3], diff --git a/src/Surfnet/Stepup/Tests/Configuration/Value/ContactInformationTest.php b/src/Surfnet/Stepup/Tests/Configuration/Value/ContactInformationTest.php index c6fac3bf1..fc1dd27c6 100644 --- a/src/Surfnet/Stepup/Tests/Configuration/Value/ContactInformationTest.php +++ b/src/Surfnet/Stepup/Tests/Configuration/Value/ContactInformationTest.php @@ -21,6 +21,8 @@ namespace Surfnet\Stepup\Tests\Configuration\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Configuration\Value\ContactInformation; @@ -28,10 +30,8 @@ class ContactInformationTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_instances_with_the_same_value_are_equal(): void { $contactInformation = new ContactInformation('a'); diff --git a/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionAuthorizationOptionTest.php b/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionAuthorizationOptionTest.php index 8496cf977..a08a52709 100644 --- a/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionAuthorizationOptionTest.php +++ b/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionAuthorizationOptionTest.php @@ -19,11 +19,13 @@ namespace Surfnet\Stepup\Tests\Configuration\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Configuration\Value\Institution; use Surfnet\Stepup\Configuration\Value\InstitutionAuthorizationOption; use Surfnet\Stepup\Configuration\Value\InstitutionRole; -use Surfnet\Stepup\Exception\InvalidArgumentException; class InstitutionAuthorizationOptionTest extends TestCase { @@ -45,20 +47,16 @@ public function setUp(): void $this->institutionRole = InstitutionRole::useRa(); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function institution_entries_are_sorted(): void { $useRaOption = InstitutionAuthorizationOption::fromInstitutionConfig($this->institutionRole, ['z', 'y', 'x']); $this->assertEquals(['x', 'y', 'z'], $useRaOption->getInstitutions($this->institution)); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function institution_entries_default_is_own_institution(): void { $useRaOption1 = InstitutionAuthorizationOption::fromInstitutionConfig($this->institutionRole, null); @@ -70,11 +68,9 @@ public function institution_entries_default_is_own_institution(): void $this->assertEquals([$this->institution], $useRaOption2->getInstitutions($this->institution)); } - /** - * @test - * @group domain - * @dataProvider institutionSetComparisonProvider - */ + #[Test] + #[DataProvider('institutionSetComparisonProvider')] + #[Group('domain')] public function institution_option_instances_can_be_compared( bool $expectation, ?array $configurationA, @@ -101,20 +97,16 @@ public function can_be_retrieved_json_serializable(): void $this->assertEquals(['x', 'y', 'z'], $institutionOption->jsonSerialize()); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function can_be_retrieved_json_serializable_on_empty_set(): void { $institutionOption = InstitutionAuthorizationOption::fromInstitutionConfig($this->institutionRole); $this->assertEquals(null, $institutionOption->jsonSerialize()); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function should_be_set_to_default_if_created_with_own_institution_as_institutions(): void { $institutions = [ @@ -131,10 +123,8 @@ public function should_be_set_to_default_if_created_with_own_institution_as_inst $this->assertEquals([], $option->getInstitutionSet()->toScalarArray()); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function the_default_value_is_given_institution(): void { $this->assertEquals( @@ -143,10 +133,8 @@ public function the_default_value_is_given_institution(): void ); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function the_empty_value_is_no_value(): void { $this->assertEquals( @@ -155,20 +143,16 @@ public function the_empty_value_is_no_value(): void ); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function the_blank_method_should_return_null(): void { $this->assertEquals(null, InstitutionAuthorizationOption::blank()); } - /** - * @test - * @group domain - * @dataProvider institutionHasInstitutionProvider - */ + #[Test] + #[DataProvider('institutionHasInstitutionProvider')] + #[Group('domain')] public function the_has_institution_method_should_check_for_institutions( bool $expectation, array $institutionList, @@ -185,7 +169,7 @@ public function the_has_institution_method_should_check_for_institutions( } - public function institutionHasInstitutionProvider(): array + public static function institutionHasInstitutionProvider(): array { return [ 'array-with-institution' => [true, ['a', 'b'], 'a'], @@ -194,7 +178,7 @@ public function institutionHasInstitutionProvider(): array ]; } - public function institutionSetComparisonProvider(): array + public static function institutionSetComparisonProvider(): array { return [ 'both-same-set-of-institutions' => [true, ['a', 'b'], ['a', 'b']], diff --git a/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionConfigurationIdTest.php b/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionConfigurationIdTest.php index 181b6d41e..bac7aa60a 100644 --- a/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionConfigurationIdTest.php +++ b/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionConfigurationIdTest.php @@ -19,8 +19,10 @@ namespace Surfnet\Stepup\Tests\Configuration\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; -use StdClass; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Configuration\Value\Institution; use Surfnet\Stepup\Configuration\Value\InstitutionConfigurationId; use Surfnet\Stepup\Exception\InvalidArgumentException; @@ -29,10 +31,8 @@ class InstitutionConfigurationIdTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_institution_configuration_ids_created_for_the_different_institution_are_not_equal(): void { $institutionConfigurationId = InstitutionConfigurationId::from(new Institution('An institution')); @@ -41,12 +41,9 @@ public function two_institution_configuration_ids_created_for_the_different_inst $this->assertNotEquals($institutionConfigurationId, $different); } - /** - * @test - * @group domain - * - * @dataProvider nonStringOrEmptyStringProvider - */ + #[Test] + #[DataProvider('nonStringOrEmptyStringProvider')] + #[Group('domain')] public function an_institution_configuration_id_cannot_be_created_from_something_other_than_a_string( string $nonStringOrEmptyString, ): void { @@ -55,10 +52,8 @@ public function an_institution_configuration_id_cannot_be_created_from_something new InstitutionConfigurationId($nonStringOrEmptyString); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_institution_configuration_id_cannot_be_created_from_something_other_than_a_uuid(): void { $this->expectException(InvalidArgumentException::class); @@ -68,10 +63,8 @@ public function an_institution_configuration_id_cannot_be_created_from_something new InstitutionConfigurationId($nonUuid); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_institution_configuration_ids_created_for_the_same_institution_are_equal(): void { $institutionConfigurationId = InstitutionConfigurationId::from(new Institution('An institution')); @@ -80,10 +73,8 @@ public function two_institution_configuration_ids_created_for_the_same_instituti $this->assertEquals($institutionConfigurationId, $same); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function institution_configuration_ids_are_created_case_insensitively_from_institutions(): void { $mixedCaseInstitution = new Institution('An InStItUtIoN'); @@ -101,10 +92,8 @@ public function institution_configuration_ids_are_created_case_insensitively_fro ); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function normalized_institution_configuration_ids_and_unnormalized_institution_configuration_ids_are_the_same(): void { $mixedCaseInstitution = new Institution('An InStItUtIoN'); @@ -120,7 +109,7 @@ public function normalized_institution_configuration_ids_and_unnormalized_instit /** * dataprovider */ - public function nonStringOrEmptyStringProvider(): array + public static function nonStringOrEmptyStringProvider(): array { return [ 'empty string' => [''], diff --git a/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionRoleTest.php b/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionRoleTest.php index fa7f8bb09..bcdb3d0d7 100644 --- a/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionRoleTest.php +++ b/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionRoleTest.php @@ -19,7 +19,10 @@ namespace Surfnet\Stepup\Tests\Configuration\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Configuration\Value\InstitutionRole; use Surfnet\Stepup\Exception\InvalidArgumentException; @@ -27,22 +30,18 @@ class InstitutionRoleTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @dataProvider invalidConstructorArgumentsProvider - */ + #[Test] + #[DataProvider('invalidConstructorArgumentsProvider')] + #[Group('domain')] public function invalid_types_are_rejected_during_construction(bool|string|int $arguments): void { $this->expectException(InvalidArgumentException::class); new InstitutionRole($arguments); } - /** - * @test - * @group domain - * @dataProvider institutionTypeProvider - */ + #[Test] + #[DataProvider('institutionTypeProvider')] + #[Group('domain')] public function institution_roles_can_be_created_by_type(string $type): void { $role1 = new InstitutionRole($type); @@ -52,7 +51,7 @@ public function institution_roles_can_be_created_by_type(string $type): void $this->assertTrue($role1->equals($role2)); } - public function institutionTypeProvider(): array + public static function institutionTypeProvider(): array { return [ 'use_ra' => ['use_ra'], @@ -61,7 +60,7 @@ public function institutionTypeProvider(): array ]; } - public function invalidConstructorArgumentsProvider(): array + public static function invalidConstructorArgumentsProvider(): array { return [ 'cant-be-boolean' => [false], diff --git a/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionSetTest.php b/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionSetTest.php index 2a749c131..4d8240f71 100644 --- a/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionSetTest.php +++ b/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionSetTest.php @@ -21,6 +21,9 @@ namespace Surfnet\Stepup\Tests\Configuration\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Configuration\Value\Institution; use Surfnet\Stepup\Configuration\Value\InstitutionSet; @@ -31,10 +34,8 @@ class InstitutionSetTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function the_set_is_built_out_of_institution_vos(): void { $institutionA = new Institution('a'); @@ -42,13 +43,11 @@ public function the_set_is_built_out_of_institution_vos(): void $institutionC = new Institution('C'); $set = InstitutionSet::create([$institutionA, $institutionB, $institutionC]); - $this->assertTrue(is_array($set->toScalarArray())); + $this->assertSame(['a', 'b', 'c'], $set->toScalarArray()); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function duplicate_entries_are_not_allowed(): void { $this->expectExceptionMessage("Duplicate entries are not allowed in the InstitutionSet"); @@ -60,10 +59,8 @@ public function duplicate_entries_are_not_allowed(): void InstitutionSet::create([$institutionB, $institutionBDupe]); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function duplicate_entries_are_not_allowed_case_insensitive(): void { $this->expectExceptionMessage("Duplicate entries are not allowed in the InstitutionSet"); @@ -75,10 +72,8 @@ public function duplicate_entries_are_not_allowed_case_insensitive(): void InstitutionSet::create([$institutionB, $institutionBDupe]); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function only_institutions_can_be_present_in_set(): void { $this->expectExceptionMessage( @@ -92,10 +87,8 @@ public function only_institutions_can_be_present_in_set(): void InstitutionSet::create([$institution, $location]); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function factory_method_can_build_from_empty_array(): void { $input = []; @@ -103,10 +96,8 @@ public function factory_method_can_build_from_empty_array(): void $this->assertEmpty($set->toScalarArray()); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function factory_method_can_build_from_array_of_string(): void { $input = [ @@ -125,11 +116,11 @@ public function factory_method_can_build_from_array_of_string(): void /** * This test actually tests the Institution's input validation during construction time * - * @test - * @group domain - * @dataProvider dirtyInstitutionListProvider * */ + #[Test] + #[DataProvider('dirtyInstitutionListProvider')] + #[Group('domain')] public function factory_method_can_build_from_array_of_string_and_rejects_invalid_types(array $invalid): void { $this->expectException(InvalidArgumentException::class); @@ -137,10 +128,8 @@ public function factory_method_can_build_from_array_of_string_and_rejects_invali InstitutionSet::create($invalid); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function sets_can_be_compared(): void { $input = [ @@ -154,7 +143,7 @@ public function sets_can_be_compared(): void $this->assertTrue($set->equals($secondSet)); } - public function dirtyInstitutionListProvider(): array + public static function dirtyInstitutionListProvider(): array { return [ 'numeric_entry' => [['a', 1, 'b']], diff --git a/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionTest.php b/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionTest.php index 999341ebb..a67a70ae4 100644 --- a/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionTest.php +++ b/src/Surfnet/Stepup/Tests/Configuration/Value/InstitutionTest.php @@ -21,6 +21,9 @@ namespace Surfnet\Stepup\Tests\Configuration\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Configuration\Value\Institution; use Surfnet\Stepup\Exception\InvalidArgumentException; @@ -29,11 +32,9 @@ class InstitutionTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @dataProvider nonStringOrNonEmptyStringProvider - */ + #[Test] + #[DataProvider('nonStringOrNonEmptyStringProvider')] + #[Group('domain')] public function an_institution_cannot_be_created_with_anything_but_a_nonempty_string( string $invalidValue, ): void { @@ -41,10 +42,8 @@ public function an_institution_cannot_be_created_with_anything_but_a_nonempty_st new Institution($invalidValue); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_institutions_with_the_same_value_are_equal(): void { $institution = new Institution('a'); @@ -57,7 +56,7 @@ public function two_institutions_with_the_same_value_are_equal(): void $this->assertTrue($institution->equals($different)); } - public function nonStringOrNonEmptyStringProvider(): array + public static function nonStringOrNonEmptyStringProvider(): array { return [ 'empty string' => [''], diff --git a/src/Surfnet/Stepup/Tests/Configuration/Value/LocationTest.php b/src/Surfnet/Stepup/Tests/Configuration/Value/LocationTest.php index a85043c1d..a3a4be986 100644 --- a/src/Surfnet/Stepup/Tests/Configuration/Value/LocationTest.php +++ b/src/Surfnet/Stepup/Tests/Configuration/Value/LocationTest.php @@ -21,6 +21,8 @@ namespace Surfnet\Stepup\Tests\Configuration\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Configuration\Value\Location; @@ -28,10 +30,8 @@ class LocationTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_locations_with_the_same_value_are_equal(): void { $location = new Location('a'); diff --git a/src/Surfnet/Stepup/Tests/Configuration/Value/RaLocationIdTest.php b/src/Surfnet/Stepup/Tests/Configuration/Value/RaLocationIdTest.php index 4cc9b255b..d3ce83de4 100644 --- a/src/Surfnet/Stepup/Tests/Configuration/Value/RaLocationIdTest.php +++ b/src/Surfnet/Stepup/Tests/Configuration/Value/RaLocationIdTest.php @@ -21,7 +21,10 @@ namespace Surfnet\Stepup\Tests\Configuration\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Ramsey\Uuid\Uuid; use Surfnet\Stepup\Configuration\Value\RaLocationId; use Surfnet\Stepup\Exception\InvalidArgumentException; @@ -30,11 +33,9 @@ class RaLocationIdTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @dataProvider nonStringOrEmptyStringProvider - */ + #[Test] + #[DataProvider('nonStringOrEmptyStringProvider')] + #[Group('domain')] public function an_ra_location_id_cannot_be_created_with_anything_but_a_nonempty_string( string $nonStringOrEmptyString, ): void { @@ -43,10 +44,8 @@ public function an_ra_location_id_cannot_be_created_with_anything_but_a_nonempty new RaLocationId($nonStringOrEmptyString); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_ra_location_id_cannot_be_created_with_anything_but_a_uuid(): void { $this->expectException(InvalidArgumentException::class); @@ -56,10 +55,8 @@ public function an_ra_location_id_cannot_be_created_with_anything_but_a_uuid(): new RaLocationId($nonUuid); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_ra_location_ids_with_the_same_values_are_equal(): void { $uuid = $this->uuid(); @@ -70,10 +67,8 @@ public function two_ra_location_ids_with_the_same_values_are_equal(): void $this->assertTrue($raLocationId->equals($theSame)); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_ra_location_ids_with_different_values_are_not_equal(): void { $raLocationId = new RaLocationId($this->uuid()); @@ -82,7 +77,7 @@ public function two_ra_location_ids_with_different_values_are_not_equal(): void $this->assertFalse($raLocationId->equals($different)); } - public function nonStringOrEmptyStringProvider(): array + public static function nonStringOrEmptyStringProvider(): array { return [ 'empty string' => [''], diff --git a/src/Surfnet/Stepup/Tests/Configuration/Value/RaLocationListTest.php b/src/Surfnet/Stepup/Tests/Configuration/Value/RaLocationListTest.php index 497d6febe..c458d49f7 100644 --- a/src/Surfnet/Stepup/Tests/Configuration/Value/RaLocationListTest.php +++ b/src/Surfnet/Stepup/Tests/Configuration/Value/RaLocationListTest.php @@ -19,7 +19,9 @@ namespace Surfnet\Stepup\Tests\Configuration\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Ramsey\Uuid\Uuid; use Surfnet\Stepup\Configuration\Entity\RaLocation; use Surfnet\Stepup\Configuration\Value\ContactInformation; @@ -33,10 +35,8 @@ class RaLocationListTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_ra_location_list_does_not_allow_ra_locations_with_the_same_ra_location_id_upon_creation(): void { $this->expectException(LogicException::class); @@ -49,10 +49,8 @@ public function an_ra_location_list_does_not_allow_ra_locations_with_the_same_ra new RaLocationList($raLocations); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_ra_location_list_does_not_allow_adding_ra_locations_with_an_ra_location_id_that_is_already_present(): void { $this->expectException(LogicException::class); @@ -65,10 +63,8 @@ public function an_ra_location_list_does_not_allow_adding_ra_locations_with_an_r $raLocationList->add($existingRaLocation); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_ra_location_list_is_created_from_ra_locations(): void { $raLocations = $this->getRaLocationsArray(); @@ -79,10 +75,8 @@ public function an_ra_location_list_is_created_from_ra_locations(): void $this->assertEquals($raLocations, $raLocationListAsArray); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_ra_location_list_has_an_ra_location_with_a_given_ra_location_id(): void { $raLocations = $this->getRaLocationsArray(); @@ -93,10 +87,8 @@ public function an_ra_location_list_has_an_ra_location_with_a_given_ra_location_ $this->assertTrue($raLocationList->containsWithId($expectedRaLocationIdToBePresent)); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_ra_location_list_does_not_have_ra_locations_with_a_non_present_ra_location_id(): void { $raLocations = $this->getRaLocationsArray(); @@ -107,10 +99,8 @@ public function an_ra_location_list_does_not_have_ra_locations_with_a_non_presen $this->assertFalse($raLocationList->containsWithId($expectedRaLocationIdNotToBePresent)); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_ra_location_is_added_to_an_ra_location_list(): void { $raLocations = $this->getRaLocationsArray(); @@ -123,10 +113,8 @@ public function an_ra_location_is_added_to_an_ra_location_list(): void $this->assertEquals($raLocations[0], $raLocationListAsArray[0]); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_ra_location_is_removed_from_an_ra_location_list_by_its_ra_location_id(): void { $raLocations = $this->getRaLocationsArray(); diff --git a/src/Surfnet/Stepup/Tests/Configuration/Value/RaLocationNameTest.php b/src/Surfnet/Stepup/Tests/Configuration/Value/RaLocationNameTest.php index 5fdf4714c..8d53bf7eb 100644 --- a/src/Surfnet/Stepup/Tests/Configuration/Value/RaLocationNameTest.php +++ b/src/Surfnet/Stepup/Tests/Configuration/Value/RaLocationNameTest.php @@ -21,7 +21,10 @@ namespace Surfnet\Stepup\Tests\Configuration\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Configuration\Value\RaLocationName; use Surfnet\Stepup\Exception\InvalidArgumentException; @@ -29,11 +32,9 @@ class RaLocationNameTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @dataProvider nonStringOrEmptyStringProvider - */ + #[Test] + #[DataProvider('nonStringOrEmptyStringProvider')] + #[Group('domain')] public function an_ra_location_name_cannot_be_created_with_anything_but_a_nonempty_string( string $nonStringOrEmptyString, ): void { @@ -42,10 +43,8 @@ public function an_ra_location_name_cannot_be_created_with_anything_but_a_nonemp new RaLocationName($nonStringOrEmptyString); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_ra_location_names_with_the_same_values_are_equal(): void { $raLocationName = new RaLocationName('a'); @@ -54,10 +53,8 @@ public function two_ra_location_names_with_the_same_values_are_equal(): void $this->assertTrue($raLocationName->equals($theSame)); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_ra_location_names_with_different_values_are_not_equal(): void { $raLocationName = new RaLocationName('a'); @@ -66,7 +63,7 @@ public function two_ra_location_names_with_different_values_are_not_equal(): voi $this->assertFalse($raLocationName->equals($different)); } - public function nonStringOrEmptyStringProvider(): array + public static function nonStringOrEmptyStringProvider(): array { return [ 'empty string' => [''], diff --git a/src/Surfnet/Stepup/Tests/Configuration/Value/ShowRaaContactInformationOptionTest.php b/src/Surfnet/Stepup/Tests/Configuration/Value/ShowRaaContactInformationOptionTest.php index efa48b195..04befa831 100644 --- a/src/Surfnet/Stepup/Tests/Configuration/Value/ShowRaaContactInformationOptionTest.php +++ b/src/Surfnet/Stepup/Tests/Configuration/Value/ShowRaaContactInformationOptionTest.php @@ -19,20 +19,18 @@ namespace Surfnet\Stepup\Tests\Configuration\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; -use StdClass; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Configuration\Value\ShowRaaContactInformationOption; -use Surfnet\Stepup\Exception\InvalidArgumentException; class ShowRaaContactInformationOptionTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @group institution-configuration-option - */ + #[Test] + #[Group('domain')] + #[Group('institution-configuration-option')] public function two_show_raa_contact_information_options_with_the_same_values_are_equal(): void { $option = true; @@ -43,11 +41,9 @@ public function two_show_raa_contact_information_options_with_the_same_values_ar $this->assertTrue($showRaaContactInformationOption->equals($theSame)); } - /** - * @test - * @group domain - * @group institution-configuration-option - */ + #[Test] + #[Group('domain')] + #[Group('institution-configuration-option')] public function two_show_raa_contact_information_options_with_different_values_are_not_equal(): void { $showRaaContactInformationOption = new ShowRaaContactInformationOption(true); @@ -56,11 +52,9 @@ public function two_show_raa_contact_information_options_with_different_values_a $this->assertFalse($showRaaContactInformationOption->equals($different)); } - /** - * @test - * @group domain - * @group institution-configuration-option - */ + #[Test] + #[Group('domain')] + #[Group('institution-configuration-option')] public function default_value_is_true(): void { $default = ShowRaaContactInformationOption::getDefault(); diff --git a/src/Surfnet/Stepup/Tests/Configuration/Value/UseRaLocationsOptionTest.php b/src/Surfnet/Stepup/Tests/Configuration/Value/UseRaLocationsOptionTest.php index f6f5fa259..ec5bb8be8 100644 --- a/src/Surfnet/Stepup/Tests/Configuration/Value/UseRaLocationsOptionTest.php +++ b/src/Surfnet/Stepup/Tests/Configuration/Value/UseRaLocationsOptionTest.php @@ -19,20 +19,18 @@ namespace Surfnet\Stepup\Tests\Configuration\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; -use StdClass; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Configuration\Value\UseRaLocationsOption; -use Surfnet\Stepup\Exception\InvalidArgumentException; class UseRaLocationsOptionTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @group institution-configuration-option - */ + #[Test] + #[Group('domain')] + #[Group('institution-configuration-option')] public function two_use_ra_location_options_with_the_same_values_are_equal(): void { $option = true; @@ -43,11 +41,9 @@ public function two_use_ra_location_options_with_the_same_values_are_equal(): vo $this->assertTrue($useRaLocationsOption->equals($theSame)); } - /** - * @test - * @group domain - * @group institution-configuration-option - */ + #[Test] + #[Group('domain')] + #[Group('institution-configuration-option')] public function two_use_ra_location_options_with_different_values_are_not_equal(): void { $useRaLocationsOption = new UseRaLocationsOption(true); @@ -56,16 +52,14 @@ public function two_use_ra_location_options_with_different_values_are_not_equal( $this->assertFalse($useRaLocationsOption->equals($different)); } - /** - * @test - * @group domain - * @group institution-configuration-option - */ + #[Test] + #[Group('domain')] + #[Group('institution-configuration-option')] public function default_value_is_false(): void { $default = UseRaLocationsOption::getDefault(); $false = new UseRaLocationsOption(false); $this->assertTrue($default->equals($false)); - } + } } diff --git a/src/Surfnet/Stepup/Tests/DateTime/DateTimeTest.php b/src/Surfnet/Stepup/Tests/DateTime/DateTimeTest.php index 26b96c80c..0946467ca 100644 --- a/src/Surfnet/Stepup/Tests/DateTime/DateTimeTest.php +++ b/src/Surfnet/Stepup/Tests/DateTime/DateTimeTest.php @@ -21,6 +21,8 @@ use DateInterval; use DateTime as CoreDateTime; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\DateTime\DateTime; @@ -33,10 +35,9 @@ class DateTimeTest extends UnitTest * this might lead to some unforeseen errors. This ensures that if the format is changed, this test fails and * that you're hopefully reading this as an instruction to check all the places that handle datetime for * compatibility with the new format. Think about log(-processors), (de-)serializers, etc. - * - * @test - * @group domain */ + #[Test] + #[Group('domain')] public function the_configured_format_is_what_is_needed_for_correct_application_behavior(): void { $this->assertEquals('Y-m-d\\TH:i:sP', DateTime::FORMAT); @@ -45,10 +46,9 @@ public function the_configured_format_is_what_is_needed_for_correct_application_ /** * Ensure that the __toString of our DateTime object actually uses the correct format. For the reason why, read the * docblock above the {@see the_configured_format_is_what_is_needed_for_correct_application_behavior()} test - * - * @test - * @group domain */ + #[Test] + #[Group('domain')] public function to_string_returns_the_time_in_the_correct_format(): void { $coreDateTimeObject = new CoreDateTime('@1000'); @@ -57,10 +57,8 @@ public function to_string_returns_the_time_in_the_correct_format(): void $this->assertEquals($coreDateTimeObject->format(DateTime::FORMAT), (string)$ourDateTimeObject); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function add_returns_a_different_object_that_has_the_interval_added(): void { $base = new DateTime(new CoreDateTime('@1000')); @@ -72,10 +70,8 @@ public function add_returns_a_different_object_that_has_the_interval_added(): vo $this->assertTrue($result > $base, 'DateTime::add adds the interval to the new object'); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function sub_returns_a_different_object_that_has_the_interval_substracted(): void { $base = new DateTime(new CoreDateTime('@1000')); @@ -87,10 +83,8 @@ public function sub_returns_a_different_object_that_has_the_interval_substracted $this->assertTrue($result < $base, 'DateTime::sub subtracts the interval to the new object'); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function comes_before_works_with_exclusive_comparison(): void { $base = new DateTime(new CoreDateTime('@1000')); @@ -103,10 +97,8 @@ public function comes_before_works_with_exclusive_comparison(): void $this->assertFalse($after->comesBefore($base)); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function comes_before_or_is_equal_works_with_inclusive_comparison(): void { $base = new DateTime(new CoreDateTime('@1000')); @@ -119,10 +111,8 @@ public function comes_before_or_is_equal_works_with_inclusive_comparison(): void $this->assertFalse($after->comesBeforeOrIsEqual($base)); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function comes_after_works_with_exclusive_comparison(): void { $base = new DateTime(new CoreDateTime('@1000')); @@ -135,10 +125,8 @@ public function comes_after_works_with_exclusive_comparison(): void $this->assertTrue($after->comesAfter($base)); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function comes_after_or_is_equal_works_with_inclusive_comparison(): void { $base = new DateTime(new CoreDateTime('@1000')); diff --git a/src/Surfnet/Stepup/Tests/Helper/JsonHelperTest.php b/src/Surfnet/Stepup/Tests/Helper/JsonHelperTest.php index 6d7f1b128..d5b7f2969 100644 --- a/src/Surfnet/Stepup/Tests/Helper/JsonHelperTest.php +++ b/src/Surfnet/Stepup/Tests/Helper/JsonHelperTest.php @@ -19,9 +19,10 @@ namespace Surfnet\Stepup\Tests\Helper; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use StdClass; -use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Exception\JsonException; use Surfnet\Stepup\Helper\JsonHelper; @@ -29,10 +30,8 @@ class JsonHelperTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group json - */ + #[Test] + #[Group('json')] public function json_helper_decodes_strings_to_arrays(): void { $expectedDecodedResult = ['hello' => 'world']; @@ -43,10 +42,8 @@ public function json_helper_decodes_strings_to_arrays(): void $this->assertSame($expectedDecodedResult, $actualDecodedResult); } - /** - * @test - * @group json - */ + #[Test] + #[Group('json')] public function json_helper_throws_an_exception_when_there_is_a_syntax_error(): void { $this->expectException(JsonException::class); diff --git a/src/Surfnet/Stepup/Tests/Helper/UserDataFilterTest.php b/src/Surfnet/Stepup/Tests/Helper/UserDataFilterTest.php index 0241bcc53..92a1556f6 100644 --- a/src/Surfnet/Stepup/Tests/Helper/UserDataFilterTest.php +++ b/src/Surfnet/Stepup/Tests/Helper/UserDataFilterTest.php @@ -21,6 +21,7 @@ use DateTime as CoreDateTime; use Generator; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Surfnet\Stepup\DateTime\DateTime; use Surfnet\Stepup\Helper\UserDataFilter; @@ -42,9 +43,7 @@ class UserDataFilterTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @dataProvider provideEvents - */ + #[DataProvider('provideEvents')] public function test_filtering_is_applied_with_expected_result( IdentityCreatedEvent|PhonePossessionProvenAndVerifiedEvent|AppointedAsRaaForInstitutionEvent|PhonePossessionProvenEvent $event, array $expectation, @@ -54,7 +53,7 @@ public function test_filtering_is_applied_with_expected_result( $this->assertSame($expectation, array_keys($data)); } - public function provideEvents(): Generator + public static function provideEvents(): Generator { $event = new IdentityCreatedEvent( new IdentityId("id"), diff --git a/src/Surfnet/Stepup/Tests/Identity/Collection/InstitutionCollectionTest.php b/src/Surfnet/Stepup/Tests/Identity/Collection/InstitutionCollectionTest.php index fbd4f5e00..aefdc2fc7 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Collection/InstitutionCollectionTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Collection/InstitutionCollectionTest.php @@ -19,6 +19,8 @@ namespace Surfnet\Stepup\Tests\Identity\Collection; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Exception\RuntimeException; use Surfnet\Stepup\Identity\Collection\InstitutionCollection; @@ -28,11 +30,9 @@ class InstitutionCollectionTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @group whitelist - */ + #[Test] + #[Group('domain')] + #[Group('whitelist')] public function it_can_be_constructed_with_or_without_institutions(): void { $collection1 = new InstitutionCollection($this->getInstitutions()); @@ -42,11 +42,9 @@ public function it_can_be_constructed_with_or_without_institutions(): void $this->assertInstanceOf(InstitutionCollection::class, $collection2); } - /** - * @test - * @group domain - * @group whitelist - */ + #[Test] + #[Group('domain')] + #[Group('whitelist')] public function it_correctly_asserts_whether_or_not_it_contains_an_institution(): void { $institutions = $this->getInstitutions(); @@ -60,11 +58,9 @@ public function it_correctly_asserts_whether_or_not_it_contains_an_institution() $this->assertFalse($institutionCollection->contains(new Institution('not listed'))); } - /** - * @test - * @group domain - * @group whitelist - */ + #[Test] + #[Group('domain')] + #[Group('whitelist')] public function it_allows_to_add_an_institution_that_it_does_not_already_contain(): void { $toAdd = new Institution('to be added'); @@ -75,11 +71,9 @@ public function it_allows_to_add_an_institution_that_it_does_not_already_contain $this->assertTrue($institutionCollection->contains($toAdd)); } - /** - * @test - * @group domain - * @group whitelist - */ + #[Test] + #[Group('domain')] + #[Group('whitelist')] public function an_institution_already_in_the_collection_cannot_be_added(): void { $this->expectException(RuntimeException::class); @@ -92,11 +86,9 @@ public function an_institution_already_in_the_collection_cannot_be_added(): void $institutionCollection->add($alreadyExists); } - /** - * @test - * @group domain - * @group whitelist - */ + #[Test] + #[Group('domain')] + #[Group('whitelist')] public function an_institution_in_the_collection_can_be_removed(): void { $institutions = $this->getInstitutions(); @@ -109,12 +101,9 @@ public function an_institution_in_the_collection_can_be_removed(): void $this->assertFalse($institutionCollection->contains($inCollection)); } - /** - * @test - * @group domain - * @group whitelist - * - */ + #[Test] + #[Group('domain')] + #[Group('whitelist')] public function an_institution_not_in_the_collection_cannot_be_removed(): void { $this->expectException(RuntimeException::class); @@ -128,11 +117,9 @@ public function an_institution_not_in_the_collection_cannot_be_removed(): void $institutionCollection->remove($notInCollection); } - /** - * @test - * @group domain - * @group whitelist - */ + #[Test] + #[Group('domain')] + #[Group('whitelist')] public function multiple_institutions_can_be_added_from_another_collection(): void { $institutions = $this->getInstitutions(); @@ -149,11 +136,9 @@ public function multiple_institutions_can_be_added_from_another_collection(): vo } } - /** - * @test - * @group domain - * @group whitelist - */ + #[Test] + #[Group('domain')] + #[Group('whitelist')] public function multiple_institutions_can_be_removed(): void { $collectionOneElements = $this->getInstitutions(); @@ -170,7 +155,7 @@ public function multiple_institutions_can_be_removed(): void } /** - * @return array + * @return list */ private function getInstitutions(): array { diff --git a/src/Surfnet/Stepup/Tests/Identity/Entity/ConfigurableSettingsTest.php b/src/Surfnet/Stepup/Tests/Identity/Entity/ConfigurableSettingsTest.php index 1105eb676..91215be2d 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Entity/ConfigurableSettingsTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Entity/ConfigurableSettingsTest.php @@ -20,6 +20,9 @@ use DateTime as CoreDateTime; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\DateTime\DateTime; use Surfnet\Stepup\Identity\Entity\ConfigurableSettings; @@ -30,10 +33,8 @@ class ConfigurableSettingsTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function a_new_email_verification_window_always_starts_now(): void { $settings = ConfigurableSettings::create(3, []); @@ -56,7 +57,7 @@ public function a_new_email_verification_window_always_starts_now(): void $this->assertTrue($secondWindow->isOpen()); } - public function localeVerifications(): array + public static function localeVerifications(): array { return [ 'No app locales, false' => [false, 'nl_NL', []], @@ -67,11 +68,11 @@ public function localeVerifications(): array } /** - * @test - * @group domain - * @dataProvider localeVerifications * @param string[] $validLocaleStrings */ + #[Test] + #[DataProvider('localeVerifications')] + #[Group('domain')] public function a_locale_can_be_verified_to_be_a_valid_locale( bool $isValid, string $localeString, diff --git a/src/Surfnet/Stepup/Tests/Identity/Entity/SecondFactorCollectionTest.php b/src/Surfnet/Stepup/Tests/Identity/Entity/SecondFactorCollectionTest.php index e74740015..af3197be2 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Entity/SecondFactorCollectionTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Entity/SecondFactorCollectionTest.php @@ -20,6 +20,8 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Identity\Entity\SecondFactor; use Surfnet\Stepup\Identity\Entity\SecondFactorCollection; @@ -33,10 +35,8 @@ class SecondFactorCollectionTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function collection_can_return_second_factor_with_highest_loa(): void { $collection = new SecondFactorCollection([ diff --git a/src/Surfnet/Stepup/Tests/Identity/Event/EventSerializationAndDeserializationTest.php b/src/Surfnet/Stepup/Tests/Identity/Event/EventSerializationAndDeserializationTest.php index d0d376009..e339ea917 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Event/EventSerializationAndDeserializationTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Event/EventSerializationAndDeserializationTest.php @@ -21,6 +21,9 @@ use Broadway\Serializer\Serializable as SerializableInterface; use DateTime as CoreDateTime; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Ramsey\Uuid\Uuid; use Surfnet\Stepup\DateTime\DateTime; @@ -79,11 +82,9 @@ class EventSerializationAndDeserializationTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @dataProvider eventProvider - */ + #[Test] + #[DataProvider('eventProvider')] + #[Group('domain')] public function an_event_should_be_the_same_after_serialization_and_deserialization(SerializableInterface $event): void { $isForgettableEvent = $event instanceof Forgettable; @@ -113,11 +114,9 @@ public function an_event_should_be_the_same_after_serialization_and_deserializat $this->assertTrue($event == $deserializedEvent); } - /** - * @test - * @group domain - * @dataProvider serializedDataProvider - */ + #[Test] + #[DataProvider('serializedDataProvider')] + #[Group('domain')] public function an_serialized_event_should_be_the_same( string $serializedData, string $serializedSensitiveData, @@ -136,10 +135,8 @@ public function an_serialized_event_should_be_the_same( $this->assertEquals($event, $deserializedEvent); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_email_verification_window_should_be_the_same_after_serialization_and_deserialization(): void { // use a fixed datetime instance, to prevent microsecond precision issues in PHP 7.1+ @@ -569,7 +566,7 @@ public function eventProvider(): array ]; } - public function serializedDataProvider(): array + public static function serializedDataProvider(): array { return [ // Tests for changes in BC support for adding the VettingType in the SecondFactorVettedEvents in favour of the 'DocumentNumber' diff --git a/src/Surfnet/Stepup/Tests/Identity/Event/ForgettableEventsTest.php b/src/Surfnet/Stepup/Tests/Identity/Event/ForgettableEventsTest.php index a210d06ec..cf1ecda7b 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Event/ForgettableEventsTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Event/ForgettableEventsTest.php @@ -19,6 +19,8 @@ namespace Surfnet\Stepup\Tests\Identity\Event; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use ReflectionClass; use ReflectionException; @@ -58,10 +60,8 @@ final class ForgettableEventsTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function certain_events_are_forgettable_events_and_others_are_not(): void { $forgettableEventFqcns = [ @@ -121,9 +121,15 @@ public function certain_events_are_forgettable_events_and_others_are_not(): void */ private function getConcreteIdentityEventFqcns(): array { + $files = glob(__DIR__ . '/../../../Identity/Event/*Event.php'); + + if ($files === false) { + return []; + } + return array_filter( array_map( - function ($file): ?string { + static function ($file): ?string { $fqcn = sprintf( 'Surfnet\Stepup\Identity\Event\%s', preg_replace('/\\..+?$/', '', basename($file)), @@ -131,7 +137,7 @@ function ($file): ?string { $reflection = new ReflectionClass($fqcn); return $reflection->isInstantiable() ? $fqcn : null; }, - glob(__DIR__ . '/../../../Identity/Event/*Event.php'), + $files, ), ); } diff --git a/src/Surfnet/Stepup/Tests/Identity/Event/WhitelistEventSerializationAndDeserializationTest.php b/src/Surfnet/Stepup/Tests/Identity/Event/WhitelistEventSerializationAndDeserializationTest.php index ca587a765..af6f49552 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Event/WhitelistEventSerializationAndDeserializationTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Event/WhitelistEventSerializationAndDeserializationTest.php @@ -20,6 +20,9 @@ use Broadway\Serializer\Serializable as SerializableInterface; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Identity\Collection\InstitutionCollection; use Surfnet\Stepup\Identity\Event\InstitutionsAddedToWhitelistEvent; @@ -32,12 +35,10 @@ class WhitelistEventSerializationAndDeserializationTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @group whitelist - * @dataProvider eventProvider - */ + #[Test] + #[DataProvider('eventProvider')] + #[Group('domain')] + #[Group('whitelist')] public function an_event_should_be_the_same_after_serialization_and_deserialization(SerializableInterface $event,): void { $class = $event::class; diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/CommonNameTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/CommonNameTest.php index 7ca82305b..b3dee60c3 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/CommonNameTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/CommonNameTest.php @@ -21,6 +21,9 @@ namespace Surfnet\Stepup\Tests\Identity\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Identity\Value\CommonName; @@ -29,11 +32,9 @@ class CommonNameTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @dataProvider invalidArgumentProvider - */ + #[Test] + #[DataProvider('invalidArgumentProvider')] + #[Group('domain')] public function the_common_name_address_must_be_a_non_empty_string(string $invalidValue): void { $this->expectException(InvalidArgumentException::class); @@ -41,10 +42,8 @@ public function the_common_name_address_must_be_a_non_empty_string(string $inval new CommonName($invalidValue); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_common_names_with_the_same_value_are_equal(): void { $commonName = new CommonName('John Doe'); @@ -57,7 +56,7 @@ public function two_common_names_with_the_same_value_are_equal(): void $this->assertFalse($commonName->equals($unknown)); } - public function invalidArgumentProvider(): array + public static function invalidArgumentProvider(): array { return [ 'empty string' => [''], diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/ContactInformationTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/ContactInformationTest.php index 63b0652af..6c6f8aa76 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/ContactInformationTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/ContactInformationTest.php @@ -21,6 +21,8 @@ namespace Surfnet\Stepup\Tests\Identity\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Identity\Value\ContactInformation; @@ -28,10 +30,8 @@ class ContactInformationTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_instances_with_the_same_value_are_equal(): void { $contactInformation = new ContactInformation('a'); diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/DocumentNumberTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/DocumentNumberTest.php index 83d4e5d9a..8ee1f404d 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/DocumentNumberTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/DocumentNumberTest.php @@ -21,6 +21,9 @@ namespace Surfnet\Stepup\Tests\Identity\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Identity\Value\DocumentNumber; @@ -29,21 +32,17 @@ class DocumentNumberTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @dataProvider invalidArgumentProvider - */ + #[Test] + #[DataProvider('invalidArgumentProvider')] + #[Group('domain')] public function the_document_number_must_be_a_non_empty_string(string $invalidValue): void { $this->expectException(InvalidArgumentException::class); new DocumentNumber($invalidValue); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_document_numbers_with_the_same_value_are_equal(): void { $commonName = new DocumentNumber('John Doe'); @@ -56,7 +55,7 @@ public function two_document_numbers_with_the_same_value_are_equal(): void $this->assertFalse($commonName->equals($unknown)); } - public function invalidArgumentProvider(): array + public static function invalidArgumentProvider(): array { return [ 'empty string' => [''], diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/EmailTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/EmailTest.php index 14be0428d..2966a2721 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/EmailTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/EmailTest.php @@ -21,6 +21,9 @@ namespace Surfnet\Stepup\Tests\Identity\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Identity\Value\Email; @@ -29,22 +32,18 @@ class EmailTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @dataProvider invalidArgumentProvider - */ + #[Test] + #[DataProvider('invalidArgumentProvider')] + #[Group('domain')] public function the_email_address_must_be_a_non_empty_string(string $invalidValue): void { $this->expectException(InvalidArgumentException::class); new Email($invalidValue); } - /** - * @test - * @group domain - * @dataProvider invalidEmailProvider - */ + #[Test] + #[DataProvider('invalidEmailProvider')] + #[Group('domain')] public function the_email_address_given_must_be_rfc_822_compliant(string $invalidValue): void { $this->expectException(InvalidArgumentException::class); @@ -52,10 +51,8 @@ public function the_email_address_given_must_be_rfc_822_compliant(string $invali new Email($invalidValue); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_emails_with_the_same_value_are_equal(): void { $email = new Email('email@example.invalid'); @@ -68,7 +65,7 @@ public function two_emails_with_the_same_value_are_equal(): void $this->assertFalse($email->equals($unknown)); } - public function invalidArgumentProvider(): array + public static function invalidArgumentProvider(): array { return [ 'empty string' => [''], @@ -83,7 +80,7 @@ public function invalidArgumentProvider(): array * * @return array */ - public function invalidEmailProvider(): array + public static function invalidEmailProvider(): array { return [ 'no @-sign' => ['mailboxexample.invalid'], diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/EmailVerificationWindowTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/EmailVerificationWindowTest.php index 630d0c72f..3e1b31630 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/EmailVerificationWindowTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/EmailVerificationWindowTest.php @@ -22,6 +22,9 @@ use DateTime as CoreDateTime; use Exception; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\RunInSeparateProcess; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Surfnet\Stepup\DateTime\DateTime; use Surfnet\Stepup\Identity\Value\EmailVerificationWindow; @@ -32,12 +35,9 @@ class EmailVerificationWindowTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('domain')] public function window_is_open_for_instructed_timeframe_after_given_time(): void { $startTime = new DateTime(new CoreDateTime('@1')); @@ -62,12 +62,9 @@ public function window_is_open_for_instructed_timeframe_after_given_time(): void $this->assertFalse($window->isOpen(), 'The window should be closed after the end time'); } - /** - * @test - * @group domain - * - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('domain')] public function a_window_is_considered_equal_when_the_start_and_end_are_the_same(): void { // since we work with second precision, we might run issues trusting normal time, so we fixate the time @@ -91,12 +88,9 @@ public function a_window_is_considered_equal_when_the_start_and_end_are_the_same $this->assertFalse($base->equals($startsEarlierEndsAtSameTime)); } - /** - * @test - * @group domain - * - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('domain')] public function the_window_correctly_calculates_the_end_datetime(): void { // since we work with second precision, we might run issues trusting normal time, so we fixate the time diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/GssfIdTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/GssfIdTest.php index 9c8fc1eab..386e0386d 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/GssfIdTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/GssfIdTest.php @@ -19,8 +19,10 @@ namespace Surfnet\Stepup\Tests\Identity\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; -use StdClass; use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Identity\Value\GssfId; @@ -28,11 +30,9 @@ class GssfIdTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @dataProvider invalidValueProvider - */ + #[Test] + #[DataProvider('invalidValueProvider')] + #[Group('domain')] public function a_gssf_id_cannot_be_created_with_anything_but_a_nonempty_string( string $invalidValue, ): void { @@ -41,10 +41,8 @@ public function a_gssf_id_cannot_be_created_with_anything_but_a_nonempty_string( new GssfId($invalidValue); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_gssf_ids_with_the_same_value_are_equal(): void { $gssf = new GssfId('a'); @@ -60,7 +58,7 @@ public function two_gssf_ids_with_the_same_value_are_equal(): void /** * DataProvider for {@see a_gssf_od_cannot_be_created_with_anything_but_a_nonempty_string()} */ - public function invalidValueProvider(): array + public static function invalidValueProvider(): array { return [ 'empty string' => [''], diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/InstitutionTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/InstitutionTest.php index 3e32aeb58..6bd113873 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/InstitutionTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/InstitutionTest.php @@ -21,6 +21,9 @@ namespace Surfnet\Stepup\Tests\Identity\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Identity\Value\Institution; @@ -29,20 +32,17 @@ class InstitutionTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @dataProvider invalidValueProviderInvalidString - */ - public function an_institution_cannot_be_created_with_anything_but_a_nonempty_string_type_errors(string $invalidValue): void { + #[Test] + #[DataProvider('invalidValueProviderInvalidString')] + #[Group('domain')] + public function an_institution_cannot_be_created_with_anything_but_a_nonempty_string_type_errors(string $invalidValue): void + { $this->expectException(InvalidArgumentException::class); new Institution($invalidValue); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_institutions_with_the_same_value_are_equal(): void { $institution = new Institution('a'); @@ -58,7 +58,7 @@ public function two_institutions_with_the_same_value_are_equal(): void /** * dataprovider */ - public function invalidValueProviderInvalidString(): array + public static function invalidValueProviderInvalidString(): array { return [ 'empty string' => [''], diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/LocationTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/LocationTest.php index 931f9eec8..61b7c1af1 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/LocationTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/LocationTest.php @@ -21,6 +21,8 @@ namespace Surfnet\Stepup\Tests\Identity\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Identity\Value\Location; @@ -28,10 +30,8 @@ class LocationTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_locations_with_the_same_value_are_equal(): void { $location = new Location('a'); diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/PhoneNumberTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/PhoneNumberTest.php index 9b969f12e..4839c398c 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/PhoneNumberTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/PhoneNumberTest.php @@ -19,8 +19,10 @@ namespace Surfnet\Stepup\Tests\Identity\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; -use StdClass; use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Identity\Value\PhoneNumber; @@ -28,11 +30,9 @@ class PhoneNumberTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @dataProvider invalidValueProvider - */ + #[Test] + #[DataProvider('invalidValueProvider')] + #[Group('domain')] public function a_phone_number_cannot_be_created_with_anything_but_a_nonempty_string( string $invalidValue, ): void { @@ -41,10 +41,8 @@ public function a_phone_number_cannot_be_created_with_anything_but_a_nonempty_st new PhoneNumber($invalidValue); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_phone_numbers_with_the_same_value_are_equal(): void { $one = new PhoneNumber('+31 (0) 12345678'); @@ -60,7 +58,7 @@ public function two_phone_numbers_with_the_same_value_are_equal(): void /** * DataProvider for {@see a_phonenumber_cannot_be_created_with_anything_but_a_nonempty_string()} */ - public function invalidValueProvider(): array + public static function invalidValueProvider(): array { return [ 'empty string' => [''], diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/RecoveryTokenIdentifierFactoryTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/RecoveryTokenIdentifierFactoryTest.php index 2bc97760a..acef7ebf5 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/RecoveryTokenIdentifierFactoryTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/RecoveryTokenIdentifierFactoryTest.php @@ -19,6 +19,7 @@ namespace Surfnet\Stepup\Tests\Identity\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Identity\Value\HashedSecret; use Surfnet\Stepup\Identity\Value\PhoneNumber; @@ -30,9 +31,7 @@ final class RecoveryTokenIdentifierFactoryTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @group domain - */ + #[Group('domain')] public function test_generates_identifiers_of_all_types(): void { $this->assertEquals( diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/RegistrationAuthorityRoleTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/RegistrationAuthorityRoleTest.php index dad2c5e86..a1c355354 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/RegistrationAuthorityRoleTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/RegistrationAuthorityRoleTest.php @@ -21,6 +21,8 @@ namespace Surfnet\Stepup\Tests\Identity\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Identity\Value\RegistrationAuthorityRole; @@ -28,10 +30,8 @@ class RegistrationAuthorityRoleTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_roles_with_the_same_value_are_equal(): void { $role = new RegistrationAuthorityRole(RegistrationAuthorityRole::ROLE_RAA); diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/SafeStoreTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/SafeStoreTest.php index a113946b9..b005b7dd3 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/SafeStoreTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/SafeStoreTest.php @@ -19,6 +19,7 @@ namespace Surfnet\Stepup\Tests\Identity\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Identity\Value\HashedSecret; use Surfnet\Stepup\Identity\Value\PhoneNumber; @@ -31,9 +32,7 @@ class SafeStoreTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @group domain - */ + #[Group('domain')] public function test_creation_of_safe_store(): void { $unhashed = new UnhashedSecret('super-secret'); @@ -42,9 +41,7 @@ public function test_creation_of_safe_store(): void $this->assertTrue(password_verify('super-secret', $instance->getValue())); } - /** - * @group domain - */ + #[Group('domain')] public function test_equals(): void { $safeStore = new SafeStore(new UnhashedSecret('a')); diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/SecondFactorIdentifierFactoryTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/SecondFactorIdentifierFactoryTest.php index 435ffc78c..dd434ae96 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/SecondFactorIdentifierFactoryTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/SecondFactorIdentifierFactoryTest.php @@ -19,7 +19,9 @@ namespace Surfnet\Stepup\Tests\Identity\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Identity\Value\GssfId; use Surfnet\Stepup\Identity\Value\PhoneNumber; use Surfnet\Stepup\Identity\Value\SecondFactorIdentifierFactory; @@ -30,10 +32,8 @@ final class SecondFactorIdentifierFactoryTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function generates_identifiers_of_all_types(): void { $this->assertEquals( diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/StepupProviderTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/StepupProviderTest.php index f89f665fe..c94693f41 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/StepupProviderTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/StepupProviderTest.php @@ -19,8 +19,10 @@ namespace Surfnet\Stepup\Tests\Identity\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; -use StdClass; use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Identity\Value\StepupProvider; @@ -28,11 +30,9 @@ class StepupProviderTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @dataProvider invalidValueProvider - */ + #[Test] + #[DataProvider('invalidValueProvider')] + #[Group('domain')] public function a_stepup_provider_cannot_be_created_with_anything_but_a_nonempty_string( string $invalidValue, ): void { @@ -41,10 +41,8 @@ public function a_stepup_provider_cannot_be_created_with_anything_but_a_nonempty new StepupProvider($invalidValue); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_stepup_providers_with_the_same_value_are_equal(): void { $institution = new StepupProvider('a'); @@ -58,7 +56,7 @@ public function two_stepup_providers_with_the_same_value_are_equal(): void /** * DataProvider for {@see a_stepup_provider_cannot_be_created_with_anything_but_a_nonempty_string()} */ - public function invalidValueProvider(): array + public static function invalidValueProvider(): array { return [ 'empty string' => [''], diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/TimeFrameTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/TimeFrameTest.php index bf137a49a..9ad77e548 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/TimeFrameTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/TimeFrameTest.php @@ -21,6 +21,9 @@ namespace Surfnet\Stepup\Tests\Identity\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Identity\Value\TimeFrame; @@ -29,11 +32,9 @@ class TimeFrameTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - * @dataProvider invalidValueProviderInt - */ + #[Test] + #[DataProvider('invalidValueProviderInt')] + #[Group('domain')] public function it_cannot_be_given_an_non_positive_amount_of_seconds(int $invalidValue): void { $this->expectException(InvalidArgumentException::class); @@ -41,10 +42,8 @@ public function it_cannot_be_given_an_non_positive_amount_of_seconds(int $invali TimeFrame::ofSeconds($invalidValue); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function to_string_output_matches_amount_of_seconds_as_string(): void { $seconds = 1000; @@ -61,7 +60,7 @@ public function to_string_output_matches_amount_of_seconds_as_string(): void /** * dataprovider */ - public function invalidValueProviderInt(): array + public static function invalidValueProviderInt(): array { return [ 'zero' => [0], diff --git a/src/Surfnet/Stepup/Tests/Identity/Value/YubikeyPublicIdTest.php b/src/Surfnet/Stepup/Tests/Identity/Value/YubikeyPublicIdTest.php index fa085e594..719f55740 100644 --- a/src/Surfnet/Stepup/Tests/Identity/Value/YubikeyPublicIdTest.php +++ b/src/Surfnet/Stepup/Tests/Identity/Value/YubikeyPublicIdTest.php @@ -19,6 +19,9 @@ namespace Surfnet\Stepup\Tests\Identity\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Identity\Value\YubikeyPublicId; @@ -27,10 +30,8 @@ class YubikeyPublicIdTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function two_yubikey_public_ids_with_the_same_value_are_equal(): void { $id = new YubikeyPublicId('00001234'); @@ -43,7 +44,7 @@ public function two_yubikey_public_ids_with_the_same_value_are_equal(): void $this->assertFalse($id->equals($unknown)); } - public function invalidFormatProvider(): array + public static function invalidFormatProvider(): array { return [ '7-character unpadded ID' => ['1906381'], @@ -57,11 +58,9 @@ public function invalidFormatProvider(): array ]; } - /** - * @test - * @group domain - * @dataProvider invalidFormatProvider - */ + #[Test] + #[DataProvider('invalidFormatProvider')] + #[Group('domain')] public function it_cannot_be_constructed_with_an_invalid_format(string $invalidFormat): void { $this->expectException(InvalidArgumentException::class); @@ -69,7 +68,7 @@ public function it_cannot_be_constructed_with_an_invalid_format(string $invalidF new YubikeyPublicId($invalidFormat); } - public function validFormatProvider(): array + public static function validFormatProvider(): array { return [ '8-character ID' => ['01906381'], @@ -80,11 +79,9 @@ public function validFormatProvider(): array ]; } - /** - * @test - * @group domain - * @dataProvider validFormatProvider - */ + #[Test] + #[DataProvider('validFormatProvider')] + #[Group('domain')] public function its_value_matches_its_input_value(string $validFormat): void { $id = new YubikeyPublicId($validFormat); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Service/AuthorizationService.php b/src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Service/AuthorizationService.php index d4942e047..0935fc455 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Service/AuthorizationService.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Service/AuthorizationService.php @@ -18,7 +18,6 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Authorization\Service; -use Psr\Log\LoggerInterface; use Surfnet\Stepup\Configuration\Value\Institution; use Surfnet\Stepup\Identity\Value\IdentityId; use Surfnet\Stepup\Identity\Value\VettingType; @@ -35,7 +34,7 @@ * Perform authorization checks * For example, test if an identity is allowed to register self-asserted tokens. * - * @SuppressWarnings(PHPMD.CyclomaticComplexity) + * @SuppressWarnings("PHPMD.CyclomaticComplexity") */ class AuthorizationService { diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Service/CommandAuthorizationService.php b/src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Service/CommandAuthorizationService.php index 86f2f087f..38a21bcd5 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Service/CommandAuthorizationService.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Authorization/Service/CommandAuthorizationService.php @@ -24,6 +24,7 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\Identity; use Surfnet\StepupMiddleware\ApiBundle\Identity\Service\IdentityService; use Surfnet\StepupMiddleware\ApiBundle\Identity\Service\WhitelistService; +use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\RegistrationAuthorityCredentials; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\Command; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\RaExecutable; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\SelfAsserted; @@ -52,7 +53,7 @@ * 1. A SRAA user may always execute the command * 2. Certain commands are actionable with a RA role. When the identity is RAA, the identity is also allowed to run * the command. - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class CommandAuthorizationService { @@ -74,7 +75,7 @@ public function isInstitutionWhitelisted(Institution $institution, IdentityId $a if (!is_null($actorId) && $this->isSraa($actorId)) { return true; } - return (bool)$this->whitelistService->isWhitelisted($institution->getInstitution()); + return $this->whitelistService->isWhitelisted($institution->getInstitution()); } public function maySelfServiceCommandBeExecutedOnBehalfOf(Command $command, IdentityId $actorId = null): bool @@ -133,9 +134,9 @@ public function maySelfServiceCommandBeExecutedOnBehalfOf(Command $command, Iden } /** - * @SuppressWarnings(PHPMD.CyclomaticComplexity) - To keep the method readable, increased CC is allowed - * @SuppressWarnings(PHPMD.ExcessiveMethodLength) - * @SuppressWarnings(PHPMD.NPathComplexity) + * @SuppressWarnings("PHPMD.CyclomaticComplexity") - To keep the method readable, increased CC is allowed + * @SuppressWarnings("PHPMD.ExcessiveMethodLength") + * @SuppressWarnings("PHPMD.NPathComplexity") */ public function mayRaCommandBeExecutedOnBehalfOf( Command $command, @@ -264,7 +265,7 @@ private function isSraa(IdentityId $actorId = null): bool $registrationAuthorityCredentials = $this->identityService->findRegistrationAuthorityCredentialsOf( $actorId->getIdentityId(), ); - if (!$registrationAuthorityCredentials instanceof \Surfnet\StepupMiddleware\ApiBundle\Identity\Value\RegistrationAuthorityCredentials) { + if (!$registrationAuthorityCredentials instanceof RegistrationAuthorityCredentials) { return false; } return $registrationAuthorityCredentials->isSraa(); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Entity/RaLocation.php b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Entity/RaLocation.php index a8379d948..0db7150af 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Entity/RaLocation.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Entity/RaLocation.php @@ -25,7 +25,6 @@ use Surfnet\Stepup\Configuration\Value\Location; use Surfnet\Stepup\Configuration\Value\RaLocationName; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Repository\RaLocationRepository; -use Surfnet\StepupMiddleware\ApiBundle\Exception\InvalidArgumentException; #[ORM\Table] #[ORM\Index(name: 'idx_ra_location_institution', columns: ['institution'])] diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/AllowedSecondFactorListProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/AllowedSecondFactorListProjector.php index 80f514681..0c6140a7b 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/AllowedSecondFactorListProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/AllowedSecondFactorListProjector.php @@ -18,9 +18,9 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Configuration\Projector; +use Surfnet\Stepup\Configuration\Event\AllowedSecondFactorListUpdatedEvent; use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; use Surfnet\Stepup\Projector\Projector; -use Surfnet\Stepup\Configuration\Event\AllowedSecondFactorListUpdatedEvent; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Entity\AllowedSecondFactor; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Repository\AllowedSecondFactorRepository; diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/ConfiguredInstitutionProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/ConfiguredInstitutionProjector.php index 0f9db03b0..d214080da 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/ConfiguredInstitutionProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/ConfiguredInstitutionProjector.php @@ -18,10 +18,10 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Configuration\Projector; -use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Configuration\Event\InstitutionConfigurationRemovedEvent; use Surfnet\Stepup\Configuration\Event\NewInstitutionConfigurationCreatedEvent; +use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Entity\ConfiguredInstitution; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Repository\ConfiguredInstitutionRepository; diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionAuthorizationProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionAuthorizationProjector.php index b439ebcc9..cf981eb19 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionAuthorizationProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionAuthorizationProjector.php @@ -18,18 +18,17 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Configuration\Projector; -use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Configuration\Event\InstitutionConfigurationRemovedEvent; use Surfnet\Stepup\Configuration\Event\NewInstitutionConfigurationCreatedEvent; use Surfnet\Stepup\Configuration\Event\SelectRaaOptionChangedEvent; use Surfnet\Stepup\Configuration\Event\UseRaaOptionChangedEvent; use Surfnet\Stepup\Configuration\Event\UseRaOptionChangedEvent; +use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Repository\InstitutionAuthorizationRepository; -use Surfnet\StepupMiddleware\ApiBundle\Configuration\Repository\InstitutionConfigurationOptionsRepository; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ final class InstitutionAuthorizationProjector extends Projector { diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionConfigurationOptionsProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionConfigurationOptionsProjector.php index 3206341e2..5dca4382f 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionConfigurationOptionsProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/InstitutionConfigurationOptionsProjector.php @@ -18,8 +18,6 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Configuration\Projector; -use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Configuration\Event\InstitutionConfigurationRemovedEvent; use Surfnet\Stepup\Configuration\Event\NewInstitutionConfigurationCreatedEvent; use Surfnet\Stepup\Configuration\Event\NumberOfTokensPerIdentityOptionChangedEvent; @@ -30,13 +28,15 @@ use Surfnet\Stepup\Configuration\Event\SsoRegistrationBypassOptionChangedEvent; use Surfnet\Stepup\Configuration\Event\UseRaLocationsOptionChangedEvent; use Surfnet\Stepup\Configuration\Event\VerifyEmailOptionChangedEvent; +use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Entity\InstitutionConfigurationOptions; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Repository\AllowedSecondFactorRepository; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Repository\InstitutionConfigurationOptionsRepository; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - * @SuppressWarnings(PHPMD.TooManyPublicMethods) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") + * @SuppressWarnings("PHPMD.TooManyPublicMethods") */ final class InstitutionConfigurationOptionsProjector extends Projector { diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/RaLocationProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/RaLocationProjector.php index 1c32c99d3..9de995430 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/RaLocationProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Projector/RaLocationProjector.php @@ -18,8 +18,6 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Configuration\Projector; -use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Configuration\Event\InstitutionConfigurationRemovedEvent; use Surfnet\Stepup\Configuration\Event\RaLocationAddedEvent; use Surfnet\Stepup\Configuration\Event\RaLocationContactInformationChangedEvent; @@ -27,6 +25,8 @@ use Surfnet\Stepup\Configuration\Event\RaLocationRemovedEvent; use Surfnet\Stepup\Configuration\Event\RaLocationRenamedEvent; use Surfnet\Stepup\Configuration\Value\RaLocationId; +use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Entity\RaLocation; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Repository\RaLocationRepository; use Surfnet\StepupMiddleware\ApiBundle\Exception\RuntimeException; diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Service/AllowedSecondFactorListService.php b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Service/AllowedSecondFactorListService.php index 91b6c92ea..707572f8e 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Service/AllowedSecondFactorListService.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Service/AllowedSecondFactorListService.php @@ -20,6 +20,7 @@ use Surfnet\Stepup\Configuration\Value\AllowedSecondFactorList; use Surfnet\Stepup\Configuration\Value\Institution; +use Surfnet\StepupBundle\Value\SecondFactorType; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Entity\AllowedSecondFactor; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Repository\AllowedSecondFactorRepository; @@ -33,7 +34,7 @@ public function __construct( public function getAllowedSecondFactorListFor(Institution $institution): AllowedSecondFactorList { $allowedSecondFactors = array_map( - fn(AllowedSecondFactor $allowedSecondFactor): \Surfnet\StepupBundle\Value\SecondFactorType => $allowedSecondFactor->secondFactorType, + fn(AllowedSecondFactor $allowedSecondFactor): SecondFactorType => $allowedSecondFactor->secondFactorType, $this->allowedSecondFactorRepository->getAllowedSecondFactorsFor($institution), ); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Service/AllowedSecondFactorMap.php b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Service/AllowedSecondFactorMap.php index 8aeac28bc..2ec9e44fc 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Service/AllowedSecondFactorMap.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Configuration/Service/AllowedSecondFactorMap.php @@ -58,7 +58,7 @@ public function getAllowedSecondFactorListFor(Institution $institution): Allowed } /** - * @SuppressWarnings(PHPMD.UnusedPrivateMethod) + * @SuppressWarnings("PHPMD.UnusedPrivateMethod") */ private function add(AllowedSecondFactor $allowedSecondFactor): void { diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/AbstractController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/AbstractController.php index 05a29358a..3184546b0 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/AbstractController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/AbstractController.php @@ -21,7 +21,7 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController as SymfonyAbstractController; /** - * @SuppressWarnings(PHPMD.NumberOfChildren) we simply have a lot of commands + * @SuppressWarnings("PHPMD.NumberOfChildren") we simply have a lot of commands */ class AbstractController extends SymfonyAbstractController { diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/AuditLogController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/AuditLogController.php index 05c3875eb..d2d1f5eb9 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/AuditLogController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/AuditLogController.php @@ -24,7 +24,6 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\SecondFactorAuditLogQuery; use Surfnet\StepupMiddleware\ApiBundle\Identity\Service\AuditLogService; use Surfnet\StepupMiddleware\ApiBundle\Response\JsonCollectionResponse; -use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; final class AuditLogController extends AbstractController @@ -38,7 +37,7 @@ public function secondFactorAuditLog(Request $request, Institution $institution) { $this->denyAccessUnlessGrantedOneOff(['ROLE_RA', 'ROLE_READ']); - $identityId = $request->get('identityId'); + $identityId = $request->query->get('identityId'); if (empty($identityId)) { throw new BadApiRequestException(['This API-call MUST include the identityId as get parameter']); } @@ -46,9 +45,9 @@ public function secondFactorAuditLog(Request $request, Institution $institution) $query = new SecondFactorAuditLogQuery(); $query->identityInstitution = $institution; $query->identityId = new IdentityId($identityId); - $query->orderBy = $request->get('orderBy', $query->orderBy); - $query->orderDirection = $request->get('orderDirection', $query->orderDirection); - $query->pageNumber = $request->get('p', 1); + $query->orderBy = $request->query->get('orderBy', $query->orderBy); + $query->orderDirection = $request->query->get('orderDirection', $query->orderDirection); + $query->pageNumber = $request->query->getInt('p', 1); $paginator = $this->auditLogService->searchSecondFactorAuditLog($query); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/AuthorizationController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/AuthorizationController.php index dd824d7c6..498dc9ef5 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/AuthorizationController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/AuthorizationController.php @@ -20,8 +20,8 @@ use Surfnet\Stepup\Identity\Value\IdentityId; use Surfnet\StepupMiddleware\ApiBundle\Authorization\Service\AuthorizationService; -use Surfnet\StepupMiddleware\ApiBundle\Response\JsonAuthorizationResponse; use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; +use Surfnet\StepupMiddleware\ApiBundle\Response\JsonAuthorizationResponse; class AuthorizationController extends AbstractController { diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/CommandController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/CommandController.php index 1ccc0706a..6adee0198 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/CommandController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/CommandController.php @@ -22,6 +22,7 @@ use Surfnet\Stepup\Identity\Value\IdentityId; use Surfnet\Stepup\Identity\Value\Institution; use Surfnet\StepupMiddleware\ApiBundle\Authorization\Service\CommandAuthorizationService; +use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\AbstractCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\Command; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\Metadata; @@ -31,7 +32,6 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Command\CreateIdentityCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Command\UpdateIdentityCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Pipeline\TransactionAwarePipeline; -use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; @@ -39,7 +39,7 @@ use function sprintf; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class CommandController extends AbstractController { diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/IdentityController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/IdentityController.php index d490208e5..d0c7ff41c 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/IdentityController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/IdentityController.php @@ -22,6 +22,7 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\Identity; use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\IdentityQuery; use Surfnet\StepupMiddleware\ApiBundle\Identity\Service\IdentityService; +use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\RegistrationAuthorityCredentials; use Surfnet\StepupMiddleware\ApiBundle\Response\JsonCollectionResponse; use Surfnet\StepupMiddleware\ApiBundle\Response\JsonNotFoundResponse; use Symfony\Component\HttpFoundation\JsonResponse; @@ -54,10 +55,10 @@ public function collection(Request $request, Institution $institution): JsonColl $query = new IdentityQuery(); $query->institution = $institution; - $query->nameId = $request->get('NameID'); - $query->commonName = $request->get('commonName'); - $query->email = $request->get('email'); - $query->pageNumber = (int)$request->get('p', 1); + $query->nameId = $request->query->get('NameID'); + $query->commonName = $request->query->get('commonName'); + $query->email = $request->query->get('email'); + $query->pageNumber = $request->query->getInt('p', 1); $paginator = $this->identityService->search($query); @@ -72,7 +73,7 @@ public function getRegistrationAuthorityCredentials(string $identityId): JsonRes $credentials = $identityService->findRegistrationAuthorityCredentialsOf($identityId); - if (!$credentials instanceof \Surfnet\StepupMiddleware\ApiBundle\Identity\Value\RegistrationAuthorityCredentials) { + if (!$credentials instanceof RegistrationAuthorityCredentials) { return new JsonNotFoundResponse(); } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/InstitutionConfigurationOptionsController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/InstitutionConfigurationOptionsController.php index 8f33761d2..07015990c 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/InstitutionConfigurationOptionsController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/InstitutionConfigurationOptionsController.php @@ -20,6 +20,7 @@ use Surfnet\Stepup\Configuration\Value\Institution; use Surfnet\Stepup\Configuration\Value\InstitutionRole; +use Surfnet\StepupMiddleware\ApiBundle\Configuration\Entity\InstitutionConfigurationOptions; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Service\AllowedSecondFactorListService; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Service\InstitutionAuthorizationService; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Service\InstitutionConfigurationOptionsService; @@ -50,7 +51,7 @@ public function getForInstitution(string $institutionName): JsonResponse ->allowedSecondFactorListService ->getAllowedSecondFactorListFor($institution); - if (!$institutionConfigurationOptions instanceof \Surfnet\StepupMiddleware\ApiBundle\Configuration\Entity\InstitutionConfigurationOptions) { + if (!$institutionConfigurationOptions instanceof InstitutionConfigurationOptions) { throw new NotFoundHttpException( sprintf('No institution configuration options found for institution "%s"', $institution), ); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/ProfileController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/ProfileController.php index 9ec1a7629..61aa3e469 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/ProfileController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/ProfileController.php @@ -18,9 +18,9 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Controller; +use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Surfnet\StepupMiddleware\ApiBundle\Identity\Service\ProfileService; use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\Profile; -use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; @@ -38,7 +38,7 @@ public function get(Request $request, string $identityId): JsonResponse $this->denyAccessUnlessGrantedOneOff(['ROLE_RA', 'ROLE_READ']); // Is the actor allowed to view the profile page? - $actorId = $request->get('actorId'); + $actorId = $request->query->get('actorId'); if ($identityId !== $actorId) { throw new AccessDeniedHttpException( "Identity and actor id should match. It is not yet allowed to view the profile of somebody else.", diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaCandidateController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaCandidateController.php index 4d34013e6..04b72d49b 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaCandidateController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaCandidateController.php @@ -21,12 +21,13 @@ use Surfnet\Stepup\Identity\Value\IdentityId; use Surfnet\Stepup\Identity\Value\RegistrationAuthorityRole; use Surfnet\StepupMiddleware\ApiBundle\Authorization\Service\AuthorizationContextService; +use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\RaCandidateQuery; use Surfnet\StepupMiddleware\ApiBundle\Identity\Service\RaCandidateService; use Surfnet\StepupMiddleware\ApiBundle\Response\JsonCollectionResponse; -use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use function sprintf; @@ -45,15 +46,27 @@ public function search(Request $request): JsonCollectionResponse { $this->denyAccessUnlessGrantedOneOff(['ROLE_RA', 'ROLE_READ']); - $actorId = new IdentityId($request->get('actorId')); + $actorIdString = $request->query->get('actorId'); + if (!is_string($actorIdString)) { + throw new BadRequestHttpException(sprintf('Invalid actorId "%s"', $actorIdString)); + } + $actorId = new IdentityId($actorIdString); + + $secondFactorTypes = $request->query->all('secondFactorTypes'); + foreach ($secondFactorTypes as $type) { + if (!is_string($type)) { + throw new BadRequestHttpException(sprintf('Invalid secondFactorType "%s", string expected.', $type)); + } + } + /** @var array $secondFactorTypes */ $query = new RaCandidateQuery(); - $query->institution = $request->get('institution'); - $query->commonName = $request->get('commonName'); - $query->email = $request->get('email'); - $query->secondFactorTypes = $request->get('secondFactorTypes'); - $query->raInstitution = $request->get('raInstitution'); - $query->pageNumber = (int)$request->get('p', 1); + $query->institution = $request->query->get('institution'); + $query->commonName = $request->query->get('commonName'); + $query->email = $request->query->get('email'); + $query->secondFactorTypes = $secondFactorTypes; + $query->raInstitution = $request->query->get('raInstitution'); + $query->pageNumber = $request->query->getInt('p', 1); $query->authorizationContext = $this->authorizationService->buildSelectRaaInstitutionAuthorizationContext( $actorId, @@ -69,13 +82,17 @@ public function search(Request $request): JsonCollectionResponse /** * @return JsonResponse */ - public function get(Request $request): JsonResponse + public function get(Request $request, string $identityId): JsonResponse { $this->denyAccessUnlessGrantedOneOff(['ROLE_RA', 'ROLE_READ']); - $actorId = new IdentityId($request->get('actorId')); + $actorIdString = $request->query->get('actorId'); + if (!is_string($actorIdString)) { + throw new BadRequestHttpException(sprintf('Invalid actorId "%s"', $actorIdString)); + } + + $actorId = new IdentityId($actorIdString); - $identityId = $request->get('identityId'); $authorizationContext = $this->authorizationService->buildInstitutionAuthorizationContext( $actorId, diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaController.php index 08afa1f4a..0a75c1c81 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaController.php @@ -19,9 +19,9 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Controller; use Surfnet\Stepup\Identity\Value\Institution; +use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Surfnet\StepupMiddleware\ApiBundle\Identity\Service\RaListingService; use Surfnet\StepupMiddleware\ApiBundle\Response\JsonCollectionResponse; -use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; class RaController extends AbstractController { diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaListingController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaListingController.php index 8e7760081..671b33fba 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaListingController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaListingController.php @@ -22,12 +22,13 @@ use Surfnet\Stepup\Identity\Value\Institution; use Surfnet\Stepup\Identity\Value\RegistrationAuthorityRole; use Surfnet\StepupMiddleware\ApiBundle\Authorization\Service\AuthorizationContextService; +use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\RaListing; use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\RaListingQuery; use Surfnet\StepupMiddleware\ApiBundle\Identity\Service\RaListingService; use Surfnet\StepupMiddleware\ApiBundle\Response\JsonCollectionResponse; -use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class RaListingController extends AbstractController @@ -38,12 +39,17 @@ public function __construct( ) { } - public function get(Request $request, string $identityId): JsonResponse + public function get(Request $request, string $identityId, string $institution): JsonResponse { $this->denyAccessUnlessGrantedOneOff(['ROLE_RA', 'ROLE_READ']); - $actorId = new IdentityId($request->get('actorId')); - $institution = new Institution($request->get('institution')); + $actorIdString = $request->query->get('actorId'); + if (!is_string($actorIdString)) { + throw new BadRequestHttpException(sprintf('Invalid actorId "%s"', $actorIdString)); + } + $actorId = new IdentityId($actorIdString); + + $institutionObject = new Institution($institution); $authorizationContext = $this->authorizationService->buildInstitutionAuthorizationContext( $actorId, @@ -52,11 +58,11 @@ public function get(Request $request, string $identityId): JsonResponse $raListing = $this->raListingService->findByIdentityIdAndRaInstitutionWithContext( new IdentityId($identityId), - $institution, + $institutionObject, $authorizationContext, ); - if (!$raListing instanceof \Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\RaListing) { + if (!$raListing instanceof RaListing) { throw new NotFoundHttpException(sprintf("RaListing '%s' does not exist", $identityId)); } @@ -70,37 +76,41 @@ public function search(Request $request): JsonCollectionResponse { $this->denyAccessUnlessGrantedOneOff(['ROLE_RA', 'ROLE_READ']); - $actorId = new IdentityId($request->get('actorId')); + $actorIdString = $request->query->get('actorId'); + if (!is_string($actorIdString)) { + throw new BadRequestHttpException(sprintf('Invalid actorId "%s"', $actorIdString)); + } + $actorId = new IdentityId($actorIdString); $query = new RaListingQuery(); - if ($request->get('identityId')) { - $query->identityId = new IdentityId($request->get('identityId')); + if ($request->query->get('identityId')) { + $query->identityId = new IdentityId($request->query->get('identityId')); } - if ($request->get('institution')) { - $query->institution = $request->get('institution'); + if ($request->query->get('institution')) { + $query->institution = $request->query->get('institution'); } - if ($request->get('name')) { - $query->name = $request->get('name'); + if ($request->query->get('name')) { + $query->name = $request->query->get('name'); } - if ($request->get('email')) { - $query->email = $request->get('email'); + if ($request->query->get('email')) { + $query->email = $request->query->get('email'); } - if ($request->get('role')) { - $query->role = $request->get('role'); + if ($request->query->get('role')) { + $query->role = $request->query->get('role'); } - if ($request->get('raInstitution')) { - $query->raInstitution = $request->get('raInstitution'); + if ($request->query->get('raInstitution')) { + $query->raInstitution = $request->query->get('raInstitution'); } - $query->pageNumber = (int)$request->get('p', 1); - $query->orderBy = $request->get('orderBy'); - $query->orderDirection = $request->get('orderDirection'); + $query->pageNumber = $request->query->getInt('p', 1); + $query->orderBy = $request->query->getString('orderBy'); + $query->orderDirection = $request->query->getString('orderDirection'); $query->authorizationContext = $this->authorizationService->buildInstitutionAuthorizationContext( $actorId, RegistrationAuthorityRole::raa(), diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaLocationController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaLocationController.php index b27ee7750..32c1b1263 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaLocationController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaLocationController.php @@ -22,8 +22,8 @@ use Surfnet\Stepup\Configuration\Value\RaLocationId; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Query\RaLocationQuery; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Service\RaLocationService; -use Surfnet\StepupMiddleware\ApiBundle\Response\JsonCollectionResponse; use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; +use Surfnet\StepupMiddleware\ApiBundle\Response\JsonCollectionResponse; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; @@ -40,8 +40,8 @@ public function search(Request $request, Institution $institution): JsonCollecti $query = new RaLocationQuery(); $query->institution = $institution; - $query->orderBy = $request->get('orderBy', $query->orderBy); - $query->orderDirection = $request->get('orderDirection', $query->orderDirection); + $query->orderBy = $request->query->get('orderBy', $query->orderBy); + $query->orderDirection = $request->query->get('orderDirection', $query->orderDirection); $raLocations = $this->raLocationService->search($query); $count = count($raLocations); @@ -49,12 +49,11 @@ public function search(Request $request, Institution $institution): JsonCollecti return new JsonCollectionResponse($count, 1, $count, $raLocations); } - public function get(Request $request): JsonResponse + public function get(string $raLocationId): JsonResponse { $this->denyAccessUnlessGrantedOneOff(['ROLE_RA', 'ROLE_SS', 'ROLE_READ']); - $raLocationId = new RaLocationId($request->get('raLocationId')); - $raLocation = $this->raLocationService->findByRaLocationId($raLocationId); + $raLocation = $this->raLocationService->findByRaLocationId(new RaLocationId($raLocationId)); return new JsonResponse($raLocation); } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaSecondFactorController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaSecondFactorController.php index c8e84d4f5..c3b0305e9 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaSecondFactorController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RaSecondFactorController.php @@ -21,12 +21,13 @@ use Surfnet\Stepup\Identity\Value\IdentityId; use Surfnet\Stepup\Identity\Value\RegistrationAuthorityRole; use Surfnet\StepupMiddleware\ApiBundle\Authorization\Service\AuthorizationContextService; +use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\RaSecondFactorQuery; use Surfnet\StepupMiddleware\ApiBundle\Identity\Service\RaSecondFactorService; use Surfnet\StepupMiddleware\ApiBundle\Response\JsonCollectionResponse; -use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; final class RaSecondFactorController extends AbstractController { @@ -65,18 +66,23 @@ public function export(Request $request): JsonResponse */ private function buildRaSecondFactorQuery(Request $request): RaSecondFactorQuery { - $actorId = new IdentityId($request->get('actorId')); + $actorIdString = $request->query->get('actorId'); + if (!is_string($actorIdString)) { + throw new BadRequestHttpException(sprintf('Invalid actorId "%s"', $actorIdString)); + } + + $actorId = new IdentityId($actorIdString); $query = new RaSecondFactorQuery(); - $query->pageNumber = (int)$request->get('p', 1); - $query->name = $request->get('name'); - $query->type = $request->get('type'); - $query->secondFactorId = $request->get('secondFactorId'); - $query->email = $request->get('email'); - $query->institution = $request->get('institution'); - $query->status = $request->get('status'); - $query->orderBy = $request->get('orderBy'); - $query->orderDirection = $request->get('orderDirection'); + $query->pageNumber = $request->query->getInt('p', 1); + $query->name = $request->query->get('name'); + $query->type = $request->query->get('type'); + $query->secondFactorId = $request->query->get('secondFactorId'); + $query->email = $request->query->get('email'); + $query->institution = $request->query->get('institution'); + $query->status = $request->query->get('status'); + $query->orderBy = $request->query->get('orderBy'); + $query->orderDirection = $request->query->get('orderDirection'); $query->authorizationContext = $this->authorizationService->buildInstitutionAuthorizationContext( $actorId, RegistrationAuthorityRole::ra(), diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RecoveryTokenController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RecoveryTokenController.php index ace32e80f..95bd9d9c7 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RecoveryTokenController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/RecoveryTokenController.php @@ -27,14 +27,15 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\RecoveryTokenQuery; use Surfnet\StepupMiddleware\ApiBundle\Identity\Service\RecoveryTokenService; use Surfnet\StepupMiddleware\ApiBundle\Response\JsonCollectionResponse; -use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** * Exposes the Recovery Tokens projection through the * Middleware Identity (read) API + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class RecoveryTokenController extends AbstractController { @@ -65,21 +66,24 @@ public function collection(Request $request): JsonCollectionResponse sprintf('Received search request for recovery tokens with params: %s', $request->getQueryString()), ); $query = new RecoveryTokenQuery(); - $query->identityId = $request->get('identityId') ? new IdentityId($request->get('identityId')) : null; - $query->type = $request->get('type'); - $query->status = $request->get('status'); - $query->institution = $request->get('institution'); - $query->email = $request->get('email'); - $query->name = $request->get('name'); - $query->pageNumber = (int)$request->get('p', 1); - $query->orderBy = $request->get('orderBy'); - $query->orderDirection = $request->get('orderDirection'); + $query->identityId = $request->query->get('identityId') ? new IdentityId($request->query->get('identityId')) : null; + $query->type = $request->query->get('type'); + $query->status = $request->query->get('status'); + $query->institution = $request->query->get('institution'); + $query->email = $request->query->get('email'); + $query->name = $request->query->get('name'); + $query->pageNumber = $request->query->getInt('p', 1); + $query->orderBy = $request->query->get('orderBy'); + $query->orderDirection = $request->query->get('orderDirection'); $roles = $this->getUser()->getRoles(); // Only apply the authorization context on non selfservice requests if (!in_array('ROLE_SS', $roles)) { - $actorId = $request->get('actorId', $request->get('identityId')); + $actorId = $request->query->get('actorId', $request->query->get('identityId')); $this->logger->info(sprintf('Executing query on behalf of %s', $actorId)); + if (!is_string($actorId)) { + throw new BadRequestHttpException('Invalid actorId or identityId, string expected.'); + } $actorId = new IdentityId($actorId); $query->authorizationContext = $this->authorizationService->buildInstitutionAuthorizationContext( $actorId, diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/SraaController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/SraaController.php index a410fde6c..d7b1b2792 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/SraaController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/SraaController.php @@ -19,9 +19,10 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Controller; use Surfnet\Stepup\Identity\Value\NameId; +use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; +use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\Sraa; use Surfnet\StepupMiddleware\ApiBundle\Identity\Service\SraaService; use Surfnet\StepupMiddleware\ApiBundle\Response\JsonNotFoundResponse; -use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; class SraaController extends AbstractController @@ -40,7 +41,7 @@ public function get(string $nameId): JsonResponse $sraa = $this->sraaService->findByNameId(new NameId($nameId)); - if (!$sraa instanceof \Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\Sraa) { + if (!$sraa instanceof Sraa) { return new JsonNotFoundResponse(); } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/UnverifiedSecondFactorController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/UnverifiedSecondFactorController.php index 2cec19a2d..c6a83a8c2 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/UnverifiedSecondFactorController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/UnverifiedSecondFactorController.php @@ -20,11 +20,12 @@ use Surfnet\Stepup\Identity\Value\IdentityId; use Surfnet\Stepup\Identity\Value\SecondFactorId; +use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\UnverifiedSecondFactor; use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\UnverifiedSecondFactorQuery; use Surfnet\StepupMiddleware\ApiBundle\Identity\Service\SecondFactorService; use Surfnet\StepupMiddleware\ApiBundle\Response\JsonCollectionResponse; -use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -54,9 +55,16 @@ public function collection(Request $request): JsonCollectionResponse $this->denyAccessUnlessGrantedOneOff(['ROLE_RA', 'ROLE_SS', 'ROLE_READ']); $query = new UnverifiedSecondFactorQuery(); - $query->identityId = new IdentityId($request->get('identityId')); - $query->verificationNonce = $request->get('verificationNonce'); - $query->pageNumber = (int)$request->get('p', 1); + + $identityIdString = $request->query->get('identityId'); + if (!is_string($identityIdString)) { + throw new BadRequestException(sprintf('Invalid identityId "%s"', $identityIdString)); + } + + $query->identityId = new IdentityId($identityIdString); + + $query->verificationNonce = $request->query->get('verificationNonce'); + $query->pageNumber = $request->query->getInt('p', 1); $paginator = $this->secondFactorService->searchUnverifiedSecondFactors($query); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/VerifiedSecondFactorController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/VerifiedSecondFactorController.php index 6fe3b9b2e..94734c02f 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/VerifiedSecondFactorController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/VerifiedSecondFactorController.php @@ -24,18 +24,19 @@ use Surfnet\Stepup\Identity\Value\SecondFactorId; use Surfnet\StepupBundle\Value\SecondFactorType; use Surfnet\StepupMiddleware\ApiBundle\Authorization\Service\AuthorizationContextService; +use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\VerifiedSecondFactor; use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\VerifiedSecondFactorOfIdentityQuery; use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\VerifiedSecondFactorQuery; use Surfnet\StepupMiddleware\ApiBundle\Identity\Service\SecondFactorService; use Surfnet\StepupMiddleware\ApiBundle\Response\JsonCollectionResponse; -use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class VerifiedSecondFactorController extends AbstractController { @@ -63,20 +64,25 @@ public function collection(Request $request): JsonCollectionResponse { $this->denyAccessUnlessGrantedOneOff(['ROLE_RA', 'ROLE_READ']); - $actorId = new IdentityId($request->get('actorId')); + $actorIdString = $request->query->get('actorId'); + if (!is_string($actorIdString)) { + throw new BadRequestException(sprintf('Invalid actorId "%s"', $actorIdString)); + } + + $actorId = new IdentityId($actorIdString); $query = new VerifiedSecondFactorQuery(); - if ($request->get('identityId')) { - $query->identityId = new IdentityId($request->get('identityId')); + if ($request->query->get('identityId')) { + $query->identityId = new IdentityId($request->query->get('identityId')); } - if ($request->get('secondFactorId')) { - $query->secondFactorId = new SecondFactorId($request->get('secondFactorId')); + if ($request->query->get('secondFactorId')) { + $query->secondFactorId = new SecondFactorId($request->query->get('secondFactorId')); } - $query->registrationCode = $request->get('registrationCode'); - $query->pageNumber = (int)$request->get('p', 1); + $query->registrationCode = $request->query->get('registrationCode'); + $query->pageNumber = $request->query->getInt('p', 1); $query->authorizationContext = $this->institutionAuthorizationService->buildInstitutionAuthorizationContext( $actorId, RegistrationAuthorityRole::ra(), @@ -92,8 +98,13 @@ public function collectionOfIdentity(Request $request): JsonCollectionResponse $this->denyAccessUnlessGrantedOneOff(['ROLE_SS', 'ROLE_READ']); $query = new VerifiedSecondFactorOfIdentityQuery(); - $query->identityId = new IdentityId($request->get('identityId')); - $query->pageNumber = (int)$request->get('p', 1); + $identityIdString = $request->query->get('identityId'); + if (!is_string($identityIdString)) { + throw new BadRequestException(sprintf('Invalid identityId "%s"', $identityIdString)); + } + + $query->identityId = new IdentityId($identityIdString); + $query->pageNumber = $request->query->getInt('p', 1); $paginator = $this->secondFactorService->searchVerifiedSecondFactorsOfIdentity($query); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/VettedSecondFactorController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/VettedSecondFactorController.php index ff13fcdf1..4589316f5 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/VettedSecondFactorController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/VettedSecondFactorController.php @@ -20,11 +20,12 @@ use Surfnet\Stepup\Identity\Value\IdentityId; use Surfnet\Stepup\Identity\Value\SecondFactorId; +use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\VettedSecondFactor; use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\VettedSecondFactorQuery; use Surfnet\StepupMiddleware\ApiBundle\Identity\Service\SecondFactorService; use Surfnet\StepupMiddleware\ApiBundle\Response\JsonCollectionResponse; -use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\Exception\BadRequestException; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -54,8 +55,14 @@ public function collection(Request $request): JsonCollectionResponse $this->denyAccessUnlessGrantedOneOff(['ROLE_RA', 'ROLE_SS', 'ROLE_READ']); $query = new VettedSecondFactorQuery(); - $query->identityId = new IdentityId($request->get('identityId')); - $query->pageNumber = (int)$request->get('p', 1); + + $identityIdString = $request->query->get('identityId'); + if (!is_string($identityIdString)) { + throw new BadRequestException(sprintf('Invalid identityId "%s"', $identityIdString)); + } + + $query->identityId = new IdentityId($identityIdString); + $query->pageNumber = $request->query->getInt('p', 1); $paginator = $this->secondFactorService->searchVettedSecondFactors($query); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/VettingTypeHintController.php b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/VettingTypeHintController.php index 7a316c5cf..e6a310550 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Controller/VettingTypeHintController.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Controller/VettingTypeHintController.php @@ -20,9 +20,9 @@ use Psr\Log\LoggerInterface; use Surfnet\Stepup\Identity\Value\Institution; +use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Surfnet\StepupMiddleware\ApiBundle\Exception\NotFoundException; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Service\VettingTypeHintService; -use Surfnet\StepupMiddleware\ApiBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/DependencyInjection/Configuration.php b/src/Surfnet/StepupMiddleware/ApiBundle/DependencyInjection/Configuration.php index 77012057c..14cb2ec72 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/DependencyInjection/Configuration.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/DependencyInjection/Configuration.php @@ -23,6 +23,9 @@ class Configuration implements ConfigurationInterface { + /** + * @return TreeBuilder<'array'> + */ public function getConfigTreeBuilder(): TreeBuilder { $treeBuilder = new TreeBuilder('surfnet_stepup_middleware_api'); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/AuthorityRoleType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/AuthorityRoleType.php index db0b778e6..fddea069c 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/AuthorityRoleType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/AuthorityRoleType.php @@ -37,7 +37,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform): st $column['length'] = 20; } - return $platform->getVarcharTypeDeclarationSQL($column); + return $platform->getStringTypeDeclarationSQL($column); } public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string @@ -74,4 +74,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/CommonNameType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/CommonNameType.php index 5d6f0a290..6bf74734b 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/CommonNameType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/CommonNameType.php @@ -34,7 +34,11 @@ class CommonNameType extends Type public function getSQLDeclaration(array $column, AbstractPlatform $platform): string { - return $platform->getVarcharTypeDeclarationSQL($column); + if (!isset($column['length'])) { + $column['length'] = 255; + } + + return $platform->getStringTypeDeclarationSQL($column); } public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string @@ -71,4 +75,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ConfigurationContactInformationType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ConfigurationContactInformationType.php index ef3167b99..a02e1f8e6 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ConfigurationContactInformationType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ConfigurationContactInformationType.php @@ -83,4 +83,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ConfigurationInstitutionType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ConfigurationInstitutionType.php index af3c2f0a7..8b2c1eec1 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ConfigurationInstitutionType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ConfigurationInstitutionType.php @@ -33,7 +33,11 @@ class ConfigurationInstitutionType extends Type public function getSQLDeclaration(array $column, AbstractPlatform $platform): string { - return $platform->getVarcharTypeDeclarationSQL($column); + if (!isset($column['length'])) { + $column['length'] = 255; + } + + return $platform->getStringTypeDeclarationSQL($column); } public function convertToDatabaseValue($value, AbstractPlatform $platform): mixed @@ -80,4 +84,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ConfigurationLocationType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ConfigurationLocationType.php index 55f0324f1..f3bf9b354 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ConfigurationLocationType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ConfigurationLocationType.php @@ -83,4 +83,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ContactInformationType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ContactInformationType.php index d9b399dab..f9cd551bf 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ContactInformationType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ContactInformationType.php @@ -73,4 +73,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/DateTimeType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/DateTimeType.php index 0457837a5..4d3704ddd 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/DateTimeType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/DateTimeType.php @@ -84,4 +84,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/DocumentNumberType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/DocumentNumberType.php index 2393a0335..3951ecdc7 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/DocumentNumberType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/DocumentNumberType.php @@ -35,7 +35,11 @@ class DocumentNumberType extends Type public function getSQLDeclaration(array $column, AbstractPlatform $platform): string { - return $platform->getVarcharTypeDeclarationSQL($column); + if (!isset($column['length'])) { + $column['length'] = 255; + } + + return $platform->getStringTypeDeclarationSQL($column); } /** @@ -76,4 +80,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/EmailType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/EmailType.php index 90e3b1ac7..7e0694271 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/EmailType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/EmailType.php @@ -33,7 +33,11 @@ class EmailType extends Type public function getSQLDeclaration(array $column, AbstractPlatform $platform): string { - return $platform->getVarcharTypeDeclarationSQL($column); + if (!isset($column['length'])) { + $column['length'] = 255; + } + + return $platform->getStringTypeDeclarationSQL($column); } public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string @@ -70,4 +74,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/InstitutionRoleType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/InstitutionRoleType.php index 2630e86be..fa5097dda 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/InstitutionRoleType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/InstitutionRoleType.php @@ -33,7 +33,11 @@ class InstitutionRoleType extends Type public function getSQLDeclaration(array $column, AbstractPlatform $platform): string { - return $platform->getVarcharTypeDeclarationSQL($column); + if (!isset($column['length'])) { + $column['length'] = 255; + } + + return $platform->getStringTypeDeclarationSQL($column); } public function convertToDatabaseValue($value, AbstractPlatform $platform): mixed @@ -80,4 +84,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/InstitutionType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/InstitutionType.php index d4570b01c..d478b6d81 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/InstitutionType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/InstitutionType.php @@ -33,7 +33,11 @@ class InstitutionType extends Type public function getSQLDeclaration(array $column, AbstractPlatform $platform): string { - return $platform->getVarcharTypeDeclarationSQL($column); + if (!isset($column['length'])) { + $column['length'] = 255; + } + + return $platform->getStringTypeDeclarationSQL($column); } public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string @@ -70,4 +74,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/LocaleType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/LocaleType.php index a46588ecf..102c6d633 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/LocaleType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/LocaleType.php @@ -36,7 +36,11 @@ class LocaleType extends Type public function getSQLDeclaration(array $column, AbstractPlatform $platform): string { - return $platform->getVarcharTypeDeclarationSQL($column); + if (!isset($column['length'])) { + $column['length'] = 255; + } + + return $platform->getStringTypeDeclarationSQL($column); } public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string @@ -73,4 +77,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/LocationType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/LocationType.php index 1a4bfe8a7..d017a9eb4 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/LocationType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/LocationType.php @@ -73,4 +73,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/NameIdType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/NameIdType.php index 83c31c081..ce336e722 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/NameIdType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/NameIdType.php @@ -33,7 +33,11 @@ class NameIdType extends Type public function getSQLDeclaration(array $column, AbstractPlatform $platform): string { - return $platform->getVarcharTypeDeclarationSQL($column); + if (!isset($column['length'])) { + $column['length'] = 255; + } + + return $platform->getStringTypeDeclarationSQL($column); } public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string @@ -70,4 +74,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/NumberOfTokensPerIdentityType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/NumberOfTokensPerIdentityType.php index 1bbfb6b74..14054c83c 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/NumberOfTokensPerIdentityType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/NumberOfTokensPerIdentityType.php @@ -21,7 +21,6 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\IntegerType; -use Doctrine\DBAL\Types\Type; use Surfnet\Stepup\Configuration\Value\NumberOfTokensPerIdentityOption; use Surfnet\Stepup\Exception\InvalidArgumentException; @@ -82,4 +81,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/RaLocationNameType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/RaLocationNameType.php index bdc0efdcc..0eada5984 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/RaLocationNameType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/RaLocationNameType.php @@ -33,7 +33,10 @@ class RaLocationNameType extends Type public function getSQLDeclaration(array $column, AbstractPlatform $platform): string { - return $platform->getVarcharTypeDeclarationSQL([]); + $clearColumn = []; + $clearColumn['length'] = 255; + + return $platform->getStringTypeDeclarationSQL($clearColumn); } public function convertToDatabaseValue($value, AbstractPlatform $platform): mixed @@ -80,4 +83,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/RecoveryTokenStatusType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/RecoveryTokenStatusType.php index a98d54d55..1b73e751b 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/RecoveryTokenStatusType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/RecoveryTokenStatusType.php @@ -82,7 +82,7 @@ public function convertToPHPValue(mixed $value, AbstractPlatform $platform): Rec sprintf( "Encountered illegal recovery token status of type %s '%s', expected it to be one of [0,10,20]", get_debug_type($value), - is_scalar($value) ? (string)$value : '', + is_scalar($value) ? $value : '', ), ); } @@ -91,4 +91,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SecondFactorStatusType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SecondFactorStatusType.php index e85378df4..3580f6e49 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SecondFactorStatusType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SecondFactorStatusType.php @@ -95,7 +95,7 @@ public function convertToPHPValue(mixed $value, AbstractPlatform $platform): Sec sprintf( "Encountered illegal second factor status of type %s '%s', expected it to be one of [0,10,20,30,40]", get_debug_type($value), - is_scalar($value) ? (string)$value : '', + is_scalar($value) ? $value : '', ), ); } @@ -104,4 +104,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SecondFactorTypeType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SecondFactorTypeType.php index f6507e266..44219eea7 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SecondFactorTypeType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SecondFactorTypeType.php @@ -33,7 +33,11 @@ class SecondFactorTypeType extends Type public function getSQLDeclaration(array $column, AbstractPlatform $platform): string { - return $platform->getVarcharTypeDeclarationSQL($column); + if (!isset($column['length'])) { + $column['length'] = 255; + } + + return $platform->getStringTypeDeclarationSQL($column); } public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string @@ -70,4 +74,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SelfAssertedTokensOptionType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SelfAssertedTokensOptionType.php index 3d24cfd23..4dc2fb43d 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SelfAssertedTokensOptionType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SelfAssertedTokensOptionType.php @@ -21,8 +21,6 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\IntegerType; -use Doctrine\DBAL\Types\Type; -use phpseclib3\Math\PrimeField\Integer; use Surfnet\Stepup\Configuration\Value\SelfAssertedTokensOption; use TypeError; @@ -83,4 +81,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SelfVetOptionType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SelfVetOptionType.php index 1202b099a..d683cc785 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SelfVetOptionType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SelfVetOptionType.php @@ -21,7 +21,6 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\IntegerType; -use Doctrine\DBAL\Types\Type; use Surfnet\Stepup\Configuration\Value\SelfVetOption; use TypeError; @@ -82,4 +81,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ShowRaaContactInformationOptionType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ShowRaaContactInformationOptionType.php index 263320b61..213fef0bb 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ShowRaaContactInformationOptionType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/ShowRaaContactInformationOptionType.php @@ -82,4 +82,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SsoOn2faOptionType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SsoOn2faOptionType.php index 904cee34d..3ecd80973 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SsoOn2faOptionType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SsoOn2faOptionType.php @@ -21,7 +21,6 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\IntegerType; -use Doctrine\DBAL\Types\Type; use Surfnet\Stepup\Configuration\Value\SsoOn2faOption; use TypeError; @@ -82,4 +81,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SsoRegistrationBypassOptionType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SsoRegistrationBypassOptionType.php index 90924cb55..e4d0a28dd 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SsoRegistrationBypassOptionType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/SsoRegistrationBypassOptionType.php @@ -85,4 +85,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/UseRaLocationsOptionType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/UseRaLocationsOptionType.php index b4473bde8..c49c42f6d 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/UseRaLocationsOptionType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/UseRaLocationsOptionType.php @@ -80,4 +80,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/VerifyEmailOptionType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/VerifyEmailOptionType.php index 5ade89796..0dee3cad8 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/VerifyEmailOptionType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/VerifyEmailOptionType.php @@ -21,7 +21,6 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\BooleanType; use Doctrine\DBAL\Types\ConversionException; -use Doctrine\DBAL\Types\Type; use Surfnet\Stepup\Configuration\Value\VerifyEmailOption; use Surfnet\Stepup\Exception\InvalidArgumentException; @@ -81,4 +80,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/VettingTypeHintsType.php b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/VettingTypeHintsType.php index f58c7006b..d0ca4e2b8 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/VettingTypeHintsType.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Doctrine/Type/VettingTypeHintsType.php @@ -21,7 +21,6 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\JsonType; -use Doctrine\DBAL\Types\Type; use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Identity\Collection\VettingTypeHintCollection; @@ -63,4 +62,9 @@ public function getName(): string { return self::NAME; } + + public function requiresSQLCommentHint(AbstractPlatform $platform): bool + { + return false; + } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/AuditLogEntry.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/AuditLogEntry.php index e057891d4..2edfa0e0f 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/AuditLogEntry.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/AuditLogEntry.php @@ -62,7 +62,7 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\AuditLogRepository; /** - * @SuppressWarnings(PHPMD.UnusedPrivateField) + * @SuppressWarnings("PHPMD.UnusedPrivateField") */ #[ORM\Table(name: 'audit_log')] #[ORM\Index(name: 'idx_auditlog_actorid', columns: ['actor_id'])] @@ -174,7 +174,7 @@ public function jsonSerialize(): array 'identity_institution' => (string)$this->identityInstitution, 'ra_institution' => (string)$this->raInstitution, 'second_factor_id' => $this->secondFactorId, - 'second_factor_type' => $this->secondFactorType ? (string)$this->secondFactorType : null, + 'second_factor_type' => $this->secondFactorType ?: null, 'second_factor_identifier' => $this->secondFactorIdentifier, 'recovery_token_type' => $this->recoveryTokenType, 'recovery_token_identifier' => $this->recoveryTokenIdentifier, diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/IdentitySelfAssertedTokenOptions.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/IdentitySelfAssertedTokenOptions.php index 683b775a1..ec406e5dc 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/IdentitySelfAssertedTokenOptions.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/IdentitySelfAssertedTokenOptions.php @@ -72,7 +72,7 @@ public static function create( public function jsonSerialize(): array { return [ - 'identity_id' => (string)$this->identityId, + 'identity_id' => $this->identityId, 'possessed_self_asserted_token' => $this->possessedSelfAssertedToken, 'possessed_token' => $this->possessedToken, ]; diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/RaListing.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/RaListing.php index 3848c981c..e0232209d 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/RaListing.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Entity/RaListing.php @@ -25,7 +25,6 @@ use Surfnet\Stepup\Identity\Value\Email; use Surfnet\Stepup\Identity\Value\Institution; use Surfnet\Stepup\Identity\Value\Location; -use Surfnet\StepupMiddleware\ApiBundle\Exception\InvalidArgumentException; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\RaListingRepository; use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\AuthorityRole; diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/AuditLogProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/AuditLogProjector.php index 19e3d278a..eba995b31 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/AuditLogProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/AuditLogProjector.php @@ -31,8 +31,11 @@ use Surfnet\Stepup\Identity\Value\Institution; use Surfnet\Stepup\Identity\Value\RecoveryTokenIdentifierFactory; use Surfnet\Stepup\Identity\Value\RecoveryTokenType; +use Surfnet\Stepup\Identity\Value\SecondFactorId; +use Surfnet\Stepup\Identity\Value\SecondFactorIdentifier; use Surfnet\Stepup\Identity\Value\VettingType; use Surfnet\Stepup\Projector\Projector; +use Surfnet\StepupBundle\Value\SecondFactorType; use Surfnet\StepupMiddleware\ApiBundle\Exception\RuntimeException; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\AuditLogEntry; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\Identity; @@ -40,7 +43,7 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\IdentityRepository; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class AuditLogProjector extends Projector { @@ -70,8 +73,8 @@ public function handle(DomainMessage $domainMessage): void } /** - * @SuppressWarnings(PHPMD.CyclomaticComplexity) - * @SuppressWarnings(PHPMD.NPathComplexity) + * @SuppressWarnings("PHPMD.CyclomaticComplexity") + * @SuppressWarnings("PHPMD.NPathComplexity") */ private function applyAuditableEvent(AuditableEvent $event, DomainMessage $domainMessage): void { @@ -108,11 +111,11 @@ private function applyAuditableEvent(AuditableEvent $event, DomainMessage $domai $entry->event = $event::class; $entry->recordedOn = new DateTime(new CoreDateTime($domainMessage->getRecordedOn()->toString())); - if ($auditLogMetadata->secondFactorId instanceof \Surfnet\Stepup\Identity\Value\SecondFactorId) { + if ($auditLogMetadata->secondFactorId instanceof SecondFactorId) { $entry->secondFactorId = (string)$auditLogMetadata->secondFactorId; } - if ($auditLogMetadata->secondFactorType instanceof \Surfnet\StepupBundle\Value\SecondFactorType) { + if ($auditLogMetadata->secondFactorType instanceof SecondFactorType) { $entry->secondFactorType = (string)$auditLogMetadata->secondFactorType; } @@ -123,15 +126,15 @@ private function applyAuditableEvent(AuditableEvent $event, DomainMessage $domai $entry->recoveryTokenIdentifier = (string)$auditLogMetadata->recoveryTokenId; } - if ($auditLogMetadata->recoveryTokenType instanceof \Surfnet\Stepup\Identity\Value\RecoveryTokenType) { + if ($auditLogMetadata->recoveryTokenType instanceof RecoveryTokenType) { $entry->recoveryTokenType = (string)$auditLogMetadata->recoveryTokenType; } - if ($auditLogMetadata->secondFactorIdentifier instanceof \Surfnet\Stepup\Identity\Value\SecondFactorIdentifier) { + if ($auditLogMetadata->secondFactorIdentifier instanceof SecondFactorIdentifier) { $entry->secondFactorIdentifier = (string)$auditLogMetadata->secondFactorIdentifier; } - if ($auditLogMetadata->raInstitution instanceof \Surfnet\Stepup\Identity\Value\Institution) { + if ($auditLogMetadata->raInstitution instanceof Institution) { $entry->raInstitution = (string)$auditLogMetadata->raInstitution; } @@ -162,7 +165,7 @@ protected function applyIdentityForgottenEvent(IdentityForgottenEvent $event): v private function augmentActorCommonName(AuditLogEntry $entry, Metadata $auditLogMetadata): void { - if (property_exists($auditLogMetadata, 'vettingType') && $auditLogMetadata->vettingType instanceof VettingType) { + if ($auditLogMetadata->vettingType instanceof VettingType) { $entry->actorCommonName = new CommonName( $entry->actorCommonName->getCommonName() . $auditLogMetadata->vettingType->auditLog() ); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/IdentityProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/IdentityProjector.php index 9b7ab7683..e6cfb0ec7 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/IdentityProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/IdentityProjector.php @@ -18,16 +18,16 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Identity\Projector; -use Surfnet\Stepup\Identity\Event\IdentityRestoredEvent; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Identity\Event\IdentityCreatedEvent; use Surfnet\Stepup\Identity\Event\IdentityEmailChangedEvent; use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; use Surfnet\Stepup\Identity\Event\IdentityRenamedEvent; +use Surfnet\Stepup\Identity\Event\IdentityRestoredEvent; use Surfnet\Stepup\Identity\Event\LocalePreferenceExpressedEvent; use Surfnet\Stepup\Identity\Event\SecondFactorVettedEvent; use Surfnet\Stepup\Identity\Event\SecondFactorVettedWithoutTokenProofOfPossession; use Surfnet\Stepup\Identity\Value\VettingType; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\Identity; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\IdentityRepository; diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/IdentitySelfAssertedTokenOptionsProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/IdentitySelfAssertedTokenOptionsProjector.php index d08af17a2..717c3380d 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/IdentitySelfAssertedTokenOptionsProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/IdentitySelfAssertedTokenOptionsProjector.php @@ -18,13 +18,13 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Identity\Projector; -use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Identity\Event\IdentityCreatedEvent; +use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; use Surfnet\Stepup\Identity\Event\SecondFactorVettedEvent; use Surfnet\Stepup\Identity\Event\SecondFactorVettedWithoutTokenProofOfPossession; use Surfnet\Stepup\Identity\Value\IdentityId; use Surfnet\Stepup\Identity\Value\VettingType; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\IdentitySelfAssertedTokenOptions; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\IdentitySelfAssertedTokenOptionsRepository; diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/InstitutionListingProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/InstitutionListingProjector.php index 925983bfb..dc8212331 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/InstitutionListingProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/InstitutionListingProjector.php @@ -18,9 +18,9 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Identity\Projector; +use Surfnet\Stepup\Identity\Event\IdentityCreatedEvent; use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; use Surfnet\Stepup\Projector\Projector; -use Surfnet\Stepup\Identity\Event\IdentityCreatedEvent; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\InstitutionListingRepository; /** diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaListingProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaListingProjector.php index 287673e21..4c0b25289 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaListingProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaListingProjector.php @@ -18,7 +18,6 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Identity\Projector; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Identity\Event\AppointedAsRaaEvent; use Surfnet\Stepup\Identity\Event\AppointedAsRaaForInstitutionEvent; use Surfnet\Stepup\Identity\Event\AppointedAsRaEvent; @@ -32,6 +31,7 @@ use Surfnet\Stepup\Identity\Event\RegistrationAuthorityInformationAmendedForInstitutionEvent; use Surfnet\Stepup\Identity\Event\RegistrationAuthorityRetractedEvent; use Surfnet\Stepup\Identity\Event\RegistrationAuthorityRetractedForInstitutionEvent; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\ApiBundle\Exception\RuntimeException; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\RaListing; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\IdentityRepository; @@ -39,8 +39,8 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\AuthorityRole; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - Events, events, events! - * @SuppressWarnings(PHPMD.TooManyPublicMethods) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") - Events, events, events! + * @SuppressWarnings("PHPMD.TooManyPublicMethods") */ class RaListingProjector extends Projector { @@ -94,7 +94,7 @@ public function applyRegistrationAuthorityInformationAmendedForInstitutionEvent( $event->raInstitution, ); - if (!$raListing instanceof \Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\RaListing) { + if (!$raListing instanceof RaListing) { throw new RuntimeException( "Tried to amend an RaListing's registration authority location and contact information, " . "but the listing could not be found", @@ -198,7 +198,7 @@ public function applyRegistrationAuthorityInformationAmendedEvent( $event->identityInstitution, ); - if (!$raListing instanceof \Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\RaListing) { + if (!$raListing instanceof RaListing) { throw new RuntimeException( "Tried to amend an RaListing's registration authority location and contact information, " . "but the listing could not be found", diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaSecondFactorProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaSecondFactorProjector.php index c25c8f6ea..59541282d 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaSecondFactorProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RaSecondFactorProjector.php @@ -18,7 +18,6 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Identity\Projector; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Identity\Event\CompliedWithUnverifiedSecondFactorRevocationEvent; use Surfnet\Stepup\Identity\Event\CompliedWithVerifiedSecondFactorRevocationEvent; use Surfnet\Stepup\Identity\Event\CompliedWithVettedSecondFactorRevocationEvent; @@ -46,15 +45,16 @@ use Surfnet\Stepup\Identity\Value\Email; use Surfnet\Stepup\Identity\Value\OnPremiseVettingType; use Surfnet\Stepup\Identity\Value\SecondFactorId; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\RaSecondFactor; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\IdentityRepository; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\RaSecondFactorRepository; use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\SecondFactorStatus; /** - * @SuppressWarnings(PHPMD.TooManyMethods) - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - * @SuppressWarnings(PHPMD.TooManyPublicMethods) + * @SuppressWarnings("PHPMD.TooManyMethods") + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") + * @SuppressWarnings("PHPMD.TooManyPublicMethods") */ class RaSecondFactorProjector extends Projector { diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RecoveryTokenProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RecoveryTokenProjector.php index 13206deed..1176e419b 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RecoveryTokenProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/RecoveryTokenProjector.php @@ -18,13 +18,13 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Identity\Projector; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Identity\Event\CompliedWithRecoveryCodeRevocationEvent; use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; use Surfnet\Stepup\Identity\Event\PhoneRecoveryTokenPossessionProvenEvent; use Surfnet\Stepup\Identity\Event\RecoveryTokenRevokedEvent; use Surfnet\Stepup\Identity\Event\SafeStoreSecretRecoveryTokenPossessionPromisedEvent; use Surfnet\Stepup\Identity\Value\RecoveryTokenType; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\RecoveryToken; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\RecoveryTokenRepository; use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\RecoveryTokenStatus; diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SecondFactorProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SecondFactorProjector.php index c9307d862..9503679cd 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SecondFactorProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SecondFactorProjector.php @@ -18,7 +18,6 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Identity\Projector; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Identity\Event\CompliedWithUnverifiedSecondFactorRevocationEvent; use Surfnet\Stepup\Identity\Event\CompliedWithVerifiedSecondFactorRevocationEvent; use Surfnet\Stepup\Identity\Event\CompliedWithVettedSecondFactorRevocationEvent; @@ -39,6 +38,7 @@ use Surfnet\Stepup\Identity\Event\YubikeySecondFactorBootstrappedEvent; use Surfnet\Stepup\Identity\Value\UnknownVettingType; use Surfnet\Stepup\Identity\Value\VettingType; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\UnverifiedSecondFactor; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\VerifiedSecondFactor; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\VettedSecondFactor; @@ -47,9 +47,9 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\VettedSecondFactorRepository; /** - * @SuppressWarnings(PHPMD.TooManyMethods) - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - * @SuppressWarnings(PHPMD.TooManyPublicMethods) + * @SuppressWarnings("PHPMD.TooManyMethods") + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") + * @SuppressWarnings("PHPMD.TooManyPublicMethods") */ class SecondFactorProjector extends Projector { @@ -186,7 +186,7 @@ public function applySecondFactorVettedEvent(SecondFactorVettedEvent $event): vo // In case the vetting type is unknown (for example when no event replay was performed) // fall back to the unknown vetting type. $vettingType = $event->vettingType; - if (!$vettingType instanceof \Surfnet\Stepup\Identity\Value\VettingType) { + if (!$vettingType instanceof VettingType) { $vettingType = new UnknownVettingType(); } $vetted->vettingType = $vettingType->type(); @@ -225,7 +225,7 @@ public function applySecondFactorVettedWithoutTokenProofOfPossession( $vettingType = $event->vettingType; // In case the vetting type is unknown (for example when no event replay was performed) // fall back to the unknown vetting type. - if (!$vettingType instanceof \Surfnet\Stepup\Identity\Value\VettingType) { + if (!$vettingType instanceof VettingType) { $vettingType = new UnknownVettingType(); } $vetted->vettingType = $vettingType->type(); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SecondFactorRevocationProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SecondFactorRevocationProjector.php index 58f543bc5..07a13befd 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SecondFactorRevocationProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SecondFactorRevocationProjector.php @@ -19,13 +19,13 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Identity\Projector; use Broadway\Domain\DomainMessage; -use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; -use Surfnet\Stepup\Projector\Projector; use DateTime as CoreDateTime; use Ramsey\Uuid\Uuid; use Surfnet\Stepup\DateTime\DateTime; use Surfnet\Stepup\Identity\Event\CompliedWithVettedSecondFactorRevocationEvent; +use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; use Surfnet\Stepup\Identity\Event\VettedSecondFactorRevokedEvent; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\SecondFactorRevocation; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\SecondFactorRevocationRepository; diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SraaProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SraaProjector.php index 31402a060..3d7323e23 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SraaProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/SraaProjector.php @@ -18,10 +18,10 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Identity\Projector; -use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Configuration\Event\SraaUpdatedEvent; +use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; use Surfnet\Stepup\Identity\Value\NameId; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\Sraa; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\SraaRepository; diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/VettingTypeHintProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/VettingTypeHintProjector.php index d3d8e8cfd..f1910d811 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/VettingTypeHintProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/VettingTypeHintProjector.php @@ -19,8 +19,8 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Identity\Projector; use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Identity\Event\VettingTypeHintsSavedEvent; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\VettingTypeHint; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\VettingTypeHintRepository; diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/WhitelistProjector.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/WhitelistProjector.php index 74ae3b35a..fd82b8554 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/WhitelistProjector.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Projector/WhitelistProjector.php @@ -19,11 +19,11 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Identity\Projector; use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Identity\Event\InstitutionsAddedToWhitelistEvent; use Surfnet\Stepup\Identity\Event\InstitutionsRemovedFromWhitelistEvent; use Surfnet\Stepup\Identity\Event\WhitelistCreatedEvent; use Surfnet\Stepup\Identity\Event\WhitelistReplacedEvent; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\WhitelistEntry; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\WhitelistEntryRepository; diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuditLogRepository.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuditLogRepository.php index 0642c7947..2315844fb 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuditLogRepository.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuditLogRepository.php @@ -107,7 +107,7 @@ public function __construct(ManagerRegistry $registry) ]; /** - * @SuppressWarnings(PHPMD.CyclomaticComplexity) - The filtering switch triggers the CyclomaticComplexity, it does + * @SuppressWarnings("PHPMD.CyclomaticComplexity") - The filtering switch triggers the CyclomaticComplexity, it does * not actually make the class complex or hard to maintain. */ public function createSecondFactorSearchQuery(SecondFactorAuditLogQuery $query): Query diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuthorizationRepository.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuthorizationRepository.php index c141be035..8e6fb8658 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuthorizationRepository.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/AuthorizationRepository.php @@ -36,7 +36,7 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\AuthorityRole; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") * @extends ServiceEntityRepository */ class AuthorizationRepository extends ServiceEntityRepository diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/IdentityRepository.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/IdentityRepository.php index eed634b59..19efe1d54 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/IdentityRepository.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/IdentityRepository.php @@ -19,11 +19,9 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Identity\Repository; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; -use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Query; use Doctrine\Persistence\ManagerRegistry; use Surfnet\Stepup\Identity\Value\CommonName; -use Surfnet\Stepup\Identity\Value\DocumentNumber; use Surfnet\Stepup\Identity\Value\Email; use Surfnet\Stepup\Identity\Value\IdentityId; use Surfnet\Stepup\Identity\Value\Institution; diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/InstitutionListingRepository.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/InstitutionListingRepository.php index 909decef4..7752e8fe2 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/InstitutionListingRepository.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/InstitutionListingRepository.php @@ -21,7 +21,6 @@ use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; use Surfnet\Stepup\Identity\Value\Institution; -use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\Identity; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\InstitutionListing; /** diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaCandidateRepository.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaCandidateRepository.php index 47576a71b..16fb16bf2 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaCandidateRepository.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaCandidateRepository.php @@ -33,8 +33,8 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\RaCandidateQuery; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - * @SuppressWarnings(PHPMD.TooManyPublicMethods) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") + * @SuppressWarnings("PHPMD.TooManyPublicMethods") * @extends ServiceEntityRepository */ class RaCandidateRepository extends ServiceEntityRepository diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaListingRepository.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaListingRepository.php index 940762332..834db1866 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaListingRepository.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaListingRepository.php @@ -31,7 +31,7 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\RaListingQuery; /** - * @SuppressWarnings(PHPMD.TooManyPublicMethods) + * @SuppressWarnings("PHPMD.TooManyPublicMethods") * @extends ServiceEntityRepository */ class RaListingRepository extends ServiceEntityRepository @@ -100,8 +100,8 @@ public function save(RaListing $raListingEntry): void } /** - * @SuppressWarnings(PHPMD.CyclomaticComplexity) The amount of if statements do not necessarily make the method - * @SuppressWarnings(PHPMD.NPathComplexity) below complex or hard to maintain. + * @SuppressWarnings("PHPMD.CyclomaticComplexity") The amount of if statements do not necessarily make the method + * @SuppressWarnings("PHPMD.NPathComplexity") below complex or hard to maintain. */ public function createSearchQuery(RaListingQuery $query): Query { @@ -134,13 +134,13 @@ public function createSearchQuery(RaListingQuery $query): Query if ($query->role) { $queryBuilder ->andWhere('r.role = :role') - ->setParameter('role', (string)$query->role); + ->setParameter('role', $query->role); } if ($query->raInstitution) { $queryBuilder ->andWhere('r.raInstitution = :raInstitution') - ->setParameter('raInstitution', (string)$query->raInstitution); + ->setParameter('raInstitution', $query->raInstitution); } // Modify query to filter on authorization: diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaSecondFactorRepository.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaSecondFactorRepository.php index 811c0a885..e1dda68ca 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaSecondFactorRepository.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RaSecondFactorRepository.php @@ -34,7 +34,7 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\SecondFactorStatus; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") * @extends ServiceEntityRepository */ class RaSecondFactorRepository extends ServiceEntityRepository @@ -72,9 +72,9 @@ public function findByInstitution(string $institution): array } /** - * @SuppressWarnings(PHPMD.CyclomaticComplexity) The amount of if statements do not necessarily make the method + * @SuppressWarnings("PHPMD.CyclomaticComplexity") The amount of if statements do not necessarily make the method * below complex or hard to maintain. - * @SuppressWarnings(PHPMD.NPathComplexity) + * @SuppressWarnings("PHPMD.NPathComplexity") */ public function createSearchQuery(RaSecondFactorQuery $query): Query { diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RecoveryTokenRepository.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RecoveryTokenRepository.php index e1b7331d7..d651c4cf1 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RecoveryTokenRepository.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/RecoveryTokenRepository.php @@ -57,8 +57,8 @@ public function remove(RecoveryToken $recoveryToken): void } /** - * @SuppressWarnings(PHPMD.CyclomaticComplexity) - * @SuppressWarnings(PHPMD.NPathComplexity) + * @SuppressWarnings("PHPMD.CyclomaticComplexity") + * @SuppressWarnings("PHPMD.NPathComplexity") */ public function createSearchQuery(RecoveryTokenQuery $query): Query { diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/UnverifiedSecondFactorRepository.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/UnverifiedSecondFactorRepository.php index e95c72ecf..9d022256e 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/UnverifiedSecondFactorRepository.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/UnverifiedSecondFactorRepository.php @@ -50,7 +50,7 @@ public function createSearchQuery(UnverifiedSecondFactorQuery $query): Query { $queryBuilder = $this->createQueryBuilder('sf'); - if ($query->identityId instanceof \Surfnet\Stepup\Identity\Value\IdentityId) { + if ($query->identityId instanceof IdentityId) { $queryBuilder ->andWhere('sf.identityId = :identityId') ->setParameter('identityId', (string)$query->identityId); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/VerifiedSecondFactorRepository.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/VerifiedSecondFactorRepository.php index 5d3dd5f19..d47ad051a 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/VerifiedSecondFactorRepository.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/VerifiedSecondFactorRepository.php @@ -23,6 +23,7 @@ use Doctrine\ORM\Query; use Doctrine\Persistence\ManagerRegistry; use Surfnet\Stepup\Identity\Value\IdentityId; +use Surfnet\Stepup\Identity\Value\SecondFactorId; use Surfnet\StepupMiddleware\ApiBundle\Authorization\Filter\InstitutionAuthorizationRepositoryFilter; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\VerifiedSecondFactor; use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\VerifiedSecondFactorOfIdentityQuery; @@ -68,20 +69,17 @@ public function findByDate(DateTime $requestedAt): array ->getResult(); } - /** - * @return Query - */ public function createSearchQuery(VerifiedSecondFactorQuery $query): Query { $queryBuilder = $this->createQueryBuilder('sf'); - if ($query->identityId instanceof \Surfnet\Stepup\Identity\Value\IdentityId) { + if ($query->identityId instanceof IdentityId) { $queryBuilder ->andWhere('sf.identityId = :identityId') ->setParameter('identityId', (string)$query->identityId); } - if ($query->secondFactorId instanceof \Surfnet\Stepup\Identity\Value\SecondFactorId) { + if ($query->secondFactorId instanceof SecondFactorId) { $queryBuilder ->andWhere('sf.id = :secondFactorId') ->setParameter('secondFactorId', (string)$query->secondFactorId); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/VettedSecondFactorRepository.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/VettedSecondFactorRepository.php index ef86bb5d1..b77a72c29 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/VettedSecondFactorRepository.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Repository/VettedSecondFactorRepository.php @@ -47,7 +47,7 @@ public function createSearchQuery(VettedSecondFactorQuery $query): Query { $queryBuilder = $this->createQueryBuilder('sf'); - if ($query->identityId instanceof \Surfnet\Stepup\Identity\Value\IdentityId) { + if ($query->identityId instanceof IdentityId) { $queryBuilder ->andWhere('sf.identityId = :identityId') ->setParameter('identityId', (string)$query->identityId); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/AbstractSearchService.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/AbstractSearchService.php index eea808ed4..cb1e69ca1 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/AbstractSearchService.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/AbstractSearchService.php @@ -25,8 +25,15 @@ use Surfnet\StepupMiddleware\ApiBundle\Exception\InvalidArgumentException; use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\AbstractQuery; -class AbstractSearchService +/** + * @template T of object + */ +abstract class AbstractSearchService { + /** + * @param Query|QueryBuilder $doctrineQuery + * @return Pagerfanta + */ protected function createPaginatorFrom( QueryBuilder|Query $doctrineQuery, AbstractQuery $query, @@ -55,6 +62,7 @@ protected function createPaginatorFrom( } /** + * @param Query> $doctrineQuery * @return array> */ protected function getFilteredQueryOptions(Query $doctrineQuery): array diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/AuditLogService.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/AuditLogService.php index e520657c1..bc02cf9f2 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/AuditLogService.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/AuditLogService.php @@ -23,6 +23,7 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\SecondFactorAuditLogQuery; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\AuditLogRepository; +/** @extends AbstractSearchService */ class AuditLogService extends AbstractSearchService { public function __construct(private readonly AuditLogRepository $repository) diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/IdentityService.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/IdentityService.php index 82d01a89a..5f6e52e96 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/IdentityService.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/IdentityService.php @@ -34,8 +34,8 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\RegistrationAuthorityCredentials; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - */ + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") + * @extends AbstractSearchService */ class IdentityService extends AbstractSearchService { public function __construct( diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/ProfileService.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/ProfileService.php index 570fb68b5..dee229e4c 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/ProfileService.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/ProfileService.php @@ -25,6 +25,7 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\AuthorizedInstitutionCollection; use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\Profile; +/** @extends AbstractSearchService */ class ProfileService extends AbstractSearchService { public function __construct( diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaCandidateService.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaCandidateService.php index 3fdd6d16f..eacdded7f 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaCandidateService.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaCandidateService.php @@ -25,6 +25,7 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\RaCandidateQuery; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\RaCandidateRepository; +/** @extends AbstractSearchService */ class RaCandidateService extends AbstractSearchService { public function __construct(private readonly RaCandidateRepository $raCandidateRepository) diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaListingService.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaListingService.php index 22f0f58a5..62643fc07 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaListingService.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaListingService.php @@ -27,6 +27,7 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\RaListingRepository; use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\RegistrationAuthorityCredentials; +/** @extends AbstractSearchService */ class RaListingService extends AbstractSearchService { public function __construct(private readonly RaListingRepository $raListingRepository) diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaSecondFactorService.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaSecondFactorService.php index 1de65395c..7bf3cc2bd 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaSecondFactorService.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RaSecondFactorService.php @@ -23,6 +23,7 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Query\RaSecondFactorQuery; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\RaSecondFactorRepository; +/** @extends AbstractSearchService */ class RaSecondFactorService extends AbstractSearchService { public function __construct(private readonly RaSecondFactorRepository $repository) diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RecoveryTokenService.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RecoveryTokenService.php index 6ddfdeaea..d2599496f 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RecoveryTokenService.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/RecoveryTokenService.php @@ -27,6 +27,7 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\RecoveryTokenRepository; use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\RecoveryTokenStatus; +/** @extends AbstractSearchService */ class RecoveryTokenService extends AbstractSearchService { public function __construct(private readonly RecoveryTokenRepository $recoveryTokenRepository) diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/SecondFactorService.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/SecondFactorService.php index 8ae2f6ae3..91c6947b2 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/SecondFactorService.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Service/SecondFactorService.php @@ -33,8 +33,10 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\VettedSecondFactorRepository; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) Coupling to Entities and ValueObjects in parameters cause the high + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") Coupling to Entities and ValueObjects in parameters cause the high * coupling warning. Decoupling them (replacing VOs with primitives) bring a degradation in type strictness. + * + * @extends AbstractSearchService */ class SecondFactorService extends AbstractSearchService { diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Value/AuthorityRole.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Value/AuthorityRole.php index c707a387b..99198a30a 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Value/AuthorityRole.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Value/AuthorityRole.php @@ -48,8 +48,8 @@ public function __construct(string $role) } /** - * @SuppressWarnings(PHPMD.CamelCaseMethodName) this is the actual used notation - * @SuppressWarnings(PHPMD.ShortMethodName) this is the actual term + * @SuppressWarnings("PHPMD.CamelCaseMethodName") this is the actual used notation + * @SuppressWarnings("PHPMD.ShortMethodName") this is the actual term * * @return AuthorityRole */ @@ -59,7 +59,7 @@ public static function ra(): self } /** - * @SuppressWarnings(PHPMD.CamelCaseMethodName) this is the actual used notation + * @SuppressWarnings("PHPMD.CamelCaseMethodName") this is the actual used notation * * @return AuthorityRole */ diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Value/AuthorizedInstitutionCollection.php b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Value/AuthorizedInstitutionCollection.php index eef708ae3..0483c444f 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Value/AuthorizedInstitutionCollection.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Identity/Value/AuthorizedInstitutionCollection.php @@ -19,6 +19,7 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Identity\Value; use Surfnet\Stepup\Identity\Collection\InstitutionCollection; +use Surfnet\Stepup\Identity\Value\Institution; class AuthorizedInstitutionCollection { @@ -42,12 +43,12 @@ public static function from( ): self { $collection = new self(); - /** @var string $institution */ + /** @var Institution $institution */ foreach ($raInstitutions as $institution) { $collection->authorizations[(string)$institution][] = AuthorityRole::ROLE_RA; } if ($raaInstitutions instanceof InstitutionCollection) { - /** @var string $institution */ + /** @var Institution $institution */ foreach ($raaInstitutions as $institution) { // Override existing lower role if (isset($collection->authorizations[(string)$institution]) diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Resources/config/projection.yml b/src/Surfnet/StepupMiddleware/ApiBundle/Resources/config/projection.yml index 1fc45e6a6..c0799aa3f 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Resources/config/projection.yml +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Resources/config/projection.yml @@ -1,4 +1,7 @@ services: + _defaults: + autoconfigure: true + surfnet_stepup_middleware_api.projector.identity: class: Surfnet\StepupMiddleware\ApiBundle\Identity\Projector\IdentityProjector arguments: diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Service/DeprovisionService.php b/src/Surfnet/StepupMiddleware/ApiBundle/Service/DeprovisionService.php index e45eea8d9..438043ae0 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Service/DeprovisionService.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Service/DeprovisionService.php @@ -34,7 +34,7 @@ use function sprintf; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class DeprovisionService implements DeprovisionServiceInterface { diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Authorization/Filter/InstitutionAuthorizationRepositoryFilterTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Authorization/Filter/InstitutionAuthorizationRepositoryFilterTest.php index 6269e4105..76d32974b 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Authorization/Filter/InstitutionAuthorizationRepositoryFilterTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Authorization/Filter/InstitutionAuthorizationRepositoryFilterTest.php @@ -21,6 +21,8 @@ use Doctrine\ORM\EntityManager; use Doctrine\ORM\QueryBuilder; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Identity\Collection\InstitutionCollection; @@ -50,10 +52,8 @@ public function setUp(): void $this->queryBuilder->from(InstitutionValue::class, 'i'); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function a_querybuilder_object_is_filtered_with_an_institution_authorization_context(): void { $this->mockedAuthorizationContext->method('getInstitutions') diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Authorization/Service/AuthorizationContextServiceTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Authorization/Service/AuthorizationContextServiceTest.php index 0e0aaec99..9c3a5271a 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Authorization/Service/AuthorizationContextServiceTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Authorization/Service/AuthorizationContextServiceTest.php @@ -21,6 +21,8 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Configuration\Value\Institution as StepupConfigurationInstitution; use Surfnet\Stepup\Identity\Collection\InstitutionCollection; @@ -74,10 +76,8 @@ public function setUp(): void $this->authorizationRepository = $authorizationRepository; } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function it_can_build_a_context(): void { $actorInstitution = new Institution('institution-a'); @@ -127,10 +127,8 @@ public function it_can_build_a_context(): void $this->assertFalse($context->isActorSraa()); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function it_can_build_a_context_with_sraa_actor(): void { $actorInstitution = new Institution('institution-a'); @@ -236,10 +234,8 @@ public function test_it_can_retrieve_select_raa_institutions(): void $this->assertFalse($context->isActorSraa()); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function it_rejects_unknown_actor(): void { $this->expectExceptionMessage("The provided id is not associated with any known identity"); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Authorization/Service/CommandAuthorizationServiceTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Authorization/Service/CommandAuthorizationServiceTest.php index 276a28616..451b44cb3 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Authorization/Service/CommandAuthorizationServiceTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Authorization/Service/CommandAuthorizationServiceTest.php @@ -21,6 +21,8 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Log\LoggerInterface; use Ramsey\Uuid\Uuid; @@ -138,10 +140,8 @@ public function test_shared_ra_and_ss_commands_are_correctly_authorized(): void $this->assertTrue($this->service->mayRaCommandBeExecutedOnBehalfOf($command, $actorId, $actorInstitution)); } - /** - * @test - * @dataProvider availableCommands - */ + #[Test] + #[DataProvider('availableCommands')] public function a_sraa_should_be_able_to_execute_all_commands(string $file, Command $command): void { $this->assertInstanceOf(Command::class, $command); @@ -164,10 +164,8 @@ public function a_sraa_should_be_able_to_execute_all_commands(string $file, Comm } - /** - * @test - * @dataProvider availableCommands - */ + #[Test] + #[DataProvider('availableCommands')] public function an_identity_should_be_able_to_execute_own_selfservice_commands(string $file, mixed $command): void { $this->assertInstanceOf(Command::class, $command); @@ -197,10 +195,8 @@ public function an_identity_should_be_able_to_execute_own_selfservice_commands(s } } - /** - * @test - * @dataProvider availableCommands - */ + #[Test] + #[DataProvider('availableCommands')] public function an_identity_should_be_able_to_execute_configured_ra_commands(string $file, mixed $command): void { $this->assertInstanceOf(Command::class, $command); @@ -261,10 +257,8 @@ public function an_identity_should_be_able_to_execute_configured_ra_commands(str } - /** - * @test - * @dataProvider availableCommands - */ + #[Test] + #[DataProvider('availableCommands')] public function an_identity_should_be_able_to_execute_configured_ra_and_selfservice_commands(string $file, mixed $command): void { $this->assertInstanceOf(Command::class, $command); @@ -318,10 +312,8 @@ public function an_identity_should_be_able_to_execute_configured_ra_and_selfserv } - /** - * @test - * @dataProvider availableCommands - */ + #[Test] + #[DataProvider('availableCommands')] public function an_identity_should_not_be_able_to_execute_someone_elses_selfservice_commands(string $file, mixed $command): void { $this->assertInstanceOf(Command::class, $command); @@ -359,10 +351,8 @@ public function an_identity_should_not_be_able_to_execute_someone_elses_selfserv } } - /** - * @test - * @dataProvider availableCommands - */ + #[Test] + #[DataProvider('availableCommands')] public function an_identity_should_be_able_to_execute_unconfigured_ra_commands(string $file, mixed $command): void { $this->assertInstanceOf(Command::class, $command); @@ -422,9 +412,7 @@ public function an_identity_should_be_able_to_execute_unconfigured_ra_commands(s } - /** - * @test - */ + #[Test] public function all_available_commands_should_be_tested(): void { $tested = [ @@ -482,7 +470,7 @@ public function all_available_commands_should_be_tested(): void /** * @return string[][]|Command[][] */ - public function availableCommands(): array + public static function availableCommands(): array { $rootPath = realpath(__DIR__ . '/../../../../../../../src'); assert(is_string($rootPath), 'Root path could not be determined correctly'); @@ -499,10 +487,6 @@ public function availableCommands(): array if ($files === false) { continue; } - assert( - is_array($files), - sprintf('Unable to grab the files from %s with pattern %s', $folder , $commandPath) - ); foreach ($files as $file) { $className = str_replace($rootPath, '', $file); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Entity/ConfiguredInstitutionTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Entity/ConfiguredInstitutionTest.php index 636923ec4..60fbc3186 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Entity/ConfiguredInstitutionTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Entity/ConfiguredInstitutionTest.php @@ -19,17 +19,17 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Tests\Configuration\Entity; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Configuration\Value\Institution; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Entity\ConfiguredInstitution; class ConfiguredInstitutionTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group entity - */ + #[Test] + #[Group('entity')] public function a_configured_institution_is_correctly_serialized_to_json(): void { $deserializedConfiguredInstitution = ['institution' => 'surfnet.nl']; diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Entity/RaLocationTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Entity/RaLocationTest.php index bb9bf4cd6..6f180393a 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Entity/RaLocationTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Entity/RaLocationTest.php @@ -19,7 +19,9 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Tests\Configuration\Entity; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Configuration\Value\ContactInformation; use Surfnet\Stepup\Configuration\Value\Institution; use Surfnet\Stepup\Configuration\Value\Location; @@ -29,10 +31,8 @@ class RaLocationTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group entity - */ + #[Test] + #[Group('entity')] public function an_ra_location_is_correctly_serialized_to_json(): void { $deserializedRaLocation = [ diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Service/AllowedSecondFactorMapTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Service/AllowedSecondFactorMapTest.php index 9ca2ef191..d37d1fb20 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Service/AllowedSecondFactorMapTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Service/AllowedSecondFactorMapTest.php @@ -19,7 +19,9 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Tests\Configuration\Service; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Configuration\Value\AllowedSecondFactorList; use Surfnet\Stepup\Configuration\Value\Institution; use Surfnet\StepupBundle\Value\SecondFactorType; @@ -29,10 +31,8 @@ class AllowedSecondFactorMapTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_allowed_second_factor_that_contains_a_given_institution_will_result_in_a_filled_allowed_second_factor_list(): void { $institution = new Institution('institution-with-filled-list.test'); @@ -52,10 +52,8 @@ public function an_allowed_second_factor_that_contains_a_given_institution_will_ $this->assertTrue($expectedAllowedSecondFactorList->equals($actualAllowedSecondFactorList)); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_allowed_second_factor_map_that_does_not_contain_a_given_institution_will_result_in_a_blank_allowed_second_factor_list(): void { $institution = new Institution('institution-with-blank-list.test'); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Service/InstitutionAuthorizationOptionMapTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Service/InstitutionAuthorizationOptionMapTest.php index 572025608..c858a12a5 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Service/InstitutionAuthorizationOptionMapTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Configuration/Service/InstitutionAuthorizationOptionMapTest.php @@ -19,6 +19,8 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Tests\Configuration\Service; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Configuration\Value\Institution; use Surfnet\Stepup\Configuration\Value\InstitutionRole; @@ -38,10 +40,8 @@ public function setUp(): void $this->institution = new Institution('inst'); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_array_initialized_with_authorizations_should_return_valid_institutions_per_role(): void { $testData = [ @@ -90,10 +90,8 @@ public function an_array_initialized_with_authorizations_should_return_valid_ins ); } - /** - * @test - * @group domain - */ + #[Test] + #[Group('domain')] public function an_array_initialized_with_no_authorizations_should_return_valid_institutions_per_role(): void { $institutionAuthorizationMap = InstitutionAuthorizationOptionMap::fromInstitutionAuthorizations( diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/AuthorityRoleTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/AuthorityRoleTypeTest.php index 47fb8152c..b232ed6b7 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/AuthorityRoleTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/AuthorityRoleTypeTest.php @@ -22,6 +22,8 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\AuthorityRoleType; use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\AuthorityRole; @@ -44,10 +46,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $authorityRole = Type::getType(AuthorityRoleType::NAME); @@ -57,10 +57,8 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $authorityRole = Type::getType(AuthorityRoleType::NAME); @@ -72,10 +70,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals(AuthorityRole::ROLE_RAA, $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $authorityRole = Type::getType(AuthorityRoleType::NAME); @@ -85,10 +81,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_an_authority_role_value_object(): void { $authorityRole = Type::getType(AuthorityRoleType::NAME); @@ -101,10 +95,8 @@ public function a_non_null_value_is_converted_to_an_authority_role_value_object( $this->assertEquals(new AuthorityRole($input), $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(ConversionException::class); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/CommonNameTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/CommonNameTypeTest.php index f1bd6b66b..8c95bfc32 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/CommonNameTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/CommonNameTypeTest.php @@ -22,6 +22,8 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Identity\Value\CommonName; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\CommonNameType; @@ -45,10 +47,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $commonName = Type::getType(CommonNameType::NAME); @@ -58,10 +58,8 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $commonName = Type::getType(CommonNameType::NAME); @@ -73,10 +71,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals('Arthur Dent', $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $commonName = Type::getType(CommonNameType::NAME); @@ -86,10 +82,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_stepup_common_name_object(): void { $commonName = Type::getType(CommonNameType::NAME); @@ -102,10 +96,8 @@ public function a_non_null_value_is_converted_to_the_stepup_common_name_object() $this->assertEquals(new CommonName($input), $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(ConversionException::class); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ConfigurationContactInformationTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ConfigurationContactInformationTypeTest.php index cf8276298..6528b6aca 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ConfigurationContactInformationTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ConfigurationContactInformationTypeTest.php @@ -24,9 +24,13 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProviderExternal; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Configuration\Value\ContactInformation; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\ConfigurationContactInformationType; +use Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider; class ConfigurationContactInformationTypeTest extends UnitTest { @@ -50,12 +54,9 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - * - * @dataProvider \Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider::notNull - */ + #[Test] + #[DataProviderExternal(TestDataProvider::class, 'notNull')] + #[Group('doctrine')] public function a_value_can_only_be_converted_to_sql_if_it_is_contact_information_or_null(mixed $incorrectValue): void { $this->expectException(ConversionException::class); @@ -64,10 +65,8 @@ public function a_value_can_only_be_converted_to_sql_if_it_is_contact_informatio $configurationContactInformation->convertToDatabaseValue($incorrectValue, $this->platform); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $configurationContactInformation = Type::getType(ConfigurationContactInformationType::NAME); @@ -77,10 +76,8 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $configurationContactInformation = Type::getType(ConfigurationContactInformationType::NAME); @@ -93,10 +90,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals($expected, $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $configurationContactInformation = Type::getType(ConfigurationContactInformationType::NAME); @@ -106,10 +101,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_a_contact_information_value_object(): void { $configurationContactInformation = Type::getType(ConfigurationContactInformationType::NAME); @@ -122,10 +115,8 @@ public function a_non_null_value_is_converted_to_a_contact_information_value_obj $this->assertEquals(new ContactInformation($input), $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(ConversionException::class); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ConfigurationInstitutionTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ConfigurationInstitutionTypeTest.php index 6eceb3e08..bbdd2e683 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ConfigurationInstitutionTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ConfigurationInstitutionTypeTest.php @@ -22,9 +22,13 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProviderExternal; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Configuration\Value\Institution; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\ConfigurationInstitutionType; +use Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider; class ConfigurationInstitutionTypeTest extends UnitTest { @@ -48,10 +52,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $configurationInstitution = Type::getType(ConfigurationInstitutionType::NAME); @@ -61,12 +63,9 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - * - * @dataProvider \Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider::notNull - */ + #[Test] + #[DataProviderExternal(TestDataProvider::class, 'notNull')] + #[Group('doctrine')] public function a_value_can_only_be_converted_to_sql_if_it_is_an_institution_or_null(mixed $incorrectValue): void { $this->expectException(ConversionException::class); @@ -75,10 +74,8 @@ public function a_value_can_only_be_converted_to_sql_if_it_is_an_institution_or_ $configurationContactInformation->convertToDatabaseValue($incorrectValue, $this->platform); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $configurationInstitution = Type::getType(ConfigurationInstitutionType::NAME); @@ -92,10 +89,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals($expected, $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $configurationInstitution = Type::getType(ConfigurationInstitutionType::NAME); @@ -105,10 +100,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_a_configuration_institution_value_object(): void { $configurationInstitution = Type::getType(ConfigurationInstitutionType::NAME); @@ -121,10 +114,8 @@ public function a_non_null_value_is_converted_to_a_configuration_institution_val $this->assertEquals(new Institution($input), $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(ConversionException::class); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ConfigurationLocationTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ConfigurationLocationTypeTest.php index 2e6cb23b6..0117542df 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ConfigurationLocationTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ConfigurationLocationTypeTest.php @@ -24,9 +24,13 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProviderExternal; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Configuration\Value\Location; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\ConfigurationLocationType; +use Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider; class ConfigurationLocationTypeTest extends UnitTest { @@ -50,10 +54,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $configurationLocation = Type::getType(ConfigurationLocationType::NAME); @@ -63,12 +65,9 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - * - * @dataProvider \Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider::notNull - */ + #[Test] + #[DataProviderExternal(TestDataProvider::class, 'notNull')] + #[Group('doctrine')] public function a_value_can_only_be_converted_to_sql_if_it_is_a_location_or_null(mixed $incorrectValue): void { $this->expectException(ConversionException::class); @@ -77,10 +76,8 @@ public function a_value_can_only_be_converted_to_sql_if_it_is_a_location_or_null $configurationContactInformation->convertToDatabaseValue($incorrectValue, $this->platform); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $configurationLocation = Type::getType(ConfigurationLocationType::NAME); @@ -93,10 +90,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals($expected, $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $configurationLocation = Type::getType(ConfigurationLocationType::NAME); @@ -106,10 +101,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_a_configuration_location_value_object(): void { $configurationLocation = Type::getType(ConfigurationLocationType::NAME); @@ -122,10 +115,8 @@ public function a_non_null_value_is_converted_to_a_configuration_location_value_ $this->assertEquals(new Location($input), $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(ConversionException::class); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ContactInformationTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ContactInformationTypeTest.php index 334641892..d4888e7a1 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ContactInformationTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ContactInformationTypeTest.php @@ -24,6 +24,8 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Identity\Value\ContactInformation; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\ContactInformationType; @@ -51,10 +53,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $contactInformation = Type::getType(ContactInformationType::NAME); @@ -64,10 +64,8 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $contactInformation = Type::getType(ContactInformationType::NAME); @@ -80,10 +78,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals($expected, $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $contactInformation = Type::getType(ContactInformationType::NAME); @@ -93,10 +89,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_a_contact_information_value_object(): void { $contactInformation = Type::getType(ContactInformationType::NAME); @@ -109,10 +103,8 @@ public function a_non_null_value_is_converted_to_a_contact_information_value_obj $this->assertEquals(new ContactInformation($input), $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(ConversionException::class); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/DateTimeTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/DateTimeTypeTest.php index 4bb52952b..30b42be5d 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/DateTimeTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/DateTimeTypeTest.php @@ -24,6 +24,8 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\DateTime\DateTime; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\DateTimeType; @@ -49,10 +51,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $dateTime = Type::getType(DateTimeType::NAME); @@ -62,10 +62,8 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $dateTime = Type::getType(DateTimeType::NAME); @@ -77,10 +75,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals('1970-01-01 00:00:00', $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $dateTime = Type::getType(DateTimeType::NAME); @@ -90,10 +86,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_string_is_converted_to_the_stepup_datetime_object(): void { $dateTime = Type::getType(DateTimeType::NAME); @@ -108,11 +102,8 @@ public function a_string_is_converted_to_the_stepup_datetime_object(): void $this->assertEquals($expectedDateTime, $actualDateTime); } - /** - * @test - * @group doctrine - * - */ + #[Test] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(ConversionException::class); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/DocumentNumberTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/DocumentNumberTypeTest.php index 33ddfb91b..ec775766c 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/DocumentNumberTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/DocumentNumberTypeTest.php @@ -24,10 +24,13 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProviderExternal; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; -use Surfnet\Stepup\Exception\InvalidArgumentException; use Surfnet\Stepup\Identity\Value\DocumentNumber; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\DocumentNumberType; +use Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider; use TypeError; class DocumentNumberTypeTest extends UnitTest @@ -49,10 +52,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $type = Type::getType(DocumentNumberType::NAME); @@ -62,10 +63,8 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_normal_document_number_is_converted_to_a_database_value(): void { $type = Type::getType(DocumentNumberType::NAME); @@ -77,10 +76,8 @@ public function a_normal_document_number_is_converted_to_a_database_value(): voi $this->assertEquals('a', $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $type = Type::getType(DocumentNumberType::NAME); @@ -90,12 +87,9 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - * - * @dataProvider \Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider::notNull - */ + #[Test] + #[DataProviderExternal(TestDataProvider::class, 'notNull')] + #[Group('doctrine')] public function a_value_can_only_be_converted_to_sql_if_it_is_a_document_number_or_null(mixed $incorrectValue): void { $this->expectException(ConversionException::class); @@ -104,10 +98,8 @@ public function a_value_can_only_be_converted_to_sql_if_it_is_a_document_number_ $configurationContactInformation->convertToDatabaseValue($incorrectValue, $this->platform); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_stepup_document_number_object(): void { $type = Type::getType(DocumentNumberType::NAME); @@ -119,10 +111,8 @@ public function a_non_null_value_is_converted_to_the_stepup_document_number_obje $this->assertTrue((new DocumentNumber($input))->equals($output)); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(TypeError::class); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/EmailTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/EmailTypeTest.php index 6c4ed6837..9933be7ee 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/EmailTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/EmailTypeTest.php @@ -22,6 +22,8 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Identity\Value\Email; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\EmailType; @@ -45,10 +47,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $email = Type::getType(EmailType::NAME); @@ -58,10 +58,8 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $email = Type::getType(EmailType::NAME); @@ -73,10 +71,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals('arthur@babelfish.invalid', $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $email = Type::getType(EmailType::NAME); @@ -86,10 +82,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_stepup_email_object(): void { $email = Type::getType(EmailType::NAME); @@ -102,10 +96,8 @@ public function a_non_null_value_is_converted_to_the_stepup_email_object(): void $this->assertEquals(new Email($input), $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(ConversionException::class); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/InstitutionRoleTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/InstitutionRoleTypeTest.php index c7cb82c67..edc79c55c 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/InstitutionRoleTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/InstitutionRoleTypeTest.php @@ -22,6 +22,8 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Configuration\Value\InstitutionRole; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\InstitutionRoleType; @@ -48,10 +50,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $configurationInstitution = Type::getType(InstitutionRoleType::NAME); @@ -61,10 +61,8 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $configurationInstitution = Type::getType(InstitutionRoleType::NAME); @@ -77,10 +75,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals($expected, $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $configurationInstitution = Type::getType(InstitutionRoleType::NAME); @@ -90,10 +86,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_a_configuration_institution_value_object(): void { $configurationInstitution = Type::getType(InstitutionRoleType::NAME); @@ -106,10 +100,8 @@ public function a_non_null_value_is_converted_to_a_configuration_institution_val $this->assertEquals(new InstitutionRole($input), $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(ConversionException::class); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/InstitutionTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/InstitutionTypeTest.php index edb107a84..b0b8858d6 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/InstitutionTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/InstitutionTypeTest.php @@ -22,6 +22,8 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Identity\Value\Institution; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\InstitutionType; @@ -48,10 +50,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $configurationInstitution = Type::getType(InstitutionType::NAME); @@ -61,10 +61,8 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $configurationInstitution = Type::getType(InstitutionType::NAME); @@ -77,10 +75,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals($expected, $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $configurationInstitution = Type::getType(InstitutionType::NAME); @@ -90,10 +86,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_a_configuration_institution_value_object(): void { $configurationInstitution = Type::getType(InstitutionType::NAME); @@ -106,10 +100,8 @@ public function a_non_null_value_is_converted_to_a_configuration_institution_val $this->assertEquals(new Institution($input), $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(ConversionException::class); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/LocaleTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/LocaleTypeTest.php index d34e64068..98f3154ff 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/LocaleTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/LocaleTypeTest.php @@ -24,6 +24,8 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Identity\Value\Locale; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\LocaleType; @@ -47,10 +49,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $locale = Type::getType(LocaleType::NAME); @@ -60,10 +60,8 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $locale = Type::getType(LocaleType::NAME); @@ -76,10 +74,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals($expected, $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $locale = Type::getType(LocaleType::NAME); @@ -89,10 +85,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_a_locale_value_object(): void { $locale = Type::getType(LocaleType::NAME); @@ -105,10 +99,8 @@ public function a_non_null_value_is_converted_to_a_locale_value_object(): void $this->assertEquals(new Locale($input), $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(ConversionException::class); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/LocationTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/LocationTypeTest.php index 3b228596e..1cdac3a28 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/LocationTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/LocationTypeTest.php @@ -24,6 +24,8 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Identity\Value\Location; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\LocationType; @@ -51,10 +53,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $location = Type::getType(LocationType::NAME); @@ -64,10 +64,8 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $location = Type::getType(LocationType::NAME); @@ -80,10 +78,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals($expected, $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $location = Type::getType(LocationType::NAME); @@ -93,10 +89,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_a_location_value_object(): void { $location = Type::getType(LocationType::NAME); @@ -109,10 +103,8 @@ public function a_non_null_value_is_converted_to_a_location_value_object(): void $this->assertEquals(new Location($input), $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(ConversionException::class); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/NameIdTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/NameIdTypeTest.php index 6c40a2c0d..41498b51c 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/NameIdTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/NameIdTypeTest.php @@ -22,6 +22,8 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Identity\Value\NameId; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\NameIdType; @@ -46,10 +48,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $nameId = Type::getType(NameIdType::NAME); @@ -59,10 +59,8 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $nameId = Type::getType(NameIdType::NAME); @@ -75,10 +73,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals($expected, $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $nameId = Type::getType(NameIdType::NAME); @@ -88,10 +84,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_a_name_id_value_object(): void { $nameId = Type::getType(NameIdType::NAME); @@ -104,10 +98,8 @@ public function a_non_null_value_is_converted_to_a_name_id_value_object(): void $this->assertEquals(new NameId($input), $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(ConversionException::class); @@ -117,10 +109,8 @@ public function an_invalid_database_value_causes_an_exception_upon_conversion(): $nameId->convertToPHPValue(false, $this->platform); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_excessive_long_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(ConversionException::class); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/NumberOfTokensPerIdentityTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/NumberOfTokensPerIdentityTypeTest.php index ef7bd8bc2..662fca135 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/NumberOfTokensPerIdentityTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/NumberOfTokensPerIdentityTypeTest.php @@ -22,9 +22,13 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProviderExternal; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Configuration\Value\NumberOfTokensPerIdentityOption; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\NumberOfTokensPerIdentityType; +use Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider; class NumberOfTokensPerIdentityTypeTest extends UnitTest { @@ -49,10 +53,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $numberOfTokensPerIdentity = Type::getType(NumberOfTokensPerIdentityType::NAME); @@ -62,12 +64,9 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - * - * @dataProvider \Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider::notNull - */ + #[Test] + #[DataProviderExternal(TestDataProvider::class, 'notNull')] + #[Group('doctrine')] public function a_value_can_only_be_converted_to_sql_if_it_is_an_option_type_or_null(mixed $incorrectValue): void { $this->expectException(ConversionException::class); @@ -76,10 +75,8 @@ public function a_value_can_only_be_converted_to_sql_if_it_is_an_option_type_or_ $numberOfTokensPerIdentity->convertToDatabaseValue($incorrectValue, $this->platform); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $numberOfTokensPerIdentity = Type::getType(NumberOfTokensPerIdentityType::NAME); @@ -92,10 +89,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals($expected, $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $numberOfTokensPerIdentity = Type::getType(NumberOfTokensPerIdentityType::NAME); @@ -105,10 +100,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_an_option_value_object(): void { $numberOfTokensPerIdentity = Type::getType(NumberOfTokensPerIdentityType::NAME); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/RaLocationNameTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/RaLocationNameTypeTest.php index cfdb117de..d06246360 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/RaLocationNameTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/RaLocationNameTypeTest.php @@ -22,9 +22,13 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProviderExternal; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Configuration\Value\RaLocationName; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\RaLocationNameType; +use Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider; class RaLocationNameTypeTest extends UnitTest { @@ -48,10 +52,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $raLocationName = Type::getType(RaLocationNameType::NAME); @@ -61,10 +63,8 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $raLocationName = Type::getType(RaLocationNameType::NAME); @@ -77,12 +77,9 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals($expected, $output); } - /** - * @test - * @group doctrine - * - * @dataProvider \Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider::notNull - */ + #[Test] + #[DataProviderExternal(TestDataProvider::class, 'notNull')] + #[Group('doctrine')] public function a_value_can_only_be_converted_to_sql_if_it_is_an_ra_location_or_null(mixed $incorrectValue): void { $this->expectException(ConversionException::class); @@ -91,10 +88,8 @@ public function a_value_can_only_be_converted_to_sql_if_it_is_an_ra_location_or_ $configurationContactInformation->convertToDatabaseValue($incorrectValue, $this->platform); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $raLocationName = Type::getType(RaLocationNameType::NAME); @@ -104,10 +99,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_a_ra_location_name_value_object(): void { $raLocationName = Type::getType(RaLocationNameType::NAME); @@ -120,10 +113,8 @@ public function a_non_null_value_is_converted_to_a_ra_location_name_value_object $this->assertEquals(new RaLocationName($input), $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(): void { $this->expectException(ConversionException::class); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/RecoveryTokenStatusTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/RecoveryTokenStatusTypeTest.php index 6267e421d..b277057ef 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/RecoveryTokenStatusTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/RecoveryTokenStatusTypeTest.php @@ -22,6 +22,9 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use stdClass; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\RecoveryTokenStatusType; @@ -46,7 +49,7 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - public function invalidPhpValues(): array + public static function invalidPhpValues(): array { return [ 'null' => [null], @@ -59,11 +62,9 @@ public function invalidPhpValues(): array ]; } - /** - * @test - * @dataProvider invalidPhpValues - * @group doctrine - */ + #[Test] + #[DataProvider('invalidPhpValues')] + #[Group('doctrine')] public function an_invalid_php_value_is_not_accepted_in_to_sql_conversion(mixed $value): void { $this->expectException(ConversionException::class); @@ -72,7 +73,7 @@ public function an_invalid_php_value_is_not_accepted_in_to_sql_conversion(mixed $type->convertToDatabaseValue($value, $this->platform); } - public function validPhpValues(): array + public static function validPhpValues(): array { return [ 'active' => [RecoveryTokenStatus::active(), 0], @@ -81,11 +82,9 @@ public function validPhpValues(): array ]; } - /** - * @test - * @dataProvider validPhpValues - * @group doctrine - */ + #[Test] + #[DataProvider('validPhpValues')] + #[Group('doctrine')] public function a_valid_php_value_is_converted_to_a_sql_value( RecoveryTokenStatus $phpValue, int $databaseValue, @@ -94,7 +93,7 @@ public function a_valid_php_value_is_converted_to_a_sql_value( $this->assertSame($databaseValue, $type->convertToDatabaseValue($phpValue, $this->platform)); } - public function invalidDatabaseValues(): array + public static function invalidDatabaseValues(): array { return [ 'null' => [null], @@ -107,11 +106,9 @@ public function invalidDatabaseValues(): array ]; } - /** - * @test - * @dataProvider invalidDatabaseValues - * @group doctrine - */ + #[Test] + #[DataProvider('invalidDatabaseValues')] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(mixed $input): void { $this->expectException(ConversionException::class); @@ -120,7 +117,7 @@ public function an_invalid_database_value_causes_an_exception_upon_conversion(mi $type->convertToPHPValue($input, $this->platform); } - public function validDatabaseValues(): array + public static function validDatabaseValues(): array { return [ 'active' => ['0', RecoveryTokenStatus::active()], @@ -129,11 +126,9 @@ public function validDatabaseValues(): array ]; } - /** - * @test - * @dataProvider validDatabaseValues - * @group doctrine - */ + #[Test] + #[DataProvider('validDatabaseValues')] + #[Group('doctrine')] public function a_valid_database_value_is_converted_to_a_sql_value( string $databaseValue, RecoveryTokenStatus $phpValue, diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/SecondFactorStatusTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/SecondFactorStatusTypeTest.php index 6fa40236d..185cfe273 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/SecondFactorStatusTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/SecondFactorStatusTypeTest.php @@ -22,6 +22,9 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use stdClass; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\SecondFactorStatusType; @@ -47,7 +50,7 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - public function invalidPhpValues(): array + public static function invalidPhpValues(): array { return [ 'null' => [null], @@ -60,11 +63,9 @@ public function invalidPhpValues(): array ]; } - /** - * @test - * @dataProvider invalidPhpValues - * @group doctrine - */ + #[Test] + #[DataProvider('invalidPhpValues')] + #[Group('doctrine')] public function an_invalid_php_value_is_not_accepted_in_to_sql_conversion(mixed $value): void { $this->expectException(ConversionException::class); @@ -73,7 +74,7 @@ public function an_invalid_php_value_is_not_accepted_in_to_sql_conversion(mixed $type->convertToDatabaseValue($value, $this->platform); } - public function validPhpValues(): array + public static function validPhpValues(): array { return [ 'unverified' => [SecondFactorStatus::unverified(), 0], @@ -84,18 +85,16 @@ public function validPhpValues(): array ]; } - /** - * @test - * @dataProvider validPhpValues - * @group doctrine - */ + #[Test] + #[DataProvider('validPhpValues')] + #[Group('doctrine')] public function a_valid_php_value_is_converted_to_a_sql_value(mixed $phpValue, int $databaseValue): void { $type = Type::getType(SecondFactorStatusType::NAME); $this->assertSame($databaseValue, $type->convertToDatabaseValue($phpValue, $this->platform)); } - public function invalidDatabaseValues(): array + public static function invalidDatabaseValues(): array { return [ 'null' => [null], @@ -108,11 +107,9 @@ public function invalidDatabaseValues(): array ]; } - /** - * @test - * @dataProvider invalidDatabaseValues - * @group doctrine - */ + #[Test] + #[DataProvider('invalidDatabaseValues')] + #[Group('doctrine')] public function an_invalid_database_value_causes_an_exception_upon_conversion(mixed $input): void { $this->expectException(ConversionException::class); @@ -121,7 +118,7 @@ public function an_invalid_database_value_causes_an_exception_upon_conversion(mi $type->convertToPHPValue($input, $this->platform); } - public function validDatabaseValues(): array + public static function validDatabaseValues(): array { return [ 'unverified' => ['0', SecondFactorStatus::unverified()], @@ -132,11 +129,9 @@ public function validDatabaseValues(): array ]; } - /** - * @test - * @dataProvider validDatabaseValues - * @group doctrine - */ + #[Test] + #[DataProvider('validDatabaseValues')] + #[Group('doctrine')] public function a_valid_database_value_is_converted_to_a_sql_value(string $databaseValue, mixed $phpValue): void { $type = Type::getType(SecondFactorStatusType::NAME); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/SelfVetOptionTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/SelfVetOptionTypeTest.php index 33bf62589..d39c34ba3 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/SelfVetOptionTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/SelfVetOptionTypeTest.php @@ -22,9 +22,13 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProviderExternal; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Configuration\Value\SelfVetOption; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\SelfVetOptionType; +use Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider; class SelfVetOptionTypeTest extends UnitTest { @@ -49,10 +53,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $configurationInstitution = Type::getType(SelfVetOptionType::NAME); @@ -62,12 +64,9 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - * - * @dataProvider \Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider::notNull - */ + #[Test] + #[DataProviderExternal(TestDataProvider::class, 'notNull')] + #[Group('doctrine')] public function a_value_can_only_be_converted_to_sql_if_it_is_an_option_type_or_null(mixed $incorrectValue): void { $this->expectException(ConversionException::class); @@ -76,10 +75,8 @@ public function a_value_can_only_be_converted_to_sql_if_it_is_an_option_type_or_ $configurationContactInformation->convertToDatabaseValue($incorrectValue, $this->platform); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $configurationInstitution = Type::getType(SelfVetOptionType::NAME); @@ -92,10 +89,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals($expected, $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $configurationInstitution = Type::getType(SelfVetOptionType::NAME); @@ -105,10 +100,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_an_option_valu_object(): void { $configurationInstitution = Type::getType(SelfVetOptionType::NAME); @@ -117,7 +110,7 @@ public function a_non_null_value_is_converted_to_an_option_valu_object(): void $output = $configurationInstitution->convertToPHPValue($input, $this->platform); - $this->assertInstanceOf(\Surfnet\Stepup\Configuration\Value\SelfVetOption::class, $output); + $this->assertInstanceOf(SelfVetOption::class, $output); $this->assertEquals(new SelfVetOption($input), $output); } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ShowRaaContactInformationOptionTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ShowRaaContactInformationOptionTypeTest.php index 1466d15cf..66d7b4e9f 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ShowRaaContactInformationOptionTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/ShowRaaContactInformationOptionTypeTest.php @@ -22,9 +22,13 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProviderExternal; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Configuration\Value\ShowRaaContactInformationOption; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\ShowRaaContactInformationOptionType; +use Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider; use function is_numeric; class ShowRaaContactInformationOptionTypeTest extends UnitTest @@ -50,10 +54,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $configurationInstitution = Type::getType(ShowRaaContactInformationOptionType::NAME); @@ -63,12 +65,9 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - * - * @dataProvider \Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider::notNull - */ + #[Test] + #[DataProviderExternal(TestDataProvider::class, 'notNull')] + #[Group('doctrine')] public function a_value_can_only_be_converted_to_sql_if_it_is_a_show_raa_contact_information_option_or_null( mixed $incorrectValue, ): void { @@ -78,10 +77,8 @@ public function a_value_can_only_be_converted_to_sql_if_it_is_a_show_raa_contact $configurationContactInformation->convertToDatabaseValue($incorrectValue, $this->platform); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $configurationInstitution = Type::getType(ShowRaaContactInformationOptionType::NAME); @@ -94,10 +91,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals($expected, $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $configurationInstitution = Type::getType(ShowRaaContactInformationOptionType::NAME); @@ -107,10 +102,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_a_show_raa_contact_information_option_value_object(): void { $configurationInstitution = Type::getType(ShowRaaContactInformationOptionType::NAME); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/UseRaLocationsOptionTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/UseRaLocationsOptionTypeTest.php index 4e7462fcb..9ebac944a 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/UseRaLocationsOptionTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/UseRaLocationsOptionTypeTest.php @@ -22,9 +22,13 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProviderExternal; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Configuration\Value\UseRaLocationsOption; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\UseRaLocationsOptionType; +use Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider; class UseRaLocationsOptionTypeTest extends UnitTest { @@ -49,10 +53,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $configurationInstitution = Type::getType(UseRaLocationsOptionType::NAME); @@ -62,12 +64,9 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - * - * @dataProvider \Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider::notNull - */ + #[Test] + #[DataProviderExternal(TestDataProvider::class, 'notNull')] + #[Group('doctrine')] public function a_value_can_only_be_converted_to_sql_if_it_is_a_use_ra_locations_option_or_null(mixed $incorrectValue,): void { $this->expectException(ConversionException::class); @@ -76,10 +75,8 @@ public function a_value_can_only_be_converted_to_sql_if_it_is_a_use_ra_locations $configurationContactInformation->convertToDatabaseValue($incorrectValue, $this->platform); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $configurationInstitution = Type::getType(UseRaLocationsOptionType::NAME); @@ -92,10 +89,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals($expected, $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $configurationInstitution = Type::getType(UseRaLocationsOptionType::NAME); @@ -105,10 +100,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_a_use_ra_locations_option_value_object(): void { $configurationInstitution = Type::getType(UseRaLocationsOptionType::NAME); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/VerifyEmailOptionTypeTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/VerifyEmailOptionTypeTest.php index 367fe53d4..433f166d8 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/VerifyEmailOptionTypeTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Doctrine/Type/VerifyEmailOptionTypeTest.php @@ -22,9 +22,13 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\Type; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProviderExternal; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Configuration\Value\VerifyEmailOption; use Surfnet\StepupMiddleware\ApiBundle\Doctrine\Type\VerifyEmailOptionType; +use Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider; class VerifyEmailOptionTypeTest extends UnitTest { @@ -48,10 +52,8 @@ public function setUp(): void $this->platform = new MariaDBPlatform(); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_in_to_sql_conversion(): void { $configurationInstitution = Type::getType(VerifyEmailOptionType::NAME); @@ -61,12 +63,9 @@ public function a_null_value_remains_null_in_to_sql_conversion(): void $this->assertNull($value); } - /** - * @test - * @group doctrine - * - * @dataProvider \Surfnet\StepupMiddleware\ApiBundle\Tests\TestDataProvider::notNull - */ + #[Test] + #[DataProviderExternal(TestDataProvider::class, 'notNull')] + #[Group('doctrine')] public function a_value_can_only_be_converted_to_sql_if_it_is_an_option_type_or_null(mixed $incorrectValue): void { $this->expectException(ConversionException::class); @@ -75,10 +74,8 @@ public function a_value_can_only_be_converted_to_sql_if_it_is_an_option_type_or_ $configurationContactInformation->convertToDatabaseValue($incorrectValue, $this->platform); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_the_correct_format(): void { $configurationInstitution = Type::getType(VerifyEmailOptionType::NAME); @@ -91,10 +88,8 @@ public function a_non_null_value_is_converted_to_the_correct_format(): void $this->assertEquals($expected, $output); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_null_value_remains_null_when_converting_from_db_to_php_value(): void { $configurationInstitution = Type::getType(VerifyEmailOptionType::NAME); @@ -104,10 +99,8 @@ public function a_null_value_remains_null_when_converting_from_db_to_php_value() $this->assertNull($value); } - /** - * @test - * @group doctrine - */ + #[Test] + #[Group('doctrine')] public function a_non_null_value_is_converted_to_an_option_valu_object(): void { $configurationInstitution = Type::getType(VerifyEmailOptionType::NAME); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Endpoint/ConfiguredInstitutionControllerTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Endpoint/ConfiguredInstitutionControllerTest.php index 160a9ccfe..06a12aecc 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Endpoint/ConfiguredInstitutionControllerTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Endpoint/ConfiguredInstitutionControllerTest.php @@ -22,8 +22,10 @@ use Generator; use Liip\TestFixturesBundle\Services\DatabaseToolCollection; use Liip\TestFixturesBundle\Services\DatabaseTools\AbstractDatabaseTool; -use Liip\TestFixturesBundle\Services\DatabaseTools\ORMSqliteDatabaseTool; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use Symfony\Bundle\FrameworkBundle\KernelBrowser; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Symfony\Component\HttpFoundation\Response; @@ -87,12 +89,9 @@ public function tearDown(): void static::ensureKernelShutdown(); } - /** - * @test - * @group api - * - * @dataProvider invalidHttpMethodProvider - */ + #[Test] + #[DataProvider('invalidHttpMethodProvider')] + #[Group('api')] public function only_get_requests_are_accepted(string $invalidHttpMethod): void { $this->client->request( @@ -110,11 +109,9 @@ public function only_get_requests_are_accepted(string $invalidHttpMethod): void $this->assertEquals(Response::HTTP_METHOD_NOT_ALLOWED, $this->client->getResponse()->getStatusCode()); } - /** - * @test - * @group api - * @dataProvider notAllowedAccountsProvider - */ + #[Test] + #[DataProvider('notAllowedAccountsProvider')] + #[Group('api')] public function no_access_for_not_allowed_account(string $account): void { $this->client->request( @@ -134,10 +131,8 @@ public function no_access_for_not_allowed_account(string $account): void $this->assertEquals(Response::HTTP_FORBIDDEN, $this->client->getResponse()->getStatusCode()); } - /** - * @test - * @group api - */ + #[Test] + #[Group('api')] public function json_is_returned_from_the_api(): void { $this->client->request( @@ -162,11 +157,9 @@ public function json_is_returned_from_the_api(): void ); } - /** - * @test - * @group api - * @dataProvider allowedAccountsProvider - */ + #[Test] + #[DataProvider('allowedAccountsProvider')] + #[Group('api')] public function correct_institutions_are_returned(string $account): void { $this->client->request( @@ -193,7 +186,7 @@ public function correct_institutions_are_returned(string $account): void /** * Dataprovider for only_get_requests_are_accepted */ - public function invalidHttpMethodProvider(): array + public static function invalidHttpMethodProvider(): array { return [ 'POST' => ['POST'], @@ -203,13 +196,13 @@ public function invalidHttpMethodProvider(): array ]; } - public function allowedAccountsProvider(): Generator + public static function allowedAccountsProvider(): Generator { yield ['ra']; yield ['apireader']; } - public function notAllowedAccountsProvider(): Generator + public static function notAllowedAccountsProvider(): Generator { yield ['ss']; } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Endpoint/SraaControllerTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Endpoint/SraaControllerTest.php index dce2051c0..57970a224 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Endpoint/SraaControllerTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Endpoint/SraaControllerTest.php @@ -21,8 +21,10 @@ use Generator; use Liip\TestFixturesBundle\Services\DatabaseToolCollection; use Liip\TestFixturesBundle\Services\DatabaseTools\AbstractDatabaseTool; -use Liip\TestFixturesBundle\Services\DatabaseTools\ORMSqliteDatabaseTool; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use Symfony\Bundle\FrameworkBundle\KernelBrowser; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Symfony\Component\HttpFoundation\Response; @@ -75,12 +77,9 @@ public function tearDown(): void static::ensureKernelShutdown(); } - /** - * @test - * @group api - * - * @dataProvider invalidHttpMethodProvider - */ + #[Test] + #[DataProvider('invalidHttpMethodProvider')] + #[Group('api')] public function only_get_requests_are_accepted(string $invalidHttpMethod): void { $this->client->request( @@ -98,11 +97,9 @@ public function only_get_requests_are_accepted(string $invalidHttpMethod): void $this->assertEquals(Response::HTTP_METHOD_NOT_ALLOWED, $this->client->getResponse()->getStatusCode()); } - /** - * @test - * @group api - * @dataProvider notAllowedAccountsProvider - */ + #[Test] + #[DataProvider('notAllowedAccountsProvider')] + #[Group('api')] public function no_access_for_not_allowed_account(string $account): void { $this->client->request( @@ -122,10 +119,8 @@ public function no_access_for_not_allowed_account(string $account): void $this->assertEquals(Response::HTTP_FORBIDDEN, $this->client->getResponse()->getStatusCode()); } - /** - * @test - * @group api - */ + #[Test] + #[Group('api')] public function json_is_returned_from_the_api(): void { $this->client->request( @@ -150,11 +145,9 @@ public function json_is_returned_from_the_api(): void ); } - /** - * @test - * @group api - * @dataProvider allowedAccountsProvider - */ + #[Test] + #[DataProvider('allowedAccountsProvider')] + #[Group('api')] public function correct_institutions_are_returned(string $account): void { $this->client->request( @@ -181,7 +174,7 @@ public function correct_institutions_are_returned(string $account): void /** * Dataprovider for only_get_requests_are_accepted */ - public function invalidHttpMethodProvider(): array + public static function invalidHttpMethodProvider(): array { return [ 'POST' => ['POST'], @@ -191,13 +184,13 @@ public function invalidHttpMethodProvider(): array ]; } - public function allowedAccountsProvider(): Generator + public static function allowedAccountsProvider(): Generator { yield ['ra']; yield ['apireader']; } - public function notAllowedAccountsProvider(): Generator + public static function notAllowedAccountsProvider(): Generator { yield ['ss']; } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Identity/Projector/AuditLogProjectorTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Identity/Projector/AuditLogProjectorTest.php index 1a6590498..f82c14e97 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Identity/Projector/AuditLogProjectorTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Identity/Projector/AuditLogProjectorTest.php @@ -25,6 +25,9 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\Matcher\MatcherAbstract; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Surfnet\Stepup\DateTime\DateTime as StepupDateTime; use Surfnet\Stepup\Identity\AuditLog\Metadata; @@ -134,15 +137,15 @@ public function auditable_events(): array ]; } - /** - * @test - * @group api-projector - * @dataProvider auditable_events - */ + #[Test] + #[DataProvider('auditable_events')] + #[Group('api-projector')] public function it_creates_entries_for_auditable_events(DomainMessage $message, AuditLogEntry $expectedEntry): void { $repository = m::mock(AuditLogRepository::class); + $actualEntry = null; $repository->shouldReceive('save')->with($this->spy($actualEntry)); + /** @var null|AuditLogEntry $actualEntry */ $identityRepository = m::mock(IdentityRepository::class); @@ -154,7 +157,11 @@ public function it_creates_entries_for_auditable_events(DomainMessage $message, $projector->handle($message); // we are not concerned about matching the UUID generated by the auditlogprojector - $expectedEntry->id = $actualEntry->id; + if ($actualEntry !== null) { + $expectedEntry->id = $actualEntry->id; + } else { + $expectedEntry->id = ''; + } // PHPUnit's comparison is more informative than Mockery's no-match exception. $this->assertEquals($expectedEntry, $actualEntry); diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Identity/Value/AuthorizedInstitutionCollectionTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Identity/Value/AuthorizedInstitutionCollectionTest.php index 16edab40d..9c573b8a3 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Identity/Value/AuthorizedInstitutionCollectionTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Identity/Value/AuthorizedInstitutionCollectionTest.php @@ -18,25 +18,22 @@ namespace Surfnet\StepupMiddleware\ApiBundle\Tests\Identity\Value; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Identity\Collection\InstitutionCollection; use Surfnet\Stepup\Identity\Value\Institution; use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\AuthorizedInstitutionCollection; final class AuthorizedInstitutionCollectionTest extends TestCase { - /** - * @test - */ + #[Test] public function empty_collection(): void { $collection = AuthorizedInstitutionCollection::from($this->buildInstitutionCollection([]), null); $this->assertEmpty($collection->getAuthorizations()); } - /** - * @test - */ + #[Test] public function retrieve_institutions(): void { $collection = AuthorizedInstitutionCollection::from( @@ -51,9 +48,7 @@ public function retrieve_institutions(): void $this->assertEquals('raa', $collection->getAuthorizations()['b'][0]); } - /** - * @test - */ + #[Test] public function retrieve_institutions_only_raa(): void { $collection = AuthorizedInstitutionCollection::from( diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/CommandValueResolverTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/CommandValueResolverTest.php index b1cca7a72..13f5181ad 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/CommandValueResolverTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/CommandValueResolverTest.php @@ -20,13 +20,15 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use Mockery\Matcher\MatcherAbstract; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use stdClass; use Surfnet\StepupMiddleware\ApiBundle\Exception\BadCommandRequestException; -use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\Command; use Surfnet\StepupMiddleware\ApiBundle\Request\CommandValueResolver; +use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\Command; use Surfnet\StepupMiddleware\CommandHandlingBundle\Root\Command\FooBarCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Root\Command\Ns\QuuxCommand; use Symfony\Component\HttpFoundation\Request; @@ -36,11 +38,9 @@ class CommandValueResolverTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group api-bundle - * @dataProvider invalidCommandJsonStructures - */ + #[Test] + #[DataProvider('invalidCommandJsonStructures')] + #[Group('api-bundle')] public function it_validates_the_command_structure(string $commandJson): void { $this->expectException(BadCommandRequestException::class); @@ -63,11 +63,9 @@ public function it_validates_the_command_structure(string $commandJson): void $this->assertInstanceOf(Command::class, $result[0]); } - /** - * @test - * @group api-bundle - * @dataProvider convertibleCommandNames - */ + #[Test] + #[DataProvider('convertibleCommandNames')] + #[Group('api-bundle')] public function it_can_convert_command_name_notation(string $expectedCommandClass, string $commandName): void { $command = ['command' => ['name' => $commandName, 'uuid' => 'abcdef', 'payload' => new stdClass]]; @@ -90,11 +88,9 @@ public function it_can_convert_command_name_notation(string $expectedCommandClas $this->assertInstanceOf($expectedCommandClass, $result[0]); } - /** - * @test - * @group api-bundle - * @dataProvider invalidCommandNames - */ + #[Test] + #[DataProvider('invalidCommandNames')] + #[Group('api-bundle')] public function it_fails_converting_invalid_command_name_notation(string $expectedCommandClass, string $commandName): void { $this->expectException(BadCommandRequestException::class); @@ -117,10 +113,8 @@ public function it_fails_converting_invalid_command_name_notation(string $expect $converter->resolve($request, $argument); } - /** - * @test - * @group api-bundle - */ + #[Test] + #[Group('api-bundle')] public function it_sets_uuid(): void { $command = ['command' => ['name' => 'Root:FooBar', 'uuid' => 'abcdef', 'payload' => new stdClass]]; @@ -143,10 +137,8 @@ public function it_sets_uuid(): void $this->assertEquals('abcdef', $result[0]->UUID, 'UUID mismatch'); } - /** - * @test - * @group api-bundle - */ + #[Test] + #[Group('api-bundle')] public function it_sets_payload(): void { $command = ['command' => ['name' => 'Root:FooBar', 'uuid' => 'abcdef', 'payload' => ['snake_case' => true]]]; @@ -173,7 +165,7 @@ public function it_sets_payload(): void $this->assertSame(['snakeCase' => true], $spiedPayload, 'Payload mismatch'); } - public function invalidCommandJsonStructures(): array + public static function invalidCommandJsonStructures(): array { return array_map( fn($command): array => [json_encode($command)], @@ -198,7 +190,7 @@ public function invalidCommandJsonStructures(): array ); } - public function convertibleCommandNames(): array + public static function convertibleCommandNames(): array { return [ 'It can convert simple command notation with a namespace' => [ @@ -216,7 +208,7 @@ public function convertibleCommandNames(): array ]; } - public function invalidCommandNames(): array + public static function invalidCommandNames(): array { return [ 'It can not convert simple command notation with only a namespace' => [ diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/InstitutionValueResolverTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/InstitutionValueResolverTest.php index a53e83ec5..01ffba07d 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/InstitutionValueResolverTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/InstitutionValueResolverTest.php @@ -21,11 +21,13 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\Stepup\Identity\Value\Institution; use Surfnet\StepupMiddleware\ApiBundle\Exception\BadApiRequestException; use Surfnet\StepupMiddleware\ApiBundle\Request\InstitutionValueResolver; -use Symfony\Component\HttpFoundation\ParameterBag; +use Symfony\Component\HttpFoundation\InputBag; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata; @@ -46,10 +48,8 @@ public function setUp(): void ->andReturn(Institution::class); } - /** - * @test - * @group api-bundle - */ + #[Test] + #[Group('api-bundle')] public function an_exception_is_thrown_when_the_parameter_is_missing(): void { $this->expectException(BadApiRequestException::class); @@ -60,15 +60,11 @@ public function an_exception_is_thrown_when_the_parameter_is_missing(): void $converter->resolve($this->request, $this->argument); } - /** - * @test - * @group api-bundle - */ + #[Test] + #[Group('api-bundle')] public function an_institution_is_resolved(): void { - $query = $this->mockQuery('ABC'); - - $this->request->query = $query; + $this->request->query = $this->mockQuery('ABC'); $equal = new Institution('ABC'); @@ -79,15 +75,8 @@ public function an_institution_is_resolved(): void $this->assertEquals($equal, $result[0]); } - private function mockQuery(bool|string $returnValue): ParameterBag&MockInterface + private function mockQuery(string|bool $returnValue): InputBag { - $query = m::mock(ParameterBag::class); - $query - ->shouldReceive('get') - ->once() - ->with('institution') - ->andReturn($returnValue); - - return $query; + return new InputBag(['institution' => $returnValue]); } } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/commands.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/commands.php index 40ad7bc7f..5e7be9420 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/commands.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Request/commands.php @@ -18,8 +18,10 @@ namespace Surfnet\StepupMiddleware\CommandHandlingBundle\Root\Command { + use AllowDynamicProperties; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\AbstractCommand; + #[AllowDynamicProperties] class FooBarCommand extends AbstractCommand { } @@ -29,6 +31,7 @@ class FooBarCommand extends AbstractCommand use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\AbstractCommand; + // phpcs:ignore PSR1.Classes.ClassDeclaration.MultipleClasses class QuuxCommand extends AbstractCommand { } diff --git a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Service/DeprovisionServiceTest.php b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Service/DeprovisionServiceTest.php index 49565e34c..7d218cf2a 100644 --- a/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Service/DeprovisionServiceTest.php +++ b/src/Surfnet/StepupMiddleware/ApiBundle/Tests/Service/DeprovisionServiceTest.php @@ -21,6 +21,7 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase; use Psr\Log\LoggerInterface; use Surfnet\Stepup\Identity\EventSourcing\IdentityRepository; @@ -69,9 +70,7 @@ public function test_it_can_be_created(): void $this->assertInstanceOf(DeprovisionService::class, $this->deprovisionService); } - /** - * @group api-bundle - */ + #[Group('api-bundle')] public function test_it_deals_with_non_exisiting_collab_user_id(): void { $this->apiRepo @@ -83,9 +82,7 @@ public function test_it_deals_with_non_exisiting_collab_user_id(): void $this->assertEmpty($data); } - /** - * @group api-bundle - */ + #[Group('api-bundle')] public function test_it_can_return_data(): void { $identity = m::mock(Identity::class); @@ -159,9 +156,7 @@ public function test_is_allowed_to_deprovision_user(): void $this->raListingRepo ->shouldReceive('contains') - ->with(m::on(function (IdentityId $identityId) use ($identity): bool { - return $identityId->getIdentityId() === $identity->id; - })) + ->with(m::on(fn(IdentityId $identityId): bool => $identityId->getIdentityId() === $identity->id)) ->once() ->andReturn(false); diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Command/AbstractCommand.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Command/AbstractCommand.php index 71cb57a87..5b563c500 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Command/AbstractCommand.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Command/AbstractCommand.php @@ -21,8 +21,8 @@ use Symfony\Component\Validator\Constraints as Assert; /** - * @SuppressWarnings(PHPMD.NumberOfChildren) we simply have a lot of commands - * @SuppressWarnings(PHPMD.CamelCasePropertyName) UUID was not camel cased intentionally + * @SuppressWarnings("PHPMD.NumberOfChildren") we simply have a lot of commands + * @SuppressWarnings("PHPMD.CamelCasePropertyName") UUID was not camel cased intentionally */ abstract class AbstractCommand implements Command { diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Configuration/CommandHandler/InstitutionConfigurationCommandHandler.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Configuration/CommandHandler/InstitutionConfigurationCommandHandler.php index 2e311a65b..ffa22ce3b 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Configuration/CommandHandler/InstitutionConfigurationCommandHandler.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Configuration/CommandHandler/InstitutionConfigurationCommandHandler.php @@ -48,7 +48,7 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Configuration\Command\RemoveRaLocationCommand; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) Value objects + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") Value objects */ class InstitutionConfigurationCommandHandler extends SimpleCommandHandler { diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Configuration/Processor/InstitutionConfigurationProcessor.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Configuration/Processor/InstitutionConfigurationProcessor.php index 99d372a7d..e33321a7c 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Configuration/Processor/InstitutionConfigurationProcessor.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Configuration/Processor/InstitutionConfigurationProcessor.php @@ -28,7 +28,6 @@ use Surfnet\StepupMiddleware\ApiBundle\Configuration\Repository\ConfiguredInstitutionRepository; use Surfnet\StepupMiddleware\CommandHandlingBundle\Configuration\Command\CreateInstitutionConfigurationCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Pipeline\Pipeline; -use Symfony\Component\DependencyInjection\ContainerInterface; final class InstitutionConfigurationProcessor extends Processor { diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/DependencyInjection/Configuration.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/DependencyInjection/Configuration.php index 31c6012b9..6c42f1855 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/DependencyInjection/Configuration.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/DependencyInjection/Configuration.php @@ -23,6 +23,9 @@ class Configuration implements ConfigurationInterface { + /** + * @return TreeBuilder<'array'> + */ public function getConfigTreeBuilder(): TreeBuilder { $treeBuilder = new TreeBuilder('surfnet_stepup_middleware_command_handling'); diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Exception/InvalidArgumentException.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Exception/InvalidArgumentException.php index 725a658ec..8d6a6a523 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Exception/InvalidArgumentException.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Exception/InvalidArgumentException.php @@ -18,6 +18,7 @@ namespace Surfnet\StepupMiddleware\CommandHandlingBundle\Exception; +// phpcs:ignore SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly class InvalidArgumentException extends \InvalidArgumentException implements Exception { public static function invalidType(string $expected, string $parameterName, mixed $parameter): self diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Command/RegisterSelfAssertedSecondFactorCommand.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Command/RegisterSelfAssertedSecondFactorCommand.php index 04afd31ce..0a6d14c6d 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Command/RegisterSelfAssertedSecondFactorCommand.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Command/RegisterSelfAssertedSecondFactorCommand.php @@ -18,11 +18,13 @@ namespace Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Command; +use AllowDynamicProperties; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\AbstractCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\SelfAsserted; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\SelfServiceExecutable; use Symfony\Component\Validator\Constraints as Assert; +#[AllowDynamicProperties] class RegisterSelfAssertedSecondFactorCommand extends AbstractCommand implements SelfServiceExecutable, SelfAsserted { /** diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Command/UpdateIdentityCommand.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Command/UpdateIdentityCommand.php index addd8293c..00ed1ec74 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Command/UpdateIdentityCommand.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Command/UpdateIdentityCommand.php @@ -18,10 +18,12 @@ namespace Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Command; +use AllowDynamicProperties; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\AbstractCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\SelfServiceExecutable; use Symfony\Component\Validator\Constraints as Assert; +#[AllowDynamicProperties] class UpdateIdentityCommand extends AbstractCommand implements SelfServiceExecutable { /** diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/CommandHandler/IdentityCommandHandler.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/CommandHandler/IdentityCommandHandler.php index 6894a9c7a..755a3d328 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/CommandHandler/IdentityCommandHandler.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/CommandHandler/IdentityCommandHandler.php @@ -46,6 +46,7 @@ use Surfnet\StepupBundle\Service\LoaResolutionService; use Surfnet\StepupBundle\Service\SecondFactorTypeService; use Surfnet\StepupBundle\Value\SecondFactorType; +use Surfnet\StepupMiddleware\ApiBundle\Configuration\Entity\InstitutionConfigurationOptions; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Service\AllowedSecondFactorListService; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Service\InstitutionConfigurationOptionsService; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\IdentityRepository; @@ -77,14 +78,14 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Service\RegistrationMailService; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - * @SuppressWarnings(PHPMD.TooManyMethods) - * @SuppressWarnings(PHPMD.TooManyPublicMethods) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") + * @SuppressWarnings("PHPMD.TooManyMethods") + * @SuppressWarnings("PHPMD.TooManyPublicMethods") */ class IdentityCommandHandler extends SimpleCommandHandler { /** - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings("PHPMD.ExcessiveParameterList") */ public function __construct( private readonly RepositoryInterface $eventSourcedRepository, @@ -539,7 +540,7 @@ private function emailVerificationIsRequired(IdentityApi $identity): bool $configuration = $this->institutionConfigurationOptionsService ->findInstitutionConfigurationOptionsFor($institution); - if (!$configuration instanceof \Surfnet\StepupMiddleware\ApiBundle\Configuration\Entity\InstitutionConfigurationOptions) { + if (!$configuration instanceof InstitutionConfigurationOptions) { return true; } diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/CommandHandler/RegistrationAuthorityCommandHandler.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/CommandHandler/RegistrationAuthorityCommandHandler.php index 9b8f57818..4c2020eb9 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/CommandHandler/RegistrationAuthorityCommandHandler.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/CommandHandler/RegistrationAuthorityCommandHandler.php @@ -40,7 +40,7 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Service\VettingTypeHintService; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class RegistrationAuthorityCommandHandler extends SimpleCommandHandler { diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/CommandHandler/WhitelistCommandHandler.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/CommandHandler/WhitelistCommandHandler.php index 9ebe2d578..520f63131 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/CommandHandler/WhitelistCommandHandler.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/CommandHandler/WhitelistCommandHandler.php @@ -77,10 +77,10 @@ private function getWhitelist(): Whitelist } /** - * @return Institution[] + * @return list */ private function mapArrayToInstitutions(array $institutions): array { - return array_map(fn($institutionName): Institution => new Institution($institutionName), $institutions); + return array_values(array_map(fn($institutionName): Institution => new Institution($institutionName), $institutions)); } } diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RecoveryTokenMailService.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RecoveryTokenMailService.php index cb5a8e77a..9dea8335a 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RecoveryTokenMailService.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RecoveryTokenMailService.php @@ -34,7 +34,7 @@ use function str_replace; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class RecoveryTokenMailService { diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php index c9920b130..7072448a8 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/RegistrationMailService.php @@ -38,14 +38,14 @@ use Symfony\Contracts\Translation\TranslatorInterface; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class RegistrationMailService { private readonly string $fallbackLocale; /** - * @SuppressWarnings(PHPMD.ExcessiveParameterList) + * @SuppressWarnings("PHPMD.ExcessiveParameterList") */ public function __construct( private readonly Mailer $mailer, diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/SecondFactorRevocationMailService.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/SecondFactorRevocationMailService.php index 3d6e0f53e..b953f8e5b 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/SecondFactorRevocationMailService.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Identity/Service/SecondFactorRevocationMailService.php @@ -35,7 +35,7 @@ use Symfony\Contracts\Translation\TranslatorInterface; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ final class SecondFactorRevocationMailService { diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/command_handlers.yml b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/command_handlers.yml index 1e630ee48..4c9c3eca6 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/command_handlers.yml +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/command_handlers.yml @@ -1,4 +1,7 @@ services: + _defaults: + autoconfigure: true + surfnet_stepup_middleware_command_handling.command_handler.identity_command_handler: class: Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\CommandHandler\IdentityCommandHandler arguments: diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/event_sourcing.yml b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/event_sourcing.yml index 520cd0786..778db74aa 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/event_sourcing.yml +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/event_sourcing.yml @@ -1,4 +1,6 @@ services: + _defaults: + autoconfigure: true # BC aliases Surfnet\StepupMiddleware\CommandHandlingBundle\EventSourcing\MetadataEnricher: "@surfnet_stepup_middleware_command_handling.metadata_enricher.actor" diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/pipeline.yml b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/pipeline.yml index 7ccdae563..d21558bf2 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/pipeline.yml +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/pipeline.yml @@ -1,4 +1,7 @@ services: + _defaults: + autoconfigure: true + pipeline: alias: surfnet_stepup_middleware_command_handling.pipeline.transaction_aware_pipeline public: true diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/processors.yml b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/processors.yml index bfa786669..79c65c757 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/processors.yml +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/config/processors.yml @@ -1,4 +1,7 @@ services: + _defaults: + autoconfigure: true + surfnet_stepup_middleware_command_handling.processor.email_verification_email: class: Surfnet\StepupMiddleware\CommandHandlingBundle\Processor\EmailVerificationEmailProcessor arguments: diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/views/RecoveryTokenMailService/email.html.twig b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/views/RecoveryTokenMailService/email.html.twig index 4aced049a..62b59dc39 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/views/RecoveryTokenMailService/email.html.twig +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/views/RecoveryTokenMailService/email.html.twig @@ -7,9 +7,7 @@ {% set template = template_from_string(templateString) %} -{% sandbox %} - {% include template %} -{% endsandbox %} +{{ include(template, sandboxed: true) }} diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/views/SecondFactorMailService/email.html.twig b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/views/SecondFactorMailService/email.html.twig index 4aced049a..599e64661 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/views/SecondFactorMailService/email.html.twig +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Resources/views/SecondFactorMailService/email.html.twig @@ -6,10 +6,7 @@ {% set template = template_from_string(templateString) %} - -{% sandbox %} - {% include template %} -{% endsandbox %} +{{ include(template, sandboxed: true) }} diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/EventSourcing/SensitiveDataMessage.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/EventSourcing/SensitiveDataMessage.php index 988a78ef5..d7095c8d5 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/EventSourcing/SensitiveDataMessage.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/SensitiveData/EventSourcing/SensitiveDataMessage.php @@ -19,7 +19,6 @@ namespace Surfnet\StepupMiddleware\CommandHandlingBundle\SensitiveData\EventSourcing; use Surfnet\Stepup\Identity\Value\IdentityId; -use Surfnet\StepupMiddleware\CommandHandlingBundle\Exception\InvalidArgumentException; use Surfnet\StepupMiddleware\CommandHandlingBundle\SensitiveData\SensitiveData; class SensitiveDataMessage diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Command/AbstractCommandTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Command/AbstractCommandTest.php index ad28651f5..82732277b 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Command/AbstractCommandTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Command/AbstractCommandTest.php @@ -19,16 +19,16 @@ namespace Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\Command; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; class AbstractCommandTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group command - */ + #[Test] + #[Group('command')] public function to_string_generates_command_identifiable_information(): void { $command = new FixedUuidStubCommand(); diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/CommandHandlerTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/CommandHandlerTestBase.php similarity index 92% rename from src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/CommandHandlerTest.php rename to src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/CommandHandlerTestBase.php index 84a8125d3..c5ad3eadf 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/CommandHandlerTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/CommandHandlerTestBase.php @@ -22,7 +22,7 @@ use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Ramsey\Uuid\Uuid; -abstract class CommandHandlerTest extends CommandHandlerScenarioTestCase +abstract class CommandHandlerTestBase extends CommandHandlerScenarioTestCase { use MockeryPHPUnitIntegration; diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/CommandHandler/ConfigurationCommandHandlerTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/CommandHandler/ConfigurationCommandHandlerTest.php index 3c900aeb1..3ffa73cad 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/CommandHandler/ConfigurationCommandHandlerTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/CommandHandler/ConfigurationCommandHandlerTest.php @@ -22,7 +22,8 @@ use Broadway\EventHandling\EventBus as EventBusInterface; use Broadway\EventSourcing\AggregateFactory\PublicConstructorAggregateFactory; use Broadway\EventStore\EventStore as EventStoreInterface; -use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use RuntimeException; use Surfnet\Stepup\Configuration\Configuration; use Surfnet\Stepup\Configuration\Event\ConfigurationUpdatedEvent; @@ -34,10 +35,10 @@ use Surfnet\Stepup\Configuration\EventSourcing\ConfigurationRepository; use Surfnet\StepupMiddleware\CommandHandlingBundle\Configuration\Command\UpdateConfigurationCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Configuration\CommandHandler\ConfigurationCommandHandler; -use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTest; +use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTestBase; use function is_string; -final class ConfigurationCommandHandlerTest extends CommandHandlerTest +final class ConfigurationCommandHandlerTest extends CommandHandlerTestBase { /** @@ -45,10 +46,8 @@ final class ConfigurationCommandHandlerTest extends CommandHandlerTest */ public const CID = Configuration::CONFIGURATION_ID; - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function configuration_can_be_initialised(): void { $configuration = [ @@ -70,10 +69,8 @@ public function configuration_can_be_initialised(): void ->then($this->createConfigurationUpdatedEvents($configuration, null)); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function configuration_can_be_updated(): void { $configuration1 = [ diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/CommandHandler/InstitutionConfigurationCommandHandlerTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/CommandHandler/InstitutionConfigurationCommandHandlerTest.php index 557ec7dcf..18824c63d 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/CommandHandler/InstitutionConfigurationCommandHandlerTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/CommandHandler/InstitutionConfigurationCommandHandlerTest.php @@ -23,7 +23,8 @@ use Broadway\EventSourcing\AggregateFactory\PublicConstructorAggregateFactory; use Broadway\EventStore\EventStore as EventStoreInterface; use Broadway\Repository\AggregateNotFoundException; -use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use Surfnet\Stepup\Configuration\Event\AllowedSecondFactorListUpdatedEvent; use Surfnet\Stepup\Configuration\Event\InstitutionConfigurationRemovedEvent; use Surfnet\Stepup\Configuration\Event\NewInstitutionConfigurationCreatedEvent; @@ -65,15 +66,13 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Configuration\Command\RemoveInstitutionConfigurationByUnnormalizedIdCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Configuration\Command\RemoveRaLocationCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Configuration\CommandHandler\InstitutionConfigurationCommandHandler; -use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTest; +use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTestBase; -class InstitutionConfigurationCommandHandlerTest extends CommandHandlerTest +class InstitutionConfigurationCommandHandlerTest extends CommandHandlerTestBase { - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function an_institution_configuration_is_created_when_there_is_none_for_a_given_institution(): void { $command = new CreateInstitutionConfigurationCommand(); @@ -133,10 +132,8 @@ public function an_institution_configuration_is_created_when_there_is_none_for_a ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function an_institution_configuration_cannot_be_created_when_there_already_is_one_for_a_given_institution(): void { $this->expectException(DomainException::class); @@ -193,10 +190,8 @@ public function an_institution_configuration_cannot_be_created_when_there_alread ->when($command); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function institution_configuration_options_are_not_changed_if_their_given_value_is_not_different_from_their_current_value(): void { $institution = new Institution('Institution'); @@ -267,10 +262,8 @@ public function institution_configuration_options_are_not_changed_if_their_given ->then([]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function use_ra_locations_option_is_changed_if_its_given_value_is_different_from_the_current_value(): void { $institution = new Institution('Institution'); @@ -351,10 +344,8 @@ public function use_ra_locations_option_is_changed_if_its_given_value_is_differe ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function show_raa_contact_information_option_is_changed_if_its_given_value_is_different_from_the_current_value(): void { $institution = new Institution('Institution'); @@ -431,10 +422,8 @@ public function show_raa_contact_information_option_is_changed_if_its_given_valu ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function allowed_second_factor_list_is_changed_if_its_values_are_different_than_the_current_list(): void { $institution = new Institution('Institution'); @@ -516,10 +505,8 @@ public function allowed_second_factor_list_is_changed_if_its_values_are_differen ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function allowed_second_factor_list_is_not_changed_if_its_values_are_the_same_as_the_current_list(): void { $secondFactorsToAllow = ['sms', 'yubikey']; @@ -594,10 +581,8 @@ public function allowed_second_factor_list_is_not_changed_if_its_values_are_the_ ->then([]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function an_ra_location_can_be_added_to_an_existing_institution_configuration(): void { $command = new AddRaLocationCommand(); @@ -647,10 +632,8 @@ public function an_ra_location_can_be_added_to_an_existing_institution_configura ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function the_same_ra_location_cannot_be_added_twice(): void { $this->expectException(DomainException::class); @@ -701,10 +684,8 @@ public function the_same_ra_location_cannot_be_added_twice(): void ->when($command); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function an_ra_location_can_be_renamed(): void { $originalRaLocationName = new RaLocationName('An old RA location name'); @@ -761,10 +742,8 @@ public function an_ra_location_can_be_renamed(): void ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function an_ra_location_cannot_be_changed_if_it_is_not_present_within_an_institution_configuration(): void { $this->expectException(DomainException::class); @@ -807,10 +786,8 @@ public function an_ra_location_cannot_be_changed_if_it_is_not_present_within_an_ ->when($command); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function an_ra_location_cannot_be_changed_if_its_institution_configuration_cannot_be_found(): void { $this->expectException(AggregateNotFoundException::class); @@ -853,11 +830,9 @@ public function an_ra_location_cannot_be_changed_if_its_institution_configuratio ->when($command); } - /** - * @test - * @group command-handler - * @group institution-configuration - */ + #[Test] + #[Group('command-handler')] + #[Group('institution-configuration')] public function an_ra_location_can_be_relocated(): void { $originalLocation = new Location('An old location'); @@ -914,11 +889,9 @@ public function an_ra_location_can_be_relocated(): void ]); } - /** - * @test - * @group command-handler - * @group institution-configuration - */ + #[Test] + #[Group('command-handler')] + #[Group('institution-configuration')] public function an_ra_locations_contact_information_can_be_changed(): void { $originalContactInformation = new ContactInformation('Old contact information'); @@ -975,11 +948,9 @@ public function an_ra_locations_contact_information_can_be_changed(): void ]); } - /** - * @test - * @group command-handler - * @group institution-configuration - */ + #[Test] + #[Group('command-handler')] + #[Group('institution-configuration')] public function the_self_vet_option_can_be_changed(): void { $institution = new Institution('Institution'); @@ -1055,11 +1026,9 @@ public function the_self_vet_option_can_be_changed(): void ]); } - /** - * @test - * @group command-handler - * @group institution-configuration - */ + #[Test] + #[Group('command-handler')] + #[Group('institution-configuration')] public function an_ra_location_cannot_be_removed_if_its_institution_configuration_cannot_be_found(): void { $this->expectException(AggregateNotFoundException::class); @@ -1099,11 +1068,9 @@ public function an_ra_location_cannot_be_removed_if_its_institution_configuratio ->when($command); } - /** - * @test - * @group command-handler - * @group institution-configuration - */ + #[Test] + #[Group('command-handler')] + #[Group('institution-configuration')] public function an_ra_location_cannot_be_removed_if_it_is_not_present_within_an_institution_configuration(): void { $this->expectException(DomainException::class); @@ -1143,11 +1110,9 @@ public function an_ra_location_cannot_be_removed_if_it_is_not_present_within_an_ ->when($command); } - /** - * @test - * @group command-handler - * @group institution-configuration - */ + #[Test] + #[Group('command-handler')] + #[Group('institution-configuration')] public function an_ra_location_can_be_removed(): void { $command = new RemoveRaLocationCommand(); @@ -1198,11 +1163,9 @@ public function an_ra_location_can_be_removed(): void ]); } - /** - * @test - * @group command-handler - * @group institution-configuration - */ + #[Test] + #[Group('command-handler')] + #[Group('institution-configuration')] public function an_institution_configuration_with_unnormalized_institution_configuration_id_can_be_removed(): void { $command = new RemoveInstitutionConfigurationByUnnormalizedIdCommand(); diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/Processor/InstitutionConfigurationProcessorTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/Processor/InstitutionConfigurationProcessorTest.php index f73c5211f..11a1d1edd 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/Processor/InstitutionConfigurationProcessorTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Configuration/Processor/InstitutionConfigurationProcessorTest.php @@ -21,7 +21,9 @@ use Mockery; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\MockInterface; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Identity\Collection\InstitutionCollection; use Surfnet\Stepup\Identity\Event\IdentityCreatedEvent; use Surfnet\Stepup\Identity\Event\InstitutionsAddedToWhitelistEvent; @@ -37,7 +39,6 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Configuration\Processor\InstitutionConfigurationProcessor; use Surfnet\StepupMiddleware\CommandHandlingBundle\Pipeline\Pipeline; use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\Mockery\HasInstitutionMatcher; -use Symfony\Component\DependencyInjection\ContainerInterface; class InstitutionConfigurationProcessorTest extends TestCase { @@ -50,11 +51,9 @@ public function setUp(): void $this->pipelineMock = Mockery::mock(Pipeline::class); } - /** - * @test - * @group processor - * @group institution-configuration - */ + #[Test] + #[Group('processor')] + #[Group('institution-configuration')] public function a_create_institution_configuration_command_is_processed_when_an_identity_was_created_with_a_non_configured_institution(): void { $expectedInstitution = 'institution'; @@ -86,11 +85,9 @@ public function a_create_institution_configuration_command_is_processed_when_an_ $this->assertInstanceOf(InstitutionConfigurationProcessor::class, $institutionConfigurationProcessor); } - /** - * @test - * @group processor - * @group institution-configuration - */ + #[Test] + #[Group('processor')] + #[Group('institution-configuration')] public function no_create_institution_configuration_command_is_processed_when_an_identity_was_created_with_an_already_configured_institution(): void { $identityCreatedEvent = new IdentityCreatedEvent( @@ -119,11 +116,9 @@ public function no_create_institution_configuration_command_is_processed_when_an $this->assertInstanceOf(InstitutionConfigurationProcessor::class, $institutionConfigurationProcessor); } - /** - * @test - * @group processor - * @group institution-configuration - */ + #[Test] + #[Group('processor')] + #[Group('institution-configuration')] public function create_institution_configuration_commands_are_processed_when_a_whitelist_was_created_containing_non_configured_institutions(): void { $firstInstitution = 'first institution'; @@ -160,11 +155,9 @@ public function create_institution_configuration_commands_are_processed_when_a_w $this->assertInstanceOf(InstitutionConfigurationProcessor::class, $institutionConfigurationProcessor); } - /** - * @test - * @group processor - * @group institution-configuration - */ + #[Test] + #[Group('processor')] + #[Group('institution-configuration')] public function no_create_institution_configuration_command_is_processed_for_an_already_configured_institution_when_a_whitelist_was_created(): void { $alreadyPresentInstitution = 'already present'; @@ -205,11 +198,9 @@ public function no_create_institution_configuration_command_is_processed_for_an_ $this->assertInstanceOf(InstitutionConfigurationProcessor::class, $institutionConfigurationProcessor); } - /** - * @test - * @group processor - * @group institution-configuration - */ + #[Test] + #[Group('processor')] + #[Group('institution-configuration')] public function create_institution_configuration_commands_are_created_when_a_whitelist_was_replaced_containing_non_configured_institutions(): void { $firstInstitution = 'first institution'; @@ -248,11 +239,9 @@ public function create_institution_configuration_commands_are_created_when_a_whi $this->assertInstanceOf(InstitutionConfigurationProcessor::class, $institutionConfigurationProcessor); } - /** - * @test - * @group processor - * @group institution-configuration - */ + #[Test] + #[Group('processor')] + #[Group('institution-configuration')] public function no_create_institution_configuration_command_is_processed_for_an_already_configured_institution_when_a_whitelist_was_replaced(): void { $alreadyPresentInstitution = 'already present'; @@ -293,11 +282,9 @@ public function no_create_institution_configuration_command_is_processed_for_an_ $this->assertInstanceOf(InstitutionConfigurationProcessor::class, $institutionConfigurationProcessor); } - /** - * @test - * @group processor - * @group institution-configuration - */ + #[Test] + #[Group('processor')] + #[Group('institution-configuration')] public function create_institution_configuration_commands_are_created_when_non_configured_institutions_are_added_to_the_whitelist(): void { $firstInstitution = 'first institution'; @@ -336,11 +323,9 @@ public function create_institution_configuration_commands_are_created_when_non_c $this->assertInstanceOf(InstitutionConfigurationProcessor::class, $institutionConfigurationProcessor); } - /** - * @test - * @group processor - * @group institution-configuration - */ + #[Test] + #[Group('processor')] + #[Group('institution-configuration')] public function no_create_institution_configuration_command_is_created_for_an_already_configured_institution_when_institutions_are_added_to_a_whitelist(): void { $alreadyPresentInstitution = 'already present'; diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/DateTimeHelper.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/DateTimeHelper.php index 42f43d134..c25036e59 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/DateTimeHelper.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/DateTimeHelper.php @@ -31,7 +31,6 @@ class DateTimeHelper public static function setCurrentTime(DateTime $now = null): void { $nowProperty = new ReflectionProperty(DateTime::class, 'now'); - $nowProperty->setAccessible(true); $nowProperty->setValue($now); } } diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/DateTimeHelperTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/DateTimeHelperTest.php index 888f4b9b9..6f8052190 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/DateTimeHelperTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/DateTimeHelperTest.php @@ -20,20 +20,19 @@ use DateTime as CoreDateTime; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Surfnet\Stepup\DateTime\DateTime; -/** - * @runTestsInSeparateProcesses - */ +#[RunTestsInSeparateProcesses] class DateTimeHelperTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group testing - */ + #[Test] + #[Group('testing')] public function it_mocks_now(): void { DateTimeHelper::setCurrentTime(new DateTime(new CoreDateTime('@12345'))); @@ -41,10 +40,8 @@ public function it_mocks_now(): void $this->assertEquals(new DateTime(new CoreDateTime('@12345')), DateTime::now()); } - /** - * @test - * @group testing - */ + #[Test] + #[Group('testing')] public function it_can_be_disabled_in_the_same_process(): void { DateTimeHelper::setCurrentTime(new DateTime(new CoreDateTime('@12345'))); @@ -56,10 +53,8 @@ public function it_can_be_disabled_in_the_same_process(): void $this->assertTrue((new DateTime())->comesAfterOrIsEqual($now)); } - /** - * @test - * @group testing - */ + #[Test] + #[Group('testing')] public function it_works_with_separate_processes(): void { // The stub value has been removed. diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/EventHandling/BufferedEventBusTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/EventHandling/BufferedEventBusTest.php index b6ef9e995..3adb91aaa 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/EventHandling/BufferedEventBusTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/EventHandling/BufferedEventBusTest.php @@ -27,6 +27,8 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Surfnet\StepupMiddleware\CommandHandlingBundle\EventHandling\BufferedEventBus; @@ -34,10 +36,8 @@ class BufferedEventBusTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group event-handling - */ + #[Test] + #[Group('event-handling')] public function it_buffers_events(): void { $event = $this->createDummyDomainMessage(null); @@ -54,10 +54,8 @@ public function it_buffers_events(): void $this->assertInstanceOf(BufferedEventBus::class, $bus); } - /** - * @test - * @group event-handling - */ + #[Test] + #[Group('event-handling')] public function it_flushes_events(): void { $event = $this->createDummyDomainMessage(null); @@ -77,9 +75,9 @@ public function it_flushes_events(): void /** * This is tested by checking that the mock event listener is invoked once, while flushing twice. - * @test - * @group event-handling */ + #[Test] + #[Group('event-handling')] public function flushing_succesfully_empties_the_buffer_to_prevent_flushing_the_same_event_twice(): void { $event = $this->createDummyDomainMessage(null); @@ -97,10 +95,8 @@ public function flushing_succesfully_empties_the_buffer_to_prevent_flushing_the_ $this->assertInstanceOf(BufferedEventBus::class, $bus); } - /** - * @test - * @group event-handling - */ + #[Test] + #[Group('event-handling')] public function an_event_caused_by_an_event_in_the_current_buffer_being_flushed_is_buffered_and_flushed_after_events_in_the_current_buffer(): void { $bus = new BufferedEventBus($this->getDummyEntityManager()); diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerMoveTokenTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerMoveTokenTest.php index 659d5a43c..62d1fa924 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerMoveTokenTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerMoveTokenTest.php @@ -24,6 +24,9 @@ use Broadway\EventStore\EventStore as EventStoreInterface; use Mockery as m; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\RunInSeparateProcess; +use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses; use Psr\Log\LoggerInterface; use Surfnet\Stepup\Configuration\Value\AllowedSecondFactorList; use Surfnet\Stepup\DateTime\DateTime; @@ -63,12 +66,10 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Command\MigrateVettedSecondFactorCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\CommandHandler\IdentityCommandHandler; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Service\RegistrationMailService; -use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTest; +use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTestBase; -/** - * @runTestsInSeparateProcesses - */ -class IdentityCommandHandlerMoveTokenTest extends CommandHandlerTest +#[RunTestsInSeparateProcesses] +class IdentityCommandHandlerMoveTokenTest extends CommandHandlerTestBase { private static int $window = 3600; @@ -123,10 +124,8 @@ protected function createCommandHandler( ); } - /** - * @group command-handler - * @runInSeparateProcess - */ + #[RunInSeparateProcess] + #[Group('command-handler')] public function test_a_second_factor_can_be_moved(): void { $this->setUpInstitutionConfiguration(2, ['yubikey']); diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerSelfAssertedTokensTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerSelfAssertedTokensTest.php index 37099b9c0..58a187c08 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerSelfAssertedTokensTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerSelfAssertedTokensTest.php @@ -24,6 +24,9 @@ use Broadway\EventStore\EventStore as EventStoreInterface; use Mockery as m; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\RunInSeparateProcess; +use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses; use Psr\Log\LoggerInterface; use Surfnet\Stepup\Configuration\Value\AllowedSecondFactorList; use Surfnet\Stepup\Configuration\Value\SelfAssertedTokensOption; @@ -84,12 +87,10 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Command\SelfVetSecondFactorCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\CommandHandler\IdentityCommandHandler; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Service\RegistrationMailService; -use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTest; +use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTestBase; -/** - * @runTestsInSeparateProcesses - */ -class IdentityCommandHandlerSelfAssertedTokensTest extends CommandHandlerTest +#[RunTestsInSeparateProcesses] +class IdentityCommandHandlerSelfAssertedTokensTest extends CommandHandlerTestBase { private static int $window = 3600; @@ -133,10 +134,8 @@ public function setUp(): void parent::setUp(); } - /** - * @group command-handler - * @runInSeparateProcess - */ + #[RunInSeparateProcess] + #[Group('command-handler')] public function test_a_sms_recovery_code_possession_can_be_proven(): void { $recoveryTokenId = new RecoveryTokenId(self::uuid()); @@ -168,10 +167,8 @@ public function test_a_sms_recovery_code_possession_can_be_proven(): void ]); } - /** - * @group command-handler - * @runInSeparateProcess - */ + #[RunInSeparateProcess] + #[Group('command-handler')] public function test_a_safe_store_secret_recovery_code_possession_can_be_proven(): void { $recoveryTokenId = new RecoveryTokenId(self::uuid()); @@ -214,10 +211,8 @@ public function test_a_safe_store_secret_recovery_code_possession_can_be_proven( ]); } - /** - * @group command-handler - * @runInSeparateProcess - */ + #[RunInSeparateProcess] + #[Group('command-handler')] public function test_a_safe_store_secret_and_phone_recovery_code_possession_can_be_proven(): void { $recoveryTokenId = new RecoveryTokenId(self::uuid()); @@ -279,10 +274,8 @@ public function test_a_safe_store_secret_and_phone_recovery_code_possession_can_ ]); } - /** - * @group command-handler - * @runInSeparateProcess - */ + #[RunInSeparateProcess] + #[Group('command-handler')] public function test_a_sms_recovery_code_possession_can_not_be_proven_twice(): void { $recoveryTokenId = new RecoveryTokenId(self::uuid()); @@ -317,10 +310,8 @@ public function test_a_sms_recovery_code_possession_can_not_be_proven_twice(): v ->when($command); } - /** - * @group command-handler - * @runInSeparateProcess - */ + #[RunInSeparateProcess] + #[Group('command-handler')] public function test_only_one_safe_store_secret_allowed(): void { $recoveryTokenId = new RecoveryTokenId(self::uuid()); @@ -367,10 +358,8 @@ public function test_only_one_safe_store_secret_allowed(): void ->when($command); } - /** - * @group command-handler - * @runInSeparateProcess - */ + #[RunInSeparateProcess] + #[Group('command-handler')] public function test_a_sms_recovery_token_possession_requires_institution_configuration_feature_enabled(): void { $identityCreatedEvent = $this->buildIdentityCreatedEvent(); @@ -407,10 +396,8 @@ public function test_a_sms_recovery_token_possession_requires_institution_config ->when($command); } - /** - * @group command-handler - * @runInSeparateProcess - */ + #[RunInSeparateProcess] + #[Group('command-handler')] public function test_a_safe_store_secret_recovery_code_possession_can_be_revoked_by_ra(): void { $recoveryTokenId = new RecoveryTokenId(self::uuid()); @@ -478,10 +465,8 @@ public function test_a_safe_store_secret_recovery_code_possession_can_be_revoked ]); } - /** - * @group command-handler - * @runInSeparateProcess - */ + #[RunInSeparateProcess] + #[Group('command-handler')] public function test_a_token_can_be_registered_self_asserted(): void { $recoveryTokenId = new RecoveryTokenId(self::uuid()); @@ -561,10 +546,8 @@ public function test_a_token_can_be_registered_self_asserted(): void ]); } - /** - * @group command-handler - * @runInSeparateProcess - */ + #[RunInSeparateProcess] + #[Group('command-handler')] public function test_self_asserted_token_registration_requires_possession_of_recovery_token(): void { $madeUpRecoveryTokenId = new RecoveryTokenId(self::uuid()); @@ -620,10 +603,8 @@ public function test_self_asserted_token_registration_requires_possession_of_rec ->when($command); } - /** - * @group command-handler - * @runInSeparateProcess - */ + #[RunInSeparateProcess] + #[Group('command-handler')] public function test_a_safe_store_secret_recovery_code_possession_can_be_revoked(): void { $recoveryTokenId = new RecoveryTokenId(self::uuid()); @@ -662,10 +643,8 @@ public function test_a_safe_store_secret_recovery_code_possession_can_be_revoked ]); } - /** - * @group command-handler - * @runInSeparateProcess - */ + #[RunInSeparateProcess] + #[Group('command-handler')] public function test_a_sat_token_can_be_used_to_self_vet_a_token(): void { $recoveryTokenId = new RecoveryTokenId(self::uuid()); @@ -793,10 +772,8 @@ public function test_a_sat_token_can_be_used_to_self_vet_a_token(): void ]); } - /** - * @group command-handler - * @runInSeparateProcess - */ + #[RunInSeparateProcess] + #[Group('command-handler')] public function test_sat_not_allowed_when_one_vetted_token_is_identity_vetted(): void { $recoveryTokenId = new RecoveryTokenId(self::uuid()); diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerTest.php index 51c176ddc..7323fb9c3 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerTest.php @@ -23,9 +23,13 @@ use Broadway\EventSourcing\AggregateFactory\PublicConstructorAggregateFactory; use Broadway\EventStore\EventStore as EventStoreInterface; use DateTime as CoreDateTime; -use Mockery\Matcher\IsEqual; use Mockery as m; +use Mockery\Matcher\IsEqual; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\RunInSeparateProcess; +use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses; +use PHPUnit\Framework\Attributes\Test; use Psr\Log\LoggerInterface; use Surfnet\Stepup\Configuration\Value\AllowedSecondFactorList; use Surfnet\Stepup\DateTime\DateTime; @@ -67,7 +71,6 @@ use Surfnet\Stepup\Identity\Value\U2fKeyHandle; use Surfnet\Stepup\Identity\Value\YubikeyPublicId; use Surfnet\Stepup\Token\TokenGenerator; -use Surfnet\StepupBundle\Security\OtpGenerator; use Surfnet\StepupBundle\Service\LoaResolutionService; use Surfnet\StepupBundle\Service\SecondFactorTypeService; use Surfnet\StepupBundle\Value\Loa; @@ -92,14 +95,12 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\CommandHandler\Exception\DuplicateIdentityException; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\CommandHandler\IdentityCommandHandler; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Service\RegistrationMailService; -use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTest; +use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTestBase; use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\DateTimeHelper; use function md5; -/** - * @runTestsInSeparateProcesses - */ -class IdentityCommandHandlerTest extends CommandHandlerTest +#[RunTestsInSeparateProcesses] +class IdentityCommandHandlerTest extends CommandHandlerTestBase { private static int $window = 3600; @@ -160,11 +161,9 @@ protected function createCommandHandler( ); } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function an_identity_can_be_bootstrapped_with_a_yubikey_second_factor(): void { $command = new BootstrapIdentityWithYubikeySecondFactorCommand(); @@ -210,11 +209,9 @@ public function an_identity_can_be_bootstrapped_with_a_yubikey_second_factor(): ]); } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function an_identity_cannot_be_bootstrapped_twice(): void { $command = new BootstrapIdentityWithYubikeySecondFactorCommand(); @@ -238,11 +235,9 @@ public function an_identity_cannot_be_bootstrapped_twice(): void ->then([]); } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function a_yubikey_possession_can_be_proven(): void { DateTimeHelper::setCurrentTime(new DateTime(new CoreDateTime('@12345'))); @@ -302,11 +297,9 @@ public function a_yubikey_possession_can_be_proven(): void ]); } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function a_yubikey_possession_cannot_be_proven_if_the_second_factor_is_not_allowed_by_the_institution(): void { DateTimeHelper::setCurrentTime(new DateTime(new CoreDateTime('@12345'))); @@ -349,10 +342,8 @@ public function a_yubikey_possession_cannot_be_proven_if_the_second_factor_is_no ->when($command); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function yubikey_possession_cannot_be_proven_twice(): void { $this->expectException(DomainException::class); @@ -408,11 +399,9 @@ public function yubikey_possession_cannot_be_proven_twice(): void ->when($command); } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function a_phone_possession_can_be_proven(): void { DateTimeHelper::setCurrentTime(new DateTime(new CoreDateTime('@12345'))); @@ -472,11 +461,9 @@ public function a_phone_possession_can_be_proven(): void ]); } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function a_phone_possession_cannot_be_proven_if_the_second_factor_is_not_allowed_by_the_institution(): void { DateTimeHelper::setCurrentTime(new DateTime(new CoreDateTime('@12345'))); @@ -518,11 +505,9 @@ public function a_phone_possession_cannot_be_proven_if_the_second_factor_is_not_ ->then([]); } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function a_gssf_possession_can_be_proven(): void { DateTimeHelper::setCurrentTime(new DateTime(new CoreDateTime('@12345'))); @@ -595,11 +580,9 @@ public function a_gssf_possession_can_be_proven(): void } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function a_gssf_possession_can_not_be_proven_if_the_second_factor_is_not_allowed_by_the_institution(): void { DateTimeHelper::setCurrentTime(new DateTime(new CoreDateTime('@12345'))); @@ -643,11 +626,9 @@ public function a_gssf_possession_can_not_be_proven_if_the_second_factor_is_not_ ->then([]); } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function a_u2f_device_possession_can_be_proven(): void { DateTimeHelper::setCurrentTime(new DateTime(new CoreDateTime('@12345'))); @@ -707,11 +688,9 @@ public function a_u2f_device_possession_can_be_proven(): void ]); } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function a_u2f_device_possession_cannot_be_proven_if_the_second_factor_is_not_allowed_by_the_institution(): void { DateTimeHelper::setCurrentTime(new DateTime(new CoreDateTime('@12345'))); @@ -753,10 +732,8 @@ public function a_u2f_device_possession_cannot_be_proven_if_the_second_factor_is ->then([]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function phone_possession_cannot_be_proven_twice(): void { $this->expectException(DomainException::class); @@ -812,10 +789,8 @@ public function phone_possession_cannot_be_proven_twice(): void ->when($command); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function cannot_prove_possession_of_arbitrary_second_factor_type_twice(): void { $this->expectException(DomainException::class); @@ -872,11 +847,9 @@ public function cannot_prove_possession_of_arbitrary_second_factor_type_twice(): ->when($command); } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function an_unverified_second_factors_email_can_be_verified(): void { DateTimeHelper::setCurrentTime(new DateTime(new CoreDateTime('@12345'))); @@ -941,10 +914,8 @@ public function an_unverified_second_factors_email_can_be_verified(): void ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function a_verified_second_factors_email_cannot_be_verified(): void { $this->expectException(DomainException::class); @@ -1007,10 +978,8 @@ public function a_verified_second_factors_email_cannot_be_verified(): void ->when($command); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function cannot_verify_an_email_after_the_verification_window_has_closed(): void { $this->expectException(DomainException::class); @@ -1059,10 +1028,8 @@ public function cannot_verify_an_email_after_the_verification_window_has_closed( ->when($command); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function it_can_create_a_new_identity(): void { $createCommand = new CreateIdentityCommand(); @@ -1098,10 +1065,8 @@ public function it_can_create_a_new_identity(): void ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function an_identity_can_be_updated(): void { $id = new IdentityId('42'); @@ -1133,10 +1098,8 @@ public function an_identity_can_be_updated(): void ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function an_identity_can_be_updated_twice_only_emitting_events_when_changed(): void { $id = new IdentityId('42'); @@ -1170,10 +1133,8 @@ public function an_identity_can_be_updated_twice_only_emitting_events_when_chang } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function a_deprovisioned_identity_is_restored_when_updated(): void { $id = new IdentityId('42'); @@ -1205,15 +1166,13 @@ public function a_deprovisioned_identity_is_restored_when_updated(): void ->given([$createdEvent, $forgottenEvent]) ->when($updateCommand) ->then([ - new IdentityRestoredEvent($id, $institution, new CommonName($updateCommand->commonName), new Email($updateCommand->email)), + new IdentityRestoredEvent($id, $institution, new CommonName($updateCommand->commonName), new Email($updateCommand->email)), ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function a_second_factor_can_be_vetted(): void { $command = new VetSecondFactorCommand(); @@ -1325,10 +1284,8 @@ public function a_second_factor_can_be_vetted(): void ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function a_second_factor_cannot_be_vetted_without_a_secure_enough_vetted_second_factor(): void { $this->expectExceptionMessage("Authority does not have the required LoA"); @@ -1470,10 +1427,8 @@ public function a_second_factor_cannot_be_vetted_without_a_secure_enough_vetted_ } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function a_second_factor_can_be_vetted_without_a_physical_proven_possession(): void { $command = new VetSecondFactorCommand(); @@ -1585,10 +1540,8 @@ public function a_second_factor_can_be_vetted_without_a_physical_proven_possessi ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function a_second_factor_cannot_be_vetted_without_physical_prove_of_possession_when_not_configured(): void { $this->expectExceptionMessage( @@ -1736,11 +1689,9 @@ public function a_second_factor_cannot_be_vetted_without_physical_prove_of_posse ]); } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function an_identity_can_express_its_locale_preference(): void { $command = new ExpressLocalePreferenceCommand(); @@ -1768,11 +1719,9 @@ public function an_identity_can_express_its_locale_preference(): void ]); } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function an_identity_can_send_registration_mail(): void { $command = new SendSecondFactorRegistrationEmailCommand(); @@ -1802,11 +1751,9 @@ public function an_identity_can_send_registration_mail(): void ->then([]); // No event is emanated from this command } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function an_identity_cannot_express_a_preference_for_an_unsupported_locale(): void { $this->expectExceptionMessage("Given locale \"fi_FI\" is not a supported locale"); @@ -1834,11 +1781,9 @@ public function an_identity_cannot_express_a_preference_for_an_unsupported_local ->when($command); } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function an_identity_can_express_its_locale_preference_more_than_one_time(): void { $command = new ExpressLocalePreferenceCommand(); @@ -1868,11 +1813,9 @@ public function an_identity_can_express_its_locale_preference_more_than_one_time ]); } - /** - * @test - * @group command-handler - * @runInSeparateProcess - */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function a_second_factor_can_be_self_vetted(): void { $command = new SelfVetSecondFactorCommand(); @@ -1996,12 +1939,12 @@ public function a_second_factor_can_be_self_vetted(): void } /** - * @test - * @group command-handler - * @runInSeparateProcess * * @todo remove this test once we drop BC support for SelfService 3.5 */ + #[Test] + #[RunInSeparateProcess] + #[Group('command-handler')] public function a_second_factor_can_be_self_vetted_using_old_authoringSecondFactorIdentifier_command_property(): void { $command = new SelfVetSecondFactorCommand(); diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerUniqueTypeRegistrationTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerUniqueTypeRegistrationTest.php index fc52b8a8c..07669aadf 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerUniqueTypeRegistrationTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/IdentityCommandHandlerUniqueTypeRegistrationTest.php @@ -25,6 +25,9 @@ use DateTime as CoreDateTime; use Mockery as m; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses; +use PHPUnit\Framework\Attributes\Test; use Psr\Log\LoggerInterface; use Surfnet\Stepup\Configuration\Value\AllowedSecondFactorList; use Surfnet\Stepup\DateTime\DateTime; @@ -66,14 +69,12 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Command\ProveYubikeyPossessionCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\CommandHandler\IdentityCommandHandler; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Service\RegistrationMailService; -use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTest; +use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTestBase; use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\DateTimeHelper; use function md5; -/** - * @runTestsInSeparateProcesses - */ -class IdentityCommandHandlerUniqueTypeRegistrationTest extends CommandHandlerTest +#[RunTestsInSeparateProcesses] +class IdentityCommandHandlerUniqueTypeRegistrationTest extends CommandHandlerTestBase { private static int $window = 3600; @@ -134,9 +135,7 @@ protected function createCommandHandler( ); } - /** - * @group command-handler - */ + #[Group('command-handler')] public function test_yubikey_type_cannot_be_proven_if_type_already_exists(): void { $this->expectException(DomainException::class); @@ -194,9 +193,7 @@ public function test_yubikey_type_cannot_be_proven_if_type_already_exists(): voi ->when($command); } - /** - * @group command-handler - */ + #[Group('command-handler')] public function test_phone_type_cannot_be_proven_if_type_already_exists(): void { $this->expectException(DomainException::class); @@ -255,9 +252,7 @@ public function test_phone_type_cannot_be_proven_if_type_already_exists(): void } - /** - * @group command-handler - */ + #[Group('command-handler')] public function test_gssf_type_cannot_be_proven_if_type_already_exists(): void { $this->expectException(DomainException::class); @@ -322,10 +317,8 @@ public function test_gssf_type_cannot_be_proven_if_type_already_exists(): void } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function test_u2f_type_cannot_be_proven_if_type_already_exists(): void { $this->expectException(DomainException::class); @@ -402,7 +395,7 @@ public function test_token_can_not_be_moved_if_type_already_exists(): void $command->sourceSecondFactorId = $this->uuid(); $command->targetSecondFactorId = $this->uuid(); - $secFacId = new SecondFactorId( $this->uuid()); + $secFacId = new SecondFactorId($this->uuid()); $yubikeySecFacId = new YubikeyPublicId('00000011'); $sourceRegistrantId = new IdentityId($command->sourceIdentityId); @@ -470,5 +463,4 @@ public function test_token_can_not_be_moved_if_type_already_exists(): void ->when($command) ->then([]); } - } diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/RegistrationAuthorityCommandHandlerTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/RegistrationAuthorityCommandHandlerTest.php index c990989d0..ffaed7823 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/RegistrationAuthorityCommandHandlerTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/RegistrationAuthorityCommandHandlerTest.php @@ -19,12 +19,13 @@ namespace Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\Identity\CommandHandler; use Broadway\CommandHandling\CommandHandler; -use Broadway\CommandHandling\CommandHandlerInterface; use Broadway\EventHandling\EventBus as EventBusInterface; use Broadway\EventSourcing\AggregateFactory\PublicConstructorAggregateFactory; use Broadway\EventStore\EventStore as EventStoreInterface; use Mockery as m; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use Psr\Log\LoggerInterface; use Surfnet\Stepup\Configuration\EventSourcing\InstitutionConfigurationRepository; use Surfnet\Stepup\Configuration\InstitutionConfiguration; @@ -58,9 +59,9 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Command\RetractRegistrationAuthorityCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\CommandHandler\RegistrationAuthorityCommandHandler; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Service\VettingTypeHintService; -use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTest; +use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTestBase; -class RegistrationAuthorityCommandHandlerTest extends CommandHandlerTest +class RegistrationAuthorityCommandHandlerTest extends CommandHandlerTestBase { private MockInterface&InstitutionConfigurationRepository $institutionConfigurationRepositoryMock; @@ -104,11 +105,9 @@ protected function createCommandHandler( ); } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function an_identity_cannot_be_accredited_for_another_institution_than_configured(): void { $this->expectExceptionMessage("An Identity may only be accredited by configured institutions"); @@ -159,11 +158,9 @@ public function an_identity_cannot_be_accredited_for_another_institution_than_co ->when($command); } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function an_identity_cannot_be_accredited_when_it_does_not_have_a_vetted_second_factor(): void { $this->expectExceptionMessage( @@ -204,11 +201,9 @@ public function an_identity_cannot_be_accredited_when_it_does_not_have_a_vetted_ } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function an_identity_cannot_be_accredited_when_it_already_has_been_accredited(): void { $this->expectExceptionMessage("Cannot accredit Identity as it has already been accredited for institution"); @@ -268,11 +263,9 @@ public function an_identity_cannot_be_accredited_when_it_already_has_been_accred ->when($command); } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function an_identity_cannot_be_accredited_with_an_invalid_role(): void { $this->expectException(RuntimeException::class); @@ -320,11 +313,9 @@ public function an_identity_cannot_be_accredited_with_an_invalid_role(): void ->when($command); } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function an_identity_can_be_accredited_with_ra_role(): void { $command = new AccreditIdentityCommand(); @@ -386,11 +377,9 @@ public function an_identity_can_be_accredited_with_ra_role(): void ]); } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function an_identity_can_be_accredited_with_raa_role(): void { $command = new AccreditIdentityCommand(); @@ -454,11 +443,9 @@ public function an_identity_can_be_accredited_with_raa_role(): void ); } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function a_registration_authoritys_information_can_be_amended(): void { $command = new AmendRegistrationAuthorityInformationCommand(); @@ -523,11 +510,9 @@ public function a_registration_authoritys_information_can_be_amended(): void ); } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function an_identitys_registration_authority_information_cannot_be_amended(): void { $this->expectExceptionMessage( @@ -576,11 +561,9 @@ public function an_identitys_registration_authority_information_cannot_be_amende ->when($command); } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function an_identity_without_vetted_second_factor_may_not_be_accredited_as_ra(): void { $this->expectExceptionMessage( @@ -621,11 +604,9 @@ public function an_identity_without_vetted_second_factor_may_not_be_accredited_a ->when($command); } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function an_identity_with_a_vetted_second_factor_can_be_accredited_as_ra(): void { $command = new AccreditIdentityCommand(); @@ -687,11 +668,9 @@ public function an_identity_with_a_vetted_second_factor_can_be_accredited_as_ra( ]); } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function an_identity_cannot_be_accredited_twice(): void { $this->expectExceptionMessage("Cannot accredit Identity as it has already been accredited for institution"); @@ -751,11 +730,9 @@ public function an_identity_cannot_be_accredited_twice(): void ->when($command); } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function an_identity_cannot_be_accredited_as_sraa(): void { $this->expectException(RuntimeException::class); @@ -802,11 +779,9 @@ public function an_identity_cannot_be_accredited_as_sraa(): void ->when($command); } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function an_identity_that_is_accredited_as_raa_can_be_appointed_as_ra(): void { $command = new AppointRoleCommand(); @@ -868,11 +843,9 @@ public function an_identity_that_is_accredited_as_raa_can_be_appointed_as_ra(): ]); } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function an_identity_that_is_accredited_as_ra_can_be_appointed_as_raa(): void { $command = new AppointRoleCommand(); @@ -935,11 +908,9 @@ public function an_identity_that_is_accredited_as_ra_can_be_appointed_as_raa(): ]); } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function an_unaccredited_identity_cannot_be_appointed_a_registration_authority_role(): void { $this->expectExceptionMessage( @@ -989,11 +960,9 @@ public function an_unaccredited_identity_cannot_be_appointed_a_registration_auth ->when($command); } - /** - * @test - * @group command-handler - * @group ra-command-handler - */ + #[Test] + #[Group('command-handler')] + #[Group('ra-command-handler')] public function an_unaccredited_identity_cannot_have_its_registration_authority_retracted(): void { $this->expectExceptionMessage( diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/RightToBeForgottenCommandHandlerTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/RightToBeForgottenCommandHandlerTest.php index fef449cc0..1c7dc34fc 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/RightToBeForgottenCommandHandlerTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/RightToBeForgottenCommandHandlerTest.php @@ -22,9 +22,12 @@ use Broadway\EventHandling\EventBus as EventBusInterface; use Broadway\EventSourcing\AggregateFactory\PublicConstructorAggregateFactory; use Broadway\EventStore\EventStore as EventStoreInterface; -use Mockery\Matcher\IsEqual; use Mockery as m; +use Mockery\Matcher\IsEqual; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses; +use PHPUnit\Framework\Attributes\Test; use Psr\Log\LoggerInterface; use Surfnet\Stepup\Exception\DomainException; use Surfnet\Stepup\Helper\UserDataFilterInterface; @@ -46,17 +49,16 @@ use Surfnet\Stepup\Identity\Value\SecondFactorId; use Surfnet\Stepup\Identity\Value\YubikeyPublicId; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\Identity; +use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\IdentityRepository as ConcreteIdentityRepository; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\SraaRepository; use Surfnet\StepupMiddleware\CommandHandlingBundle\Exception\RuntimeException; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Command\ForgetIdentityCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\CommandHandler\RightToBeForgottenCommandHandler; use Surfnet\StepupMiddleware\CommandHandlingBundle\SensitiveData\Service\SensitiveDataService; -use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTest; +use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTestBase; -/** - * @runTestsInSeparateProcesses - */ -class RightToBeForgottenCommandHandlerTest extends CommandHandlerTest +#[RunTestsInSeparateProcesses] +class RightToBeForgottenCommandHandlerTest extends CommandHandlerTestBase { /** @var MockInterface */ private MockInterface $apiIdentityRepository; @@ -74,7 +76,7 @@ protected function createCommandHandler( $aggregateFactory = new PublicConstructorAggregateFactory(); $this->apiIdentityRepository = m::mock( - \Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\IdentityRepository::class, + ConcreteIdentityRepository::class, ); $this->sensitiveDataService = m::mock(SensitiveDataService::class); $this->sraaRepository = m::mock(SraaRepository::class); @@ -96,11 +98,9 @@ protected function createCommandHandler( ); } - /** - * @test - * @group command-handler - * @group sensitive-data - */ + #[Test] + #[Group('command-handler')] + #[Group('sensitive-data')] public function an_identity_can_be_forgotten(): void { $identityId = new IdentityId('A'); @@ -155,11 +155,9 @@ public function an_identity_can_be_forgotten(): void ]); } - /** - * @test - * @group command-handler - * @group sensitive-data - */ + #[Test] + #[Group('command-handler')] + #[Group('sensitive-data')] public function an_identity_may_be_forgotten_twice(): void { $identityId = new IdentityId('A'); @@ -215,11 +213,9 @@ public function an_identity_may_be_forgotten_twice(): void ]); } - /** - * @test - * @group command-handler - * @group sensitive-data - */ + #[Test] + #[Group('command-handler')] + #[Group('sensitive-data')] public function an_ra_cannot_be_forgotten(): void { $this->expectExceptionMessage("Cannot forget an identity that is currently accredited as an RA(A)"); @@ -277,11 +273,9 @@ public function an_ra_cannot_be_forgotten(): void ->when($command); } - /** - * @test - * @group command-handler - * @group sensitive-data - */ + #[Test] + #[Group('command-handler')] + #[Group('sensitive-data')] public function an_raa_cannot_be_forgotten(): void { $this->expectExceptionMessage("Cannot forget an identity that is currently accredited as an RA(A)"); @@ -340,11 +334,9 @@ public function an_raa_cannot_be_forgotten(): void ->when($command); } - /** - * @test - * @group command-handler - * @group sensitive-data - */ + #[Test] + #[Group('command-handler')] + #[Group('sensitive-data')] public function an_sraa_cannot_be_forgotten(): void { $this->expectExceptionMessage("Cannot forget an identity that is currently accredited as an SRAA"); diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/SecondFactorRevocationTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/SecondFactorRevocationTest.php index 80253a852..0c1a65f88 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/SecondFactorRevocationTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/SecondFactorRevocationTest.php @@ -23,6 +23,9 @@ use Broadway\EventSourcing\AggregateFactory\PublicConstructorAggregateFactory; use Broadway\EventStore\EventStore as EventStoreInterface; use Mockery as m; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses; +use PHPUnit\Framework\Attributes\Test; use Psr\Log\LoggerInterface; use Surfnet\Stepup\DateTime\DateTime; use Surfnet\Stepup\Helper\RecoveryTokenSecretHelper; @@ -67,12 +70,10 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Command\RevokeRegistrantsSecondFactorCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\CommandHandler\IdentityCommandHandler; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Service\RegistrationMailService; -use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTest; +use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTestBase; -/** - * @runTestsInSeparateProcesses - */ -class SecondFactorRevocationTest extends CommandHandlerTest +#[RunTestsInSeparateProcesses] +class SecondFactorRevocationTest extends CommandHandlerTestBase { private static int $window = 3600; @@ -104,10 +105,8 @@ protected function createCommandHandler( ); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function an_identity_can_revoke_its_own_unverified_second_factor(): void { $command = new RevokeOwnSecondFactorCommand(); @@ -160,10 +159,8 @@ public function an_identity_can_revoke_its_own_unverified_second_factor(): void ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function an_identity_can_revoke_its_own_verified_second_factor(): void { $command = new RevokeOwnSecondFactorCommand(); @@ -228,10 +225,8 @@ public function an_identity_can_revoke_its_own_verified_second_factor(): void ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function an_identity_can_revoke_its_own_vetted_second_factor(): void { $command = new RevokeOwnSecondFactorCommand(); @@ -314,10 +309,8 @@ public function an_identity_can_revoke_its_own_vetted_second_factor(): void ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function a_registration_authority_can_revoke_an_unverified_second_factor(): void { $command = new RevokeRegistrantsSecondFactorCommand(); @@ -400,10 +393,8 @@ public function a_registration_authority_can_revoke_an_unverified_second_factor( ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function a_registration_authority_can_revoke_a_verified_second_factor(): void { $command = new RevokeRegistrantsSecondFactorCommand(); @@ -499,10 +490,8 @@ public function a_registration_authority_can_revoke_a_verified_second_factor(): ]); } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function a_registration_authority_can_revoke_a_vetted_second_factor(): void { $command = new RevokeRegistrantsSecondFactorCommand(); @@ -615,10 +604,8 @@ public function a_registration_authority_can_revoke_a_vetted_second_factor(): vo } - /** - * @test - * @group command-handler - */ + #[Test] + #[Group('command-handler')] public function a_registration_authority_can_revoke_a_possession_proved_skipped_vetted_second_factor(): void { $command = new RevokeRegistrantsSecondFactorCommand(); @@ -732,9 +719,9 @@ public function a_registration_authority_can_revoke_a_possession_proved_skipped_ /** * Test if the VettedSecondFactorsAllRevokedEvent is not triggered with multiple 2fa's - * @test - * @group command-handler */ + #[Test] + #[Group('command-handler')] public function a_registration_authority_can_revoke_one_of_multiple_vetted_second_factors(): void { $command = new RevokeRegistrantsSecondFactorCommand(); diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/WhitelistCommandHandlerTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/WhitelistCommandHandlerTest.php index c407c752b..cded32d36 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/WhitelistCommandHandlerTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Identity/CommandHandler/WhitelistCommandHandlerTest.php @@ -22,6 +22,8 @@ use Broadway\EventHandling\EventBus as EventBusInterface; use Broadway\EventSourcing\AggregateFactory\PublicConstructorAggregateFactory; use Broadway\EventStore\EventStore as EventStoreInterface; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use Surfnet\Stepup\Exception\DomainException; use Surfnet\Stepup\Identity\Collection\InstitutionCollection; use Surfnet\Stepup\Identity\Event\InstitutionsAddedToWhitelistEvent; @@ -35,9 +37,9 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Command\RemoveFromWhitelistCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Command\ReplaceWhitelistCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\CommandHandler\WhitelistCommandHandler; -use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTest; +use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\CommandHandlerTestBase; -class WhitelistCommandHandlerTest extends CommandHandlerTest +class WhitelistCommandHandlerTest extends CommandHandlerTestBase { /** * Shorthand for fixed Whitelist ID. @@ -53,11 +55,9 @@ protected function createCommandHandler( return new WhitelistCommandHandler(new WhitelistRepository($eventStore, $eventBus, $aggregateFactory)); } - /** - * @test - * @group command-handler - * @group whitelist - */ + #[Test] + #[Group('command-handler')] + #[Group('whitelist')] public function when_the_whitelist_does_not_exist_yet_it_is_created(): void { $command = new ReplaceWhitelistCommand(); @@ -72,11 +72,9 @@ public function when_the_whitelist_does_not_exist_yet_it_is_created(): void ]); } - /** - * @test - * @group command-handler - * @group whitelist - */ + #[Test] + #[Group('command-handler')] + #[Group('whitelist')] public function the_whitelist_can_be_fully_replaced(): void { $initialInstitutions = $this->mapStringValuesToInstitutions(['Initial One', 'Initial Two']); @@ -96,11 +94,9 @@ public function the_whitelist_can_be_fully_replaced(): void } - /** - * @test - * @group command-handler - * @group whitelist - */ + #[Test] + #[Group('command-handler')] + #[Group('whitelist')] public function an_institution_not_yet_on_the_whitelist_can_be_added_to_the_whitelist(): void { $initialInstitutions = $this->mapStringValuesToInstitutions(['Initial One', 'Initial Two']); @@ -119,11 +115,9 @@ public function an_institution_not_yet_on_the_whitelist_can_be_added_to_the_whit ]); } - /** - * @test - * @group command-handler - * @group whitelist - */ + #[Test] + #[Group('command-handler')] + #[Group('whitelist')] public function an_institution_on_the_whitelist_may_not_be_added_again(): void { $this->expectExceptionMessage("Cannot add institution \"already exists\" as it is already whitelisted"); @@ -140,11 +134,9 @@ public function an_institution_on_the_whitelist_may_not_be_added_again(): void ->when($command); } - /** - * @test - * @group command-handler - * @group whitelist - */ + #[Test] + #[Group('command-handler')] + #[Group('whitelist')] public function an_institution_on_the_whitelist_can_be_removed_from_the_whitelist(): void { $initialInstitutions = $this->mapStringValuesToInstitutions(['Initial One', 'On the whitelist']); @@ -163,11 +155,9 @@ public function an_institution_on_the_whitelist_can_be_removed_from_the_whitelis ]); } - /** - * @test - * @group command-handler - * @group whitelist - */ + #[Test] + #[Group('command-handler')] + #[Group('whitelist')] public function an_institution_that_is_not_on_the_whitelist_cannot_be_removed(): void { $this->expectExceptionMessage("Cannot remove institution \"not on the whitelist\" as it is not whitelisted"); @@ -185,10 +175,10 @@ public function an_institution_that_is_not_on_the_whitelist_cannot_be_removed(): /** * Helper function to quickly map String[] to Institution[] - * @return array + * @return list $institutions */ private function mapStringValuesToInstitutions(array $institutions): array { - return array_map(fn($institution): Institution => new Institution($institution), $institutions); + return array_values(array_map(static fn($institution): Institution => new Institution($institution), $institutions)); } } diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Mockery/HasInstitutionMatcher.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Mockery/HasInstitutionMatcher.php index 7e4d28679..826385168 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Mockery/HasInstitutionMatcher.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Mockery/HasInstitutionMatcher.php @@ -18,7 +18,6 @@ namespace Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\Mockery; -use Mockery\Exception\RuntimeException; use Mockery\Matcher\MatcherAbstract; final class HasInstitutionMatcher extends MatcherAbstract diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Mockery/HasInstitutionMatcherTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Mockery/HasInstitutionMatcherTest.php index b19a6bcb4..546df3c79 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Mockery/HasInstitutionMatcherTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Mockery/HasInstitutionMatcherTest.php @@ -19,25 +19,23 @@ namespace Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\Mockery; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use Mockery\Exception\RuntimeException; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use stdClass; use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\Mockery\TestObjects\ObjectWithInstitutionAccessor; use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\Mockery\TestObjects\ObjectWithInstitutionProperty; use Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\Mockery\TestObjects\ObjectWithoutInstitutionPropertyAndAccessor; -use TypeError; class HasInstitutionMatcherTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group mockery - * @group institution - * - * @dataProvider nonObjectProvider - */ + #[Test] + #[DataProvider('nonObjectProvider')] + #[Group('mockery')] + #[Group('institution')] public function has_institution_matcher_only_matches_objects_against_a_given_institution( bool|int|float|string|array|null $nonObject, ): void { @@ -49,11 +47,9 @@ public function has_institution_matcher_only_matches_objects_against_a_given_ins $this->assertFalse($match); } - /** - * @test - * @group mockery - * @group institution - */ + #[Test] + #[Group('mockery')] + #[Group('institution')] public function has_institution_matcher_does_not_match_when_object_has_no_institution_property_and_no_institution_accessor(): void { $institution = 'surfnet.nl'; @@ -66,11 +62,9 @@ public function has_institution_matcher_does_not_match_when_object_has_no_instit $this->assertFalse($match); } - /** - * @test - * @group mockery - * @group institution - */ + #[Test] + #[Group('mockery')] + #[Group('institution')] public function has_institution_matcher_does_not_match_when_objects_accessed_institution_differs_from_given_institution(): void { $institution = 'surfnet.nl'; @@ -84,11 +78,9 @@ public function has_institution_matcher_does_not_match_when_objects_accessed_ins $this->assertFalse($match); } - /** - * @test - * @group mockery - * @group institution - */ + #[Test] + #[Group('mockery')] + #[Group('institution')] public function has_institution_matcher_matches_when_objects_accessed_institution_is_the_same_as_given_institution(): void { $institution = 'surfnet.nl'; @@ -101,11 +93,9 @@ public function has_institution_matcher_matches_when_objects_accessed_institutio $this->assertTrue($match); } - /** - * @test - * @group mockery - * @group institution - */ + #[Test] + #[Group('mockery')] + #[Group('institution')] public function has_institution_matcher_does_not_match_when_objects_institution_property_differs_from_given_institution(): void { $institution = 'surfnet.nl'; @@ -119,11 +109,9 @@ public function has_institution_matcher_does_not_match_when_objects_institution_ $this->assertFalse($match); } - /** - * @test - * @group mockery - * @group institution - */ + #[Test] + #[Group('mockery')] + #[Group('institution')] public function has_institution_matcher_matches_when_objects_institution_property_is_the_same_as_given_institution(): void { $institution = 'surfnet.nl'; @@ -148,7 +136,7 @@ public function nonStringProvider(): array ]; } - public function nonObjectProvider(): array + public static function nonObjectProvider(): array { return [ 'null' => [null], diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/AuthorizingStageTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/AuthorizingStageTest.php index 287e52dee..654b6623b 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/AuthorizingStageTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/AuthorizingStageTest.php @@ -21,6 +21,9 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Psr\Log\NullLogger; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\AbstractCommand; @@ -47,10 +50,8 @@ public function setUp(): void ); } - /** - * @test - * @group pipeline - */ + #[Test] + #[Group('pipeline')] public function when_a_command_has_no_marker_interface_authorization_is_granted_by_default(): void { $command = m::mock(AbstractCommand::class); @@ -63,11 +64,9 @@ public function when_a_command_has_no_marker_interface_authorization_is_granted_ $this->assertInstanceOf(AuthorizingStage::class, $authorizingStage); } - /** - * @test - * @group pipeline - * @dataProvider interfaceToRoleMappingProvider - */ + #[Test] + #[DataProvider('interfaceToRoleMappingProvider')] + #[Group('pipeline')] public function a_command_with_a_marker_interface_triggers_a_check_for_the_correct_role( string $interface, string $role, @@ -87,10 +86,8 @@ public function a_command_with_a_marker_interface_triggers_a_check_for_the_corre $this->assertInstanceOf(AuthorizingStage::class, $authorizingStage); } - /** - * @test - * @group pipeline - */ + #[Test] + #[Group('pipeline')] public function when_a_command_implements_multiple_marker_interfaces_at_least_one_corresponding_role_is_required(): void { /** @var AbstractCommand&SelfServiceExecutable&RaExecutable&ManagementExecutable&MockInterface $command */ @@ -126,10 +123,8 @@ public function when_a_command_implements_multiple_marker_interfaces_at_least_on $this->assertInstanceOf(AuthorizingStage::class, $authorizingStage); } - /** - * @test - * @group pipeline - */ + #[Test] + #[Group('pipeline')] public function when_the_client_does_not_have_the_required_role_an_forbidden_exception_is_thrown(): void { $this->expectException(ForbiddenException::class); @@ -156,7 +151,7 @@ public function when_the_client_does_not_have_the_required_role_an_forbidden_exc $this->assertInstanceOf(AuthorizingStage::class, $authorizingStage); } - public function interfaceToRoleMappingProvider(): array + public static function interfaceToRoleMappingProvider(): array { return [ 'SelfServiceExecutable => ROLE_SS' => [ diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/DispatchStageTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/DispatchStageTest.php index 9d75430f7..6b177f64f 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/DispatchStageTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/DispatchStageTest.php @@ -22,20 +22,19 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Log\NullLogger; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\AbstractCommand; -use Surfnet\StepupMiddleware\CommandHandlingBundle\EventHandling\BufferedEventBus; use Surfnet\StepupMiddleware\CommandHandlingBundle\Pipeline\DispatchStage; class DispatchStageTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group pipeline - */ + #[Test] + #[Group('pipeline')] public function it_dispatches_commands(): void { $command = m::mock(AbstractCommand::class); diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/EventDispatchingStageTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/EventDispatchingStageTest.php index c6fa4d44e..cac0b37f8 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/EventDispatchingStageTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/EventDispatchingStageTest.php @@ -21,6 +21,8 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Psr\Log\NullLogger; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\AbstractCommand; @@ -32,10 +34,8 @@ class EventDispatchingStageTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group pipeline - */ + #[Test] + #[Group('pipeline')] public function buffered_event_bus_flush_is_called_during_process(): void { $command = m::mock(AbstractCommand::class); @@ -50,10 +50,8 @@ public function buffered_event_bus_flush_is_called_during_process(): void $this->assertInstanceOf(EventDispatchingStage::class, $stage); } - /** - * @test - * @group pipeline - */ + #[Test] + #[Group('pipeline')] public function it_returns_the_same_command_as_it_processes_unmodified(): void { $command = new FixedUuidStubCommand(); diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/StagedPipelineTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/StagedPipelineTest.php index d3b791345..4cad91869 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/StagedPipelineTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/StagedPipelineTest.php @@ -21,6 +21,8 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Log\NullLogger; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\AbstractCommand; @@ -31,10 +33,8 @@ class StagedPipelineTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group pipeline - */ + #[Test] + #[Group('pipeline')] public function it_passes_a_command_through_a_single_stage(): void { $command = m::mock(AbstractCommand::class); @@ -49,10 +49,8 @@ public function it_passes_a_command_through_a_single_stage(): void $this->assertSame($command, $pipeline->process($command)); } - /** - * @test - * @group pipeline - */ + #[Test] + #[Group('pipeline')] public function it_passes_a_command_through_multiple_stages(): void { $command = m::mock(AbstractCommand::class); @@ -72,10 +70,8 @@ public function it_passes_a_command_through_multiple_stages(): void $this->assertSame($command, $pipeline->process($command)); } - /** - * @test - * @group pipeline - */ + #[Test] + #[Group('pipeline')] public function it_passes_the_command_returned_from_an_earlier_stage_on_to_the_next(): void { $command1 = m::mock(AbstractCommand::class); diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/ValidationStageTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/ValidationStageTest.php index c8e24da65..3fc5b972a 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/ValidationStageTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Pipeline/ValidationStageTest.php @@ -22,6 +22,8 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Psr\Log\NullLogger; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\AbstractCommand; @@ -34,10 +36,8 @@ class ValidationStageTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group pipeline - */ + #[Test] + #[Group('pipeline')] public function it_validates_commands(): void { $command = m::mock(AbstractCommand::class); @@ -54,10 +54,8 @@ public function it_validates_commands(): void $this->assertSame($command, $stage->process($command)); } - /** - * @test - * @group pipeline - */ + #[Test] + #[Group('pipeline')] public function it_throws_an_exception_when_validation_fails(): void { $this->expectException(InvalidCommandException::class); diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Processor/RecoveryTokenEmailProcessorTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Processor/RecoveryTokenEmailProcessorTest.php index add7b0c48..1a00de3ca 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Processor/RecoveryTokenEmailProcessorTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Processor/RecoveryTokenEmailProcessorTest.php @@ -20,6 +20,7 @@ use Mockery; use Mockery\MockInterface; +use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Identity\Event\CompliedWithRecoveryCodeRevocationEvent; use Surfnet\Stepup\Identity\Event\PhoneRecoveryTokenPossessionProvenEvent; @@ -60,9 +61,7 @@ public function setUp(): void ); } - /** - * @group processor - */ + #[Group('processor')] public function test_mails_when_complied_with_recovery_token_revocation(): void { $identity = $this->returnABogusIdentity(); @@ -92,9 +91,7 @@ public function test_mails_when_complied_with_recovery_token_revocation(): void $this->processor->handleCompliedWithRecoveryCodeRevocationEvent($event); } - /** - * @group processor - */ + #[Group('processor')] public function test_does_not_mail_when_identity_not_found_complied_with_recovery_token_revocation(): void { $this->identityService @@ -114,9 +111,7 @@ public function test_does_not_mail_when_identity_not_found_complied_with_recover $this->processor->handleCompliedWithRecoveryCodeRevocationEvent($event); } - /** - * @group processor - */ + #[Group('processor')] public function test_it_mails_when_recovery_token_revoked_by_identity(): void { $identity = $this->returnABogusIdentity(); @@ -145,9 +140,7 @@ public function test_it_mails_when_recovery_token_revoked_by_identity(): void $this->processor->handleRecoveryTokenRevokedEvent($event); } - /** - * @group processor - */ + #[Group('processor')] public function test_does_not_mail_when_identity_not_found_recovery_token_revocation(): void { $this->identityService @@ -166,9 +159,7 @@ public function test_does_not_mail_when_identity_not_found_recovery_token_revoca $this->processor->handleRecoveryTokenRevokedEvent($event); } - /** - * @group processor - */ + #[Group('processor')] public function test_it_mails_when_sms_token_created(): void { $identity = $this->returnABogusIdentity(); @@ -197,9 +188,7 @@ public function test_it_mails_when_sms_token_created(): void $this->processor->handlePhoneRecoveryTokenPossessionProvenEvent($event); } - /** - * @group processor - */ + #[Group('processor')] public function test_does_not_mail_when_identity_not_found_sms_creation(): void { $this->identityService @@ -221,9 +210,7 @@ public function test_does_not_mail_when_identity_not_found_sms_creation(): void $this->processor->handlePhoneRecoveryTokenPossessionProvenEvent($event); } - /** - * @group processor - */ + #[Group('processor')] public function test_it_mails_when_safe_store_token_created(): void { $identity = $this->returnABogusIdentity(); @@ -252,9 +239,7 @@ public function test_it_mails_when_safe_store_token_created(): void $this->processor->handleSafeStoreSecretRecoveryTokenPossessionPromisedEvent($event); } - /** - * @group processor - */ + #[Group('processor')] public function test_does_not_mail_when_identity_not_found_safe_store_creation(): void { $this->identityService diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/EventSourcing/SensitiveDataMessageStreamTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/EventSourcing/SensitiveDataMessageStreamTest.php index 490cd8f8e..7fa9d25bf 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/EventSourcing/SensitiveDataMessageStreamTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/EventSourcing/SensitiveDataMessageStreamTest.php @@ -25,7 +25,10 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\MockInterface; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\DoesNotPerformAssertions; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Identity\Value\CommonName; use Surfnet\Stepup\Identity\Value\Email; use Surfnet\Stepup\Identity\Value\IdentityId; @@ -41,21 +44,16 @@ final class SensitiveDataMessageStreamTest extends TestCase public const EVENT_STREAM_A = 'A'; public const EVENT_STREAM_B = 'B'; - /** - * @test - * @group sensitive-data - */ + #[Test] + #[DoesNotPerformAssertions] + #[Group('sensitive-data')] public function it_can_work_with_zero_sensitive_data_messages_and_zero_events(): void { $this->apply([], []); - - $this->assertTrue(true); } - /** - * @test - * @group sensitive-data - */ + #[Test] + #[Group('sensitive-data')] public function it_can_apply_one_sensitive_data_message_to_one_matching_event(): void { $sensitiveDataMessages = [ @@ -79,10 +77,8 @@ public function it_can_apply_one_sensitive_data_message_to_one_matching_event(): $this->assertSensitiveDataEquals($sensitiveDataMessages[0], $domainMessages[0]); } - /** - * @test - * @group sensitive-data - */ + #[Test] + #[Group('sensitive-data')] public function it_can_apply_two_sensitive_data_message_to_two_matching_events(): void { $sensitiveDataMessages = [ @@ -119,10 +115,8 @@ public function it_can_apply_two_sensitive_data_message_to_two_matching_events() $this->assertSensitiveDataEquals($sensitiveDataMessages[1], $domainMessages[1]); } - /** - * @test - * @group sensitive-data - */ + #[Test] + #[Group('sensitive-data')] public function it_can_apply_one_sensitive_data_message_to_one_regular_event_and_one_matching_forgettable_event(): void { $sensitiveDataMessages = [ @@ -153,10 +147,8 @@ public function it_can_apply_one_sensitive_data_message_to_one_regular_event_and $this->assertSensitiveDataEquals($sensitiveDataMessages[0], $domainMessages[1]); } - /** - * @test - * @group sensitive-data - */ + #[Test] + #[Group('sensitive-data')] public function it_fails_when_sensitive_data_is_missing_for_an_event(): void { $this->expectExceptionMessage("Sensitive data is missing for event with UUID A, playhead 0"); @@ -176,10 +168,8 @@ public function it_fails_when_sensitive_data_is_missing_for_an_event(): void $this->apply($sensitiveDataMessages, $domainMessages); } - /** - * @test - * @group sensitive-data - */ + #[Test] + #[Group('sensitive-data')] public function it_fails_when_not_all_sensitive_data_could_be_matched_to_an_event(): void { $this->expectExceptionMessage("1 sensitive data messages are still to be matched to events"); @@ -204,10 +194,8 @@ public function it_fails_when_not_all_sensitive_data_could_be_matched_to_an_even $this->apply($sensitiveDataMessages, $domainMessages); } - /** - * @test - * @group sensitive-data - */ + #[Test] + #[Group('sensitive-data')] public function it_fails_when_sensitive_data_matches_a_regular_event(): void { $this->expectExceptionMessage( @@ -235,10 +223,8 @@ public function it_fails_when_sensitive_data_matches_a_regular_event(): void $this->apply($sensitiveDataMessages, $domainMessages); } - /** - * @test - * @group sensitive-data - */ + #[Test] + #[Group('sensitive-data')] public function it_fails_when_stream_ids_dont_match(): void { $this->expectExceptionMessage("Encountered sensitive data from stream A for event from stream B"); @@ -264,10 +250,8 @@ public function it_fails_when_stream_ids_dont_match(): void $this->apply($sensitiveDataMessages, $domainMessages); } - /** - * @test - * @group sensitive-data - */ + #[Test] + #[Group('sensitive-data')] public function it_can_forget_all_sensitive_data(): void { /** @var MockInterface&SensitiveDataMessage $command */ diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/SensitiveDataTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/SensitiveDataTest.php index 8fe429397..702730580 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/SensitiveDataTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/SensitiveDataTest.php @@ -19,7 +19,10 @@ namespace Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\SensitiveData; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Identity\Value\CommonName; use Surfnet\Stepup\Identity\Value\DocumentNumber; use Surfnet\Stepup\Identity\Value\Email; @@ -35,7 +38,7 @@ class SensitiveDataTest extends TestCase { use MockeryPHPUnitIntegration; - public function sensitiveDataToSerialise(): array + public static function sensitiveDataToSerialise(): array { return [ 'None' => [ @@ -103,11 +106,9 @@ public function sensitiveDataToSerialise(): array ]; } - /** - * @test - * @group sensitive-data - * @dataProvider sensitiveDataToSerialise - */ + #[Test] + #[DataProvider('sensitiveDataToSerialise')] + #[Group('sensitive-data')] public function it_serialises_and_deserialises( SensitiveData $sensitiveData, array $getterExpectations, diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/Service/SensitiveDataServiceTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/Service/SensitiveDataServiceTest.php index 96af9303a..5e335441e 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/Service/SensitiveDataServiceTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/SensitiveData/Service/SensitiveDataServiceTest.php @@ -20,7 +20,9 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\Stepup\Identity\Value\IdentityId; use Surfnet\StepupMiddleware\CommandHandlingBundle\SensitiveData\EventSourcing\SensitiveDataMessageStream; use Surfnet\StepupMiddleware\CommandHandlingBundle\SensitiveData\Repository\SensitiveDataMessageRepository; @@ -30,10 +32,8 @@ final class SensitiveDataServiceTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group sensitive-data - */ + #[Test] + #[Group('sensitive-data')] public function it_can_forget_sensitive_data_in_a_stream(): void { $identityId = new IdentityId('A'); diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Twig/BackwardsCompatibleExtensionTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Twig/BackwardsCompatibleExtensionTest.php index 02d080689..d1a5ad80d 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Twig/BackwardsCompatibleExtensionTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Twig/BackwardsCompatibleExtensionTest.php @@ -19,26 +19,30 @@ namespace Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\Twig; use DateTime; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\RequiresPhpExtension; use PHPUnit\Framework\TestCase; use Surfnet\StepupMiddleware\CommandHandlingBundle\Twig\BackwardsCompatibleExtension; use Twig\Environment; +use Twig\Extension\AttributeExtension; use Twig\Extra\Intl\IntlExtension; use Twig\Loader\ArrayLoader; +use Twig\RuntimeLoader\FactoryRuntimeLoader; -/** - * @requires extension intl - */ +#[RequiresPhpExtension('intl')] class BackwardsCompatibleExtensionTest extends TestCase { - /** - * @dataProvider templateProvider - */ + #[DataProvider('templateProvider')] public function testLocalizedData(string $template, string $expected, string $locale): void { $dateString = "2024-12-05 13:12:10"; $date = new DateTime($dateString); $twig = new Environment(new ArrayLoader(['template' => $template]), ['debug' => true, 'cache' => false, 'autoescape' => 'html', 'optimizations' => 0]); - $twig->addExtension( new BackwardsCompatibleExtension(new IntlExtension())); + + $twig->addExtension(new AttributeExtension(BackwardsCompatibleExtension::class)); + $twig->addRuntimeLoader(new FactoryRuntimeLoader([ + BackwardsCompatibleExtension::class => static fn(): BackwardsCompatibleExtension => new BackwardsCompatibleExtension(new IntlExtension()), + ])); $output = $twig->render('template', ['date' => $date, 'locale' => $locale]); $this->assertEquals($expected, $output); @@ -47,7 +51,7 @@ public function testLocalizedData(string $template, string $expected, string $lo $this->assertEquals($expected, $output); } - public function templateProvider(): array + public static function templateProvider(): array { return [ 'date en' => ["{{ date | localizeddate('full', 'none', locale) }}", 'Thursday, 5 December 2024', 'en_GB'], @@ -58,4 +62,4 @@ public function templateProvider(): array 'time en' => ["{{ date | localizeddate('none', 'medium', locale) }}", '13:12:10', 'nl_NL'], ]; } -} \ No newline at end of file +} diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Value/InstitutionTest.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Value/InstitutionTest.php index 9a0595132..041ad5741 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Value/InstitutionTest.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Tests/Value/InstitutionTest.php @@ -19,6 +19,8 @@ namespace Surfnet\StepupMiddleware\CommandHandlingBundle\Tests\Value; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase as UnitTest; use Surfnet\StepupMiddleware\CommandHandlingBundle\Exception\InvalidArgumentException; use Surfnet\StepupMiddleware\CommandHandlingBundle\Value\Institution; @@ -27,10 +29,8 @@ class InstitutionTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @dataProvider nonStringOrNonEmptyStringProvider - */ + #[Test] + #[DataProvider('nonStringOrNonEmptyStringProvider')] public function an_institution_cannot_be_created_with_anything_but_a_nonempty_string( string $invalidValue, ): void { @@ -39,9 +39,7 @@ public function an_institution_cannot_be_created_with_anything_but_a_nonempty_st new Institution($invalidValue); } - /** - * @test - */ + #[Test] public function two_institutions_with_the_same_value_are_equal(): void { $institution = new Institution('a'); @@ -54,7 +52,7 @@ public function two_institutions_with_the_same_value_are_equal(): void $this->assertFalse($institution->equals($different)); } - public function nonStringOrNonEmptyStringProvider(): array + public static function nonStringOrNonEmptyStringProvider(): array { return [ 'empty string' => [''], diff --git a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Twig/BackwardsCompatibleExtension.php b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Twig/BackwardsCompatibleExtension.php index 8c254acf9..2d9757bbe 100644 --- a/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Twig/BackwardsCompatibleExtension.php +++ b/src/Surfnet/StepupMiddleware/CommandHandlingBundle/Twig/BackwardsCompatibleExtension.php @@ -19,10 +19,9 @@ namespace Surfnet\StepupMiddleware\CommandHandlingBundle\Twig; use DateTimeInterface; +use Twig\Attribute\AsTwigFilter; use Twig\Environment; -use Twig\Extension\AbstractExtension; use Twig\Extra\Intl\IntlExtension; -use Twig\TwigFilter; /** * This class is introduced to handle BC twig changes in email templates used in the institution configuration. @@ -30,7 +29,7 @@ * * An idea was to move the email templates to disk but that would cost too much time and we still should support * * all historical events due to the nature of event sourcing. */ -class BackwardsCompatibleExtension extends AbstractExtension +class BackwardsCompatibleExtension { private IntlExtension $intlExtension; @@ -39,14 +38,8 @@ public function __construct(IntlExtension $intlExtension) $this->intlExtension = $intlExtension; } - public function getFilters(): array - { - return [ - new TwigFilter('localizeddate', [$this, 'localizedDate'], ['needs_environment' => true]), - ]; - } - // localizeddate('full', 'none', locale) + #[AsTwigFilter('localizeddate', needsEnvironment: true)] public function localizedDate( Environment $env, DateTimeInterface|string|null $date, diff --git a/src/Surfnet/StepupMiddleware/GatewayBundle/DependencyInjection/Configuration.php b/src/Surfnet/StepupMiddleware/GatewayBundle/DependencyInjection/Configuration.php index c923ebf4c..5c0cded28 100644 --- a/src/Surfnet/StepupMiddleware/GatewayBundle/DependencyInjection/Configuration.php +++ b/src/Surfnet/StepupMiddleware/GatewayBundle/DependencyInjection/Configuration.php @@ -23,6 +23,9 @@ class Configuration implements ConfigurationInterface { + /** + * @return TreeBuilder<'array'> + */ public function getConfigTreeBuilder(): TreeBuilder { return new TreeBuilder('surfnet_stepup_gateway_gateway'); diff --git a/src/Surfnet/StepupMiddleware/GatewayBundle/Entity/SecondFactor.php b/src/Surfnet/StepupMiddleware/GatewayBundle/Entity/SecondFactor.php index de35a6fef..717bf75a1 100644 --- a/src/Surfnet/StepupMiddleware/GatewayBundle/Entity/SecondFactor.php +++ b/src/Surfnet/StepupMiddleware/GatewayBundle/Entity/SecondFactor.php @@ -26,7 +26,7 @@ * WARNING: Any schema change made to this entity should also be applied to the Gateway SecondFactor entity! * @see Surfnet\StepupGateway\GatewayBundle\Entity\SecondFactor (in OpenConext/Stepup-Gateway project) * - * @SuppressWarnings(PHPMD.UnusedPrivateFields) + * @SuppressWarnings("PHPMD.UnusedPrivateFields") */ #[ORM\Table] #[ORM\Index(name: 'idx_secondfactor_nameid', columns: ['name_id'])] diff --git a/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/InstitutionConfigurationProjector.php b/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/InstitutionConfigurationProjector.php index 57362792c..1c335a56e 100644 --- a/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/InstitutionConfigurationProjector.php +++ b/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/InstitutionConfigurationProjector.php @@ -20,14 +20,14 @@ namespace Surfnet\StepupMiddleware\GatewayBundle\Projector; +use Surfnet\Stepup\Configuration\Event\InstitutionConfigurationRemovedEvent; +use Surfnet\Stepup\Configuration\Event\NewInstitutionConfigurationCreatedEvent; +use Surfnet\Stepup\Configuration\Event\SsoOn2faOptionChangedEvent; use Surfnet\Stepup\Configuration\Event\SsoRegistrationBypassOptionChangedEvent; use Surfnet\Stepup\Configuration\Value\SsoOn2faOption; use Surfnet\Stepup\Configuration\Value\SsoRegistrationBypassOption; use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; use Surfnet\Stepup\Projector\Projector; -use Surfnet\Stepup\Configuration\Event\InstitutionConfigurationRemovedEvent; -use Surfnet\Stepup\Configuration\Event\NewInstitutionConfigurationCreatedEvent; -use Surfnet\Stepup\Configuration\Event\SsoOn2faOptionChangedEvent; use Surfnet\StepupMiddleware\GatewayBundle\Entity\InstitutionConfiguration; use Surfnet\StepupMiddleware\GatewayBundle\Repository\InstitutionConfigurationRepository; diff --git a/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/SamlEntityProjector.php b/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/SamlEntityProjector.php index c3c442ec0..c00a6bba5 100644 --- a/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/SamlEntityProjector.php +++ b/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/SamlEntityProjector.php @@ -18,10 +18,10 @@ namespace Surfnet\StepupMiddleware\GatewayBundle\Projector; -use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Configuration\Event\IdentityProvidersUpdatedEvent; use Surfnet\Stepup\Configuration\Event\ServiceProvidersUpdatedEvent; +use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\GatewayBundle\Entity\SamlEntity; use Surfnet\StepupMiddleware\GatewayBundle\Entity\SamlEntityRepository; diff --git a/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/SecondFactorProjector.php b/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/SecondFactorProjector.php index 0d5bba432..a3ff3f326 100644 --- a/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/SecondFactorProjector.php +++ b/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/SecondFactorProjector.php @@ -18,7 +18,6 @@ namespace Surfnet\StepupMiddleware\GatewayBundle\Projector; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Identity\Event\CompliedWithVettedSecondFactorRevocationEvent; use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; use Surfnet\Stepup\Identity\Event\LocalePreferenceExpressedEvent; @@ -28,6 +27,7 @@ use Surfnet\Stepup\Identity\Event\VettedSecondFactorRevokedEvent; use Surfnet\Stepup\Identity\Event\YubikeySecondFactorBootstrappedEvent; use Surfnet\Stepup\Identity\Value\VettingType; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\GatewayBundle\Entity\SecondFactor; use Surfnet\StepupMiddleware\GatewayBundle\Exception\RuntimeException; use Surfnet\StepupMiddleware\GatewayBundle\Repository\SecondFactorRepository; diff --git a/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/WhitelistProjector.php b/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/WhitelistProjector.php index 7e2716429..24c08f690 100644 --- a/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/WhitelistProjector.php +++ b/src/Surfnet/StepupMiddleware/GatewayBundle/Projector/WhitelistProjector.php @@ -19,11 +19,11 @@ namespace Surfnet\StepupMiddleware\GatewayBundle\Projector; use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; -use Surfnet\Stepup\Projector\Projector; use Surfnet\Stepup\Identity\Event\InstitutionsAddedToWhitelistEvent; use Surfnet\Stepup\Identity\Event\InstitutionsRemovedFromWhitelistEvent; use Surfnet\Stepup\Identity\Event\WhitelistCreatedEvent; use Surfnet\Stepup\Identity\Event\WhitelistReplacedEvent; +use Surfnet\Stepup\Projector\Projector; use Surfnet\StepupMiddleware\GatewayBundle\Entity\WhitelistEntry; use Surfnet\StepupMiddleware\GatewayBundle\Repository\WhitelistEntryRepository; diff --git a/src/Surfnet/StepupMiddleware/GatewayBundle/Resources/config/projection.yml b/src/Surfnet/StepupMiddleware/GatewayBundle/Resources/config/projection.yml index e1106de72..673bb720a 100644 --- a/src/Surfnet/StepupMiddleware/GatewayBundle/Resources/config/projection.yml +++ b/src/Surfnet/StepupMiddleware/GatewayBundle/Resources/config/projection.yml @@ -1,4 +1,7 @@ services: + _defaults: + autoconfigure: true + surfnet_stepup_middleware_gateway.projector.institution_configuration: class: Surfnet\StepupMiddleware\GatewayBundle\Projector\InstitutionConfigurationProjector arguments: diff --git a/src/Surfnet/StepupMiddleware/GatewayBundle/Resources/config/repositories.yml b/src/Surfnet/StepupMiddleware/GatewayBundle/Resources/config/repositories.yml index 8a4fbae31..7b05f1c4d 100644 --- a/src/Surfnet/StepupMiddleware/GatewayBundle/Resources/config/repositories.yml +++ b/src/Surfnet/StepupMiddleware/GatewayBundle/Resources/config/repositories.yml @@ -1,4 +1,7 @@ services: + _defaults: + autoconfigure: true + middleware.gateway_repository.saml_entities: class: Surfnet\StepupMiddleware\GatewayBundle\Entity\SamlEntityRepository factory: [ "@doctrine.orm.gateway_entity_manager", getRepository ] diff --git a/src/Surfnet/StepupMiddleware/GatewayBundle/Tests/Projector/InstitutionConfigurationProjectorTest.php b/src/Surfnet/StepupMiddleware/GatewayBundle/Tests/Projector/InstitutionConfigurationProjectorTest.php index 93b0e5eb7..efacc391d 100644 --- a/src/Surfnet/StepupMiddleware/GatewayBundle/Tests/Projector/InstitutionConfigurationProjectorTest.php +++ b/src/Surfnet/StepupMiddleware/GatewayBundle/Tests/Projector/InstitutionConfigurationProjectorTest.php @@ -74,7 +74,7 @@ public function test_updates_existing_row_sso_on_2fa(): void new Institution('institution-a.nl'), new SsoOn2faOption(true), ); - $configuration = new InstitutionConfiguration('institution-a.nl', false,false); + $configuration = new InstitutionConfiguration('institution-a.nl', false, false); $this->repository->shouldReceive('findByInstitution')->once()->with('institution-a.nl')->andReturn($configuration); $this->repository->shouldReceive('save')->once()->withArgs( @@ -108,7 +108,7 @@ public function test_updates_existing_row_registration_bypass(): void new Institution('institution-a.nl'), new SsoRegistrationBypassOption(true), ); - $configuration = new InstitutionConfiguration('institution-a.nl', false,false); + $configuration = new InstitutionConfiguration('institution-a.nl', false, false); $this->repository->shouldReceive('findByInstitution')->once()->with('institution-a.nl')->andReturn($configuration); $this->repository->shouldReceive('save')->once()->withArgs( diff --git a/src/Surfnet/StepupMiddleware/ManagementBundle/Configuration/Projector/EmailTemplatesProjector.php b/src/Surfnet/StepupMiddleware/ManagementBundle/Configuration/Projector/EmailTemplatesProjector.php index 91cef55bd..46b0959a8 100644 --- a/src/Surfnet/StepupMiddleware/ManagementBundle/Configuration/Projector/EmailTemplatesProjector.php +++ b/src/Surfnet/StepupMiddleware/ManagementBundle/Configuration/Projector/EmailTemplatesProjector.php @@ -18,9 +18,9 @@ namespace Surfnet\StepupMiddleware\ManagementBundle\Configuration\Projector; +use Surfnet\Stepup\Configuration\Event\EmailTemplatesUpdatedEvent; use Surfnet\Stepup\Identity\Event\IdentityForgottenEvent; use Surfnet\Stepup\Projector\Projector; -use Surfnet\Stepup\Configuration\Event\EmailTemplatesUpdatedEvent; use Surfnet\StepupMiddleware\ManagementBundle\Configuration\Entity\EmailTemplate; use Surfnet\StepupMiddleware\ManagementBundle\Configuration\Repository\EmailTemplateRepository; diff --git a/src/Surfnet/StepupMiddleware/ManagementBundle/Configuration/Service/EmailTemplateService.php b/src/Surfnet/StepupMiddleware/ManagementBundle/Configuration/Service/EmailTemplateService.php index 30b5cd606..ac58d945a 100644 --- a/src/Surfnet/StepupMiddleware/ManagementBundle/Configuration/Service/EmailTemplateService.php +++ b/src/Surfnet/StepupMiddleware/ManagementBundle/Configuration/Service/EmailTemplateService.php @@ -22,6 +22,7 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Configuration\Dto\EmailTemplate; use Surfnet\StepupMiddleware\CommandHandlingBundle\Configuration\Service\EmailTemplateService as CommandHandlingEmailTemplateService; use Surfnet\StepupMiddleware\CommandHandlingBundle\Exception\RuntimeException; +use Surfnet\StepupMiddleware\ManagementBundle\Configuration\Entity\EmailTemplate as EmailTemplateEntity; use Surfnet\StepupMiddleware\ManagementBundle\Configuration\Repository\EmailTemplateRepository; final readonly class EmailTemplateService implements CommandHandlingEmailTemplateService @@ -45,7 +46,7 @@ public function findByName(string $name, string $preferredLocale, string $fallba throw new RuntimeException($e->getMessage(), 0, $e); } - if (!$emailTemplateEntity instanceof \Surfnet\StepupMiddleware\ManagementBundle\Configuration\Entity\EmailTemplate) { + if (!$emailTemplateEntity instanceof EmailTemplateEntity) { return null; } diff --git a/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/ConfigurationController.php b/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/ConfigurationController.php index 21f34bc25..03c49618b 100644 --- a/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/ConfigurationController.php +++ b/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/ConfigurationController.php @@ -20,7 +20,6 @@ use DateTime; use Ramsey\Uuid\Uuid; -use Surfnet\Stepup\Helper\JsonHelper; use Surfnet\StepupMiddleware\ApiBundle\Exception\BadCommandRequestException; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\AbstractCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Configuration\Command\UpdateConfigurationCommand; diff --git a/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php b/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php index c0ea3f263..3bf34ac70 100644 --- a/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php +++ b/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/InstitutionConfigurationController.php @@ -42,7 +42,7 @@ use Symfony\Component\Validator\Validator\ValidatorInterface; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ final class InstitutionConfigurationController extends AbstractController { @@ -124,8 +124,10 @@ public function reconfigure(Request $request): JsonResponse ]); } + $commands = []; foreach ($configuration as $institution => $options) { + assert(is_array($options)); $command = new ReconfigureInstitutionConfigurationOptionsCommand(); $command->UUID = (string)Uuid::uuid4(); $command->institution = $institution; diff --git a/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/RightToBeForgottenController.php b/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/RightToBeForgottenController.php index c74ded47c..0cd9f9564 100644 --- a/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/RightToBeForgottenController.php +++ b/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/RightToBeForgottenController.php @@ -24,6 +24,7 @@ use Surfnet\Stepup\Identity\Value\Institution; use Surfnet\Stepup\Identity\Value\NameId; use Surfnet\StepupMiddleware\ApiBundle\Identity\Service\IdentityService; +use Surfnet\StepupMiddleware\ApiBundle\Identity\Value\RegistrationAuthorityCredentials; use Surfnet\StepupMiddleware\CommandHandlingBundle\Command\AbstractCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Command\ForgetIdentityCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Pipeline\TransactionAwarePipeline; @@ -34,7 +35,7 @@ use Symfony\Component\HttpKernel\Exception\ConflictHttpException; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class RightToBeForgottenController extends AbstractController { @@ -92,7 +93,7 @@ private function assertMayForget(NameId $nameId, Institution $institution): void $credentials = $this->identityService->findRegistrationAuthorityCredentialsByNameIdAndInstitution($nameId, $institution); - if (!$credentials instanceof \Surfnet\StepupMiddleware\ApiBundle\Identity\Value\RegistrationAuthorityCredentials) { + if (!$credentials instanceof RegistrationAuthorityCredentials) { return; } diff --git a/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/WhitelistController.php b/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/WhitelistController.php index 2ae69c0b5..826597d1e 100644 --- a/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/WhitelistController.php +++ b/src/Surfnet/StepupMiddleware/ManagementBundle/Controller/WhitelistController.php @@ -35,7 +35,7 @@ use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class WhitelistController extends AbstractController { diff --git a/src/Surfnet/StepupMiddleware/ManagementBundle/DependencyInjection/Configuration.php b/src/Surfnet/StepupMiddleware/ManagementBundle/DependencyInjection/Configuration.php index cdb19d9d2..97089a0c6 100644 --- a/src/Surfnet/StepupMiddleware/ManagementBundle/DependencyInjection/Configuration.php +++ b/src/Surfnet/StepupMiddleware/ManagementBundle/DependencyInjection/Configuration.php @@ -23,6 +23,9 @@ class Configuration implements ConfigurationInterface { + /** + * @return TreeBuilder<'array'> + */ public function getConfigTreeBuilder(): TreeBuilder { $treeBuilder = new TreeBuilder('surfnet_stepup_middleware_management'); diff --git a/src/Surfnet/StepupMiddleware/ManagementBundle/Exception/InvalidArgumentException.php b/src/Surfnet/StepupMiddleware/ManagementBundle/Exception/InvalidArgumentException.php index 2f8d2533c..6d2d06e6c 100644 --- a/src/Surfnet/StepupMiddleware/ManagementBundle/Exception/InvalidArgumentException.php +++ b/src/Surfnet/StepupMiddleware/ManagementBundle/Exception/InvalidArgumentException.php @@ -18,6 +18,7 @@ namespace Surfnet\StepupMiddleware\ManagementBundle\Exception; +// phpcs:ignore SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly class InvalidArgumentException extends \InvalidArgumentException implements Exception { public static function invalidType(string $expected, string $parameterName, mixed $parameter): self diff --git a/src/Surfnet/StepupMiddleware/ManagementBundle/Exception/RuntimeException.php b/src/Surfnet/StepupMiddleware/ManagementBundle/Exception/RuntimeException.php index 32d642f20..08980614a 100644 --- a/src/Surfnet/StepupMiddleware/ManagementBundle/Exception/RuntimeException.php +++ b/src/Surfnet/StepupMiddleware/ManagementBundle/Exception/RuntimeException.php @@ -18,6 +18,7 @@ namespace Surfnet\StepupMiddleware\ManagementBundle\Exception; +// phpcs:ignore SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly class RuntimeException extends \RuntimeException implements Exception { } diff --git a/src/Surfnet/StepupMiddleware/ManagementBundle/Service/DBALConnectionHelper.php b/src/Surfnet/StepupMiddleware/ManagementBundle/Service/DBALConnectionHelper.php index 253cb5d06..46b90c9ae 100644 --- a/src/Surfnet/StepupMiddleware/ManagementBundle/Service/DBALConnectionHelper.php +++ b/src/Surfnet/StepupMiddleware/ManagementBundle/Service/DBALConnectionHelper.php @@ -78,10 +78,6 @@ public function rollBack(): void */ public function getConnection(string $connectionName): Connection { - if (!is_string($connectionName)) { - throw InvalidArgumentException::invalidType('string', 'connectionName', $connectionName); - } - if (!array_key_exists($connectionName, $this->connections)) { throw new UnknownDBALConnectionException($connectionName); } diff --git a/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Controller/ConfigurationControllerTest.php b/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Controller/ConfigurationControllerTest.php index 80d28853a..ccaf45985 100644 --- a/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Controller/ConfigurationControllerTest.php +++ b/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Controller/ConfigurationControllerTest.php @@ -20,8 +20,10 @@ use Liip\TestFixturesBundle\Services\DatabaseToolCollection; use Liip\TestFixturesBundle\Services\DatabaseTools\AbstractDatabaseTool; -use Liip\TestFixturesBundle\Services\DatabaseTools\ORMSqliteDatabaseTool; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use Symfony\Bundle\FrameworkBundle\KernelBrowser; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Symfony\Component\HttpFoundation\Response; @@ -61,7 +63,6 @@ public function setUp(): void $this->fail('Unable to grab the readonly_api_password parameter from the container'); } $this->passwordRo = $readOnlyPassword; - } public function tearDown(): void @@ -69,10 +70,8 @@ public function tearDown(): void static::ensureKernelShutdown(); } - /** - * @test - * @group management - */ + #[Test] + #[Group('management')] public function requests_with_invalid_content_are_bad_requests(): void { $this->client->request( @@ -96,10 +95,8 @@ public function requests_with_invalid_content_are_bad_requests(): void ); } - /** - * @test - * @group management - */ + #[Test] + #[Group('management')] public function authorization_is_required(): void { $this->client->request( @@ -117,10 +114,8 @@ public function authorization_is_required(): void $this->assertEquals(Response::HTTP_UNAUTHORIZED, $this->client->getResponse()->getStatusCode()); } - /** - * @test - * @group management - */ + #[Test] + #[Group('management')] public function readonly_user_cannot_modify_configuration(): void { $this->client->request( @@ -140,12 +135,9 @@ public function readonly_user_cannot_modify_configuration(): void $this->assertEquals(Response::HTTP_FORBIDDEN, $this->client->getResponse()->getStatusCode()); } - /** - * @test - * @group management - * - * @dataProvider invalidHttpMethodProvider - */ + #[Test] + #[DataProvider('invalidHttpMethodProvider')] + #[Group('management')] public function only_post_requests_are_accepted(string $invalidHttpMethod): void { $this->client->request( @@ -163,10 +155,8 @@ public function only_post_requests_are_accepted(string $invalidHttpMethod): void $this->assertEquals(Response::HTTP_METHOD_NOT_ALLOWED, $this->client->getResponse()->getStatusCode()); } - /** - * @test - * @group management - */ + #[Test] + #[Group('management')] public function json_is_returned_from_the_configuration_api(): void { $this->client->request( @@ -194,7 +184,7 @@ public function json_is_returned_from_the_configuration_api(): void /** * Dataprovider for only_post_requests_are_accepted */ - public function invalidHttpMethodProvider(): array + public static function invalidHttpMethodProvider(): array { return [ 'GET' => ['GET'], diff --git a/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Controller/InstitutionConfigurationControllerTest.php b/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Controller/InstitutionConfigurationControllerTest.php index 93647b23a..721109976 100644 --- a/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Controller/InstitutionConfigurationControllerTest.php +++ b/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Controller/InstitutionConfigurationControllerTest.php @@ -20,8 +20,10 @@ use Liip\TestFixturesBundle\Services\DatabaseToolCollection; use Liip\TestFixturesBundle\Services\DatabaseTools\AbstractDatabaseTool; -use Liip\TestFixturesBundle\Services\DatabaseTools\ORMSqliteDatabaseTool; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use Symfony\Bundle\FrameworkBundle\KernelBrowser; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Symfony\Component\HttpFoundation\Response; @@ -69,10 +71,8 @@ public function tearDown(): void static::ensureKernelShutdown(); } - /** - * @test - * @group management - */ + #[Test] + #[Group('management')] public function authorization_is_required_for_reconfiguring_institution_configuration_options(): void { $this->client->request( @@ -90,10 +90,8 @@ public function authorization_is_required_for_reconfiguring_institution_configur $this->assertEquals(Response::HTTP_UNAUTHORIZED, $this->client->getResponse()->getStatusCode()); } - /** - * @test - * @group management - */ + #[Test] + #[Group('management')] public function readonly_user_cannot_reconfigure_institution_configuration_options(): void { $this->client->request( @@ -113,10 +111,8 @@ public function readonly_user_cannot_reconfigure_institution_configuration_optio $this->assertEquals(Response::HTTP_FORBIDDEN, $this->client->getResponse()->getStatusCode()); } - /** - * @test - * @group management - */ + #[Test] + #[Group('management')] public function authorization_is_required_for_querying_institution_configuration_options(): void { $this->client->request( @@ -134,10 +130,8 @@ public function authorization_is_required_for_querying_institution_configuration $this->assertEquals(Response::HTTP_UNAUTHORIZED, $this->client->getResponse()->getStatusCode()); } - /** - * @test - * @group management - */ + #[Test] + #[Group('management')] public function requests_with_invalid_content_are_bad_requests(): void { $content = json_encode(['non-existing.organisation.test' => []]); @@ -161,12 +155,9 @@ public function requests_with_invalid_content_are_bad_requests(): void $this->assertEquals(Response::HTTP_BAD_REQUEST, $this->client->getResponse()->getStatusCode()); } - /** - * @test - * @group management - * - * @dataProvider invalidHttpMethodProvider - */ + #[Test] + #[DataProvider('invalidHttpMethodProvider')] + #[Group('management')] public function only_post_and_get_requests_are_accepted(string $invalidHttpMethod): void { $this->client->request( @@ -184,10 +175,8 @@ public function only_post_and_get_requests_are_accepted(string $invalidHttpMetho $this->assertEquals(Response::HTTP_METHOD_NOT_ALLOWED, $this->client->getResponse()->getStatusCode()); } - /** - * @test - * @group management - */ + #[Test] + #[Group('management')] public function a_get_request_without_content_is_valid(): void { $this->client->request( @@ -207,10 +196,8 @@ public function a_get_request_without_content_is_valid(): void $this->assertEquals(Response::HTTP_OK, $this->client->getResponse()->getStatusCode()); } - /** - * @test - * @group management - */ + #[Test] + #[Group('management')] public function json_is_returned_from_the_institution_configuration_api(): void { $this->client->request( @@ -238,7 +225,7 @@ public function json_is_returned_from_the_institution_configuration_api(): void /** * Dataprovider for only_post_and_get_requests_are_accepted */ - public function invalidHttpMethodProvider(): array + public static function invalidHttpMethodProvider(): array { return [ 'DELETE' => ['DELETE'], diff --git a/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Validator/ConfigurationValidationTest.php b/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Validator/ConfigurationValidationTest.php index e9b6d6874..c80db1905 100644 --- a/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Validator/ConfigurationValidationTest.php +++ b/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Validator/ConfigurationValidationTest.php @@ -21,7 +21,10 @@ use Mockery as m; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\Matcher\MatcherAbstract; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use RuntimeException; use Surfnet\StepupMiddleware\ManagementBundle\Validator\ConfigurationStructureValidator; use Surfnet\StepupMiddleware\ManagementBundle\Validator\Constraints\HasValidConfigurationStructure; @@ -39,7 +42,7 @@ final class ConfigurationValidationTest extends TestCase /** * @return mixed[][] */ - public function invalidConfigurations(): array + public static function invalidConfigurations(): array { $dataSet = []; $fixtureDir = __DIR__ . '/Fixtures/invalid_configuration/*.php'; @@ -58,19 +61,20 @@ public function invalidConfigurations(): array return $dataSet; } - /** - * @test - * @group command-handler - * @dataProvider invalidConfigurations - */ + #[Test] + #[DataProvider('invalidConfigurations')] + #[Group('command-handler')] public function it_rejects_invalid_configuration(array $configuration, string $expectedPropertyPath): void { $builder = m::mock(ConstraintViolationBuilderInterface::class); $builder->shouldReceive('addViolation')->with()->once(); $builder->shouldReceive('atPath')->with($this->spy($actualPropertyPath))->once(); + $context = m::mock(ExecutionContextInterface::class); + $errorMessage = ''; $context->shouldReceive('buildViolation')->with($this->spy($errorMessage))->once()->andReturn($builder); + assert(is_string($errorMessage)); $validator = new ConfigurationStructureValidator( new GatewayConfigurationValidator( diff --git a/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Validator/ReconfigureInstitutionRequestValidatorTest.php b/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Validator/ReconfigureInstitutionRequestValidatorTest.php index 1e656e485..0d28771e2 100644 --- a/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Validator/ReconfigureInstitutionRequestValidatorTest.php +++ b/src/Surfnet/StepupMiddleware/ManagementBundle/Tests/Validator/ReconfigureInstitutionRequestValidatorTest.php @@ -22,6 +22,9 @@ use Mockery; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use Mockery\Matcher\MatcherAbstract; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use RuntimeException; use Surfnet\Stepup\Configuration\Value\Institution; @@ -43,7 +46,7 @@ class ReconfigureInstitutionRequestValidatorTest extends TestCase /** * @return mixed[][] */ - public function invalidReconfigureInstitutionRequests(): array + public static function invalidReconfigureInstitutionRequests(): array { $dataSet = []; $fixtureDir = __DIR__ . '/Fixtures/invalid_reconfigure_institution_request/*.php'; @@ -63,11 +66,9 @@ public function invalidReconfigureInstitutionRequests(): array return $dataSet; } - /** - * @test - * @group validator - * @dataProvider invalidReconfigureInstitutionRequests - */ + #[Test] + #[DataProvider('invalidReconfigureInstitutionRequests')] + #[Group('validator')] public function it_rejects_invalid_configuration( array $reconfigureRequest, string $expectedPropertyPath, @@ -89,7 +90,9 @@ public function it_rejects_invalid_configuration( $builder->shouldReceive('atPath')->with($this->spy($actualPropertyPath))->once(); $context = Mockery::mock(ExecutionContextInterface::class); + $actualErrorMessage = ''; $context->shouldReceive('buildViolation')->with($this->spy($actualErrorMessage))->once()->andReturn($builder); + assert(is_string($actualErrorMessage)); $secondFactorTypeServiceMock = Mockery::mock(SecondFactorTypeService::class); $secondFactorTypeServiceMock->shouldReceive('getAvailableSecondFactorTypes')->andReturn(['yubikey', 'sms']); @@ -123,10 +126,8 @@ public function it_rejects_invalid_configuration( ); } - /** - * @test - * @group validator - */ + #[Test] + #[Group('validator')] public function reconfigure_institution_request_cannot_contain_institutions_that_do_not_exist(): void { $existingInstitutions = []; @@ -139,7 +140,9 @@ public function reconfigure_institution_request_cannot_contain_institutions_that $builder->shouldReceive('addViolation')->with()->once(); $context = Mockery::mock(ExecutionContextInterface::class); + $errorMessage = ''; $context->shouldReceive('buildViolation')->once()->with($this->spy($errorMessage))->andReturn($builder); + assert(is_string($errorMessage)); $configuredInstitutionServiceMock = Mockery::mock(ConfiguredInstitutionService::class); $configuredInstitutionServiceMock @@ -163,10 +166,8 @@ public function reconfigure_institution_request_cannot_contain_institutions_that $this->assertStringContainsString($expectedErrorMessage, $errorMessage); } - /** - * @test - * @group validator - */ + #[Test] + #[Group('validator')] public function validation_for_existing_institutions_is_done_case_insensitively(): void { $existingInstitutions = [ConfiguredInstitution::createFrom(new Institution('surfnet.nl'))]; @@ -212,10 +213,8 @@ public function validation_for_existing_institutions_is_done_case_insensitively( $this->assertInstanceOf(ConfiguredInstitution::class, $existingInstitutions[0]); } - /** - * @test - * @group validator - */ + #[Test] + #[Group('validator')] public function valid_reconfigure_institution_requests_do_not_cause_any_violations(): void { $institution = 'surfnet.nl'; diff --git a/src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ReconfigureInstitutionRequestValidator.php b/src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ReconfigureInstitutionRequestValidator.php index 049e35f40..f6b2ee2ea 100644 --- a/src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ReconfigureInstitutionRequestValidator.php +++ b/src/Surfnet/StepupMiddleware/ManagementBundle/Validator/ReconfigureInstitutionRequestValidator.php @@ -34,7 +34,7 @@ use Symfony\Component\Validator\Violation\ConstraintViolationBuilder; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) Coupling to assertion classes is rather high, might be a good candidate for refactoring + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") Coupling to assertion classes is rather high, might be a good candidate for refactoring */ final class ReconfigureInstitutionRequestValidator extends ConstraintValidator { @@ -98,7 +98,7 @@ public function validateInstitutionsExist(array $institutions): void } /** - * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + * @SuppressWarnings("PHPMD.ExcessiveMethodLength") */ public function validateInstitutionConfigurationOptions(array $options, string $institution): void { @@ -250,7 +250,7 @@ private function getWhitelistedInstitutions(): array public function determineNonExistentInstitutions(array $institutions, array $configuredInstitutions): array { $normalizedConfiguredInstitutions = array_map( - fn($institution): string => strtolower((string)$institution), + strtolower(...), $configuredInstitutions, ); diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php index c757b4608..66fde3b72 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapGsspSecondFactorCommand.php @@ -24,60 +24,48 @@ use Surfnet\Stepup\Identity\Value\NameId; use Surfnet\StepupMiddleware\MiddlewareBundle\Service\BootstrapCommandService; use Surfnet\StepupMiddleware\MiddlewareBundle\Service\TransactionHelper; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Attribute\Argument; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Output\OutputInterface; -final class BootstrapGsspSecondFactorCommand extends Command +#[AsCommand( + name: 'middleware:bootstrap:gssp', + description: 'Creates a Generic SAML Second Factor (GSSF) second factor for a specified user' +)] +final class BootstrapGsspSecondFactorCommand { - public function __construct( - private readonly BootstrapCommandService $bootstrapService, - private readonly TransactionHelper $transactionHelper, - ) { - parent::__construct(); - } - - protected function configure(): void + public function __construct(private readonly BootstrapCommandService $bootstrapService, private readonly TransactionHelper $transactionHelper) { - $this - ->setDescription('Creates a Generic SAML Second Factor (GSSF) second factor for a specified user') - ->addArgument('name-id', InputArgument::REQUIRED, 'The NameID of the identity to create') - ->addArgument('institution', InputArgument::REQUIRED, 'The institution of the identity to create') - ->addArgument( - 'gssp-token-type', - InputArgument::REQUIRED, - 'The GSSP token type as defined in the GSSP config, for example tiqr or webauthn', - ) - ->addArgument( - 'gssp-token-identifier', - InputArgument::REQUIRED, - 'The identifier of the token as registered at the GSSP', - ) - ->addArgument( - 'registration-status', - InputArgument::REQUIRED, - 'Valid arguments: unverified, verified, vetted', - ) - ->addArgument('actor-id', InputArgument::REQUIRED, 'The id of the vetting actor'); } /** - * @SuppressWarnings(PHPMD.ExcessiveMethodLength) Method length could be reduced by deconstructing the bootstrapping + * @SuppressWarnings("PHPMD.ExcessiveMethodLength") Method length could be reduced by deconstructing the bootstrapping * of the required data and the vetting of the GSSP */ - protected function execute(InputInterface $input, OutputInterface $output): int - { - $registrationStatus = $input->getArgument('registration-status'); + public function __invoke( + #[Argument(description: 'The NameID of the identity to create', name: 'name-id')] + string $nameId, + #[Argument(description: 'The institution of the identity to create', name: 'institution')] + string $institution, + #[Argument(description: 'The GSSP token type as defined in the GSSP config, for example tiqr or webauthn', name: 'gssp-token-type')] + string $gsspTokenType, + #[Argument(description: 'The identifier of the token as registered at the GSSP', name: 'gssp-token-identifier')] + string $gsspTokenIdentifier, + #[Argument(description: 'Valid arguments: unverified, verified, vetted', name: 'registration-status')] + string $registrationStatus, + #[Argument(description: 'The id of the vetting actor', name: 'actor-id')] + string $actorId, + OutputInterface $output + ): int { $this->bootstrapService->validRegistrationStatus($registrationStatus); - $nameId = new NameId($input->getArgument('name-id')); - $institutionText = $input->getArgument('institution'); + $nameId = new NameId($nameId); + $institutionText = $institution; $institution = new Institution($institutionText); $mailVerificationRequired = $this->bootstrapService->requiresMailVerification($institutionText); - $tokenType = $input->getArgument('gssp-token-type'); - $tokenIdentifier = $input->getArgument('gssp-token-identifier'); - $actorId = $input->getArgument('actor-id'); + $tokenType = $gsspTokenType; + $tokenIdentifier = $gsspTokenIdentifier; + $this->bootstrapService->enrichEventMetadata($actorId); if (!$this->bootstrapService->identityExists($nameId, $institution)) { $output->writeln( diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityCommand.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityCommand.php index 7b8b7e0b6..fede46a4b 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityCommand.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityCommand.php @@ -23,41 +23,35 @@ use Surfnet\Stepup\Identity\Value\NameId; use Surfnet\StepupMiddleware\MiddlewareBundle\Service\BootstrapCommandService; use Surfnet\StepupMiddleware\MiddlewareBundle\Service\TransactionHelper; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Attribute\Argument; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Output\OutputInterface; -final class BootstrapIdentityCommand extends Command +#[AsCommand(name: 'middleware:bootstrap:identity', description: 'Creates an identity')] +final class BootstrapIdentityCommand { - public function __construct( - private readonly BootstrapCommandService $bootstrapService, - private readonly TransactionHelper $transactionHelper, - ) { - parent::__construct(); - } - - protected function configure(): void + public function __construct(private readonly BootstrapCommandService $bootstrapService, private readonly TransactionHelper $transactionHelper) { - $this - ->setDescription('Creates an identity') - ->addArgument('name-id', InputArgument::REQUIRED, 'The NameID of the identity to create') - ->addArgument('institution', InputArgument::REQUIRED, 'The institution of the identity to create') - ->addArgument('common-name', InputArgument::REQUIRED, 'The Common Name of the identity to create') - ->addArgument('email', InputArgument::REQUIRED, 'The e-mail address of the identity to create') - ->addArgument('preferred-locale', InputArgument::REQUIRED, 'The preferred locale of the identity to create') - ->addArgument('actor-id', InputArgument::REQUIRED, 'The id of the vetting actor'); } - protected function execute(InputInterface $input, OutputInterface $output): int - { - $nameId = new NameId($input->getArgument('name-id')); - $institutionText = $input->getArgument('institution'); + public function __invoke( + #[Argument(description: 'The NameID of the identity to create', name: 'name-id')] + string $nameId, + #[Argument(description: 'The institution of the identity to create', name: 'institution')] + string $institution, + #[Argument(description: 'The Common Name of the identity to create', name: 'common-name')] + string $commonName, + #[Argument(description: 'The e-mail address of the identity to create', name: 'email')] + string $email, + #[Argument(description: 'The preferred locale of the identity to create', name: 'preferred-locale')] + string $preferredLocale, + #[Argument(description: 'The id of the vetting actor', name: 'actor-id')] + string $actorId, + OutputInterface $output + ): int { + $nameId = new NameId($nameId); + $institutionText = $institution; $institution = new Institution($institutionText); - $commonName = $input->getArgument('common-name'); - $email = $input->getArgument('email'); - $preferredLocale = $input->getArgument('preferred-locale'); - $actorId = $input->getArgument('actor-id'); $this->bootstrapService->enrichEventMetadata($actorId); diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityWithYubikeySecondFactorCommand.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityWithYubikeySecondFactorCommand.php index 8226fc65d..45d615c98 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityWithYubikeySecondFactorCommand.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapIdentityWithYubikeySecondFactorCommand.php @@ -26,45 +26,40 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Command\BootstrapIdentityWithYubikeySecondFactorCommand as BootstrapIdentityWithYubikeySecondFactorIdentityCommand; use Surfnet\StepupMiddleware\MiddlewareBundle\Service\TransactionHelper; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Attribute\Argument; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Output\OutputInterface; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ -final class BootstrapIdentityWithYubikeySecondFactorCommand extends Command +#[AsCommand( + name: 'middleware:bootstrap:identity-with-yubikey', + description: 'Creates an identity with a vetted Yubikey second factor', +)] +final class BootstrapIdentityWithYubikeySecondFactorCommand { - protected static $defaultName = 'middleware:bootstrap:identity-with-yubikey'; - - protected function configure(): void + public function __construct(private readonly IdentityRepository $projectionRepository, private readonly TransactionHelper $transactionHelper) { - $this - ->setDescription('Creates an identity with a vetted Yubikey second factor') - ->addArgument('name-id', InputArgument::REQUIRED, 'The NameID of the identity to create') - ->addArgument('institution', InputArgument::REQUIRED, 'The institution of the identity to create') - ->addArgument('common-name', InputArgument::REQUIRED, 'The Common Name of the identity to create') - ->addArgument('email', InputArgument::REQUIRED, 'The e-mail address of the identity to create') - ->addArgument('preferred-locale', InputArgument::REQUIRED, 'The preferred locale of the identity to create') - ->addArgument( - 'yubikey', - InputArgument::REQUIRED, - 'The public ID of the Yubikey. Remove the last 32 characters of a Yubikey OTP to acquire this.', - ); } - public function __construct( - private readonly IdentityRepository $projectionRepository, - private readonly TransactionHelper $transactionHelper, - ) { - parent::__construct(); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $nameId = new NameId($input->getArgument('name-id')); - $institution = new Institution($input->getArgument('institution')); + public function __invoke( + #[Argument(description: 'The NameID of the identity to create', name: 'name-id')] + string $nameId, + #[Argument(description: 'The institution of the identity to create', name: 'institution')] + string $institution, + #[Argument(description: 'The Common Name of the identity to create', name: 'common-name')] + string $commonName, + #[Argument(description: 'The e-mail address of the identity to create', name: 'email')] + string $email, + #[Argument(description: 'The preferred locale of the identity to create', name: 'preferred-locale')] + string $preferredLocale, + #[Argument(description: 'The public ID of the Yubikey. Remove the last 32 characters of a Yubikey OTP to acquire this.', name: 'yubikey')] + string $yubikey, + OutputInterface $output + ): int { + $nameId = new NameId($nameId); + $institution = new Institution($institution); if ($this->projectionRepository->hasIdentityWithNameIdAndInstitution($nameId, $institution)) { $output->writeln( @@ -81,14 +76,14 @@ protected function execute(InputInterface $input, OutputInterface $output): int $command = new BootstrapIdentityWithYubikeySecondFactorIdentityCommand(); $command->UUID = (string)Uuid::uuid4(); $command->identityId = (string)Uuid::uuid4(); - $command->nameId = $input->getArgument('name-id'); - $command->institution = $input->getArgument('institution'); - $command->commonName = $input->getArgument('common-name'); - $command->email = $input->getArgument('email'); - $command->preferredLocale = $input->getArgument('preferred-locale'); + $command->nameId = $nameId; + $command->institution = $institution; + $command->commonName = $commonName; + $command->email = $email; + $command->preferredLocale = $preferredLocale; $secondFactorId = (string)Uuid::uuid4(); $command->secondFactorId = $secondFactorId; - $command->yubikeyPublicId = $input->getArgument('yubikey'); + $command->yubikeyPublicId = $yubikey; $this->transactionHelper->beginTransaction(); diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapSmsSecondFactorCommand.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapSmsSecondFactorCommand.php index b79000553..0154146d8 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapSmsSecondFactorCommand.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapSmsSecondFactorCommand.php @@ -24,50 +24,34 @@ use Surfnet\Stepup\Identity\Value\NameId; use Surfnet\StepupMiddleware\MiddlewareBundle\Service\BootstrapCommandService; use Surfnet\StepupMiddleware\MiddlewareBundle\Service\TransactionHelper; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Attribute\Argument; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Output\OutputInterface; -final class BootstrapSmsSecondFactorCommand extends Command +#[AsCommand( + name: 'middleware:bootstrap:sms', + description: 'Creates a SMS second factor for a specified user' +)] +final class BootstrapSmsSecondFactorCommand { - public function __construct( - private readonly BootstrapCommandService $bootstrapService, - private readonly TransactionHelper $transactionHelper, - ) { - parent::__construct(); - } - - protected function configure(): void + public function __construct(private readonly BootstrapCommandService $bootstrapService, private readonly TransactionHelper $transactionHelper) { - $this - ->setDescription('Creates a SMS second factor for a specified user') - ->addArgument('name-id', InputArgument::REQUIRED, 'The NameID of the identity to create') - ->addArgument('institution', InputArgument::REQUIRED, 'The institution of the identity to create') - ->addArgument( - 'phone-number', - InputArgument::REQUIRED, - 'The phone number of the user should be formatted like "+31 (0) 612345678"', - ) - ->addArgument( - 'registration-status', - InputArgument::REQUIRED, - 'Valid arguments: unverified, verified, vetted', - ) - ->addArgument('actor-id', InputArgument::REQUIRED, 'The id of the vetting actor'); } - protected function execute(InputInterface $input, OutputInterface $output): int + public function __invoke(#[Argument(description: 'The NameID of the identity to create', name: 'name-id')] + string $nameId, #[Argument(description: 'The institution of the identity to create', name: 'institution')] + string $institution, #[Argument(description: 'The phone number of the user should be formatted like "+31 (0) 612345678"', name: 'phone-number')] + string $phoneNumber, #[Argument(description: 'Valid arguments: unverified, verified, vetted', name: 'registration-status')] + string $registrationStatus, #[Argument(description: 'The id of the vetting actor', name: 'actor-id')] + string $actorId, OutputInterface $output): int { - $registrationStatus = $input->getArgument('registration-status'); $this->bootstrapService->validRegistrationStatus($registrationStatus); - $nameId = new NameId($input->getArgument('name-id')); - $institutionText = $input->getArgument('institution'); + $nameId = new NameId($nameId); + $institutionText = $institution; $institution = new Institution($institutionText); $mailVerificationRequired = $this->bootstrapService->requiresMailVerification($institutionText); - $phoneNumber = $input->getArgument('phone-number'); - $actorId = $input->getArgument('actor-id'); + $this->bootstrapService->enrichEventMetadata($actorId); if (!$this->bootstrapService->identityExists($nameId, $institution)) { $output->writeln( diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapYubikeySecondFactorCommand.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapYubikeySecondFactorCommand.php index ee35cd331..9be3326c3 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapYubikeySecondFactorCommand.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/BootstrapYubikeySecondFactorCommand.php @@ -24,51 +24,40 @@ use Surfnet\Stepup\Identity\Value\NameId; use Surfnet\StepupMiddleware\MiddlewareBundle\Service\BootstrapCommandService; use Surfnet\StepupMiddleware\MiddlewareBundle\Service\TransactionHelper; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Attribute\Argument; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Output\OutputInterface; -final class BootstrapYubikeySecondFactorCommand extends Command +#[AsCommand( + name: 'middleware:bootstrap:yubikey', + description: 'Creates a Yubikey second factor for a specified user' +)] +final class BootstrapYubikeySecondFactorCommand { - public function __construct( - private readonly BootstrapCommandService $bootstrapService, - private readonly TransactionHelper $transactionHelper, - ) { - parent::__construct(); - } - - protected function configure(): void + public function __construct(private readonly BootstrapCommandService $bootstrapService, private readonly TransactionHelper $transactionHelper) { - $this - ->setDescription('Creates a Yubikey second factor for a specified user') - ->addArgument('name-id', InputArgument::REQUIRED, 'The NameID of the identity to create') - ->addArgument('institution', InputArgument::REQUIRED, 'The institution of the identity to create') - ->addArgument( - 'yubikey', - InputArgument::REQUIRED, - 'The public ID of the Yubikey. Remove the last 32 characters of a Yubikey OTP to acquire this.', - ) - ->addArgument( - 'registration-status', - InputArgument::REQUIRED, - 'Valid arguments: unverified, verified, vetted', - ) - ->addArgument('actor-id', InputArgument::REQUIRED, 'The id of the vetting actor'); } - protected function execute(InputInterface $input, OutputInterface $output): int - { - $registrationStatus = $input->getArgument('registration-status'); + public function __invoke( + #[Argument(description: 'The NameID of the identity to create', name: 'name-id')] + string $nameId, + #[Argument(description: 'The institution of the identity to create', name: 'institution')] + string $institution, + #[Argument(description: 'The public ID of the Yubikey. Remove the last 32 characters of a Yubikey OTP to acquire this.', name: 'yubikey')] + string $yubikey, + #[Argument(description: 'Valid arguments: unverified, verified, vetted', name: 'registration-status')] + string $registrationStatus, + #[Argument(description: 'The id of the vetting actor', name: 'actor-id')] + string $actorId, + OutputInterface $output + ): int { $this->bootstrapService->validRegistrationStatus($registrationStatus); - $nameId = new NameId($input->getArgument('name-id')); - $institutionText = $input->getArgument('institution'); + $nameId = new NameId($nameId); + $institutionText = $institution; $institution = new Institution($institutionText); $mailVerificationRequired = $this->bootstrapService->requiresMailVerification($institutionText); - $registrationStatus = $input->getArgument('registration-status'); - $yubikey = $input->getArgument('yubikey'); - $actorId = $input->getArgument('actor-id'); + $this->bootstrapService->enrichEventMetadata($actorId); if (!$this->bootstrapService->identityExists($nameId, $institution)) { $output->writeln( diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/EmailVerifiedSecondFactorRemindersCommand.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/EmailVerifiedSecondFactorRemindersCommand.php index 9f9b11964..cc5027a0a 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/EmailVerifiedSecondFactorRemindersCommand.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/EmailVerifiedSecondFactorRemindersCommand.php @@ -29,9 +29,8 @@ use Surfnet\StepupMiddleware\CommandHandlingBundle\Identity\Command\SendVerifiedSecondFactorRemindersCommand; use Surfnet\StepupMiddleware\CommandHandlingBundle\Pipeline\TransactionAwarePipeline; use Surfnet\StepupMiddleware\MiddlewareBundle\Service\DBALConnectionHelper; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Attribute\Option; use Symfony\Component\Console\Output\OutputInterface; /** @@ -40,53 +39,45 @@ * The command utilizes a specific service for this task (VerifiedSecondFactorReminderService). Input validation is * performed on the incoming request parameters. * - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ -final class EmailVerifiedSecondFactorRemindersCommand extends Command +#[AsCommand( + name: 'middleware:cron:email-reminder', + description: 'Sends email reminders to identities with verified tokens more than 7 days old.' +)] +final class EmailVerifiedSecondFactorRemindersCommand { - protected static $defaultName = 'middleware:cron:email-reminder'; - - protected function configure(): void - { - $this - ->setDescription('Sends email reminders to identities with verified tokens more than 7 days old.') - ->addOption( - 'dry-run', - null, - InputOption::VALUE_NONE, - 'Run in dry mode, not sending any email', - ) - ->addOption( - 'date', - null, - InputOption::VALUE_OPTIONAL, - 'The date (Y-m-d) that should be used for sending reminder email messages, defaults to TODAY - 7', - ); - } - public function __construct( private readonly TransactionAwarePipeline $pipeline, private readonly BufferedEventBus $eventBus, private readonly DBALConnectionHelper $connection, - private readonly LoggerInterface $logger, + private readonly LoggerInterface $logger ) { - parent::__construct(); } - protected function execute(InputInterface $input, OutputInterface $output): int - { + public function __invoke( + OutputInterface $output, + #[Option(description: 'Run in dry mode, not sending any email', name: 'dry-run')] + bool $dryRun = false, + #[Option(description: 'The date (Y-m-d) that should be used for sending reminder email messages, defaults to TODAY - 7', name: 'date')] + ?string $date = null, + ): int { try { - $this->validateInput($input); + Assertion::nullOrDate( + $date, + 'Y-m-d', + 'Expected date to be a string and formatted in the Y-m-d date format', + ); } catch (InvalidArgumentException $e) { $output->writeln('' . $e->getMessage() . ''); - $this->logger->error(sprintf('Invalid arguments passed to the %s', $this->getName()), [$e->getMessage()]); + $this->logger->error(sprintf('Invalid arguments passed to the %s', 'middleware:cron:email-reminder'), [$e->getMessage()]); return 1; } - $date = new DateTime(); - $date->sub(new DateInterval('P7D')); - if ($input->hasOption('date') && !is_null($input->getOption('date'))) { - $receivedDate = $input->getOption('date'); + $now = new DateTime(); + $now->sub(new DateInterval('P7D')); + if ($date) { + $receivedDate = $date; $date = DateTime::createFromFormat('Y-m-d', $receivedDate); if ($date === false) { $output->writeln( @@ -99,13 +90,8 @@ protected function execute(InputInterface $input, OutputInterface $output): int } } - $dryRun = false; - if ($input->hasOption('dry-run') && !is_null($input->getOption('dry-run'))) { - $dryRun = $input->getOption('dry-run'); - } - $command = new SendVerifiedSecondFactorRemindersCommand(); - $command->requestedAt = $date; + $command->requestedAt = $date ?: $now; $command->dryRun = $dryRun; $command->UUID = Uuid::uuid4()->toString(); @@ -122,21 +108,4 @@ protected function execute(InputInterface $input, OutputInterface $output): int } return 0; } - - private function validateInput(InputInterface $input): void - { - if ($input->hasOption('date')) { - $date = $input->getOption('date'); - Assertion::nullOrDate( - $date, - 'Y-m-d', - 'Expected date to be a string and formatted in the Y-m-d date format', - ); - } - - if ($input->hasOption('dry-run')) { - $dryRun = $input->getOption('dry-run'); - Assertion::nullOrBoolean($dryRun, 'Expected dry-run parameter to be a boolean value.'); - } - } } diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/MigrateSecondFactorCommand.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/MigrateSecondFactorCommand.php index 66a6e148b..f1768c0d3 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/MigrateSecondFactorCommand.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/MigrateSecondFactorCommand.php @@ -26,45 +26,41 @@ use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\VettedSecondFactor; use Surfnet\StepupMiddleware\MiddlewareBundle\Service\BootstrapCommandService; use Surfnet\StepupMiddleware\MiddlewareBundle\Service\TransactionHelper; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Attribute\Argument; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Output\OutputInterface; -final class MigrateSecondFactorCommand extends Command +#[AsCommand( + name: 'middleware:migrate:vetted-tokens', + description: 'Migrates the tokens of an identity to a new institution while preserving the old tokens' +)] +final class MigrateSecondFactorCommand { - public function __construct( - private readonly BootstrapCommandService $bootstrapService, - private readonly TransactionHelper $transactionHelper, - ) { - parent::__construct(); - } - - protected function configure(): void + public function __construct(private readonly BootstrapCommandService $bootstrapService, private readonly TransactionHelper $transactionHelper) { - $this - ->setDescription('Migrates the tokens of an identity to a new institution while preserving the old tokens') - ->addArgument( - 'old-name-id', - InputArgument::REQUIRED, - 'The old NameID of the identity used as the source of the tokens to move', - ) - ->addArgument( - 'new-name-id', - InputArgument::REQUIRED, - 'The new NameID of the identity to move the tokens to', - ) - ->addArgument('target-institution', InputArgument::OPTIONAL, 'The institution of the target identity') - ->addArgument('email', InputArgument::OPTIONAL, 'The e-mail address of the identity to create'); } - protected function execute(InputInterface $input, OutputInterface $output): int - { - $sourceNameId = new NameId($input->getArgument('old-name-id')); - $targetNameId = new NameId($input->getArgument('new-name-id')); + public function __invoke( + #[Argument(description: 'The old NameID of the identity used as the source of the tokens to move', name: 'old-name-id')] + string $oldNameId, + #[Argument(description: 'The new NameID of the identity to move the tokens to', name: 'new-name-id')] + string $newNameId, + #[Argument(description: 'The institution of the target identity', name: 'target-institution')] + ?string $targetInstitution, + #[Argument(description: 'The e-mail address of the identity to create', name: 'email')] + ?string $email, + OutputInterface $output + ): int { + $sourceNameId = new NameId($oldNameId); + $targetNameId = new NameId($newNameId); $output->writeln(sprintf('Starting token migration for %s', $sourceNameId)); $sourceIdentity = $this->bootstrapService->getIdentityByNameId($sourceNameId); + + if ($sourceIdentity === null) { + throw new InvalidArgumentException("oldNameId could net be resolved to a Identity."); + } + $targetIdentity = $this->bootstrapService->getIdentityByNameId($targetNameId); try { @@ -76,7 +72,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int sprintf('Target with NameID %s does not exist, creating new identity', $targetNameId), ); - $identityId = $this->createIdentity($targetNameId, $sourceIdentity, $input); + $identityId = $this->createIdentity($targetNameId, $sourceIdentity, $targetInstitution, $email); $output->writeln( sprintf('Successfully created identity with UUID %s', $identityId), @@ -124,10 +120,8 @@ protected function execute(InputInterface $input, OutputInterface $output): int /** * @return string */ - private function createIdentity(NameId $targetNameId, Identity $sourceIdentity, InputInterface $input): string + private function createIdentity(NameId $targetNameId, Identity $sourceIdentity, ?string $newInstitution, ?string $newEmail): string { - $newInstitution = $input->getArgument('target-institution'); - $newEmail = $input->getArgument('email'); if (!$newInstitution || !$newEmail) { throw new InvalidArgumentException("Missing email and institution"); } diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/ReplayEventsCommand.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/ReplayEventsCommand.php index 9ffd9648d..55d0c4536 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/ReplayEventsCommand.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Console/Command/ReplayEventsCommand.php @@ -20,11 +20,10 @@ use Surfnet\StepupMiddleware\MiddlewareBundle\Service\EventStreamReplayer; use Symfony\Component\Console\Attribute\AsCommand; -use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Attribute\Option; use Symfony\Component\Console\Helper\FormatterHelper; use Symfony\Component\Console\Helper\QuestionHelper; use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Question\ConfirmationQuestion; @@ -33,34 +32,26 @@ description: 'Wipes all read models and repopulates the tables from the event store. Use the --no-interaction option to perform the event replay without the additional confirmation question.' )] -class ReplayEventsCommand extends Command +class ReplayEventsCommand { - public function __construct( - private readonly EventStreamReplayer $replayer, - private readonly string $environment, - ) { - parent::__construct(); - } - - protected function configure(): void + public function __construct(private readonly EventStreamReplayer $replayer, private readonly string $environment) { - $this - ->addOption( - 'increments', - 'i', - InputOption::VALUE_REQUIRED, - 'The amount of events that are replayed at once (repeated until all events are replayed)', - 1000, - ); } - protected function execute(InputInterface $input, OutputInterface $output): int - { - /** @var FormatterHelper $formatter */ - $formatter = $this->getHelper('formatter'); + public function __invoke( + OutputInterface $output, + InputInterface $input, + #[Option( + description: 'The amount of events that are replayed at once (repeated until all events are replayed)', + name: 'increments', + shortcut: 'i' + ) + ] + int $increments = 1000, + ): int { + $formatter = new FormatterHelper(); // Be careful, when using the no-interaction option you will not get the confirmation question - $noInteraction = $input->getOption('no-interaction'); if (!in_array($this->environment, ['dev_event_replay', 'prod_event_replay', 'smoketest_event_replay'])) { $output->writeln( @@ -78,8 +69,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int return 1; } - /** @var QuestionHelper $interrogator */ - $interrogator = $this->getHelper('question'); + $interrogator = new QuestionHelper(); if ($this->environment === 'prod_event_replay') { $wantToRunOnProd = new ConfirmationQuestion( 'You have selected to run this on production. Have you disabled all access to the production ' @@ -93,12 +83,10 @@ protected function execute(InputInterface $input, OutputInterface $output): int return 1; } } - - $increments = (int)$input->getOption('increments'); if ($increments < 1) { $output->writeln( $formatter->formatBlock( - sprintf('Increments must be a positive integer, "%s" given', $input->getOption('increments')), + sprintf('Increments must be a positive integer, "%s" given', $increments), 'error', ), ); @@ -106,7 +94,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int return 1; } - if (!$noInteraction) { + if ($input->isInteractive()) { $output->writeln(['', $formatter->formatBlock(['', 'WARNING!!!!', ''], 'error'), '']); $question = <<addOption( - self::OPTION_LIST_EVENTS, - null, - InputOption::VALUE_NONE, - 'List all events available to replay', - ) - ->addOption( - self::OPTION_LIST_PROJECTORS, - null, - InputOption::VALUE_NONE, - 'List all projectors available for which events can be replayed', - ); - } - public function __construct( private readonly EventCollection $collection, private readonly ProjectorCollection $projectorCollection, private readonly PastEventsService $pastEventsService, - private readonly TransactionAwareEventDispatcher $eventDispatcher, + private readonly TransactionAwareEventDispatcher $eventDispatcher ) { - parent::__construct(); } - protected function execute(InputInterface $input, OutputInterface $output): int - { + public function __invoke( + InputInterface $input, + OutputInterface $output, + #[Option(description: 'List all events available to replay', name: self::OPTION_LIST_EVENTS)] + bool $listEvents = false, + #[Option(description: 'List all projectors available for which events can be replayed', name: self::OPTION_LIST_PROJECTORS)] + bool $listProjectors = false, + ): int { $availableEvents = $this->collection->getEventNames(); $availableProjectors = $this->projectorCollection->getProjectorNames(); - if ($input->getOption(self::OPTION_LIST_EVENTS)) { + if ($listEvents) { $output->writeln('The following events can be replayed:'); $output->writeln($availableEvents === [] ? 'None.' : $availableEvents); return 0; } - if ($input->getOption(self::OPTION_LIST_PROJECTORS)) { + if ($listProjectors) { $output->writeln('Events can be replayed for the following projectors:'); $output->writeln($availableProjectors === [] ? 'None.' : $availableProjectors); @@ -90,8 +77,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int return 1; } - /** @var QuestionHelper $questionHelper */ - $questionHelper = $this->getHelper('question'); + $questionHelper = new QuestionHelper(); $selectEventsQuestion = new ChoiceQuestion( 'Which events would you like to replay? Please supply a comma-separated list of numbers.', diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/DependencyInjection/Configuration.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/DependencyInjection/Configuration.php index 4e32baf4c..c73ba11ee 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/DependencyInjection/Configuration.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/DependencyInjection/Configuration.php @@ -23,6 +23,9 @@ class Configuration implements ConfigurationInterface { + /** + * @return TreeBuilder<'array'> + */ public function getConfigTreeBuilder(): TreeBuilder { $treeBuilder = new TreeBuilder('surfnet_stepup_middleware_middleware'); diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Resources/config/console_commands.yml b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Resources/config/console_commands.yml index a3cf334cf..d274fc65f 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Resources/config/console_commands.yml +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Resources/config/console_commands.yml @@ -1,4 +1,8 @@ services: + _defaults: + autoconfigure: true + public: true + Surfnet\StepupMiddleware\MiddlewareBundle\Service\BootstrapCommandService: arguments: - "@surfnet_stepup_middleware_command_handling.pipeline.transaction_aware_pipeline" @@ -17,8 +21,6 @@ services: - "@surfnet_stepup_middleware_middleware.dbal_connection_helper" Surfnet\StepupMiddleware\MiddlewareBundle\Console\Command\ReplaySpecificEventsCommand: - tags: - - { name: 'console.command', command: 'stepup:event:replay' } arguments: - "@middleware.event_replay.event_collection" - "@middleware.event_replay.projector_collection" @@ -26,22 +28,16 @@ services: - "@middleware.event_replay.transaction_aware_event_dispatcher" Surfnet\StepupMiddleware\MiddlewareBundle\Console\Command\ReplayEventsCommand: - tags: - - { name: 'console.command', command: 'middleware:event:replay' } arguments: - "@middleware.event_replay.event_stream_replayer" - '%env(APP_ENV)%' Surfnet\StepupMiddleware\MiddlewareBundle\Console\Command\BootstrapIdentityWithYubikeySecondFactorCommand: - tags: - - { name: 'console.command', command: 'middleware:bootstrap:identity-with-yubikey' } arguments: - "@surfnet_stepup_middleware_api.repository.identity" - '@Surfnet\StepupMiddleware\MiddlewareBundle\Service\TransactionHelper' Surfnet\StepupMiddleware\MiddlewareBundle\Console\Command\EmailVerifiedSecondFactorRemindersCommand: - tags: - - { name: 'console.command', command: 'middleware:cron:email-reminder' } arguments: - "@surfnet_stepup_middleware_command_handling.pipeline.transaction_aware_pipeline" - "@surfnet_stepup_middleware_command_handling.event_bus.buffered" @@ -52,33 +48,23 @@ services: arguments: - '@Surfnet\StepupMiddleware\MiddlewareBundle\Service\BootstrapCommandService' - '@Surfnet\StepupMiddleware\MiddlewareBundle\Service\TransactionHelper' - tags: - - { name: 'console.command', command: 'middleware:bootstrap:identity' } Surfnet\StepupMiddleware\MiddlewareBundle\Console\Command\BootstrapSmsSecondFactorCommand: arguments: - '@Surfnet\StepupMiddleware\MiddlewareBundle\Service\BootstrapCommandService' - '@Surfnet\StepupMiddleware\MiddlewareBundle\Service\TransactionHelper' - tags: - - { name: 'console.command', command: 'middleware:bootstrap:sms' } Surfnet\StepupMiddleware\MiddlewareBundle\Console\Command\BootstrapYubikeySecondFactorCommand: arguments: - '@Surfnet\StepupMiddleware\MiddlewareBundle\Service\BootstrapCommandService' - '@Surfnet\StepupMiddleware\MiddlewareBundle\Service\TransactionHelper' - tags: - - { name: 'console.command', command: 'middleware:bootstrap:yubikey' } Surfnet\StepupMiddleware\MiddlewareBundle\Console\Command\BootstrapGsspSecondFactorCommand: arguments: - '@Surfnet\StepupMiddleware\MiddlewareBundle\Service\BootstrapCommandService' - '@Surfnet\StepupMiddleware\MiddlewareBundle\Service\TransactionHelper' - tags: - - { name: 'console.command', command: 'middleware:bootstrap:gssp' } Surfnet\StepupMiddleware\MiddlewareBundle\Console\Command\MigrateSecondFactorCommand: arguments: - '@Surfnet\StepupMiddleware\MiddlewareBundle\Service\BootstrapCommandService' - '@Surfnet\StepupMiddleware\MiddlewareBundle\Service\TransactionHelper' - tags: - - { name: 'console.command', command: 'middleware:migrate:vetted-tokens' } diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Resources/config/event_replaying.yml b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Resources/config/event_replaying.yml index ed1533dc7..b09fd769d 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Resources/config/event_replaying.yml +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Resources/config/event_replaying.yml @@ -1,4 +1,7 @@ services: + _defaults: + autoconfigure: true + middleware.event_replay.event_collection: class: Surfnet\StepupMiddleware\MiddlewareBundle\EventSourcing\EventCollection arguments: diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/BootstrapCommandService.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/BootstrapCommandService.php index d4ee0a008..18f2512e0 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/BootstrapCommandService.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/BootstrapCommandService.php @@ -22,6 +22,7 @@ use Surfnet\Stepup\Configuration\Value\Institution as ConfigurationInstitution; use Surfnet\Stepup\Identity\Value\Institution; use Surfnet\Stepup\Identity\Value\NameId; +use Surfnet\StepupMiddleware\ApiBundle\Configuration\Entity\InstitutionConfigurationOptions; use Surfnet\StepupMiddleware\ApiBundle\Configuration\Repository\InstitutionConfigurationOptionsRepository; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\Identity; use Surfnet\StepupMiddleware\ApiBundle\Identity\Entity\VettedSecondFactor; @@ -44,8 +45,8 @@ use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) - * @SuppressWarnings(PHPMD.TooManyPublicMethods) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") + * @SuppressWarnings("PHPMD.TooManyPublicMethods") */ class BootstrapCommandService { @@ -89,7 +90,7 @@ public function requiresMailVerification(string $institution): bool $configuration = $this->institutionConfigurationRepository->findConfigurationOptionsFor( new ConfigurationInstitution($institution), ); - if ($configuration instanceof \Surfnet\StepupMiddleware\ApiBundle\Configuration\Entity\InstitutionConfigurationOptions) { + if ($configuration instanceof InstitutionConfigurationOptions) { return $configuration->verifyEmailOption->isEnabled(); } return true; diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/EventStreamReplayer.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/EventStreamReplayer.php index d54d41318..1047487e0 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/EventStreamReplayer.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/EventStreamReplayer.php @@ -20,7 +20,6 @@ use Broadway\Domain\DomainMessage; use Doctrine\DBAL\Exception\InvalidArgumentException; -use Exception; use Surfnet\StepupMiddleware\CommandHandlingBundle\EventHandling\BufferedEventBus; use Surfnet\StepupMiddleware\MiddlewareBundle\EventSourcing\DBALEventHydrator; use Symfony\Component\Console\Helper\ProgressBar; diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/VerifiedSecondFactorReminderMailService.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/VerifiedSecondFactorReminderMailService.php index 221c31369..a9982d300 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/VerifiedSecondFactorReminderMailService.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Service/VerifiedSecondFactorReminderMailService.php @@ -36,7 +36,7 @@ use Symfony\Contracts\Translation\TranslatorInterface; /** - * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings("PHPMD.CouplingBetweenObjects") */ class VerifiedSecondFactorReminderMailService { diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/Console/Command/EmailVerifiedSecondFactorRemindersCommandTest.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/Console/Command/EmailVerifiedSecondFactorRemindersCommandTest.php new file mode 100644 index 000000000..5cf7df41f --- /dev/null +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/Console/Command/EmailVerifiedSecondFactorRemindersCommandTest.php @@ -0,0 +1,276 @@ +pipeline = m::mock(TransactionAwarePipeline::class); + $this->eventBus = m::mock(BufferedEventBus::class); + $this->connection = m::mock(DBALConnectionHelper::class); + $this->logger = new NullLogger(); + + $this->command = new EmailVerifiedSecondFactorRemindersCommand( + $this->pipeline, + $this->eventBus, + $this->connection, + $this->logger, + ); + + $application = new Application(); + $application->addCommand($this->command); + + $this->commandTester = new CommandTester($this->command); + } + + #[Test] + public function it_successfully_executes_with_default_date(): void + { + // Expect transaction handling + $this->connection->shouldReceive('beginTransaction')->once(); + $this->connection->shouldReceive('commit')->once(); + + // Capture the command passed to pipeline + $this->pipeline->shouldReceive('process') + ->once() + ->with(m::type(SendVerifiedSecondFactorRemindersCommand::class)) + ->andReturnUsing(function (SendVerifiedSecondFactorRemindersCommand $cmd) { + // Verify the command has correct properties + $this->assertInstanceOf(DateTime::class, $cmd->requestedAt); + $this->assertFalse($cmd->dryRun); + $this->assertNotEmpty($cmd->UUID); + + // Verify date is 7 days ago + $expectedDate = new DateTime(); + $expectedDate->sub(new DateInterval('P7D')); + $this->assertEquals($expectedDate->format('Y-m-d'), $cmd->requestedAt->format('Y-m-d')); + + return $cmd; + }); + + $this->eventBus->shouldReceive('flush')->once(); + + // Execute command + $exitCode = $this->commandTester->execute([]); + + $this->assertEquals(0, $exitCode); + } + + #[Test] + public function it_successfully_executes_with_custom_date(): void + { + $customDate = '2024-12-15'; + + // Expect transaction handling + $this->connection->shouldReceive('beginTransaction')->once(); + $this->connection->shouldReceive('commit')->once(); + + // Capture the command passed to pipeline + $this->pipeline->shouldReceive('process') + ->once() + ->with(m::type(SendVerifiedSecondFactorRemindersCommand::class)) + ->andReturnUsing(function (SendVerifiedSecondFactorRemindersCommand $cmd) use ($customDate) { + $this->assertEquals($customDate, $cmd->requestedAt->format('Y-m-d')); + $this->assertFalse($cmd->dryRun); + return $cmd; + }); + + $this->eventBus->shouldReceive('flush')->once(); + + // Execute command with --date option + $exitCode = $this->commandTester->execute([ + '--date' => $customDate, + ]); + + $this->assertEquals(0, $exitCode); + } + + #[Test] + public function it_successfully_executes_in_dry_run_mode(): void + { + // Expect transaction handling + $this->connection->shouldReceive('beginTransaction')->once(); + $this->connection->shouldReceive('commit')->once(); + + // Capture the command passed to pipeline + $this->pipeline->shouldReceive('process') + ->once() + ->with(m::type(SendVerifiedSecondFactorRemindersCommand::class)) + ->andReturnUsing(function (SendVerifiedSecondFactorRemindersCommand $cmd) { + $this->assertTrue($cmd->dryRun); + return $cmd; + }); + + $this->eventBus->shouldReceive('flush')->once(); + + // Execute command with --dry-run option + $exitCode = $this->commandTester->execute([ + '--dry-run' => true, + ]); + + $this->assertEquals(0, $exitCode); + } + + #[Test] + public function it_successfully_executes_with_both_date_and_dry_run(): void + { + $customDate = '2024-11-20'; + + // Expect transaction handling + $this->connection->shouldReceive('beginTransaction')->once(); + $this->connection->shouldReceive('commit')->once(); + + // Capture the command passed to pipeline + $this->pipeline->shouldReceive('process') + ->once() + ->with(m::type(SendVerifiedSecondFactorRemindersCommand::class)) + ->andReturnUsing(function (SendVerifiedSecondFactorRemindersCommand $cmd) use ($customDate) { + $this->assertEquals($customDate, $cmd->requestedAt->format('Y-m-d')); + $this->assertTrue($cmd->dryRun); + return $cmd; + }); + + $this->eventBus->shouldReceive('flush')->once(); + + // Execute command with both options + $exitCode = $this->commandTester->execute([ + '--date' => $customDate, + '--dry-run' => true, + ]); + + $this->assertEquals(0, $exitCode); + } + + #[Test] + public function it_returns_error_for_invalid_date_format(): void + { + $invalidDate = 'not-a-date'; + + // No transaction should be started for invalid input + $this->connection->shouldNotReceive('beginTransaction'); + $this->pipeline->shouldNotReceive('process'); + $this->eventBus->shouldNotReceive('flush'); + + // Execute command with invalid date + $exitCode = $this->commandTester->execute([ + '--date' => $invalidDate, + ]); + + $this->assertEquals(1, $exitCode); + $this->assertStringContainsString('date', $this->commandTester->getDisplay()); + } + + #[Test] + public function it_returns_error_for_incorrectly_formatted_date(): void + { + $invalidDate = '15-12-2024'; // Wrong format, should be Y-m-d + + // No transaction should be started for invalid input + $this->connection->shouldNotReceive('beginTransaction'); + $this->pipeline->shouldNotReceive('process'); + $this->eventBus->shouldNotReceive('flush'); + + // Execute command with incorrectly formatted date + $exitCode = $this->commandTester->execute([ + '--date' => $invalidDate, + ]); + + $this->assertEquals(1, $exitCode); + $this->assertStringContainsString('date', $this->commandTester->getDisplay()); + } + + #[Test] + public function it_rolls_back_transaction_on_exception(): void + { + // Expect transaction handling + $this->connection->shouldReceive('beginTransaction')->once(); + $this->connection->shouldReceive('rollBack')->once(); + + // Pipeline throws an exception + $exception = new Exception('Pipeline processing failed'); + $this->pipeline->shouldReceive('process') + ->once() + ->andThrow($exception); + + // Event bus should not be flushed when exception occurs + $this->eventBus->shouldNotReceive('flush'); + + // Execute command and expect exception to be re-thrown + $this->expectException(Exception::class); + $this->expectExceptionMessage('Pipeline processing failed'); + + $this->commandTester->execute([]); + } + + #[Test] + public function it_rolls_back_transaction_when_event_bus_flush_fails(): void + { + // Expect transaction handling + $this->connection->shouldReceive('beginTransaction')->once(); + $this->connection->shouldReceive('rollBack')->once(); + + // Pipeline succeeds + $this->pipeline->shouldReceive('process')->once(); + + // Event bus flush throws an exception + $exception = new Exception('Event bus flush failed'); + $this->eventBus->shouldReceive('flush') + ->once() + ->andThrow($exception); + + // Execute command and expect exception to be re-thrown + $this->expectException(Exception::class); + $this->expectExceptionMessage('Event bus flush failed'); + + $this->commandTester->execute([]); + } +} diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/Console/ConsoleCommandRegistrationTest.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/Console/ConsoleCommandRegistrationTest.php new file mode 100644 index 000000000..78d9d0b23 --- /dev/null +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/Console/ConsoleCommandRegistrationTest.php @@ -0,0 +1,87 @@ +application = new Application($kernel); + } + + /** + * Data provider for console command registration tests. + * + * @return array + */ + public static function consoleCommandProvider(): array + { + return [ + 'ReplayEventsCommand' => [ + 'commandName' => 'middleware:event:replay', + ], + 'ReplaySpecificEventsCommand' => [ + 'commandName' => 'stepup:event:replay', + ], + 'BootstrapIdentityCommand' => [ + 'commandName' => 'middleware:bootstrap:identity', + ], + 'BootstrapIdentityWithYubikeySecondFactorCommand' => [ + 'commandName' => 'middleware:bootstrap:identity-with-yubikey', + ], + 'BootstrapSmsSecondFactorCommand' => [ + 'commandName' => 'middleware:bootstrap:sms', + ], + 'BootstrapYubikeySecondFactorCommand' => [ + 'commandName' => 'middleware:bootstrap:yubikey', + ], + 'BootstrapGsspSecondFactorCommand' => [ + 'commandName' => 'middleware:bootstrap:gssp', + ], + 'MigrateSecondFactorCommand' => [ + 'commandName' => 'middleware:migrate:vetted-tokens', + ], + 'EmailVerifiedSecondFactorRemindersCommand' => [ + 'commandName' => 'middleware:cron:email-reminder', + ], + ]; + } + + #[Test] + #[DataProvider('consoleCommandProvider')] + #[DoesNotPerformAssertions] + public function console_command_is_registered(string $commandName): void + { + $this->application->find($commandName); + } +} diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/EventSourcing/EventCollectionTest.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/EventSourcing/EventCollectionTest.php index 2f20311e5..60640e745 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/EventSourcing/EventCollectionTest.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/EventSourcing/EventCollectionTest.php @@ -19,7 +19,10 @@ namespace Surfnet\StepupMiddleware\MiddlewareBundle\Tests\EventSourcing; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use stdClass; use Surfnet\Stepup\Configuration\Event\NewConfigurationCreatedEvent; use Surfnet\Stepup\Identity\Event\SecondFactorVettedEvent; @@ -30,12 +33,9 @@ class EventCollectionTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - * @group event-replay - * - * @dataProvider emptyOrNonStringProvider - */ + #[Test] + #[DataProvider('emptyOrNonStringProvider')] + #[Group('event-replay')] public function an_event_collection_must_be_created_from_an_array_of_non_empty_strings( bool|int|string|stdClass|array|null $emptyOrNonString, ): void { @@ -45,10 +45,8 @@ public function an_event_collection_must_be_created_from_an_array_of_non_empty_s new EventCollection([$emptyOrNonString]); // @phpstan-ignore-line argument.type: Warning about a faulty constructor argument is exactly what we are testing here } - /** - * @test - * @group event-replay - */ + #[Test] + #[Group('event-replay')] public function an_event_collection_must_contain_event_names_that_are_existing_class_names(): void { $this->expectException(InvalidArgumentException::class); @@ -59,10 +57,8 @@ public function an_event_collection_must_contain_event_names_that_are_existing_c new EventCollection([$nonExistantClass]); } - /** - * @test - * @group event-replay - */ + #[Test] + #[Group('event-replay')] public function an_event_collection_contains_given_event_names(): void { $eventCollection = new EventCollection([NewConfigurationCreatedEvent::class]); @@ -73,10 +69,8 @@ public function an_event_collection_contains_given_event_names(): void ); } - /** - * @test - * @group event-replay - */ + #[Test] + #[Group('event-replay')] public function event_names_can_be_retrieved_from_an_event_collection(): void { $eventNames = [NewConfigurationCreatedEvent::class]; @@ -91,10 +85,8 @@ public function event_names_can_be_retrieved_from_an_event_collection(): void ); } - /** - * @test - * @group event-replay - */ + #[Test] + #[Group('event-replay')] public function an_event_collection_does_not_contain_given_event_names(): void { $eventCollection = new EventCollection([SecondFactorVettedEvent::class]); @@ -105,10 +97,8 @@ public function an_event_collection_does_not_contain_given_event_names(): void ); } - /** - * @test - * @group event-replay - */ + #[Test] + #[Group('event-replay')] public function a_subset_of_events_can_be_selected_from_an_event_collection(): void { $eventCollection = new EventCollection([NewConfigurationCreatedEvent::class, SecondFactorVettedEvent::class]); @@ -121,10 +111,8 @@ public function a_subset_of_events_can_be_selected_from_an_event_collection(): v ); } - /** - * @test - * @group event-replay - */ + #[Test] + #[Group('event-replay')] public function a_subset_containing_events_not_present_in_the_event_collection_cannot_be_selected(): void { $this->expectException(InvalidArgumentException::class); @@ -134,10 +122,8 @@ public function a_subset_containing_events_not_present_in_the_event_collection_c $eventCollection->select([SecondFactorVettedEvent::class]); } - /** - * @test - * @group event-replay - */ + #[Test] + #[Group('event-replay')] public function events_in_an_event_collection_can_be_formatted_as_event_stream_compatible_event_types(): void { $eventCollection = new EventCollection([NewConfigurationCreatedEvent::class, SecondFactorVettedEvent::class]); @@ -158,7 +144,7 @@ public function events_in_an_event_collection_can_be_formatted_as_event_stream_c /** * @return array */ - public function emptyOrNonStringProvider(): array + public static function emptyOrNonStringProvider(): array { return [ 'null' => [null], diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/EventSourcing/ProjectorCollectionTest.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/EventSourcing/ProjectorCollectionTest.php index 603d2b44f..8670d9eb5 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/EventSourcing/ProjectorCollectionTest.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/EventSourcing/ProjectorCollectionTest.php @@ -19,7 +19,9 @@ namespace Surfnet\StepupMiddleware\MiddlewareBundle\Tests\EventSourcing; use Mockery as m; -use PHPUnit\Framework\TestCase as TestCase; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; +use PHPUnit\Framework\TestCase; use Surfnet\StepupMiddleware\ApiBundle\Identity\Projector\SraaProjector; use Surfnet\StepupMiddleware\ApiBundle\Identity\Projector\WhitelistProjector; use Surfnet\StepupMiddleware\ApiBundle\Identity\Repository\SraaRepository; @@ -30,10 +32,8 @@ class ProjectorCollectionTest extends TestCase { use m\Adapter\Phpunit\MockeryPHPUnitIntegration; - /** - * @test - * @group event-replay - */ + #[Test] + #[Group('event-replay')] public function projectors_can_be_added_to_a_projector_collection_during_runtime(): void { $sraaProjector = new SraaProjector(m::mock(SraaRepository::class)); @@ -53,10 +53,8 @@ public function projectors_can_be_added_to_a_projector_collection_during_runtime ); } - /** - * @test - * @group event-replay - */ + #[Test] + #[Group('event-replay')] public function projector_names_can_be_retrieved_from_a_projector_collection(): void { $sraaProjector = new SraaProjector(m::mock(SraaRepository::class)); @@ -76,10 +74,8 @@ public function projector_names_can_be_retrieved_from_a_projector_collection(): ); } - /** - * @test - * @group event-replay - */ + #[Test] + #[Group('event-replay')] public function a_subset_of_projectors_can_be_selected_from_a_projector_collection(): void { $sraaProjector = new SraaProjector(m::mock(SraaRepository::class)); @@ -101,10 +97,8 @@ public function a_subset_of_projectors_can_be_selected_from_a_projector_collecti ); } - /** - * @test - * @group event-replay - */ + #[Test] + #[Group('event-replay')] public function a_subset_containing_projectors_not_present_in_a_projector_collection_cannot_be_selected(): void { $this->expectException(InvalidArgumentException::class); diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/Migrations/InstitutionConfiguration/MappedInstitutionConfigurationTest.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/Migrations/InstitutionConfiguration/MappedInstitutionConfigurationTest.php index fa9802a14..e68e2deb4 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/Migrations/InstitutionConfiguration/MappedInstitutionConfigurationTest.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/Migrations/InstitutionConfiguration/MappedInstitutionConfigurationTest.php @@ -41,10 +41,8 @@ class MappedInstitutionConfigurationTest extends UnitTest { use MockeryPHPUnitIntegration; - /** - * @test - * @group middleware-migration - */ + #[\PHPUnit\Framework\Attributes\Test] + #[\PHPUnit\Framework\Attributes\Group('middleware-migration')] public function infers_the_correct_remove_institution_configuration_command(): void { $institution = new Institution('Babelfish Inc.'); @@ -71,10 +69,8 @@ public function infers_the_correct_remove_institution_configuration_command(): v $this->assertEquals($institution->getInstitution(), $command->institution); } - /** - * @test - * @group middleware-migration - */ + #[\PHPUnit\Framework\Attributes\Test] + #[\PHPUnit\Framework\Attributes\Group('middleware-migration')] public function infers_the_correct_create_institution_configuration_command(): void { $institution = new Institution('Babelfish Inc.'); @@ -101,10 +97,8 @@ public function infers_the_correct_create_institution_configuration_command(): v $this->assertEquals($institution->getInstitution(), $command->institution); } - /** - * @test - * @group middleware-migration - */ + #[\PHPUnit\Framework\Attributes\Test] + #[\PHPUnit\Framework\Attributes\Group('middleware-migration')] public function infers_the_correct_reconfigure_institution_configuration_command(): void { $institution = new Institution('Babelfish Inc.'); @@ -135,10 +129,8 @@ public function infers_the_correct_reconfigure_institution_configuration_command $this->assertEquals($selfVetOption->isEnabled(), $command->selfVetOption); } - /** - * @test - * @group middleware-migration - */ + #[\PHPUnit\Framework\Attributes\Test] + #[\PHPUnit\Framework\Attributes\Group('middleware-migration')] public function no_ra_locations_means_no_add_ra_location_command(): void { $institution = new Institution('Babelfish Inc.'); @@ -164,10 +156,8 @@ public function no_ra_locations_means_no_add_ra_location_command(): void $this->assertEquals(0, count($commands)); } - /** - * @test - * @group middleware-migration - */ + #[\PHPUnit\Framework\Attributes\Test] + #[\PHPUnit\Framework\Attributes\Group('middleware-migration')] public function a_single_ra_location_means_a_single_correct_add_ra_location_command(): void { $institution = new Institution('Babelfish Inc.'); @@ -206,10 +196,8 @@ public function a_single_ra_location_means_a_single_correct_add_ra_location_comm $this->assertCommandMatches($command, $institution, $raLocation); } - /** - * @test - * @group middleware-migration - */ + #[\PHPUnit\Framework\Attributes\Test] + #[\PHPUnit\Framework\Attributes\Group('middleware-migration')] public function multiple_ra_locations_mean_multiple_correct_add_ra_location_commands(): void { $institution = new Institution('Babelfish Inc.'); diff --git a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/Service/SecondFactorDisplayNameResolverServiceTest.php b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/Service/SecondFactorDisplayNameResolverServiceTest.php index b8429fac7..c904f1b6e 100644 --- a/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/Service/SecondFactorDisplayNameResolverServiceTest.php +++ b/src/Surfnet/StepupMiddleware/MiddlewareBundle/Tests/Service/SecondFactorDisplayNameResolverServiceTest.php @@ -19,6 +19,7 @@ namespace Surfnet\StepupMiddleware\MiddlewareBundle\Tests\Service; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use Surfnet\StepupBundle\Value\SecondFactorType; use Surfnet\StepupMiddleware\MiddlewareBundle\Service\SecondFactorDisplayNameResolverService; @@ -27,9 +28,7 @@ class SecondFactorDisplayNameResolverServiceTest extends TestCase { use MockeryPHPUnitIntegration; - /** - * @test - */ + #[Test] public function verify_resolve_displayname(): void { $factors = ['azuremfa' => 'Azure MFA']; @@ -39,9 +38,7 @@ public function verify_resolve_displayname(): void self::assertEquals('Azure MFA', $resolver->resolveByType($type)); } - /** - * @test - */ + #[Test] public function verify_resolve_displayname_fallback(): void { $factors = ['azuremfa' => 'Azure MFA']; diff --git a/symfony.lock b/symfony.lock index ae87c3da5..862a56e38 100644 --- a/symfony.lock +++ b/symfony.lock @@ -36,26 +36,17 @@ "version": "1.4.2" }, "doctrine/annotations": { - "version": "1.0", + "version": "2.0", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "1.0", - "ref": "a2759dd6123694c8d901d0ec80006e044c2e6457" - }, - "files": [ - "config/routes/annotations.yaml" - ] - }, - "doctrine/cache": { - "version": "1.10.1" + "branch": "main", + "version": "1.10", + "ref": "64d8583af5ea57b7afa4aba4b159907f3a148b05" + } }, "doctrine/collections": { "version": "1.6.5" }, - "doctrine/common": { - "version": "2.13.3" - }, "doctrine/data-fixtures": { "version": "1.4.3" }, @@ -299,15 +290,9 @@ "sebastian/object-reflector": { "version": "1.1.1" }, - "sebastian/phpcpd": { - "version": "2.0.1" - }, "sebastian/recursion-context": { "version": "3.0.0" }, - "sebastian/resource-operations": { - "version": "2.0.1" - }, "sebastian/type": { "version": "1.1.3" }, @@ -527,15 +512,24 @@ "symfony/polyfill-php73": { "version": "v1.17.0" }, - "symfony/polyfill-php80": { - "version": "v1.17.0" - }, "symfony/process": { "version": "v4.4.37" }, "symfony/property-access": { "version": "v4.4.9" }, + "symfony/property-info": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "7.3", + "ref": "dae70df71978ae9226ae915ffd5fad817f5ca1f7" + }, + "files": [ + "config/packages/property_info.yaml" + ] + }, "symfony/routing": { "version": "4.2", "recipe": { diff --git a/tests/database/AuthorizationRepositoryMatrixTest.php b/tests/database/AuthorizationRepositoryMatrixTest.php index 8df576fcf..a19632f20 100644 --- a/tests/database/AuthorizationRepositoryMatrixTest.php +++ b/tests/database/AuthorizationRepositoryMatrixTest.php @@ -42,7 +42,7 @@ class AuthorizationRepositoryMatrixTest extends KernelTestCase */ private ?object $authzRepository; - public function authorizationMatrix(): array + public static function authorizationMatrix(): array { $ra = RegistrationAuthorityRole::ra(); $raa = RegistrationAuthorityRole::raa(); @@ -60,7 +60,7 @@ public function authorizationMatrix(): array ]; } - public function selectRaaMatrix(): array + public static function selectRaaMatrix(): array { $aRaa = new IdentityId('cccfece4-e5e5-40b7-9aa4-a800d7cd3633'); // Raa @ institution A $ghRaa = new IdentityId('02b70719-243f-4c7d-8649-48952a816ddf'); // RAA @ institution H @@ -87,8 +87,8 @@ protected function setUp(): void /** * A test matrix to verify the correct institutions are selected for a given identity for a * specific institution role. - * @dataProvider authorizationMatrix */ + #[\PHPUnit\Framework\Attributes\DataProvider('authorizationMatrix')] public function test_get_institutions_for_role_matrix( RegistrationAuthorityRole $requiredRole, IdentityId $identity, @@ -108,9 +108,7 @@ public function test_get_institutions_for_role_matrix( ); } - /** - * @dataProvider selectRaaMatrix - */ + #[\PHPUnit\Framework\Attributes\DataProvider('selectRaaMatrix')] public function test_select_raa_authorization(IdentityId $identityId, array $expected): void { $institutions = $this->authzRepository->getInstitutionsForSelectRaaRole($identityId);