Increase code coverage of some rules

We were not thoroughly testing quite a few rules, especially the
constructor of some of them.

This commit increases the code coverage, ensuring almost every single
line in the "Rules" namespace is covered.
This commit is contained in:
Danilo Correa 2024-04-21 13:57:44 -03:00 committed by Henrique Moody
parent 2ae1df177a
commit 719f12a424
No known key found for this signature in database
GPG key ID: 221E9281655813A6
19 changed files with 86 additions and 0 deletions

View file

@ -55,6 +55,11 @@ final class Base64Test extends RuleTestCase
$rule = new Base64();
return [
[$rule, []],
[$rule, 1.2],
[$rule, false],
[$rule, 123],
[$rule, null],
[$rule, ''],
[$rule, 'hello!'],
[$rule, '=c3VyZS4'],

View file

@ -11,12 +11,23 @@ namespace Respect\Validation\Rules;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\Test;
use Respect\Validation\Exceptions\InvalidRuleConstructorException;
use Respect\Validation\Test\RuleTestCase;
#[Group('rule')]
#[CoversClass(Base::class)]
final class BaseTest extends RuleTestCase
{
#[Test]
public function itShouldThrowsExceptionWhenBaseIsNotValid(): void
{
$this->expectException(InvalidRuleConstructorException::class);
$this->expectExceptionMessage('a base between 1 and 62 is required');
new Base(63);
}
/** @return iterable<array{Base, mixed}> */
public static function providerForValidInput(): iterable
{

View file

@ -12,6 +12,7 @@ namespace Respect\Validation\Rules;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use Respect\Validation\Test\RuleTestCase;
use stdClass;
#[Group('rule')]
#[CoversClass(Bsn::class)]
@ -42,6 +43,9 @@ final class BsnTest extends RuleTestCase
$rule = new Bsn();
return [
[$rule, []],
[$rule, new stdClass()],
[$rule, null],
[$rule, '1234567890'],
[$rule, '0987654321'],
[$rule, '13579024'],

View file

@ -12,6 +12,7 @@ namespace Respect\Validation\Rules;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use Respect\Validation\Test\RuleTestCase;
use stdClass;
#[Group('rule')]
#[CoversClass(Contains::class)]
@ -40,10 +41,17 @@ final class ContainsTest extends RuleTestCase
public static function providerForInvalidInput(): iterable
{
return [
[new Contains('', false), 'abc'],
[new Contains(null, false), null],
[new Contains(null, false), []],
[new Contains(new stdClass(), false), new stdClass()],
[new Contains('foo', false), ''],
[new Contains('bat', false), ['bar', 'foo']],
[new Contains('foo', false), 'barfaabaz'],
[new Contains('foo', false), 'faabarbaz'],
[new Contains(null, true), null],
[new Contains(null, true), []],
[new Contains(new stdClass(), true), new stdClass()],
[new Contains('foo', true), ''],
[new Contains('bat', true), ['BAT', 'foo']],
[new Contains('bat', true), ['BaT', 'Batata']],

View file

@ -14,6 +14,7 @@ use PHPUnit\Framework\Attributes\Group;
use Respect\Validation\Test\RuleTestCase;
use SplFileInfo;
use SplFileObject;
use stdClass;
#[Group('rule')]
#[CoversClass(Executable::class)]
@ -37,6 +38,9 @@ final class ExecutableTest extends RuleTestCase
$rule = new Executable();
return [
[$rule, []],
[$rule, new stdClass()],
[$rule, null],
[$rule, 'tests/fixtures/valid-image.gif'],
[$rule, new SplFileInfo('tests/fixtures/valid-image.jpg')],
[$rule, new SplFileObject('tests/fixtures/valid-image.png')],

View file

@ -60,6 +60,8 @@ final class FilterVarTest extends RuleTestCase
[new FilterVar(FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED), 'http://example.com'],
[new FilterVar(FILTER_VALIDATE_DOMAIN), '.com'],
[new FilterVar(FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME), '@local'],
[new FilterVar(FILTER_VALIDATE_INT, []), 1.4],
[new FilterVar(FILTER_VALIDATE_INT, 2), 1.4],
];
}
}

View file

@ -38,6 +38,7 @@ final class InTest extends RuleTestCase
public static function providerForInvalidInput(): iterable
{
return [
[new In('0', true), 'abc'],
[new In('0'), null],
[new In(0, true), null],
[new In('', true), null],

View file

@ -42,6 +42,7 @@ final class IpTest extends RuleTestCase
return [
['192.168'],
['asd'],
['-'],
['192.168.0.0-192.168.0.256'],
['192.168.0.0-192.168.0.1/4'],
['192.168.0/1'],

View file

@ -12,6 +12,7 @@ namespace Respect\Validation\Rules;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use Respect\Validation\Test\RuleTestCase;
use stdClass;
#[Group('rule')]
#[CoversClass(Isbn::class)]
@ -39,6 +40,9 @@ final class IsbnTest extends RuleTestCase
$sut = new Isbn();
return [
[$sut, []],
[$sut, null],
[$sut, new stdClass()],
[$sut, 'ISBN 11978-0-596-52068-7'],
[$sut, 'ISBN-12: 978-0-596-52068-7'],
[$sut, '978 10 596 52068 7'],

View file

@ -12,6 +12,7 @@ namespace Respect\Validation\Rules;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use Respect\Validation\Test\RuleTestCase;
use stdClass;
#[Group('rule')]
#[CoversClass(NoWhitespace::class)]
@ -37,6 +38,8 @@ final class NoWhitespaceTest extends RuleTestCase
$rule = new NoWhitespace();
return [
[$rule, []],
[$rule, new stdClass()],
[$rule, ' '],
[$rule, 'w poiur'],
[$rule, ' '],

View file

@ -12,6 +12,7 @@ namespace Respect\Validation\Rules;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use Respect\Validation\Test\RuleTestCase;
use stdClass;
#[Group('rule')]
#[CoversClass(Pesel::class)]
@ -40,6 +41,9 @@ final class PeselTest extends RuleTestCase
$rule = new Pesel();
return [
[$rule, null],
[$rule, []],
[$rule, new stdClass()],
[$rule, '1'],
[$rule, '22'],
[$rule, 'PESEL'],

View file

@ -13,7 +13,9 @@ use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\Test;
use Respect\Validation\Exceptions\InvalidRuleConstructorException;
use Respect\Validation\Test\TestCase;
use stdClass;
#[Group('rule')]
#[CoversClass(Phone::class)]
@ -47,6 +49,15 @@ final class PhoneTest extends TestCase
self::assertInvalidInput(new Phone($countryCode), $input);
}
#[Test]
public function itShouldThrowsExceptionWhenCountryCodeIsNotValid(): void
{
$this->expectException(InvalidRuleConstructorException::class);
$this->expectExceptionMessage('Invalid country code BRR');
new Phone('BRR');
}
/** @return array<array{mixed}> */
public static function providerForValidInputWithoutCountryCode(): array
{
@ -67,6 +78,8 @@ final class PhoneTest extends TestCase
public static function providerForInvalidInputWithoutCountryCode(): array
{
return [
[null],
[new stdClass()],
['+1-650-253-00-0'],
['33(020) 7777 7777'],
['33(020)7777 7777'],

View file

@ -12,6 +12,7 @@ namespace Respect\Validation\Rules;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use Respect\Validation\Test\RuleTestCase;
use stdClass;
#[Group('rule')]
#[CoversClass(PolishIdCard::class)]
@ -35,6 +36,10 @@ final class PolishIdCardTest extends RuleTestCase
$rule = new PolishIdCard();
return [
[$rule, null],
[$rule, new stdClass()],
[$rule, []],
[$rule, '999205411'],
[$rule, 'AAAAAAAAA'],
[$rule, 'APH 505567'],
[$rule, 'AYE205411'],

View file

@ -55,6 +55,9 @@ final class PortugueseNifTest extends RuleTestCase
return [
// Check digit is wrong
[$rule, '429468882'],
[$rule, '739468882'],
[$rule, '939468882'],
[$rule, '129468882'],
[$rule, '220005245'],
[$rule, '389684008'],

View file

@ -24,6 +24,7 @@ final class PublicDomainSuffixTest extends RuleTestCase
$rule = new PublicDomainSuffix();
return [
[$rule, ''],
[$rule, 'co.uk'],
[$rule, 'nom.br'],
[$rule, 'WWW.CK'],

View file

@ -34,6 +34,8 @@ final class StartsWithTest extends RuleTestCase
public static function providerForInvalidInput(): iterable
{
return [
[new StartsWith(123), 123],
[new StartsWith(123, true), 123],
[new StartsWith('foo'), ''],
[new StartsWith('bat'), ['foo', 'bar']],
[new StartsWith('foo'), 'barfaabaz'],

View file

@ -35,6 +35,7 @@ final class SubsetTest extends RuleTestCase
public static function providerForInvalidInput(): iterable
{
return [
[new Subset([]), '1'],
[new Subset([]), [1]],
[new Subset([1]), [2]],
[new Subset([1, 2]), [1, 2, 3]],

View file

@ -41,6 +41,8 @@ final class VersionTest extends RuleTestCase
$sut = new Version();
return [
'int' => [$sut, 1],
'float' => [$sut, 1.2],
'empty' => [$sut, ''],
'1.3.7--' => [$sut, '1.3.7--'],
'1.3.7++' => [$sut, '1.3.7++'],

View file

@ -11,12 +11,23 @@ namespace Respect\Validation\Rules;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\Test;
use Respect\Validation\Exceptions\InvalidRuleConstructorException;
use Respect\Validation\Test\RuleTestCase;
#[Group('rule')]
#[CoversClass(VideoUrl::class)]
final class VideoUrlTest extends RuleTestCase
{
#[Test]
public function itShouldThrowsExceptionWhenVideoUrlIsNotValid(): void
{
$this->expectException(InvalidRuleConstructorException::class);
$this->expectExceptionMessage('"tiktok" is not a recognized video service.');
new VideoUrl('tiktok');
}
/** @return iterable<array{VideoUrl, mixed}> */
public static function providerForValidInput(): iterable
{
@ -40,6 +51,7 @@ final class VideoUrlTest extends RuleTestCase
public static function providerForInvalidInput(): iterable
{
return [
'vimeo service with invalid URL' => [new VideoUrl('vimeo'), 1],
'vimeo service with youtube url' => [new VideoUrl('vimeo'), 'https://www.youtube.com/watch?v=netHLn9TScY'],
'youtube service with vimeo url' => [new VideoUrl('youtube'), 'https://vimeo.com/71787467'],
'no service with example.com url' => [new VideoUrl(), 'example.com'],