Update to PHPUnit 10

This commit is contained in:
Alejandro Celaya
2023-02-09 09:32:38 +01:00
parent ad44a8441a
commit 650a286982
131 changed files with 335 additions and 315 deletions

View File

@@ -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'];

View File

@@ -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'];

View File

@@ -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'];

View File

@@ -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',

View File

@@ -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'];

View File

@@ -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',

View File

@@ -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];

View File

@@ -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', [
[

View File

@@ -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']];

View File

@@ -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'],

View File

@@ -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];

View File

@@ -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]];

View File

@@ -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'];

View File

@@ -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();

View File

@@ -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];

View File

@@ -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'];

View File

@@ -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'];

View File

@@ -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', [], [
[

View File

@@ -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'];

View File

@@ -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' => [

View File

@@ -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'];

View File

@@ -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'];

View File

@@ -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' => [