mirror of
https://github.com/shlinkio/shlink.git
synced 2026-03-06 23:33:13 +08:00
Update to PHPUnit 10
This commit is contained in:
@@ -72,7 +72,7 @@ class CreateShortUrlTest extends ApiTestCase
|
||||
self::assertEquals($expectedType, $payload['type']);
|
||||
}
|
||||
|
||||
public function provideDuplicatedSlugApiVersions(): iterable
|
||||
public static function provideDuplicatedSlugApiVersions(): iterable
|
||||
{
|
||||
yield ['1', 'INVALID_SLUG'];
|
||||
yield ['2', 'INVALID_SLUG'];
|
||||
@@ -91,7 +91,7 @@ class CreateShortUrlTest extends ApiTestCase
|
||||
self::assertEquals($expectedTags, $tags);
|
||||
}
|
||||
|
||||
public function provideTags(): iterable
|
||||
public static function provideTags(): iterable
|
||||
{
|
||||
yield 'simple tags' => [$simpleTags = ['foo', 'bar', 'baz'], $simpleTags];
|
||||
yield 'tags with spaces' => [['fo o', ' bar', 'b az'], ['fo-o', 'bar', 'b-az']];
|
||||
@@ -116,7 +116,7 @@ class CreateShortUrlTest extends ApiTestCase
|
||||
self::assertEquals(self::STATUS_NOT_FOUND, $lastResp->getStatusCode());
|
||||
}
|
||||
|
||||
public function provideMaxVisits(): array
|
||||
public static function provideMaxVisits(): array
|
||||
{
|
||||
return map(range(10, 15), fn(int $i) => [$i]);
|
||||
}
|
||||
@@ -165,7 +165,7 @@ class CreateShortUrlTest extends ApiTestCase
|
||||
self::assertEquals($firstShortCode, $secondShortCode);
|
||||
}
|
||||
|
||||
public function provideMatchingBodies(): iterable
|
||||
public static function provideMatchingBodies(): iterable
|
||||
{
|
||||
$longUrl = 'https://www.alejandrocelaya.com';
|
||||
|
||||
@@ -202,7 +202,7 @@ class CreateShortUrlTest extends ApiTestCase
|
||||
self::assertEquals(self::STATUS_BAD_REQUEST, $secondStatusCode);
|
||||
}
|
||||
|
||||
public function provideConflictingSlugs(): iterable
|
||||
public static function provideConflictingSlugs(): iterable
|
||||
{
|
||||
yield 'without domain' => ['custom', null];
|
||||
yield 'with domain' => ['custom-with-domain', 'some-domain.com'];
|
||||
@@ -236,7 +236,7 @@ class CreateShortUrlTest extends ApiTestCase
|
||||
self::assertEquals($payload['longUrl'], $longUrl);
|
||||
}
|
||||
|
||||
public function provideIdn(): iterable
|
||||
public static function provideIdn(): iterable
|
||||
{
|
||||
yield ['http://tést.shlink.io']; // Redirects to https://shlink.io
|
||||
yield ['http://test.shlink.io']; // Redirects to http://tést.shlink.io
|
||||
@@ -261,7 +261,7 @@ class CreateShortUrlTest extends ApiTestCase
|
||||
self::assertEquals($url, $payload['url']);
|
||||
}
|
||||
|
||||
public function provideInvalidUrls(): iterable
|
||||
public static function provideInvalidUrls(): iterable
|
||||
{
|
||||
yield 'API version 2' => ['https://this-has-to-be-invalid.com', '2', 'INVALID_URL'];
|
||||
yield 'API version 3' => ['https://this-has-to-be-invalid.com', '3', 'https://shlink.io/api/error/invalid-url'];
|
||||
@@ -287,7 +287,7 @@ class CreateShortUrlTest extends ApiTestCase
|
||||
self::assertEquals('Invalid data', $payload['title']);
|
||||
}
|
||||
|
||||
public function provideInvalidArgumentApiVersions(): iterable
|
||||
public static function provideInvalidArgumentApiVersions(): iterable
|
||||
{
|
||||
yield 'missing long url v2' => [[], '2', 'INVALID_ARGUMENT'];
|
||||
yield 'missing long url v3' => [[], '3', 'https://shlink.io/api/error/invalid-data'];
|
||||
@@ -338,7 +338,7 @@ class CreateShortUrlTest extends ApiTestCase
|
||||
self::assertEquals('example.com', $returnedDomain);
|
||||
}
|
||||
|
||||
public function provideDomains(): iterable
|
||||
public static function provideDomains(): iterable
|
||||
{
|
||||
yield 'no domain' => [null];
|
||||
yield 'invalid domain' => ['this-will-be-overwritten.com'];
|
||||
@@ -355,7 +355,7 @@ class CreateShortUrlTest extends ApiTestCase
|
||||
self::assertEquals(self::STATUS_OK, $statusCode);
|
||||
}
|
||||
|
||||
public function provideTwitterUrls(): iterable
|
||||
public static function provideTwitterUrls(): iterable
|
||||
{
|
||||
yield ['https://twitter.com/shlinkio'];
|
||||
yield ['https://mobile.twitter.com/shlinkio'];
|
||||
|
||||
@@ -50,7 +50,7 @@ class DeleteShortUrlTest extends ApiTestCase
|
||||
self::assertEquals($expectedType, $payload['type']);
|
||||
}
|
||||
|
||||
public function provideApiVersions(): iterable
|
||||
public static function provideApiVersions(): iterable
|
||||
{
|
||||
yield ['1', 'INVALID_SHORTCODE'];
|
||||
yield ['2', 'INVALID_SHORTCODE'];
|
||||
|
||||
@@ -29,7 +29,7 @@ class DeleteTagsTest extends ApiTestCase
|
||||
self::assertEquals('Forbidden tag operation', $payload['title']);
|
||||
}
|
||||
|
||||
public function provideNonAdminApiKeys(): iterable
|
||||
public static function provideNonAdminApiKeys(): iterable
|
||||
{
|
||||
yield 'author' => ['author_api_key', '2', 'FORBIDDEN_OPERATION'];
|
||||
yield 'domain' => ['domain_api_key', '2', 'FORBIDDEN_OPERATION'];
|
||||
|
||||
@@ -27,7 +27,7 @@ class DomainRedirectsTest extends ApiTestCase
|
||||
self::assertEquals('Invalid data', $payload['title']);
|
||||
}
|
||||
|
||||
public function provideInvalidDomains(): iterable
|
||||
public static function provideInvalidDomains(): iterable
|
||||
{
|
||||
yield 'no domain' => [[]];
|
||||
yield 'empty domain' => [['domain' => '']];
|
||||
@@ -50,7 +50,7 @@ class DomainRedirectsTest extends ApiTestCase
|
||||
self::assertEquals($expectedResponse, $payload);
|
||||
}
|
||||
|
||||
public function provideRequests(): iterable
|
||||
public static function provideRequests(): iterable
|
||||
{
|
||||
yield 'new domain' => [[
|
||||
'domain' => 'my-new-domain.com',
|
||||
|
||||
@@ -32,7 +32,7 @@ class DomainVisitsTest extends ApiTestCase
|
||||
self::assertCount($expectedVisitsAmount, $payload['visits']['data']);
|
||||
}
|
||||
|
||||
public function provideDomains(): iterable
|
||||
public static function provideDomains(): iterable
|
||||
{
|
||||
yield 'example.com with admin API key' => ['valid_api_key', 'example.com', false, 0];
|
||||
yield 'DEFAULT with admin API key' => ['valid_api_key', 'DEFAULT', false, 7];
|
||||
@@ -59,7 +59,7 @@ class DomainVisitsTest extends ApiTestCase
|
||||
self::assertEquals($domain, $payload['authority']);
|
||||
}
|
||||
|
||||
public function provideApiKeysAndTags(): iterable
|
||||
public static function provideApiKeysAndTags(): iterable
|
||||
{
|
||||
yield 'admin API key with invalid domain' => ['valid_api_key', 'invalid_domain.com'];
|
||||
yield 'domain API key with not-owned valid domain' => ['domain_api_key', 'this_domain_is_detached.com'];
|
||||
@@ -78,7 +78,7 @@ class DomainVisitsTest extends ApiTestCase
|
||||
self::assertEquals($expectedType, $payload['type']);
|
||||
}
|
||||
|
||||
public function provideApiVersions(): iterable
|
||||
public static function provideApiVersions(): iterable
|
||||
{
|
||||
yield ['1', 'DOMAIN_NOT_FOUND'];
|
||||
yield ['2', 'DOMAIN_NOT_FOUND'];
|
||||
|
||||
@@ -5,7 +5,6 @@ declare(strict_types=1);
|
||||
namespace ShlinkioApiTest\Shlink\Rest\Action;
|
||||
|
||||
use Cake\Chronos\Chronos;
|
||||
use DMS\PHPUnitExtensions\ArraySubset\ArraySubsetAsserts;
|
||||
use GuzzleHttp\Psr7\Query;
|
||||
use GuzzleHttp\RequestOptions;
|
||||
use Laminas\Diactoros\Uri;
|
||||
@@ -16,7 +15,6 @@ use function sprintf;
|
||||
|
||||
class EditShortUrlTest extends ApiTestCase
|
||||
{
|
||||
use ArraySubsetAsserts;
|
||||
use NotFoundUrlHelpersTrait;
|
||||
|
||||
/**
|
||||
@@ -47,7 +45,14 @@ class EditShortUrlTest extends ApiTestCase
|
||||
self::assertArraySubset($meta, $metaAfterEditing);
|
||||
}
|
||||
|
||||
public function provideMeta(): iterable
|
||||
private static function assertArraySubset(array $a, array $b): void
|
||||
{
|
||||
foreach ($a as $key => $expectedValue) {
|
||||
self::assertEquals($expectedValue, $b[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
public static function provideMeta(): iterable
|
||||
{
|
||||
$now = Chronos::now();
|
||||
|
||||
@@ -92,7 +97,7 @@ class EditShortUrlTest extends ApiTestCase
|
||||
}
|
||||
}
|
||||
|
||||
public function provideLongUrls(): iterable
|
||||
public static function provideLongUrls(): iterable
|
||||
{
|
||||
yield 'valid URL' => ['https://shlink.io', self::STATUS_OK, null];
|
||||
yield 'invalid URL' => ['htt:foo', self::STATUS_BAD_REQUEST, 'INVALID_URL'];
|
||||
@@ -162,7 +167,7 @@ class EditShortUrlTest extends ApiTestCase
|
||||
self::assertEquals(100, $editedShortUrl['meta']['maxVisits'] ?? null);
|
||||
}
|
||||
|
||||
public function provideDomains(): iterable
|
||||
public static function provideDomains(): iterable
|
||||
{
|
||||
yield 'domain' => [
|
||||
'example.com',
|
||||
|
||||
@@ -24,7 +24,7 @@ class GlobalVisitsTest extends ApiTestCase
|
||||
self::assertEquals(3, $payload['visits']['orphanVisitsCount']);
|
||||
}
|
||||
|
||||
public function provideApiKeys(): iterable
|
||||
public static function provideApiKeys(): iterable
|
||||
{
|
||||
yield 'admin API key' => ['valid_api_key', 7];
|
||||
yield 'domain API key' => ['domain_api_key', 0];
|
||||
|
||||
@@ -30,7 +30,7 @@ class ListDomainsTest extends ApiTestCase
|
||||
], $respPayload);
|
||||
}
|
||||
|
||||
public function provideApiKeysAndDomains(): iterable
|
||||
public static function provideApiKeysAndDomains(): iterable
|
||||
{
|
||||
yield 'admin API key' => ['valid_api_key', [
|
||||
[
|
||||
|
||||
@@ -168,7 +168,7 @@ class ListShortUrlsTest extends ApiTestCase
|
||||
], $respPayload);
|
||||
}
|
||||
|
||||
public function provideFilteredLists(): iterable
|
||||
public static function provideFilteredLists(): iterable
|
||||
{
|
||||
// FIXME Cannot use enums in constants in PHP 8.1. Change this once support for PHP 8.1 is dropped
|
||||
$withDeviceLongUrls = static fn (array $shortUrl, ?array $longUrls = null) => [
|
||||
@@ -321,7 +321,7 @@ class ListShortUrlsTest extends ApiTestCase
|
||||
], $respPayload);
|
||||
}
|
||||
|
||||
public function provideInvalidFiltering(): iterable
|
||||
public static function provideInvalidFiltering(): iterable
|
||||
{
|
||||
yield [['tagsMode' => 'invalid'], ['tagsMode']];
|
||||
yield [['orderBy' => 'invalid'], ['orderBy']];
|
||||
|
||||
@@ -21,7 +21,7 @@ class ListTagsTest extends ApiTestCase
|
||||
self::assertEquals(['tags' => $expectedTags], $payload);
|
||||
}
|
||||
|
||||
public function provideQueries(): iterable
|
||||
public static function provideQueries(): iterable
|
||||
{
|
||||
yield 'admin API key' => ['valid_api_key', [], [
|
||||
'data' => ['bar', 'baz', 'foo'],
|
||||
|
||||
@@ -24,7 +24,7 @@ class NonOrphanVisitsTest extends ApiTestCase
|
||||
self::assertCount($returnedItems, $payload['visits']['data'] ?? []);
|
||||
}
|
||||
|
||||
public function provideQueries(): iterable
|
||||
public static function provideQueries(): iterable
|
||||
{
|
||||
yield 'all data' => [[], 7, 7];
|
||||
yield 'middle page' => [['page' => 2, 'itemsPerPage' => 3], 7, 3];
|
||||
|
||||
@@ -57,7 +57,7 @@ class OrphanVisitsTest extends ApiTestCase
|
||||
self::assertEquals($expectedVisits, $visits);
|
||||
}
|
||||
|
||||
public function provideQueries(): iterable
|
||||
public static function provideQueries(): iterable
|
||||
{
|
||||
yield 'all data' => [[], 3, 3, [self::INVALID_SHORT_URL, self::REGULAR_NOT_FOUND, self::BASE_URL]];
|
||||
yield 'limit items' => [['itemsPerPage' => 2], 3, 2, [self::INVALID_SHORT_URL, self::REGULAR_NOT_FOUND]];
|
||||
|
||||
@@ -30,7 +30,7 @@ class RenameTagTest extends ApiTestCase
|
||||
self::assertEquals('Forbidden tag operation', $payload['title']);
|
||||
}
|
||||
|
||||
public function provideNonAdminApiKeys(): iterable
|
||||
public static function provideNonAdminApiKeys(): iterable
|
||||
{
|
||||
yield 'author' => ['author_api_key'];
|
||||
yield 'domain' => ['domain_api_key'];
|
||||
|
||||
@@ -34,7 +34,7 @@ class ResolveShortUrlTest extends ApiTestCase
|
||||
self::assertEquals(self::STATUS_OK, $fetchResp->getStatusCode());
|
||||
}
|
||||
|
||||
public function provideDisabledMeta(): iterable
|
||||
public static function provideDisabledMeta(): iterable
|
||||
{
|
||||
$now = Chronos::now();
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ class ShortUrlVisitsTest extends ApiTestCase
|
||||
self::assertCount($expectedAmountOfVisits, $payload['visits']['data'] ?? []);
|
||||
}
|
||||
|
||||
public function provideDomains(): iterable
|
||||
public static function provideDomains(): iterable
|
||||
{
|
||||
yield 'domain' => ['example.com', 0];
|
||||
yield 'no domain' => [null, 2];
|
||||
@@ -95,7 +95,7 @@ class ShortUrlVisitsTest extends ApiTestCase
|
||||
self::assertCount($expectedAmountOfVisits, $payload['visits']['data'] ?? []);
|
||||
}
|
||||
|
||||
public function provideVisitsForBots(): iterable
|
||||
public static function provideVisitsForBots(): iterable
|
||||
{
|
||||
yield 'bots excluded' => [true, 1];
|
||||
yield 'bots not excluded' => [false, 2];
|
||||
|
||||
@@ -22,7 +22,7 @@ class SingleStepCreateShortUrlTest extends ApiTestCase
|
||||
self::assertEquals($expectedContentType, $resp->getHeaderLine('Content-Type'));
|
||||
}
|
||||
|
||||
public function provideFormats(): iterable
|
||||
public static function provideFormats(): iterable
|
||||
{
|
||||
yield 'txt format' => ['txt', 'text/plain'];
|
||||
yield 'json format' => ['json', 'application/json'];
|
||||
|
||||
@@ -32,7 +32,7 @@ class TagVisitsTest extends ApiTestCase
|
||||
self::assertCount($expectedVisitsAmount, $payload['visits']['data']);
|
||||
}
|
||||
|
||||
public function provideTags(): iterable
|
||||
public static function provideTags(): iterable
|
||||
{
|
||||
yield 'foo with admin API key' => ['valid_api_key', 'foo', false, 5];
|
||||
yield 'foo with admin API key and no bots' => ['valid_api_key', 'foo', true, 4];
|
||||
@@ -62,7 +62,7 @@ class TagVisitsTest extends ApiTestCase
|
||||
self::assertEquals('Tag not found', $payload['title']);
|
||||
}
|
||||
|
||||
public function provideApiKeysAndTags(): iterable
|
||||
public static function provideApiKeysAndTags(): iterable
|
||||
{
|
||||
yield 'admin API key with invalid tag' => ['valid_api_key', 'invalid_tag'];
|
||||
yield 'domain API key with valid tag not used' => ['domain_api_key', 'bar'];
|
||||
|
||||
@@ -45,7 +45,7 @@ class TagsStatsTest extends ApiTestCase
|
||||
self::assertArrayHasKey('data', $tags);
|
||||
}
|
||||
|
||||
public function provideQueries(): iterable
|
||||
public static function provideQueries(): iterable
|
||||
{
|
||||
yield 'admin API key' => ['valid_api_key', [], [
|
||||
[
|
||||
|
||||
@@ -29,7 +29,7 @@ class UpdateTagTest extends ApiTestCase
|
||||
self::assertEquals('Invalid data', $payload['title']);
|
||||
}
|
||||
|
||||
public function provideInvalidBody(): iterable
|
||||
public static function provideInvalidBody(): iterable
|
||||
{
|
||||
yield [[]];
|
||||
yield [['oldName' => 'foo']];
|
||||
@@ -57,7 +57,7 @@ class UpdateTagTest extends ApiTestCase
|
||||
self::assertEquals('Tag not found', $payload['title']);
|
||||
}
|
||||
|
||||
public function provideTagNotFoundApiVersions(): iterable
|
||||
public static function provideTagNotFoundApiVersions(): iterable
|
||||
{
|
||||
yield 'version 1' => ['1', 'TAG_NOT_FOUND'];
|
||||
yield 'version 2' => ['2', 'TAG_NOT_FOUND'];
|
||||
@@ -85,7 +85,7 @@ class UpdateTagTest extends ApiTestCase
|
||||
self::assertEquals('Tag conflict', $payload['title']);
|
||||
}
|
||||
|
||||
public function provideTagConflictsApiVersions(): iterable
|
||||
public static function provideTagConflictsApiVersions(): iterable
|
||||
{
|
||||
yield 'version 1' => ['1', 'TAG_CONFLICT'];
|
||||
yield 'version 2' => ['2', 'TAG_CONFLICT'];
|
||||
|
||||
@@ -20,7 +20,7 @@ class VisitStatsTest extends ApiTestCase
|
||||
self::assertEquals(['visits' => $expectedPayload], $payload);
|
||||
}
|
||||
|
||||
public function provideApiKeysAndResults(): iterable
|
||||
public static function provideApiKeysAndResults(): iterable
|
||||
{
|
||||
yield 'valid API key' => ['valid_api_key', [
|
||||
'nonOrphanVisits' => [
|
||||
|
||||
@@ -28,7 +28,7 @@ class AuthenticationTest extends ApiTestCase
|
||||
self::assertEquals('Invalid authorization', $payload['title']);
|
||||
}
|
||||
|
||||
public function provideApiVersions(): iterable
|
||||
public static function provideApiVersions(): iterable
|
||||
{
|
||||
yield 'version 1' => ['1', 'INVALID_AUTHORIZATION'];
|
||||
yield 'version 2' => ['2', 'INVALID_AUTHORIZATION'];
|
||||
@@ -60,7 +60,7 @@ class AuthenticationTest extends ApiTestCase
|
||||
self::assertEquals('Invalid API key', $payload['title']);
|
||||
}
|
||||
|
||||
public function provideInvalidApiKeys(): iterable
|
||||
public static function provideInvalidApiKeys(): iterable
|
||||
{
|
||||
yield 'key which does not exist' => ['invalid', '2', 'INVALID_API_KEY'];
|
||||
yield 'key which is expired' => ['expired_api_key', '2', 'INVALID_API_KEY'];
|
||||
|
||||
@@ -41,7 +41,7 @@ class CorsTest extends ApiTestCase
|
||||
self::assertFalse($resp->hasHeader('Access-Control-Allow-Headers'));
|
||||
}
|
||||
|
||||
public function provideOrigins(): iterable
|
||||
public static function provideOrigins(): iterable
|
||||
{
|
||||
yield 'foo.com' => ['foo.com', '/short-urls', 200];
|
||||
yield 'bar.io' => ['bar.io', '/foo/bar', 404];
|
||||
@@ -69,7 +69,7 @@ class CorsTest extends ApiTestCase
|
||||
self::assertEquals($allowedHeaders, $resp->getHeaderLine('Access-Control-Allow-Headers'));
|
||||
}
|
||||
|
||||
public function providePreflightEndpoints(): iterable
|
||||
public static function providePreflightEndpoints(): iterable
|
||||
{
|
||||
yield 'invalid route' => ['/foo/bar', 'GET,POST,PUT,PATCH,DELETE']; // TODO This won't work with multi-segment
|
||||
yield 'short URLs route' => ['/short-urls', 'GET,POST'];
|
||||
|
||||
@@ -11,7 +11,7 @@ use function sprintf;
|
||||
|
||||
trait NotFoundUrlHelpersTrait
|
||||
{
|
||||
public function provideInvalidUrls(): iterable
|
||||
public static function provideInvalidUrls(): iterable
|
||||
{
|
||||
yield 'invalid shortcode' => ['invalid', null, 'No URL found with short code "invalid"', 'valid_api_key'];
|
||||
yield 'invalid shortcode without domain' => [
|
||||
|
||||
Reference in New Issue
Block a user