From cafd02cee09bc16a399173e4aa10fd9f2c5d409c Mon Sep 17 00:00:00 2001 From: Raphael Stolt Date: Tue, 7 Nov 2023 09:44:01 +0100 Subject: [PATCH] Add missing console/tester assertion --- Tester/Constraint/CommandIsFaulty.php | 42 +++++++++++++++++ Tester/TesterTrait.php | 6 +++ .../Tester/Constraint/CommandIsFaultyTest.php | 45 +++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 Tester/Constraint/CommandIsFaulty.php create mode 100644 Tests/Tester/Constraint/CommandIsFaultyTest.php diff --git a/Tester/Constraint/CommandIsFaulty.php b/Tester/Constraint/CommandIsFaulty.php new file mode 100644 index 000000000..3df4fbf25 --- /dev/null +++ b/Tester/Constraint/CommandIsFaulty.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Console\Tester\Constraint; + +use PHPUnit\Framework\Constraint\Constraint; +use Symfony\Component\Console\Command\Command; + +final class CommandIsFaulty extends Constraint +{ + public function toString(): string + { + return 'is faulty'; + } + + protected function matches($other): bool + { + return Command::FAILURE === $other || Command::INVALID === $other; + } + + protected function failureDescription($other): string + { + return 'the command '.$this->toString(); + } + + protected function additionalFailureDescription($other): string + { + $mapping = [ + Command::SUCCESS => 'Command was successful.' + ]; + + return $mapping[$other] ?? sprintf('Command returned exit status %d.', $other); + } +} diff --git a/Tester/TesterTrait.php b/Tester/TesterTrait.php index 497b8c8c7..8a05d2801 100644 --- a/Tester/TesterTrait.php +++ b/Tester/TesterTrait.php @@ -16,6 +16,7 @@ use Symfony\Component\Console\Output\ConsoleOutput; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\StreamOutput; +use Symfony\Component\Console\Tester\Constraint\CommandIsFaulty; use Symfony\Component\Console\Tester\Constraint\CommandIsSuccessful; /** @@ -104,6 +105,11 @@ public function assertCommandIsSuccessful(string $message = ''): void Assert::assertThat($this->statusCode, new CommandIsSuccessful(), $message); } + public function assertCommandIsFaulty(string $message = ''): void + { + Assert::assertThat($this->statusCode, new CommandIsFaulty(), $message); + } + /** * Sets the user inputs. * diff --git a/Tests/Tester/Constraint/CommandIsFaultyTest.php b/Tests/Tester/Constraint/CommandIsFaultyTest.php new file mode 100644 index 000000000..709ef8094 --- /dev/null +++ b/Tests/Tester/Constraint/CommandIsFaultyTest.php @@ -0,0 +1,45 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Console\Tests\Tester\Constraint; + +use PHPUnit\Framework\ExpectationFailedException; +use PHPUnit\Framework\TestCase; +use PHPUnit\Framework\TestFailure; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Tester\Constraint\CommandIsFaulty; + +final class CommandIsFaultyTest extends TestCase +{ + public function testConstraint() + { + $constraint = new CommandIsFaulty(); + + $this->assertFalse($constraint->evaluate(Command::SUCCESS, '', true)); + $this->assertTrue($constraint->evaluate(Command::FAILURE, '', true)); + $this->assertTrue($constraint->evaluate(Command::INVALID, '', true)); + } + + public function testSuccessfulCommand() + { + $constraint = new CommandIsFaulty(); + + try { + $constraint->evaluate(Command::SUCCESS); + } catch (ExpectationFailedException $e) { + $this->assertStringContainsString('Failed asserting that the command is faulty.', $e->getMessage()); + + return; + } + + $this->fail(); + } +}