From f179c23ef0dc24ab0a6e32cec5484ea06c78e682 Mon Sep 17 00:00:00 2001 From: TavoNiievez Date: Sat, 16 Mar 2024 01:28:33 -0500 Subject: [PATCH] Fix: runSymfonyConsoleCommand ignores specific options --- .../Module/Symfony/ConsoleAssertionsTrait.php | 50 ++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/src/Codeception/Module/Symfony/ConsoleAssertionsTrait.php b/src/Codeception/Module/Symfony/ConsoleAssertionsTrait.php index 66edec9e..18e20173 100644 --- a/src/Codeception/Module/Symfony/ConsoleAssertionsTrait.php +++ b/src/Codeception/Module/Symfony/ConsoleAssertionsTrait.php @@ -5,6 +5,7 @@ namespace Codeception\Module\Symfony; use Symfony\Bundle\FrameworkBundle\Console\Application; +use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Tester\CommandTester; use Symfony\Component\HttpKernel\KernelInterface; @@ -33,8 +34,10 @@ public function runSymfonyConsoleCommand(string $command, array $parameters = [] $commandTester = new CommandTester($consoleCommand); $commandTester->setInputs($consoleInputs); - $parameters = ['command' => $command] + $parameters; - $exitCode = $commandTester->execute($parameters); + $input = ['command' => $command] + $parameters; + $options = $this->configureOptions($parameters); + + $exitCode = $commandTester->execute($input, $options); $output = $commandTester->getDisplay(); $this->assertSame( @@ -51,6 +54,49 @@ public function runSymfonyConsoleCommand(string $command, array $parameters = [] return $output; } + private function configureOptions(array $parameters): array + { + $options = []; + + if (in_array('--ansi', $parameters, true)) { + $options['decorated'] = true; + } elseif (in_array('--no-ansi', $parameters, true)) { + $options['decorated'] = false; + } + + if (in_array('--no-interaction', $parameters, true) || in_array('-n', $parameters, true)) { + $options['interactive'] = false; + } + + if (in_array('--quiet', $parameters, true) || in_array('-q', $parameters, true)) { + $options['verbosity'] = OutputInterface::VERBOSITY_QUIET; + $options['interactive'] = false; + } + + if ( + in_array('-vvv', $parameters, true) || + in_array('--verbose=3', $parameters, true) || + (isset($parameters["--verbose"]) && $parameters["--verbose"] === 3) + ) { + $options['verbosity'] = OutputInterface::VERBOSITY_DEBUG; + } elseif ( + in_array('-vv', $parameters, true) || + in_array('--verbose=2', $parameters, true) || + (isset($parameters["--verbose"]) && $parameters["--verbose"] === 2) + ) { + $options['verbosity'] = OutputInterface::VERBOSITY_VERY_VERBOSE; + } elseif ( + in_array('-v', $parameters, true) || + in_array('--verbose=1', $parameters, true) || + in_array('--verbose', $parameters, true) || + (isset($parameters["--verbose"]) && $parameters["--verbose"] === 1) + ) { + $options['verbosity'] = OutputInterface::VERBOSITY_VERBOSE; + } + + return $options; + } + protected function grabKernelService(): KernelInterface { return $this->grabService('kernel');