mirror of
https://github.com/shlinkio/shlink.git
synced 2024-11-21 16:38:37 -06:00
Replace traits with external data providers in API tests
This commit is contained in:
parent
3b1f6c69de
commit
dc4aab2cab
@ -148,6 +148,10 @@
|
||||
"@test:unit:ci",
|
||||
"@infect:ci:unit"
|
||||
],
|
||||
"infect:test:db": [
|
||||
"@test:db:sqlite:ci",
|
||||
"@infect:ci:db"
|
||||
],
|
||||
"infect:test:api": [
|
||||
"@test:api:ci",
|
||||
"@infect:ci:api"
|
||||
|
@ -5,24 +5,28 @@ declare(strict_types=1);
|
||||
namespace ShlinkioApiTest\Shlink\Rest\Action;
|
||||
|
||||
use PHPUnit\Framework\Attributes\DataProvider;
|
||||
use PHPUnit\Framework\Attributes\DataProviderExternal;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use Shlinkio\Shlink\TestUtils\ApiTest\ApiTestCase;
|
||||
use ShlinkioApiTest\Shlink\Rest\Utils\NotFoundUrlHelpersTrait;
|
||||
use ShlinkioApiTest\Shlink\Rest\Utils\ApiTestDataProviders;
|
||||
use ShlinkioApiTest\Shlink\Rest\Utils\UrlBuilder;
|
||||
|
||||
use function sprintf;
|
||||
|
||||
class DeleteShortUrlTest extends ApiTestCase
|
||||
{
|
||||
use NotFoundUrlHelpersTrait;
|
||||
|
||||
#[Test, DataProvider('provideInvalidUrls')]
|
||||
#[Test, DataProviderExternal(ApiTestDataProviders::class, 'invalidUrlsProvider')]
|
||||
public function notFoundErrorIsReturnWhenDeletingInvalidUrl(
|
||||
string $shortCode,
|
||||
?string $domain,
|
||||
string $expectedDetail,
|
||||
string $apiKey,
|
||||
): void {
|
||||
$resp = $this->callApiWithKey(self::METHOD_DELETE, $this->buildShortUrlPath($shortCode, $domain), [], $apiKey);
|
||||
$resp = $this->callApiWithKey(
|
||||
self::METHOD_DELETE,
|
||||
UrlBuilder::buildShortUrlPath($shortCode, $domain),
|
||||
apiKey: $apiKey,
|
||||
);
|
||||
$payload = $this->getJsonResponsePayload($resp);
|
||||
|
||||
self::assertEquals(self::STATUS_NOT_FOUND, $resp->getStatusCode());
|
||||
|
@ -9,16 +9,16 @@ use GuzzleHttp\Psr7\Query;
|
||||
use GuzzleHttp\RequestOptions;
|
||||
use Laminas\Diactoros\Uri;
|
||||
use PHPUnit\Framework\Attributes\DataProvider;
|
||||
use PHPUnit\Framework\Attributes\DataProviderExternal;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use Shlinkio\Shlink\TestUtils\ApiTest\ApiTestCase;
|
||||
use ShlinkioApiTest\Shlink\Rest\Utils\NotFoundUrlHelpersTrait;
|
||||
use ShlinkioApiTest\Shlink\Rest\Utils\ApiTestDataProviders;
|
||||
use ShlinkioApiTest\Shlink\Rest\Utils\UrlBuilder;
|
||||
|
||||
use function sprintf;
|
||||
|
||||
class EditShortUrlTest extends ApiTestCase
|
||||
{
|
||||
use NotFoundUrlHelpersTrait;
|
||||
|
||||
#[Test, DataProvider('provideMeta')]
|
||||
public function metadataCanBeReset(array $meta): void
|
||||
{
|
||||
@ -99,14 +99,14 @@ class EditShortUrlTest extends ApiTestCase
|
||||
yield 'invalid URL' => ['http://foo', self::STATUS_BAD_REQUEST, 'INVALID_URL'];
|
||||
}
|
||||
|
||||
#[Test, DataProvider('provideInvalidUrls')]
|
||||
#[Test, DataProviderExternal(ApiTestDataProviders::class, 'invalidUrlsProvider')]
|
||||
public function tryingToEditInvalidUrlReturnsNotFoundError(
|
||||
string $shortCode,
|
||||
?string $domain,
|
||||
string $expectedDetail,
|
||||
string $apiKey,
|
||||
): void {
|
||||
$url = $this->buildShortUrlPath($shortCode, $domain);
|
||||
$url = UrlBuilder::buildShortUrlPath($shortCode, $domain);
|
||||
$resp = $this->callApiWithKey(self::METHOD_PATCH, $url, [RequestOptions::JSON => []], $apiKey);
|
||||
$payload = $this->getJsonResponsePayload($resp);
|
||||
|
||||
|
@ -7,16 +7,16 @@ namespace ShlinkioApiTest\Shlink\Rest\Action;
|
||||
use Cake\Chronos\Chronos;
|
||||
use GuzzleHttp\RequestOptions;
|
||||
use PHPUnit\Framework\Attributes\DataProvider;
|
||||
use PHPUnit\Framework\Attributes\DataProviderExternal;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use Shlinkio\Shlink\TestUtils\ApiTest\ApiTestCase;
|
||||
use ShlinkioApiTest\Shlink\Rest\Utils\NotFoundUrlHelpersTrait;
|
||||
use ShlinkioApiTest\Shlink\Rest\Utils\ApiTestDataProviders;
|
||||
use ShlinkioApiTest\Shlink\Rest\Utils\UrlBuilder;
|
||||
|
||||
use function sprintf;
|
||||
|
||||
class ResolveShortUrlTest extends ApiTestCase
|
||||
{
|
||||
use NotFoundUrlHelpersTrait;
|
||||
|
||||
#[Test, DataProvider('provideDisabledMeta')]
|
||||
public function shortUrlIsProperlyResolvedEvenWhenNotEnabled(array $disabledMeta): void
|
||||
{
|
||||
@ -42,14 +42,18 @@ class ResolveShortUrlTest extends ApiTestCase
|
||||
yield 'maxVisits reached' => [['maxVisits' => 1]];
|
||||
}
|
||||
|
||||
#[Test, DataProvider('provideInvalidUrls')]
|
||||
#[Test, DataProviderExternal(ApiTestDataProviders::class, 'invalidUrlsProvider')]
|
||||
public function tryingToResolveInvalidUrlReturnsNotFoundError(
|
||||
string $shortCode,
|
||||
?string $domain,
|
||||
string $expectedDetail,
|
||||
string $apiKey,
|
||||
): void {
|
||||
$resp = $this->callApiWithKey(self::METHOD_GET, $this->buildShortUrlPath($shortCode, $domain), [], $apiKey);
|
||||
$resp = $this->callApiWithKey(
|
||||
self::METHOD_GET,
|
||||
UrlBuilder::buildShortUrlPath($shortCode, $domain),
|
||||
apiKey: $apiKey,
|
||||
);
|
||||
$payload = $this->getJsonResponsePayload($resp);
|
||||
|
||||
self::assertEquals(self::STATUS_NOT_FOUND, $resp->getStatusCode());
|
||||
|
@ -7,18 +7,18 @@ namespace ShlinkioApiTest\Shlink\Rest\Action;
|
||||
use GuzzleHttp\Psr7\Query;
|
||||
use Laminas\Diactoros\Uri;
|
||||
use PHPUnit\Framework\Attributes\DataProvider;
|
||||
use PHPUnit\Framework\Attributes\DataProviderExternal;
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use Shlinkio\Shlink\Common\Paginator\Paginator;
|
||||
use Shlinkio\Shlink\TestUtils\ApiTest\ApiTestCase;
|
||||
use ShlinkioApiTest\Shlink\Rest\Utils\NotFoundUrlHelpersTrait;
|
||||
use ShlinkioApiTest\Shlink\Rest\Utils\ApiTestDataProviders;
|
||||
use ShlinkioApiTest\Shlink\Rest\Utils\UrlBuilder;
|
||||
|
||||
use function sprintf;
|
||||
|
||||
class ShortUrlVisitsTest extends ApiTestCase
|
||||
{
|
||||
use NotFoundUrlHelpersTrait;
|
||||
|
||||
#[Test, DataProvider('provideInvalidUrls')]
|
||||
#[Test, DataProviderExternal(ApiTestDataProviders::class, 'invalidUrlsProvider')]
|
||||
public function tryingToGetVisitsForInvalidUrlReturnsNotFoundError(
|
||||
string $shortCode,
|
||||
?string $domain,
|
||||
@ -27,9 +27,8 @@ class ShortUrlVisitsTest extends ApiTestCase
|
||||
): void {
|
||||
$resp = $this->callApiWithKey(
|
||||
self::METHOD_GET,
|
||||
$this->buildShortUrlPath($shortCode, $domain, '/visits'),
|
||||
[],
|
||||
$apiKey,
|
||||
UrlBuilder::buildShortUrlPath($shortCode, $domain, '/visits'),
|
||||
apiKey: $apiKey,
|
||||
);
|
||||
$payload = $this->getJsonResponsePayload($resp);
|
||||
|
||||
|
@ -4,14 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace ShlinkioApiTest\Shlink\Rest\Utils;
|
||||
|
||||
use GuzzleHttp\Psr7\Query;
|
||||
use Laminas\Diactoros\Uri;
|
||||
|
||||
use function sprintf;
|
||||
|
||||
trait NotFoundUrlHelpersTrait
|
||||
class ApiTestDataProviders
|
||||
{
|
||||
public static function provideInvalidUrls(): iterable
|
||||
public static function invalidUrlsProvider(): iterable
|
||||
{
|
||||
yield 'invalid shortcode' => ['invalid', null, 'No URL found with short code "invalid"', 'valid_api_key'];
|
||||
yield 'invalid shortcode without domain' => [
|
||||
@ -20,7 +15,7 @@ trait NotFoundUrlHelpersTrait
|
||||
'No URL found with short code "abc123" for domain "example.com"',
|
||||
'valid_api_key',
|
||||
];
|
||||
yield 'invalid shortcode + domain' => [
|
||||
yield 'invalid shortcode and custom domain' => [
|
||||
'custom-with-domain',
|
||||
'example.com',
|
||||
'No URL found with short code "custom-with-domain" for domain "example.com"',
|
||||
@ -32,21 +27,11 @@ trait NotFoundUrlHelpersTrait
|
||||
'No URL found with short code "ghi789"',
|
||||
'author_api_key',
|
||||
];
|
||||
yield 'valid shortcode + domain with invalid API key' => [
|
||||
yield 'valid shortcode and custom domain with invalid API key' => [
|
||||
'custom-with-domain',
|
||||
'some-domain.com',
|
||||
'No URL found with short code "custom-with-domain" for domain "some-domain.com"',
|
||||
'domain_api_key',
|
||||
];
|
||||
}
|
||||
|
||||
public function buildShortUrlPath(string $shortCode, ?string $domain, string $suffix = ''): string
|
||||
{
|
||||
$url = new Uri(sprintf('/short-urls/%s%s', $shortCode, $suffix));
|
||||
if ($domain !== null) {
|
||||
$url = $url->withQuery(Query::build(['domain' => $domain]));
|
||||
}
|
||||
|
||||
return (string) $url;
|
||||
}
|
||||
}
|
23
module/Rest/test-api/Utils/UrlBuilder.php
Normal file
23
module/Rest/test-api/Utils/UrlBuilder.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace ShlinkioApiTest\Shlink\Rest\Utils;
|
||||
|
||||
use GuzzleHttp\Psr7\Query;
|
||||
use Laminas\Diactoros\Uri;
|
||||
|
||||
use function sprintf;
|
||||
|
||||
class UrlBuilder
|
||||
{
|
||||
public static function buildShortUrlPath(string $shortCode, ?string $domain, string $suffix = ''): string
|
||||
{
|
||||
$url = new Uri(sprintf('/short-urls/%s%s', $shortCode, $suffix));
|
||||
if ($domain !== null) {
|
||||
$url = $url->withQuery(Query::build(['domain' => $domain]));
|
||||
}
|
||||
|
||||
return $url->__toString();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user