diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ab3a6a..b16ada1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ Latest ------ ## Changes +* [#196](https://github.com/cleverage/ui-process-bundle/issues/196) Prefix the global names of the bundle, as required by the Symfony best practices for bundles: new `cleverage_ui_process.upload_directory` parameter, the `upload_directory` parameter is deprecated (when the application still sets it, its value is used with a deprecation, unless the new parameter is also set; new internal `UploadDirectoryParameterPass`); the Twig functions `log_label`, `log_translation`, `log_css_class`, `get_last_execution_date`, `get_process_source`, `get_process_target`, `resolve_ui_options` and the Twig filter `md5` are prefixed with `cleverage_ui_process_`, the former names are deprecated. The former names will be removed in 4.0. Update documentation and UPGRADE.md, add tests. * [#194](https://github.com/cleverage/ui-process-bundle/issues/194) The tables and columns of the entities have explicit names, those created by the migrations of the bundle: the schema no longer depends on the Doctrine naming strategy of the application (the `underscore_number_aware` strategy is no longer a prerequisite; with the Doctrine default one, the indexes referenced missing columns). Same names with the `underscore` / `underscore_number_aware` strategies, no new migration. Update documentation, add tests. * [#190](https://github.com/cleverage/ui-process-bundle/issues/190) Add aliases named after their class to `ProcessExecutionManager`, `ProcessConfigurationsManager`, `ProcessExecutionRepository` and `ProcessScheduleRepository` (as the Monolog handlers): they can be autowired. Update documentation, add tests. * [#192](https://github.com/cleverage/ui-process-bundle/issues/192) The controllers and the HTTP value resolver are defined explicitly, without autowiring nor autoconfiguration (Symfony best practices for bundles, as [cleverage/process-bundle#149](https://github.com/cleverage/process-bundle/issues/149)): same arguments, tags and calls. The `$context` binding of the controllers no longer registers the `AdminContextFactory` service for the `AdminContext $context` arguments of the EasyAdmin actions (never used: EasyAdmin resolves the context first). Add tests. diff --git a/UPGRADE.md b/UPGRADE.md index 20aa9d5..576761b 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -22,6 +22,37 @@ The routes of the bundle are prefixed with `cleverage_ui_process_`. The former n The routes of the CRUD pages are generated by EasyAdmin from the dashboard route name, e.g. `process_process_execution_index` is now `cleverage_ui_process_process_execution_index`. +### Upload directory parameter + +The `upload_directory` container parameter is deprecated, use `cleverage_ui_process.upload_directory`: it will be +removed in 4.0. Setting `upload_directory` in your application still works (with a deprecation), unless +`cleverage_ui_process.upload_directory` is also set. + +```yaml +# config/services.yaml +parameters: + # Before (deprecated) + upload_directory: '%kernel.project_dir%/var/imports' + # After + cleverage_ui_process.upload_directory: '%kernel.project_dir%/var/imports' +``` + +### Twig functions and filter + +The Twig functions and filter of the bundle are prefixed with `cleverage_ui_process_`. The former names are deprecated, +removed in 4.0: update your templates (e.g. overridden templates of the bundle). + +| Before (deprecated) | After | +|----------------------------------|-------------------------------------------------------| +| `log_label()` | `cleverage_ui_process_log_label()` | +| `log_translation()` | `cleverage_ui_process_log_translation()` | +| `log_css_class()` | `cleverage_ui_process_log_css_class()` | +| `get_last_execution_date()` | `cleverage_ui_process_get_last_execution_date()` | +| `get_process_source()` | `cleverage_ui_process_get_process_source()` | +| `get_process_target()` | `cleverage_ui_process_get_process_target()` | +| `resolve_ui_options()` | `cleverage_ui_process_resolve_ui_options()` | +| `md5` (filter) | `cleverage_ui_process_md5` (filter) | + ## v3.0 ### Import routes diff --git a/config/services/controller.yaml b/config/services/controller.yaml index 620b7e4..97c4806 100644 --- a/config/services/controller.yaml +++ b/config/services/controller.yaml @@ -23,7 +23,7 @@ services: $adminContextProvider: '@EasyCorp\Bundle\EasyAdminBundle\Provider\AdminContextProvider' bind: # Argument of the action - $uploadDirectory: '%upload_directory%' + $uploadDirectory: '%cleverage_ui_process.upload_directory%' calls: - [setContainer, ['@Psr\Container\ContainerInterface']] tags: diff --git a/config/services/http_value_resolver.yaml b/config/services/http_value_resolver.yaml index 30c8b47..de32113 100644 --- a/config/services/http_value_resolver.yaml +++ b/config/services/http_value_resolver.yaml @@ -3,7 +3,7 @@ services: class: CleverAge\UiProcessBundle\Http\ValueResolver\HttpProcessExecuteValueResolver public: false arguments: - - '%upload_directory%' + - '%cleverage_ui_process.upload_directory%' - '@serializer' tags: # Targeted value resolver: #[ValueResolver('http_process_execution')], as #[AsTargetedValueResolver] diff --git a/config/services/parameters.yaml b/config/services/parameters.yaml index 3cee611..52a1c31 100644 --- a/config/services/parameters.yaml +++ b/config/services/parameters.yaml @@ -1,2 +1,4 @@ parameters: - upload_directory: '%kernel.project_dir%/var/storage/uploads' + cleverage_ui_process.upload_directory: '%kernel.project_dir%/var/storage/uploads' + # Deprecated since 3.3, removed in 4.0 (see UploadDirectoryParameterPass) + upload_directory: '%cleverage_ui_process.upload_directory%' diff --git a/docs/cookbooks/form_file_upload.md b/docs/cookbooks/form_file_upload.md index 2d7da4f..a93ec3b 100644 --- a/docs/cookbooks/form_file_upload.md +++ b/docs/cookbooks/form_file_upload.md @@ -63,7 +63,7 @@ How it works: - `ui_launch_mode: form` makes the "Launch" action of the process list open a form instead of a confirmation modal (see [launch modes](../reference/02-process_ui_options.md#launch-modes)). - `entrypoint_type: file` turns the `input` field into a file upload. As the process has an `entry_point`, the field - is required. The uploaded file is saved in the `upload_directory` directory and its path is sent to the + is required. The uploaded file is saved in the `cleverage_ui_process.upload_directory` directory and its path is sent to the `log_file` task (see [launch form](../reference/02-process_ui_options.md#launch-form)). - `default.context` pre-fills a `delimiter` line in the context collection (see [default values](../reference/02-process_ui_options.md#default-values)). It is injected into the @@ -80,7 +80,7 @@ How it works: (see [process executions & logs](../reference/04-process_executions_and_logs.md)). Uploaded files are not removed after the execution: add a cleaning step at the end of the process (e.g. a -[FileRemoverTask](https://github.com/cleverage/process-bundle/blob/main/docs/reference/tasks/file_remover_task.md)) or purge the `upload_directory` directory periodically. +[FileRemoverTask](https://github.com/cleverage/process-bundle/blob/main/docs/reference/tasks/file_remover_task.md)) or purge the `cleverage_ui_process.upload_directory` directory periodically. The same process can also be launched through the [HTTP API](../reference/06-http_api.md), with a file upload: diff --git a/docs/reference/01-bundle_configuration.md b/docs/reference/01-bundle_configuration.md index 674a8c9..754caf8 100644 --- a/docs/reference/01-bundle_configuration.md +++ b/docs/reference/01-bundle_configuration.md @@ -94,16 +94,17 @@ See [stopping a process execution](04-process_executions_and_logs.md#stopping-a- Container parameters -------------------- -| Parameter | Default | Description | -|--------------------|------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------| -| `upload_directory` | `%kernel.project_dir%/var/storage/uploads` | Directory where files uploaded from the launch form or the [HTTP API](06-http_api.md) are stored before being passed as process input. | +| Parameter | Default | Description | +|-----------------------------------------|-------------------------------------------|-------------| +| `cleverage_ui_process.upload_directory` | `%kernel.project_dir%/var/storage/uploads` | Directory where files uploaded from the launch form or the [HTTP API](06-http_api.md) are stored before being passed as process input. | +| `upload_directory` | `%cleverage_ui_process.upload_directory%` | Deprecated since 3.3, removed in 4.0: use `cleverage_ui_process.upload_directory`. When your application still sets it, its value is used (unless `cleverage_ui_process.upload_directory` is also set), with a deprecation. | It can be overridden in your application: ```yaml # config/services.yaml parameters: - upload_directory: '%kernel.project_dir%/var/imports' + cleverage_ui_process.upload_directory: '%kernel.project_dir%/var/imports' ``` Configuration added to other bundles diff --git a/docs/reference/02-process_ui_options.md b/docs/reference/02-process_ui_options.md index 5421500..7bcb798 100644 --- a/docs/reference/02-process_ui_options.md +++ b/docs/reference/02-process_ui_options.md @@ -79,7 +79,7 @@ The launch form (`/process/launch?process=`) contains: - a `context` collection of key/value pairs (both are required when a line is added). Each pair becomes a process context value, like `-c key:value` on the `cleverage:process:execute` console command. -When `entrypoint_type` is `file`, the uploaded file is saved to the `upload_directory` directory (see +When `entrypoint_type` is `file`, the uploaded file is saved to the `cleverage_ui_process.upload_directory` directory (see [bundle configuration](01-bundle_configuration.md#container-parameters)) with a random name keeping the original extension, and its absolute path is passed as process input. The file is not removed after the execution. diff --git a/docs/reference/06-http_api.md b/docs/reference/06-http_api.md index 05523fa..ddcfd5e 100644 --- a/docs/reference/06-http_api.md +++ b/docs/reference/06-http_api.md @@ -31,7 +31,7 @@ Parameters can be sent either as a JSON body, or as form data (`application/x-ww | Parameter | Type | Required | Default | Description | |-----------|---------------------------|:--------:|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `code` | `string` | **X** | | Code of the process. It must exist and be public. | -| `input` | `string` or file | | `null` | Process input. With form data, it can be an uploaded file: the file is saved in the `upload_directory` directory (see [bundle configuration](01-bundle_configuration.md#container-parameters)) and its path is passed as input. | +| `input` | `string` or file | | `null` | Process input. With form data, it can be an uploaded file: the file is saved in the `cleverage_ui_process.upload_directory` directory (see [bundle configuration](01-bundle_configuration.md#container-parameters)) and its path is passed as input. | | `context` | `object` or JSON `string` | | `{}` | Process context, as key/value pairs. A JSON string must decode to an object or an array (`422` otherwise). With form data, send one field per value: `context[key]=value`. | | `queue` | `bool` | | `true` | `true`: the process is queued to the `execute_process` transport (see [messenger](08-messenger.md)). `false`: the process is executed during the HTTP request. | diff --git a/src/CleverAgeUiProcessBundle.php b/src/CleverAgeUiProcessBundle.php index cbbc72d..4c28e2d 100644 --- a/src/CleverAgeUiProcessBundle.php +++ b/src/CleverAgeUiProcessBundle.php @@ -14,6 +14,7 @@ namespace CleverAge\UiProcessBundle; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\Bundle; @@ -34,5 +35,6 @@ public function build(ContainerBuilder $container): void parent::build($container); $container->addCompilerPass(new CheckDoctrineLazyGhostObjectsPass()); + $container->addCompilerPass(new UploadDirectoryParameterPass()); } } diff --git a/src/DependencyInjection/Compiler/UploadDirectoryParameterPass.php b/src/DependencyInjection/Compiler/UploadDirectoryParameterPass.php new file mode 100644 index 0000000..406b8e7 --- /dev/null +++ b/src/DependencyInjection/Compiler/UploadDirectoryParameterPass.php @@ -0,0 +1,52 @@ +getParameterBag()->all(); + if (!\array_key_exists(self::DEPRECATED_PARAMETER, $parameters)) { + return; + } + + $value = $parameters[self::DEPRECATED_PARAMETER]; + if (self::DEPRECATED_DEFAULT_VALUE !== $value) { + trigger_deprecation('cleverage/ui-process-bundle', '3.3', 'Setting the "%s" parameter is deprecated, set "%s" instead. It will be ignored in 4.0.', self::DEPRECATED_PARAMETER, self::PARAMETER); + if (\is_string($value) && self::DEFAULT_VALUE === ($parameters[self::PARAMETER] ?? null)) { + $container->setParameter(self::PARAMETER, $value); + } + } + + $container->deprecateParameter(self::DEPRECATED_PARAMETER, 'cleverage/ui-process-bundle', '3.3', 'The "%s" parameter is deprecated, use "'.self::PARAMETER.'" instead. It will be removed in 4.0.'); + } +} diff --git a/src/Twig/Extension/LogLevelExtension.php b/src/Twig/Extension/LogLevelExtension.php index df6a250..f4d0050 100644 --- a/src/Twig/Extension/LogLevelExtension.php +++ b/src/Twig/Extension/LogLevelExtension.php @@ -14,6 +14,7 @@ namespace CleverAge\UiProcessBundle\Twig\Extension; use CleverAge\UiProcessBundle\Twig\Runtime\LogLevelExtensionRuntime; +use Twig\DeprecatedCallableInfo; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; @@ -26,9 +27,13 @@ class LogLevelExtension extends AbstractExtension public function getFunctions(): array { return [ - new TwigFunction('log_label', [LogLevelExtensionRuntime::class, 'getLabel']), - new TwigFunction('log_translation', [LogLevelExtensionRuntime::class, 'getTranslation']), - new TwigFunction('log_css_class', [LogLevelExtensionRuntime::class, 'getCssClass']), + new TwigFunction('cleverage_ui_process_log_label', [LogLevelExtensionRuntime::class, 'getLabel']), + new TwigFunction('cleverage_ui_process_log_translation', [LogLevelExtensionRuntime::class, 'getTranslation']), + new TwigFunction('cleverage_ui_process_log_css_class', [LogLevelExtensionRuntime::class, 'getCssClass']), + // Former names, removed in 4.0 + new TwigFunction('log_label', [LogLevelExtensionRuntime::class, 'getLabel'], ['deprecation_info' => new DeprecatedCallableInfo('cleverage/ui-process-bundle', '3.3', 'cleverage_ui_process_log_label')]), + new TwigFunction('log_translation', [LogLevelExtensionRuntime::class, 'getTranslation'], ['deprecation_info' => new DeprecatedCallableInfo('cleverage/ui-process-bundle', '3.3', 'cleverage_ui_process_log_translation')]), + new TwigFunction('log_css_class', [LogLevelExtensionRuntime::class, 'getCssClass'], ['deprecation_info' => new DeprecatedCallableInfo('cleverage/ui-process-bundle', '3.3', 'cleverage_ui_process_log_css_class')]), ]; } } diff --git a/src/Twig/Extension/MD5Extension.php b/src/Twig/Extension/MD5Extension.php index 311b728..138ac36 100644 --- a/src/Twig/Extension/MD5Extension.php +++ b/src/Twig/Extension/MD5Extension.php @@ -14,6 +14,7 @@ namespace CleverAge\UiProcessBundle\Twig\Extension; use CleverAge\UiProcessBundle\Twig\Runtime\MD5ExtensionRuntime; +use Twig\DeprecatedCallableInfo; use Twig\Extension\AbstractExtension; use Twig\TwigFilter; @@ -26,7 +27,9 @@ class MD5Extension extends AbstractExtension public function getFilters(): array { return [ - new TwigFilter('md5', [MD5ExtensionRuntime::class, 'md5']), + new TwigFilter('cleverage_ui_process_md5', [MD5ExtensionRuntime::class, 'md5']), + // Former names, removed in 4.0 + new TwigFilter('md5', [MD5ExtensionRuntime::class, 'md5'], ['deprecation_info' => new DeprecatedCallableInfo('cleverage/ui-process-bundle', '3.3', 'cleverage_ui_process_md5')]), ]; } } diff --git a/src/Twig/Extension/ProcessExecutionExtension.php b/src/Twig/Extension/ProcessExecutionExtension.php index fed4289..cedc4f4 100644 --- a/src/Twig/Extension/ProcessExecutionExtension.php +++ b/src/Twig/Extension/ProcessExecutionExtension.php @@ -14,6 +14,7 @@ namespace CleverAge\UiProcessBundle\Twig\Extension; use CleverAge\UiProcessBundle\Twig\Runtime\ProcessExecutionExtensionRuntime; +use Twig\DeprecatedCallableInfo; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; @@ -26,18 +27,13 @@ class ProcessExecutionExtension extends AbstractExtension public function getFunctions(): array { return [ - new TwigFunction( - 'get_last_execution_date', - [ProcessExecutionExtensionRuntime::class, 'getLastExecutionDate'] - ), - new TwigFunction( - 'get_process_source', - [ProcessExecutionExtensionRuntime::class, 'getProcessSource'] - ), - new TwigFunction( - 'get_process_target', - [ProcessExecutionExtensionRuntime::class, 'getProcessTarget'] - ), + new TwigFunction('cleverage_ui_process_get_last_execution_date', [ProcessExecutionExtensionRuntime::class, 'getLastExecutionDate']), + new TwigFunction('cleverage_ui_process_get_process_source', [ProcessExecutionExtensionRuntime::class, 'getProcessSource']), + new TwigFunction('cleverage_ui_process_get_process_target', [ProcessExecutionExtensionRuntime::class, 'getProcessTarget']), + // Former names, removed in 4.0 + new TwigFunction('get_last_execution_date', [ProcessExecutionExtensionRuntime::class, 'getLastExecutionDate'], ['deprecation_info' => new DeprecatedCallableInfo('cleverage/ui-process-bundle', '3.3', 'cleverage_ui_process_get_last_execution_date')]), + new TwigFunction('get_process_source', [ProcessExecutionExtensionRuntime::class, 'getProcessSource'], ['deprecation_info' => new DeprecatedCallableInfo('cleverage/ui-process-bundle', '3.3', 'cleverage_ui_process_get_process_source')]), + new TwigFunction('get_process_target', [ProcessExecutionExtensionRuntime::class, 'getProcessTarget'], ['deprecation_info' => new DeprecatedCallableInfo('cleverage/ui-process-bundle', '3.3', 'cleverage_ui_process_get_process_target')]), ]; } } diff --git a/src/Twig/Extension/ProcessExtension.php b/src/Twig/Extension/ProcessExtension.php index 93db48b..85eda4e 100644 --- a/src/Twig/Extension/ProcessExtension.php +++ b/src/Twig/Extension/ProcessExtension.php @@ -14,6 +14,7 @@ namespace CleverAge\UiProcessBundle\Twig\Extension; use CleverAge\UiProcessBundle\Twig\Runtime\ProcessExtensionRuntime; +use Twig\DeprecatedCallableInfo; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; @@ -26,10 +27,9 @@ class ProcessExtension extends AbstractExtension public function getFunctions(): array { return [ - new TwigFunction( - 'resolve_ui_options', - [ProcessExtensionRuntime::class, 'getUiOptions'] - ), + new TwigFunction('cleverage_ui_process_resolve_ui_options', [ProcessExtensionRuntime::class, 'getUiOptions']), + // Former names, removed in 4.0 + new TwigFunction('resolve_ui_options', [ProcessExtensionRuntime::class, 'getUiOptions'], ['deprecation_info' => new DeprecatedCallableInfo('cleverage/ui-process-bundle', '3.3', 'cleverage_ui_process_resolve_ui_options')]), ]; } } diff --git a/templates/admin/field/log_level.html.twig b/templates/admin/field/log_level.html.twig index 1308f44..721848a 100644 --- a/templates/admin/field/log_level.html.twig +++ b/templates/admin/field/log_level.html.twig @@ -1 +1 @@ -{{ log_translation(log_label(field.value)) }} +{{ cleverage_ui_process_log_translation(cleverage_ui_process_log_label(field.value)) }} diff --git a/templates/admin/field/process_source.html.twig b/templates/admin/field/process_source.html.twig index fea3203..4ff6f15 100644 --- a/templates/admin/field/process_source.html.twig +++ b/templates/admin/field/process_source.html.twig @@ -1 +1 @@ -{{ get_process_source(entity.instance.code) }} +{{ cleverage_ui_process_get_process_source(entity.instance.code) }} diff --git a/templates/admin/field/process_target.html.twig b/templates/admin/field/process_target.html.twig index 15470e6..911252d 100644 --- a/templates/admin/field/process_target.html.twig +++ b/templates/admin/field/process_target.html.twig @@ -1 +1 @@ -{{ get_process_target(entity.instance.code) }} +{{ cleverage_ui_process_get_process_target(entity.instance.code) }} diff --git a/templates/admin/field/report.html.twig b/templates/admin/field/report.html.twig index 7762e01..2932ec9 100644 --- a/templates/admin/field/report.html.twig +++ b/templates/admin/field/report.html.twig @@ -3,6 +3,6 @@ {# @var entity \EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto #} diff --git a/templates/admin/process/list.html.twig b/templates/admin/process/list.html.twig index fa72cbb..77b1e39 100644 --- a/templates/admin/process/list.html.twig +++ b/templates/admin/process/list.html.twig @@ -22,8 +22,8 @@ {% block table_body %} {# @var process \CleverAge\ProcessBundle\Configuration\ProcessConfiguration #} {% for process in processes %} - {% set lastExecution = get_last_execution_date(process.code) %} - {% set uiOptions = resolve_ui_options(process.code) %} + {% set lastExecution = cleverage_ui_process_get_last_execution_date(process.code) %} + {% set uiOptions = cleverage_ui_process_resolve_ui_options(process.code) %} {% set statusClass = '' %} {% if lastExecution is not null %} {% set statusClass = {failed: 'danger', stopped: 'warning'}[lastExecution.status.value] ?? 'success' %} diff --git a/tests/App/config/packages.yaml b/tests/App/config/packages.yaml index a5c95b2..ce4eb59 100644 --- a/tests/App/config/packages.yaml +++ b/tests/App/config/packages.yaml @@ -1,5 +1,5 @@ parameters: - upload_directory: '%kernel.cache_dir%/uploads' + cleverage_ui_process.upload_directory: '%kernel.cache_dir%/uploads' # SQLite by default; the CI runs the migrations on MySQL / MariaDB / PostgreSQL with DATABASE_URL env(DATABASE_URL): 'sqlite:///%kernel.cache_dir%/test.db' diff --git a/tests/CleverAgeUiProcessBundleTest.php b/tests/CleverAgeUiProcessBundleTest.php index b900fa2..6408097 100644 --- a/tests/CleverAgeUiProcessBundleTest.php +++ b/tests/CleverAgeUiProcessBundleTest.php @@ -16,6 +16,7 @@ use CleverAge\UiProcessBundle\CleverAgeUiProcessBundle; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\Routing\DeprecatedEasyAdminRouteAliasLoader; use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\UsesClass; @@ -26,6 +27,7 @@ #[UsesClass(CleverAgeUiProcessExtension::class)] #[UsesClass(DeprecatedEasyAdminRouteAliasLoader::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] class CleverAgeUiProcessBundleTest extends TestCase { public function testPathIsTheBundleRootDirectory(): void @@ -56,4 +58,16 @@ public function testDoctrineLazyGhostObjectsCheckIsRegistered(): void ); self::assertCount(1, $passes); } + + public function testUploadDirectoryParameterPassIsRegistered(): void + { + $container = new ContainerBuilder(); + (new CleverAgeUiProcessBundle())->build($container); + + $passes = array_filter( + $container->getCompilerPassConfig()->getPasses(), + static fn (object $pass): bool => $pass instanceof UploadDirectoryParameterPass, + ); + self::assertCount(1, $passes); + } } diff --git a/tests/DependencyInjection/CleverAgeUiProcessExtensionTest.php b/tests/DependencyInjection/CleverAgeUiProcessExtensionTest.php index e5f2e83..78cd1b4 100644 --- a/tests/DependencyInjection/CleverAgeUiProcessExtensionTest.php +++ b/tests/DependencyInjection/CleverAgeUiProcessExtensionTest.php @@ -129,7 +129,9 @@ public function testLoadWithDefaultConfiguration(): void // Stateful services, reset between two messages of a worker self::assertSame([['method' => 'reset']], $container->getDefinition('cleverage_ui_process.manager.process_execution')->getTag('kernel.reset')); self::assertSame([['method' => 'reset']], $container->getDefinition('cleverage_ui_process.monolog_handler.doctrine_process')->getTag('kernel.reset')); - self::assertTrue($container->hasParameter('upload_directory')); + self::assertSame('%kernel.project_dir%/var/storage/uploads', $container->getParameter('cleverage_ui_process.upload_directory')); + // Deprecated, see UploadDirectoryParameterPass + self::assertSame('%cleverage_ui_process.upload_directory%', $container->getParameterBag()->all()['upload_directory']); self::assertSame( ['ROLE_ADMIN' => 'ROLE_ADMIN'], diff --git a/tests/DependencyInjection/Compiler/UploadDirectoryParameterPassTest.php b/tests/DependencyInjection/Compiler/UploadDirectoryParameterPassTest.php new file mode 100644 index 0000000..d9c80d4 --- /dev/null +++ b/tests/DependencyInjection/Compiler/UploadDirectoryParameterPassTest.php @@ -0,0 +1,106 @@ +, string, list}> + */ + public static function provideParameters(): iterable + { + yield 'defaults' => [[], '/app/var/storage/uploads', []]; + yield 'new parameter set' => [['cleverage_ui_process.upload_directory' => '/app/var/imports'], '/app/var/imports', []]; + yield 'deprecated parameter set' => [['upload_directory' => '/app/var/legacy'], '/app/var/legacy', [self::SETTING_DEPRECATION]]; + yield 'both set: the new one wins' => [ + ['upload_directory' => '/app/var/legacy', 'cleverage_ui_process.upload_directory' => '/app/var/imports'], + '/app/var/imports', + [self::SETTING_DEPRECATION], + ]; + } + + /** + * @param array $applicationParameters + * @param list $expectedDeprecations + */ + #[DataProvider('provideParameters')] + public function testProcess(array $applicationParameters, string $expectedDirectory, array $expectedDeprecations): void + { + $container = new ContainerBuilder(); + $container->setParameter('kernel.project_dir', '/app'); + // Default values of the bundle (config/services/parameters.yaml), overridden by the application + $container->setParameter(UploadDirectoryParameterPass::PARAMETER, UploadDirectoryParameterPass::DEFAULT_VALUE); + $container->setParameter(UploadDirectoryParameterPass::DEPRECATED_PARAMETER, UploadDirectoryParameterPass::DEPRECATED_DEFAULT_VALUE); + foreach ($applicationParameters as $name => $value) { + $container->setParameter($name, $value); + } + + $deprecations = $this->collectDeprecations(static function () use ($container): void { + (new UploadDirectoryParameterPass())->process($container); + $container->getParameterBag()->resolve(); + }); + self::assertSame($expectedDeprecations, $deprecations); + self::assertSame($expectedDirectory, $container->getParameter(UploadDirectoryParameterPass::PARAMETER)); + + // Reading the deprecated parameter + $deprecations = $this->collectDeprecations(static function () use ($container): void { + $container->getParameter(UploadDirectoryParameterPass::DEPRECATED_PARAMETER); + }); + self::assertSame([self::READING_DEPRECATION], $deprecations); + } + + public function testWithoutDeprecatedParameter(): void + { + $container = new ContainerBuilder(); + + $deprecations = $this->collectDeprecations(static function () use ($container): void { + (new UploadDirectoryParameterPass())->process($container); + }); + + self::assertSame([], $deprecations); + self::assertFalse($container->hasParameter(UploadDirectoryParameterPass::DEPRECATED_PARAMETER)); + } + + /** + * @param callable(): void $callback + * + * @return list + */ + private function collectDeprecations(callable $callback): array + { + $deprecations = []; + set_error_handler(static function (int $errno, string $errstr) use (&$deprecations): bool { + $deprecations[] = $errstr; + + return true; + }, \E_USER_DEPRECATED); + try { + $callback(); + } finally { + restore_error_handler(); + } + + return $deprecations; + } +} diff --git a/tests/Functional/HttpProcessExecuteTest.php b/tests/Functional/HttpProcessExecuteTest.php index fb6c487..419caa7 100644 --- a/tests/Functional/HttpProcessExecuteTest.php +++ b/tests/Functional/HttpProcessExecuteTest.php @@ -22,6 +22,7 @@ use CleverAge\UiProcessBundle\Controller\ProcessExecuteController; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\DependencyInjection\Configuration; use CleverAge\UiProcessBundle\Entity\ProcessExecution; use CleverAge\UiProcessBundle\Entity\User; @@ -57,6 +58,7 @@ #[CoversClass(HttpProcessExecutionAuthenticator::class)] #[UsesClass(CleverAgeUiProcessBundle::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] #[UsesClass(LogRecordCrudController::class)] #[UsesClass(ProcessDashboardController::class)] #[UsesClass(ProcessExecutionCrudController::class)] diff --git a/tests/Functional/LaunchActionTest.php b/tests/Functional/LaunchActionTest.php index 95d2a9a..8430b53 100644 --- a/tests/Functional/LaunchActionTest.php +++ b/tests/Functional/LaunchActionTest.php @@ -23,6 +23,7 @@ use CleverAge\UiProcessBundle\Controller\Admin\UserCrudController; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\DependencyInjection\Configuration; use CleverAge\UiProcessBundle\Entity\User; use CleverAge\UiProcessBundle\EventSubscriber\ProcessEventSubscriber; @@ -63,6 +64,7 @@ #[UsesClass(ProcessExtensionRuntime::class)] #[UsesClass(CleverAgeUiProcessBundle::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] #[UsesClass(LogRecordCrudController::class)] #[UsesClass(ProcessExecutionCrudController::class)] #[UsesClass(ProcessScheduleCrudController::class)] @@ -146,7 +148,7 @@ public function testLaunchWithFileUpload(): void // The file is saved in the upload directory, its path is the process input self::assertIsString($messages[0]->input); self::assertStringEndsWith('.csv', $messages[0]->input); - $uploadDirectory = static::getContainer()->getParameter('upload_directory'); + $uploadDirectory = static::getContainer()->getParameter('cleverage_ui_process.upload_directory'); self::assertIsString($uploadDirectory); self::assertStringStartsWith($uploadDirectory.'/', $messages[0]->input); self::assertSame('line1', file_get_contents($messages[0]->input)); diff --git a/tests/Functional/LogRecordCrudTest.php b/tests/Functional/LogRecordCrudTest.php index 1684e50..23ee17b 100644 --- a/tests/Functional/LogRecordCrudTest.php +++ b/tests/Functional/LogRecordCrudTest.php @@ -24,6 +24,7 @@ use CleverAge\UiProcessBundle\Controller\Admin\UserCrudController; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\DependencyInjection\Configuration; use CleverAge\UiProcessBundle\Entity\LogRecord; use CleverAge\UiProcessBundle\Entity\ProcessExecution; @@ -63,6 +64,7 @@ #[UsesClass(LogLevelExtensionRuntime::class)] #[UsesClass(CleverAgeUiProcessBundle::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] #[UsesClass(ProcessExecutionCrudController::class)] #[UsesClass(ProcessScheduleCrudController::class)] #[UsesClass(UserCrudController::class)] diff --git a/tests/Functional/ProcessExecutionCrudTest.php b/tests/Functional/ProcessExecutionCrudTest.php index 8b89705..eeb06ac 100644 --- a/tests/Functional/ProcessExecutionCrudTest.php +++ b/tests/Functional/ProcessExecutionCrudTest.php @@ -24,6 +24,7 @@ use CleverAge\UiProcessBundle\Controller\Admin\UserCrudController; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\DependencyInjection\Configuration; use CleverAge\UiProcessBundle\Entity\Enum\ProcessExecutionStatus; use CleverAge\UiProcessBundle\Entity\LogRecord; @@ -67,6 +68,7 @@ #[UsesClass(ProcessExecutionExtensionRuntime::class)] #[UsesClass(CleverAgeUiProcessBundle::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] #[UsesClass(LogRecordCrudController::class)] #[UsesClass(ProcessScheduleCrudController::class)] #[UsesClass(UserCrudController::class)] diff --git a/tests/Functional/ProcessExecutionNotificationTest.php b/tests/Functional/ProcessExecutionNotificationTest.php index a1fc04c..2e08d49 100644 --- a/tests/Functional/ProcessExecutionNotificationTest.php +++ b/tests/Functional/ProcessExecutionNotificationTest.php @@ -17,6 +17,7 @@ use CleverAge\UiProcessBundle\CleverAgeUiProcessBundle; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\DependencyInjection\Configuration; use CleverAge\UiProcessBundle\Entity\ProcessExecution; use CleverAge\UiProcessBundle\Event\ProcessExecutionEndedEvent; @@ -41,6 +42,7 @@ #[CoversClass(ProcessExecutionEndedEvent::class)] #[UsesClass(CleverAgeUiProcessBundle::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] #[UsesClass(CleverAgeUiProcessExtension::class)] #[UsesClass(DeprecatedEasyAdminRouteAliasLoader::class)] #[UsesClass(Configuration::class)] diff --git a/tests/Functional/ProcessListTest.php b/tests/Functional/ProcessListTest.php index 42520b0..37a7046 100644 --- a/tests/Functional/ProcessListTest.php +++ b/tests/Functional/ProcessListTest.php @@ -22,6 +22,7 @@ use CleverAge\UiProcessBundle\Controller\Admin\UserCrudController; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\DependencyInjection\Configuration; use CleverAge\UiProcessBundle\Entity\User; use CleverAge\UiProcessBundle\EventSubscriber\ProcessEventSubscriber; @@ -56,6 +57,7 @@ #[UsesClass(ProcessExtensionRuntime::class)] #[UsesClass(CleverAgeUiProcessBundle::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] #[UsesClass(LogRecordCrudController::class)] #[UsesClass(ProcessExecutionCrudController::class)] #[UsesClass(ProcessScheduleCrudController::class)] diff --git a/tests/Functional/ProcessScheduleCrudTest.php b/tests/Functional/ProcessScheduleCrudTest.php index f723f44..2a2b110 100644 --- a/tests/Functional/ProcessScheduleCrudTest.php +++ b/tests/Functional/ProcessScheduleCrudTest.php @@ -22,6 +22,7 @@ use CleverAge\UiProcessBundle\Controller\Admin\UserCrudController; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\DependencyInjection\Configuration; use CleverAge\UiProcessBundle\Entity\Enum\ProcessScheduleType; use CleverAge\UiProcessBundle\Entity\ProcessSchedule; @@ -64,6 +65,7 @@ #[UsesClass(IsValidProcessCodeValidator::class)] #[UsesClass(CleverAgeUiProcessBundle::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] #[UsesClass(LogRecordCrudController::class)] #[UsesClass(ProcessExecutionCrudController::class)] #[UsesClass(UserCrudController::class)] diff --git a/tests/Functional/PurgeLogsCommandTest.php b/tests/Functional/PurgeLogsCommandTest.php index ee526b9..4d0a50c 100644 --- a/tests/Functional/PurgeLogsCommandTest.php +++ b/tests/Functional/PurgeLogsCommandTest.php @@ -18,6 +18,7 @@ use CleverAge\UiProcessBundle\Command\PurgeLogsCommand; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\DependencyInjection\Configuration; use CleverAge\UiProcessBundle\Entity\LogRecord; use CleverAge\UiProcessBundle\Entity\ProcessExecution; @@ -35,6 +36,7 @@ #[CoversClass(PurgeLogsCommand::class)] #[UsesClass(CleverAgeUiProcessBundle::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] #[UsesClass(CleverAgeUiProcessExtension::class)] #[UsesClass(DeprecatedEasyAdminRouteAliasLoader::class)] #[UsesClass(Configuration::class)] diff --git a/tests/Functional/SecurityTest.php b/tests/Functional/SecurityTest.php index 402c5fd..d9f796b 100644 --- a/tests/Functional/SecurityTest.php +++ b/tests/Functional/SecurityTest.php @@ -29,6 +29,7 @@ use CleverAge\UiProcessBundle\Controller\Admin\UserCrudController; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\DependencyInjection\Configuration; use CleverAge\UiProcessBundle\Entity\User; use CleverAge\UiProcessBundle\EventSubscriber\ProcessEventSubscriber; @@ -72,6 +73,7 @@ #[UsesClass(ProcessExtension::class)] #[UsesClass(CleverAgeUiProcessBundle::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] #[UsesClass(CleverAgeUiProcessExtension::class)] #[UsesClass(DeprecatedEasyAdminRouteAliasLoader::class)] #[UsesClass(Configuration::class)] diff --git a/tests/Functional/UserCrudTest.php b/tests/Functional/UserCrudTest.php index d0738e2..8b71677 100644 --- a/tests/Functional/UserCrudTest.php +++ b/tests/Functional/UserCrudTest.php @@ -21,6 +21,7 @@ use CleverAge\UiProcessBundle\Controller\Admin\UserCrudController; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\DependencyInjection\Configuration; use CleverAge\UiProcessBundle\Entity\User; use CleverAge\UiProcessBundle\EventSubscriber\ProcessEventSubscriber; @@ -48,6 +49,7 @@ #[UsesClass(ProcessExtension::class)] #[UsesClass(CleverAgeUiProcessBundle::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] #[UsesClass(LogRecordCrudController::class)] #[UsesClass(ProcessExecutionCrudController::class)] #[UsesClass(ProcessScheduleCrudController::class)] diff --git a/tests/Manager/ProcessExecutionManagerEntityManagerTest.php b/tests/Manager/ProcessExecutionManagerEntityManagerTest.php index 8c4bbb2..8e966ca 100644 --- a/tests/Manager/ProcessExecutionManagerEntityManagerTest.php +++ b/tests/Manager/ProcessExecutionManagerEntityManagerTest.php @@ -16,6 +16,7 @@ use CleverAge\UiProcessBundle\CleverAgeUiProcessBundle; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\DependencyInjection\Configuration; use CleverAge\UiProcessBundle\Entity\Enum\ProcessExecutionStatus; use CleverAge\UiProcessBundle\Entity\LogRecord; @@ -44,6 +45,7 @@ #[CoversClass(DoctrineProcessHandler::class)] #[UsesClass(CleverAgeUiProcessBundle::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] #[UsesClass(CleverAgeUiProcessExtension::class)] #[UsesClass(DeprecatedEasyAdminRouteAliasLoader::class)] #[UsesClass(Configuration::class)] diff --git a/tests/Monolog/Handler/DoctrineProcessHandlerEntityManagerTest.php b/tests/Monolog/Handler/DoctrineProcessHandlerEntityManagerTest.php index e7b8b55..de2af18 100644 --- a/tests/Monolog/Handler/DoctrineProcessHandlerEntityManagerTest.php +++ b/tests/Monolog/Handler/DoctrineProcessHandlerEntityManagerTest.php @@ -16,6 +16,7 @@ use CleverAge\UiProcessBundle\CleverAgeUiProcessBundle; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\DependencyInjection\Configuration; use CleverAge\UiProcessBundle\Entity\Enum\ProcessExecutionStatus; use CleverAge\UiProcessBundle\Entity\LogRecord; @@ -39,6 +40,7 @@ #[CoversClass(DoctrineProcessHandler::class)] #[UsesClass(CleverAgeUiProcessBundle::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] #[UsesClass(CleverAgeUiProcessExtension::class)] #[UsesClass(DeprecatedEasyAdminRouteAliasLoader::class)] #[UsesClass(Configuration::class)] diff --git a/tests/Repository/ProcessExecutionRepositoryTest.php b/tests/Repository/ProcessExecutionRepositoryTest.php index 76152fb..0e0187f 100644 --- a/tests/Repository/ProcessExecutionRepositoryTest.php +++ b/tests/Repository/ProcessExecutionRepositoryTest.php @@ -16,6 +16,7 @@ use CleverAge\UiProcessBundle\CleverAgeUiProcessBundle; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\DependencyInjection\Configuration; use CleverAge\UiProcessBundle\Entity\LogRecord; use CleverAge\UiProcessBundle\Entity\ProcessExecution; @@ -34,6 +35,7 @@ #[CoversClass(ProcessExecutionRepository::class)] #[UsesClass(CleverAgeUiProcessBundle::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] #[UsesClass(CleverAgeUiProcessExtension::class)] #[UsesClass(DeprecatedEasyAdminRouteAliasLoader::class)] #[UsesClass(Configuration::class)] diff --git a/tests/Repository/ProcessScheduleRepositoryTest.php b/tests/Repository/ProcessScheduleRepositoryTest.php index 0aa1c40..d393c77 100644 --- a/tests/Repository/ProcessScheduleRepositoryTest.php +++ b/tests/Repository/ProcessScheduleRepositoryTest.php @@ -16,6 +16,7 @@ use CleverAge\UiProcessBundle\CleverAgeUiProcessBundle; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\DependencyInjection\Configuration; use CleverAge\UiProcessBundle\Entity\Enum\ProcessScheduleType; use CleverAge\UiProcessBundle\Entity\ProcessSchedule; @@ -32,6 +33,7 @@ #[CoversClass(ProcessScheduleRepository::class)] #[UsesClass(CleverAgeUiProcessBundle::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] #[UsesClass(CleverAgeUiProcessExtension::class)] #[UsesClass(DeprecatedEasyAdminRouteAliasLoader::class)] #[UsesClass(Configuration::class)] diff --git a/tests/StopChecker/ProcessExecutionStopCheckerTest.php b/tests/StopChecker/ProcessExecutionStopCheckerTest.php index 5ef6448..bf07d6d 100644 --- a/tests/StopChecker/ProcessExecutionStopCheckerTest.php +++ b/tests/StopChecker/ProcessExecutionStopCheckerTest.php @@ -19,6 +19,7 @@ use CleverAge\UiProcessBundle\CleverAgeUiProcessBundle; use CleverAge\UiProcessBundle\DependencyInjection\CleverAgeUiProcessExtension; use CleverAge\UiProcessBundle\DependencyInjection\Compiler\CheckDoctrineLazyGhostObjectsPass; +use CleverAge\UiProcessBundle\DependencyInjection\Compiler\UploadDirectoryParameterPass; use CleverAge\UiProcessBundle\DependencyInjection\Configuration; use CleverAge\UiProcessBundle\Entity\ProcessExecution; use CleverAge\UiProcessBundle\EventSubscriber\ProcessEventSubscriber; @@ -37,6 +38,7 @@ #[CoversClass(ProcessExecutionStopChecker::class)] #[UsesClass(CleverAgeUiProcessBundle::class)] #[UsesClass(CheckDoctrineLazyGhostObjectsPass::class)] +#[UsesClass(UploadDirectoryParameterPass::class)] #[UsesClass(CleverAgeUiProcessExtension::class)] #[UsesClass(DeprecatedEasyAdminRouteAliasLoader::class)] #[UsesClass(Configuration::class)] diff --git a/tests/Twig/Extension/LogLevelExtensionTest.php b/tests/Twig/Extension/LogLevelExtensionTest.php index 866fe37..8c197e8 100644 --- a/tests/Twig/Extension/LogLevelExtensionTest.php +++ b/tests/Twig/Extension/LogLevelExtensionTest.php @@ -25,14 +25,43 @@ class LogLevelExtensionTest extends TestCase public function testGetFunctions(): void { $functions = array_map( - static fn (TwigFunction $function): array => [$function->getName(), $function->getCallable()], + static fn (TwigFunction $function): array => [$function->getName(), $function->getCallable(), $function->isDeprecated()], (new LogLevelExtension())->getFunctions() ); + // Prefixed names, and the former ones, deprecated self::assertSame([ - ['log_label', [LogLevelExtensionRuntime::class, 'getLabel']], - ['log_translation', [LogLevelExtensionRuntime::class, 'getTranslation']], - ['log_css_class', [LogLevelExtensionRuntime::class, 'getCssClass']], + ['cleverage_ui_process_log_label', [LogLevelExtensionRuntime::class, 'getLabel'], false], + ['cleverage_ui_process_log_translation', [LogLevelExtensionRuntime::class, 'getTranslation'], false], + ['cleverage_ui_process_log_css_class', [LogLevelExtensionRuntime::class, 'getCssClass'], false], + ['log_label', [LogLevelExtensionRuntime::class, 'getLabel'], true], + ['log_translation', [LogLevelExtensionRuntime::class, 'getTranslation'], true], + ['log_css_class', [LogLevelExtensionRuntime::class, 'getCssClass'], true], ], $functions); } + + public function testFormerNamesAreDeprecated(): void + { + $deprecations = []; + set_error_handler(static function (int $errno, string $errstr) use (&$deprecations): bool { + $deprecations[] = $errstr; + + return true; + }, \E_USER_DEPRECATED); + try { + foreach ((new LogLevelExtension())->getFunctions() as $function) { + if ($function->isDeprecated()) { + $function->triggerDeprecation(); + } + } + } finally { + restore_error_handler(); + } + + self::assertSame([ + 'Since cleverage/ui-process-bundle 3.3: Twig Function "log_label" is deprecated; use "cleverage_ui_process_log_label" instead.', + 'Since cleverage/ui-process-bundle 3.3: Twig Function "log_translation" is deprecated; use "cleverage_ui_process_log_translation" instead.', + 'Since cleverage/ui-process-bundle 3.3: Twig Function "log_css_class" is deprecated; use "cleverage_ui_process_log_css_class" instead.', + ], $deprecations); + } } diff --git a/tests/Twig/Extension/MD5ExtensionTest.php b/tests/Twig/Extension/MD5ExtensionTest.php index fa0f105..06dd822 100644 --- a/tests/Twig/Extension/MD5ExtensionTest.php +++ b/tests/Twig/Extension/MD5ExtensionTest.php @@ -25,10 +25,37 @@ class MD5ExtensionTest extends TestCase public function testGetFilters(): void { $filters = array_map( - static fn (TwigFilter $filter): array => [$filter->getName(), $filter->getCallable()], + static fn (TwigFilter $filter): array => [$filter->getName(), $filter->getCallable(), $filter->isDeprecated()], (new MD5Extension())->getFilters() ); - self::assertSame([['md5', [MD5ExtensionRuntime::class, 'md5']]], $filters); + // Prefixed names, and the former ones, deprecated + self::assertSame([ + ['cleverage_ui_process_md5', [MD5ExtensionRuntime::class, 'md5'], false], + ['md5', [MD5ExtensionRuntime::class, 'md5'], true], + ], $filters); + } + + public function testFormerNamesAreDeprecated(): void + { + $deprecations = []; + set_error_handler(static function (int $errno, string $errstr) use (&$deprecations): bool { + $deprecations[] = $errstr; + + return true; + }, \E_USER_DEPRECATED); + try { + foreach ((new MD5Extension())->getFilters() as $filter) { + if ($filter->isDeprecated()) { + $filter->triggerDeprecation(); + } + } + } finally { + restore_error_handler(); + } + + self::assertSame([ + 'Since cleverage/ui-process-bundle 3.3: Twig Filter "md5" is deprecated; use "cleverage_ui_process_md5" instead.', + ], $deprecations); } } diff --git a/tests/Twig/Extension/ProcessExecutionExtensionTest.php b/tests/Twig/Extension/ProcessExecutionExtensionTest.php index 556dd47..98c2463 100644 --- a/tests/Twig/Extension/ProcessExecutionExtensionTest.php +++ b/tests/Twig/Extension/ProcessExecutionExtensionTest.php @@ -25,14 +25,43 @@ class ProcessExecutionExtensionTest extends TestCase public function testGetFunctions(): void { $functions = array_map( - static fn (TwigFunction $function): array => [$function->getName(), $function->getCallable()], + static fn (TwigFunction $function): array => [$function->getName(), $function->getCallable(), $function->isDeprecated()], (new ProcessExecutionExtension())->getFunctions() ); + // Prefixed names, and the former ones, deprecated self::assertSame([ - ['get_last_execution_date', [ProcessExecutionExtensionRuntime::class, 'getLastExecutionDate']], - ['get_process_source', [ProcessExecutionExtensionRuntime::class, 'getProcessSource']], - ['get_process_target', [ProcessExecutionExtensionRuntime::class, 'getProcessTarget']], + ['cleverage_ui_process_get_last_execution_date', [ProcessExecutionExtensionRuntime::class, 'getLastExecutionDate'], false], + ['cleverage_ui_process_get_process_source', [ProcessExecutionExtensionRuntime::class, 'getProcessSource'], false], + ['cleverage_ui_process_get_process_target', [ProcessExecutionExtensionRuntime::class, 'getProcessTarget'], false], + ['get_last_execution_date', [ProcessExecutionExtensionRuntime::class, 'getLastExecutionDate'], true], + ['get_process_source', [ProcessExecutionExtensionRuntime::class, 'getProcessSource'], true], + ['get_process_target', [ProcessExecutionExtensionRuntime::class, 'getProcessTarget'], true], ], $functions); } + + public function testFormerNamesAreDeprecated(): void + { + $deprecations = []; + set_error_handler(static function (int $errno, string $errstr) use (&$deprecations): bool { + $deprecations[] = $errstr; + + return true; + }, \E_USER_DEPRECATED); + try { + foreach ((new ProcessExecutionExtension())->getFunctions() as $function) { + if ($function->isDeprecated()) { + $function->triggerDeprecation(); + } + } + } finally { + restore_error_handler(); + } + + self::assertSame([ + 'Since cleverage/ui-process-bundle 3.3: Twig Function "get_last_execution_date" is deprecated; use "cleverage_ui_process_get_last_execution_date" instead.', + 'Since cleverage/ui-process-bundle 3.3: Twig Function "get_process_source" is deprecated; use "cleverage_ui_process_get_process_source" instead.', + 'Since cleverage/ui-process-bundle 3.3: Twig Function "get_process_target" is deprecated; use "cleverage_ui_process_get_process_target" instead.', + ], $deprecations); + } } diff --git a/tests/Twig/Extension/ProcessExtensionTest.php b/tests/Twig/Extension/ProcessExtensionTest.php index be1f20f..a6bc720 100644 --- a/tests/Twig/Extension/ProcessExtensionTest.php +++ b/tests/Twig/Extension/ProcessExtensionTest.php @@ -25,10 +25,37 @@ class ProcessExtensionTest extends TestCase public function testGetFunctions(): void { $functions = array_map( - static fn (TwigFunction $function): array => [$function->getName(), $function->getCallable()], + static fn (TwigFunction $function): array => [$function->getName(), $function->getCallable(), $function->isDeprecated()], (new ProcessExtension())->getFunctions() ); - self::assertSame([['resolve_ui_options', [ProcessExtensionRuntime::class, 'getUiOptions']]], $functions); + // Prefixed names, and the former ones, deprecated + self::assertSame([ + ['cleverage_ui_process_resolve_ui_options', [ProcessExtensionRuntime::class, 'getUiOptions'], false], + ['resolve_ui_options', [ProcessExtensionRuntime::class, 'getUiOptions'], true], + ], $functions); + } + + public function testFormerNamesAreDeprecated(): void + { + $deprecations = []; + set_error_handler(static function (int $errno, string $errstr) use (&$deprecations): bool { + $deprecations[] = $errstr; + + return true; + }, \E_USER_DEPRECATED); + try { + foreach ((new ProcessExtension())->getFunctions() as $function) { + if ($function->isDeprecated()) { + $function->triggerDeprecation(); + } + } + } finally { + restore_error_handler(); + } + + self::assertSame([ + 'Since cleverage/ui-process-bundle 3.3: Twig Function "resolve_ui_options" is deprecated; use "cleverage_ui_process_resolve_ui_options" instead.', + ], $deprecations); } }