Apply contribution guidelines to "Multiple" rule

Co-authored-by: Henrique Moody <henriquemoody@gmail.com>
Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
This commit is contained in:
Danilo Benevides 2018-07-15 00:29:23 -03:00 committed by Henrique Moody
parent c5978eb5b0
commit f308e7962e
No known key found for this signature in database
GPG key ID: 221E9281655813A6
4 changed files with 95 additions and 48 deletions

View file

@ -13,8 +13,16 @@ declare(strict_types=1);
namespace Respect\Validation\Exceptions;
class MultipleException extends ValidationException
/**
* @author Danilo Benevides <danilobenevides01@gmail.com>
* @author Henrique Moody <henriquemoody@gmail.com>
* @author Jean Pimentel <jeanfap@gmail.com>
*/
final class MultipleException extends ValidationException
{
/**
* {@inheritdoc}
*/
public static $defaultTemplates = [
self::MODE_DEFAULT => [
self::STANDARD => '{{name}} must be multiple of {{multipleOf}}',

View file

@ -13,15 +13,29 @@ declare(strict_types=1);
namespace Respect\Validation\Rules;
class Multiple extends AbstractRule
/**
* @author Danilo Benevides <danilobenevides01@gmail.com>
* @author Henrique Moody <henriquemoody@gmail.com>
* @author Jean Pimentel <jeanfap@gmail.com>
*/
final class Multiple extends AbstractRule
{
/**
* @var int
*/
public $multipleOf;
public function __construct($multipleOf)
/**
* @param int $multipleOf
*/
public function __construct(int $multipleOf)
{
$this->multipleOf = $multipleOf;
}
/**
* {@inheritdoc}
*/
public function validate($input): bool
{
if (0 == $this->multipleOf) {

View file

@ -0,0 +1,37 @@
--FILE--
<?php
require 'vendor/autoload.php';
use Respect\Validation\Exceptions\MultipleException;
use Respect\Validation\Exceptions\NestedValidationException;
use Respect\Validation\Validator as v;
try {
v::multiple(3)->check(22);
} catch (MultipleException $exception) {
echo $exception->getMessage().PHP_EOL;
}
try {
v::not(v::multiple(3))->check(9);
} catch (MultipleException $exception) {
echo $exception->getMessage().PHP_EOL;
}
try {
v::multiple(2)->assert(5);
} catch (NestedValidationException $exception) {
echo $exception->getFullMessage().PHP_EOL;
}
try {
v::not(v::multiple(5))->assert(25);
} catch (NestedValidationException $exception) {
echo $exception->getFullMessage().PHP_EOL;
}
?>
--EXPECTF--
22 must be multiple of 3
9 must not be multiple of 3
- 5 must be multiple of 2
- 25 must not be multiple of 5

View file

@ -13,65 +13,53 @@ declare(strict_types=1);
namespace Respect\Validation\Rules;
use PHPUnit\Framework\TestCase;
use Respect\Validation\Test\RuleTestCase;
/**
* @group rule
* @group rule
*
* @covers \Respect\Validation\Rules\Multiple
* @covers \Respect\Validation\Exceptions\MultipleException
*
* @author Danilo Benevides <danilobenevides01@gmail.com>
* @author Gabriel Caruso <carusogabriel34@gmail.com>
* @author Henrique Moody <henriquemoody@gmail.com>
* @author Jean Pimentel <jeanfap@gmail.com>
*/
class MultipleTest extends TestCase
final class MultipleTest extends RuleTestCase
{
/**
* @dataProvider providerForMultiple
* {@inheritdoc}
*/
public function testValidNumberMultipleOf($multipleOf, $input): void
{
$multiple = new Multiple($multipleOf);
self::assertTrue($multiple->validate($input));
$multiple->assert($input);
$multiple->check($input);
}
/**
* @dataProvider providerForNotMultiple
* @expectedException \Respect\Validation\Exceptions\MultipleException
*/
public function testNotMultipleShouldThrowMultipleException($multipleOf, $input): void
{
$multiple = new Multiple($multipleOf);
self::assertFalse($multiple->validate($input));
$multiple->assert($input);
}
public function providerForMultiple()
public function providerForValidInput(): array
{
return [
['', ''],
[5, 20],
[5, 5],
[5, 0],
[5, -500],
[1, 0],
[1, 1],
[1, 2],
[1, 3],
[0, 0], // Only 0 is multiple of 0
[new Multiple(5), 20],
[new Multiple(5), 5],
[new Multiple(5), 0],
[new Multiple(5), -500],
[new Multiple(1), 0],
[new Multiple(1), 1],
[new Multiple(1), 2],
[new Multiple(1), 3],
[new Multiple(0), 0], // Only 0 is multiple of 0
];
}
public function providerForNotMultiple()
/**
* {@inheritdoc}
*/
public function providerForInvalidInput(): array
{
return [
[5, 11],
[5, 3],
[5, -1],
[3, 4],
[10, -8],
[10, 57],
[10, 21],
[0, 1],
[0, 2],
[new Multiple(5), 11],
[new Multiple(5), 3],
[new Multiple(5), -1],
[new Multiple(3), 4],
[new Multiple(10), -8],
[new Multiple(10), 57],
[new Multiple(10), 21],
[new Multiple(0), 1],
[new Multiple(0), 2],
];
}
}