mirror of
https://github.com/Respect/Validation.git
synced 2026-03-16 07:15:45 +01:00
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.
73 lines
3.9 KiB
PHP
73 lines
3.9 KiB
PHP
<?php
|
|
|
|
/*
|
|
* Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
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
|
|
{
|
|
return [
|
|
'vimeo service with subdomain' => [new VideoUrl('vimeo'), 'https://player.vimeo.com/video/71787467'],
|
|
'vimeo service url' => [new VideoUrl('vimeo'), 'https://vimeo.com/71787467'],
|
|
'youtube service embed' => [new VideoUrl('youtube'), 'https://www.youtube.com/embed/netHLn9TScY'],
|
|
'youtube service url' => [new VideoUrl('youtube'), 'https://www.youtube.com/watch?v=netHLn9TScY'],
|
|
'youtube service short url' => [new VideoUrl('youtube'), 'https://youtu.be/netHLn9TScY'],
|
|
'no service, vimeo with subdomain' => [new VideoUrl(), 'https://player.vimeo.com/video/71787467'],
|
|
'no service, vimeo url' => [new VideoUrl(), 'https://vimeo.com/71787467'],
|
|
'no service, youtube embed' => [new VideoUrl(), 'https://www.youtube.com/embed/netHLn9TScY'],
|
|
'no service, youtube url' => [new VideoUrl(), 'https://www.youtube.com/watch?v=netHLn9TScY'],
|
|
'no service, youtube short url' => [new VideoUrl(), 'https://youtu.be/netHLn9TScY'],
|
|
'twitch video' => [new VideoUrl('twitch'), 'https://www.twitch.tv/videos/320689092'],
|
|
'twitch clip' => [new VideoUrl('twitch'), 'https://clips.twitch.tv/BitterLazyMangetoutHumbleLife'],
|
|
];
|
|
}
|
|
|
|
/** @return iterable<array{VideoUrl, mixed}> */
|
|
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'],
|
|
'no service with ftp://youtu.be/netHLn9TScY url' => [new VideoUrl(), 'ftp://youtu.be/netHLn9TScY'],
|
|
'no service with https:/example.com/ url' => [new VideoUrl(), 'https:/example.com/'],
|
|
'no service with https:/youtube.com/ url' => [new VideoUrl(), 'https:/youtube.com/'],
|
|
'no service with https://vimeo' => [new VideoUrl(), 'https://vimeo'],
|
|
'no service with https://vimeo.com71787467' => [new VideoUrl(), 'https://vimeo.com71787467'],
|
|
'no service with https://www.google.com url ' => [new VideoUrl(), 'https://www.google.com'],
|
|
'no service and value tel:+1-816-555-1212' => [new VideoUrl(), 'tel:+1-816-555-1212'],
|
|
'no service and value text' => [new VideoUrl(), 'text'],
|
|
'invalid twitch link without video identifier' => [new VideoUrl(), 'https://twitch.tv/'],
|
|
'invalid twitch clip' => [new VideoUrl(), 'https://www.twitch.tv/yabbadabbado'],
|
|
'invalid twitch link' => [new VideoUrl(), 'https://clips.twitch.tv/videos/90210'],
|
|
'invalid twitch clip identifier' => [new VideoUrl(), 'https://clips.twitch.tv/90210'],
|
|
'twitch clip without identifier' => [new VideoUrl(), 'https://clips.twitch.tv/'],
|
|
];
|
|
}
|
|
}
|