Apply contribution guidelines to "Equals" rule

This commit is contained in:
Henrique Moody 2018-01-14 16:32:24 +01:00
parent 1f217dda66
commit 02b51782c3
No known key found for this signature in database
GPG key ID: 221E9281655813A6
9 changed files with 98 additions and 114 deletions

View file

@ -13,8 +13,16 @@ declare(strict_types=1);
namespace Respect\Validation\Exceptions;
class EqualsException extends ValidationException
/**
* @author Alexandre Gomes Gaigalas <alexandre@gaigalas.net>
* @author Henrique Moody <henriquemoody@gmail.com>
* @author Ian Nisbet <ian@glutenite.co.uk>
*/
final class EqualsException extends ValidationException
{
/**
* {@inheritdoc}
*/
public static $defaultTemplates = [
self::MODE_DEFAULT => [
self::STANDARD => '{{name}} must equal {{compareTo}}',

View file

@ -13,16 +13,33 @@ declare(strict_types=1);
namespace Respect\Validation\Rules;
class Equals extends AbstractRule
/**
* Validates if the input is equal to some value.
*
* @author Alexandre Gomes Gaigalas <alexandre@gaigalas.net>
* @author Henrique Moody <henriquemoody@gmail.com>
*/
final class Equals extends AbstractRule
{
public $compareTo;
/**
* @var mixed
*/
private $compareTo;
/**
* Initializes the rule.
*
* @param mixed $compareTo
*/
public function __construct($compareTo)
{
$this->compareTo = $compareTo;
}
public function validate($input)
/**
* {@inheritdoc}
*/
public function validate($input): bool
{
return $input == $this->compareTo;
}

View file

@ -0,0 +1,37 @@
--FILE--
<?php
require 'vendor/autoload.php';
use Respect\Validation\Exceptions\EqualsException;
use Respect\Validation\Exceptions\NestedValidationException;
use Respect\Validation\Validator as v;
try {
v::equals(123)->check(321);
} catch (EqualsException $exception) {
echo $exception->getMessage().PHP_EOL;
}
try {
v::not(v::equals(321))->check(321);
} catch (EqualsException $exception) {
echo $exception->getMessage().PHP_EOL;
}
try {
v::equals(123)->assert(321);
} catch (NestedValidationException $exception) {
echo $exception->getFullMessage().PHP_EOL;
}
try {
v::not(v::equals(321))->assert(321);
} catch (NestedValidationException $exception) {
echo $exception->getFullMessage().PHP_EOL;
}
?>
--EXPECTF--
321 must equal 123
321 must not equal 321
- 321 must equal 123
- 321 must not equal 321

View file

@ -1,10 +0,0 @@
--FILE--
<?php
require 'vendor/autoload.php';
use Respect\Validation\Validator as v;
v::equals('test 123')->assert('test 123');
v::equals('test 123')->check('test 123');
?>
--EXPECTF--

View file

@ -1,15 +0,0 @@
--FILE--
<?php
require 'vendor/autoload.php';
use Respect\Validation\Exceptions\EqualsException;
use Respect\Validation\Validator as v;
try {
v::equals('test 123')->check('test 1234');
} catch (EqualsException $e) {
echo $e->getMainMessage();
}
?>
--EXPECTF--
"test 1234" must equal "test 123"

View file

@ -1,15 +0,0 @@
--FILE--
<?php
require 'vendor/autoload.php';
use Respect\Validation\Exceptions\AllOfException;
use Respect\Validation\Validator as v;
try {
v::equals('test 123')->assert('test 1234');
} catch (AllOfException $e) {
echo $e->getFullMessage();
}
?>
--EXPECTF--
- "test 1234" must equal "test 123"

View file

@ -1,15 +0,0 @@
--FILE--
<?php
require 'vendor/autoload.php';
use Respect\Validation\Exceptions\EqualsException;
use Respect\Validation\Validator as v;
try {
v::not(v::equals('test 123'))->check('test 123');
} catch (EqualsException $e) {
echo $e->getMainMessage();
}
?>
--EXPECTF--
"test 123" must not equal "test 123"

View file

@ -1,15 +0,0 @@
--FILE--
<?php
require 'vendor/autoload.php';
use Respect\Validation\Exceptions\AllOfException;
use Respect\Validation\Validator as v;
try {
v::not(v::equals('test 123'))->assert('test 123');
} catch (AllOfException $e) {
echo $e->getFullMessage();
}
?>
--EXPECTF--
- "test 123" must not equal "test 123"

View file

@ -13,61 +13,53 @@ declare(strict_types=1);
namespace Respect\Validation\Rules;
use PHPUnit\Framework\TestCase;
use Respect\Validation\Test\RuleTestCase;
use stdClass;
/**
* @group rule
* @group rule
*
* @covers \Respect\Validation\Rules\Equals
* @covers \Respect\Validation\Exceptions\EqualsException
*
* @author Alexandre Gomes Gaigalas <alexandre@gaigalas.net>
* @author Henrique Moody <henriquemoody@gmail.com>
*/
class EqualsTest extends TestCase
final class EqualsTest extends RuleTestCase
{
/**
* @dataProvider providerForEquals
* {@inheritdoc}
*/
public function testInputEqualsToExpectedValueShouldPass($compareTo, $input): void
{
$rule = new Equals($compareTo);
self::assertTrue($rule->validate($input));
}
/**
* @dataProvider providerForNotEquals
*/
public function testInputNotEqualsToExpectedValueShouldPass($compareTo, $input): void
{
$rule = new Equals($compareTo);
self::assertFalse($rule->validate($input));
}
/**
* @expectedException \Respect\Validation\Exceptions\EqualsException
* @expectedExceptionMessage "24" must equal 42
*/
public function testShouldThrowTheProperExceptionWhenFailure(): void
{
$rule = new Equals(42);
$rule->check('24');
}
public function providerForEquals()
public function providerForValidInput(): array
{
return [
['foo', 'foo'],
[[], []],
[new stdClass(), new stdClass()],
[10, '10'],
[new Equals('foo'), 'foo'],
[new Equals([]), []],
[new Equals(new stdClass()), new stdClass()],
[new Equals(10), '10'],
[new Equals(10), 10.0],
];
}
public function providerForNotEquals()
/**
* {@inheritdoc}
*/
public function providerForInvalidInput(): array
{
return [
['foo', ''],
['foo', 'bar'],
[new Equals('foo'), ''],
[new Equals('foo'), 'bar'],
];
}
/**
* @test
*/
public function shouldPassCompareToParameterToException(): void
{
$compareTo = new stdClass();
$equals = new Equals($compareTo);
$exception = $equals->reportError('input');
self::assertSame($compareTo, $exception->getParam('compareTo'));
}
}