2015-10-17 20:40:46 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/*
|
2023-02-17 05:13:51 +01:00
|
|
|
* Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
|
|
|
|
* SPDX-License-Identifier: MIT
|
2015-10-17 20:40:46 +02:00
|
|
|
*/
|
|
|
|
|
2017-11-19 19:01:31 +01:00
|
|
|
declare(strict_types=1);
|
|
|
|
|
2015-10-17 20:40:46 +02:00
|
|
|
namespace Respect\Validation\Rules;
|
|
|
|
|
2015-10-18 19:56:08 +02:00
|
|
|
use Respect\Validation\Exceptions\ValidationException;
|
2019-04-30 00:31:04 +02:00
|
|
|
use Respect\Validation\Message\Formatter;
|
2019-05-12 13:19:57 +02:00
|
|
|
use Respect\Validation\Message\Stringifier\KeepOriginalStringName;
|
2018-12-05 08:36:38 +01:00
|
|
|
use Respect\Validation\Test\TestCase;
|
2015-10-18 19:56:08 +02:00
|
|
|
|
2018-07-23 21:37:38 +02:00
|
|
|
/**
|
|
|
|
* @covers \Respect\Validation\Rules\AbstractRule
|
2018-11-25 17:56:04 +01:00
|
|
|
*
|
2023-02-13 05:59:06 +01:00
|
|
|
* @author Alexandre Gomes Gaigalas <alganet@gmail.com>
|
2018-11-25 17:56:04 +01:00
|
|
|
* @author Gabriel Caruso <carusogabriel34@gmail.com>
|
|
|
|
* @author Henrique Moody <henriquemoody@gmail.com>
|
2018-07-23 21:37:38 +02:00
|
|
|
*/
|
2019-02-09 14:31:56 +01:00
|
|
|
final class AbstractRuleTest extends TestCase
|
2015-10-17 20:40:46 +02:00
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @dataProvider providerForTrueAndFalse
|
2017-02-04 14:01:14 +01:00
|
|
|
* @covers \Respect\Validation\Rules\AbstractRule::__invoke
|
2018-07-23 20:35:14 +02:00
|
|
|
*
|
|
|
|
* @test
|
2015-10-17 20:40:46 +02:00
|
|
|
*/
|
2019-02-07 21:22:10 +01:00
|
|
|
public function magicMethodInvokeCallsValidateWithInput(bool $booleanResult): void
|
2015-10-17 20:40:46 +02:00
|
|
|
{
|
2015-10-18 19:56:08 +02:00
|
|
|
$input = 'something';
|
|
|
|
|
|
|
|
$abstractRuleMock = $this
|
2016-10-30 20:07:28 +01:00
|
|
|
->getMockBuilder(AbstractRule::class)
|
2015-10-18 19:56:08 +02:00
|
|
|
->getMockForAbstractClass();
|
2015-10-17 20:40:46 +02:00
|
|
|
|
2015-10-18 19:56:08 +02:00
|
|
|
$abstractRuleMock
|
2018-07-23 20:35:14 +02:00
|
|
|
->expects(self::once())
|
2015-10-18 19:56:08 +02:00
|
|
|
->method('validate')
|
|
|
|
->with($input)
|
2018-07-23 20:35:14 +02:00
|
|
|
->will(self::returnValue($booleanResult));
|
2015-10-17 20:40:46 +02:00
|
|
|
|
2017-11-12 14:33:39 +01:00
|
|
|
self::assertEquals(
|
2015-10-17 20:40:46 +02:00
|
|
|
$booleanResult,
|
|
|
|
// Invoking it to trigger __invoke
|
2015-10-18 19:56:08 +02:00
|
|
|
$abstractRuleMock($input),
|
2020-07-21 22:54:41 +02:00
|
|
|
'When invoking an instance of AbstractRule, the method validate should' .
|
2019-02-07 21:04:16 +01:00
|
|
|
'be called with the same input and return the same result.'
|
2015-10-17 20:40:46 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2017-02-04 14:01:14 +01:00
|
|
|
* @covers \Respect\Validation\Rules\AbstractRule::assert
|
2018-07-23 20:35:14 +02:00
|
|
|
*
|
|
|
|
* @test
|
2015-10-17 20:40:46 +02:00
|
|
|
*/
|
2018-07-23 20:35:14 +02:00
|
|
|
public function assertInvokesValidateOnSuccess(): void
|
2015-10-17 20:40:46 +02:00
|
|
|
{
|
2015-10-18 19:56:08 +02:00
|
|
|
$input = 'something';
|
2015-10-17 20:40:46 +02:00
|
|
|
|
2015-10-18 19:56:08 +02:00
|
|
|
$abstractRuleMock = $this
|
2016-10-30 20:07:28 +01:00
|
|
|
->getMockBuilder(AbstractRule::class)
|
2020-08-26 09:47:59 +02:00
|
|
|
->onlyMethods(['validate', 'reportError'])
|
2015-10-18 19:56:08 +02:00
|
|
|
->getMockForAbstractClass();
|
|
|
|
|
|
|
|
$abstractRuleMock
|
2018-07-23 20:35:14 +02:00
|
|
|
->expects(self::once())
|
2015-10-18 19:56:08 +02:00
|
|
|
->method('validate')
|
|
|
|
->with($input)
|
2018-07-23 20:35:14 +02:00
|
|
|
->will(self::returnValue(true));
|
2015-10-18 19:56:08 +02:00
|
|
|
|
|
|
|
$abstractRuleMock
|
2018-07-23 20:35:14 +02:00
|
|
|
->expects(self::never())
|
2015-10-18 19:56:08 +02:00
|
|
|
->method('reportError');
|
|
|
|
|
|
|
|
$abstractRuleMock->assert($input);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-26 09:47:59 +02:00
|
|
|
* @covers \Respect\Validation\Rules\AbstractRule::assert
|
2018-07-23 20:35:14 +02:00
|
|
|
*
|
|
|
|
* @test
|
2015-10-18 19:56:08 +02:00
|
|
|
*/
|
2018-07-23 20:35:14 +02:00
|
|
|
public function assertInvokesValidateAndReportErrorOnFailure(): void
|
2015-10-18 19:56:08 +02:00
|
|
|
{
|
|
|
|
$input = 'something';
|
2020-08-26 09:47:59 +02:00
|
|
|
$exception = new ValidationException(
|
|
|
|
$input,
|
|
|
|
'abstract',
|
|
|
|
[],
|
|
|
|
new Formatter('strval', new KeepOriginalStringName())
|
|
|
|
);
|
2015-10-18 19:56:08 +02:00
|
|
|
|
|
|
|
$abstractRuleMock = $this
|
2016-10-30 20:07:28 +01:00
|
|
|
->getMockBuilder(AbstractRule::class)
|
2020-08-26 09:47:59 +02:00
|
|
|
->onlyMethods(['validate', 'reportError'])
|
2015-10-18 19:56:08 +02:00
|
|
|
->getMockForAbstractClass();
|
|
|
|
|
|
|
|
$abstractRuleMock
|
2018-07-23 20:35:14 +02:00
|
|
|
->expects(self::once())
|
2015-10-18 19:56:08 +02:00
|
|
|
->method('validate')
|
|
|
|
->with($input)
|
2018-07-23 20:35:14 +02:00
|
|
|
->will(self::returnValue(false));
|
2015-10-18 19:56:08 +02:00
|
|
|
|
|
|
|
$abstractRuleMock
|
2018-07-23 20:35:14 +02:00
|
|
|
->expects(self::once())
|
2015-10-18 19:56:08 +02:00
|
|
|
->method('reportError')
|
|
|
|
->with($input)
|
2020-08-26 09:47:59 +02:00
|
|
|
->will(self::throwException($exception));
|
|
|
|
|
|
|
|
$this->expectExceptionObject($exception);
|
2015-10-18 19:56:08 +02:00
|
|
|
|
|
|
|
$abstractRuleMock->assert($input);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2017-02-04 14:01:14 +01:00
|
|
|
* @covers \Respect\Validation\Rules\AbstractRule::check
|
2018-07-23 20:35:14 +02:00
|
|
|
*
|
|
|
|
* @test
|
2015-10-18 19:56:08 +02:00
|
|
|
*/
|
2018-07-23 20:35:14 +02:00
|
|
|
public function checkInvokesAssertToPerformTheValidationByDefault(): void
|
2015-10-18 19:56:08 +02:00
|
|
|
{
|
|
|
|
$input = 'something';
|
|
|
|
|
|
|
|
$abstractRuleMock = $this
|
2016-10-30 20:07:28 +01:00
|
|
|
->getMockBuilder(AbstractRule::class)
|
2020-08-26 09:47:59 +02:00
|
|
|
->onlyMethods(['assert'])
|
2015-10-18 19:56:08 +02:00
|
|
|
->getMockForAbstractClass();
|
|
|
|
|
|
|
|
$abstractRuleMock
|
2018-07-23 20:35:14 +02:00
|
|
|
->expects(self::once())
|
2015-10-18 19:56:08 +02:00
|
|
|
->method('assert')
|
|
|
|
->with($input);
|
|
|
|
|
|
|
|
$abstractRuleMock->check($input);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2017-02-04 14:01:14 +01:00
|
|
|
* @covers \Respect\Validation\Rules\AbstractRule::setTemplate
|
2018-07-23 20:35:14 +02:00
|
|
|
*
|
|
|
|
* @test
|
2015-10-18 19:56:08 +02:00
|
|
|
*/
|
2018-07-23 20:35:14 +02:00
|
|
|
public function shouldReturnTheCurrentObjectWhenDefinigTemplate(): void
|
2015-10-18 19:56:08 +02:00
|
|
|
{
|
|
|
|
$abstractRuleMock = $this
|
2016-10-30 20:07:28 +01:00
|
|
|
->getMockBuilder(AbstractRule::class)
|
2015-10-18 19:56:08 +02:00
|
|
|
->getMockForAbstractClass();
|
|
|
|
|
2017-11-12 14:33:39 +01:00
|
|
|
self::assertSame($abstractRuleMock, $abstractRuleMock->setTemplate('whatever'));
|
2015-10-18 19:56:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2017-02-04 14:01:14 +01:00
|
|
|
* @covers \Respect\Validation\Rules\AbstractRule::setName
|
2018-07-23 20:35:14 +02:00
|
|
|
*
|
|
|
|
* @test
|
2015-10-18 19:56:08 +02:00
|
|
|
*/
|
2018-07-23 20:35:14 +02:00
|
|
|
public function shouldReturnTheCurrentObjectWhenDefinigName(): void
|
2015-10-18 19:56:08 +02:00
|
|
|
{
|
|
|
|
$abstractRuleMock = $this
|
2016-10-30 20:07:28 +01:00
|
|
|
->getMockBuilder(AbstractRule::class)
|
2015-10-18 19:56:08 +02:00
|
|
|
->getMockForAbstractClass();
|
|
|
|
|
2017-11-12 14:33:39 +01:00
|
|
|
self::assertSame($abstractRuleMock, $abstractRuleMock->setName('whatever'));
|
2015-10-18 19:56:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2017-02-04 14:01:14 +01:00
|
|
|
* @covers \Respect\Validation\Rules\AbstractRule::getName
|
2018-07-23 20:35:14 +02:00
|
|
|
* @covers \Respect\Validation\Rules\AbstractRule::setName
|
|
|
|
*
|
|
|
|
* @test
|
2015-10-18 19:56:08 +02:00
|
|
|
*/
|
2018-07-23 20:35:14 +02:00
|
|
|
public function shouldBeAbleToDefineAndRetrivedRuleName(): void
|
2015-10-18 19:56:08 +02:00
|
|
|
{
|
|
|
|
$abstractRuleMock = $this
|
2016-10-30 20:07:28 +01:00
|
|
|
->getMockBuilder(AbstractRule::class)
|
2015-10-18 19:56:08 +02:00
|
|
|
->getMockForAbstractClass();
|
|
|
|
|
|
|
|
$name = 'something';
|
|
|
|
|
|
|
|
$abstractRuleMock->setName($name);
|
|
|
|
|
2017-11-12 14:33:39 +01:00
|
|
|
self::assertSame($name, $abstractRuleMock->getName());
|
2015-10-17 20:40:46 +02:00
|
|
|
}
|
2023-04-02 16:00:37 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @return bool[][]
|
|
|
|
*/
|
|
|
|
public static function providerForTrueAndFalse(): array
|
|
|
|
{
|
|
|
|
return [
|
|
|
|
[true],
|
|
|
|
[false],
|
|
|
|
];
|
|
|
|
}
|
2015-10-17 20:40:46 +02:00
|
|
|
}
|