Skip to content

Commit

Permalink
[Console] Add missing assertCommandIsFaulty assertion
Browse files Browse the repository at this point in the history
  • Loading branch information
raphaelstolt authored and OskarStark committed Dec 29, 2023
1 parent d308e2c commit 1fa8c2f
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/Symfony/Component/Console/CHANGELOG.md
@@ -1,6 +1,11 @@
CHANGELOG
=========

7.1
---

* Add `assertCommandIsFaulty` assertion

6.4
---

Expand Down
@@ -0,0 +1,40 @@
<?php

/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* 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
{
return Command::SUCCESS === $other
? 'Command was successful.'
: sprintf('Command returned exit status %d.', $other);
}
}
6 changes: 6 additions & 0 deletions src/Symfony/Component/Console/Tester/TesterTrait.php
Expand Up @@ -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;

/**
Expand Down Expand Up @@ -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.
*
Expand Down
@@ -0,0 +1,44 @@
<?php

/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* 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 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, returnResult: true));
$this->assertTrue($constraint->evaluate(Command::FAILURE, returnResult: true));
$this->assertTrue($constraint->evaluate(Command::INVALID, returnResult: 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();
}
}

0 comments on commit 1fa8c2f

Please sign in to comment.