Replace traits with external data providers in Core unit tests

This commit is contained in:
Alejandro Celaya 2023-06-18 10:41:24 +02:00
parent dc4aab2cab
commit bdf2bbd0f1
6 changed files with 18 additions and 42 deletions

View file

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace ShlinkioTest\Shlink\Core\ShortUrl;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\DataProviderExternal;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
@ -14,14 +14,12 @@ use Shlinkio\Shlink\Core\ShortUrl\Model\ShortUrlsParams;
use Shlinkio\Shlink\Core\ShortUrl\Repository\ShortUrlListRepositoryInterface;
use Shlinkio\Shlink\Core\ShortUrl\ShortUrlListService;
use Shlinkio\Shlink\Rest\Entity\ApiKey;
use ShlinkioTest\Shlink\Core\Util\ApiKeyHelpersTrait;
use ShlinkioTest\Shlink\Core\Util\ApiKeyDataProviders;
use function count;
class ShortUrlListServiceTest extends TestCase
{
use ApiKeyHelpersTrait;
private ShortUrlListService $service;
private MockObject & ShortUrlListRepositoryInterface $repo;
@ -31,7 +29,7 @@ class ShortUrlListServiceTest extends TestCase
$this->service = new ShortUrlListService($this->repo, new UrlShortenerOptions());
}
#[Test, DataProvider('provideAdminApiKeys')]
#[Test, DataProviderExternal(ApiKeyDataProviders::class, 'adminApiKeysProvider')]
public function listedUrlsAreReturnedFromEntityManager(?ApiKey $apiKey): void
{
$list = [

View file

@ -8,6 +8,7 @@ use Cake\Chronos\Chronos;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\EntityManagerInterface;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\DataProviderExternal;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
@ -22,15 +23,13 @@ use Shlinkio\Shlink\Core\ShortUrl\ShortUrlResolver;
use Shlinkio\Shlink\Core\Visit\Entity\Visit;
use Shlinkio\Shlink\Core\Visit\Model\Visitor;
use Shlinkio\Shlink\Rest\Entity\ApiKey;
use ShlinkioTest\Shlink\Core\Util\ApiKeyHelpersTrait;
use ShlinkioTest\Shlink\Core\Util\ApiKeyDataProviders;
use function Functional\map;
use function range;
class ShortUrlResolverTest extends TestCase
{
use ApiKeyHelpersTrait;
private ShortUrlResolver $urlResolver;
private MockObject & EntityManagerInterface $em;
private MockObject & ShortUrlRepositoryInterface $repo;
@ -42,7 +41,7 @@ class ShortUrlResolverTest extends TestCase
$this->urlResolver = new ShortUrlResolver($this->em, new UrlShortenerOptions());
}
#[Test, DataProvider('provideAdminApiKeys')]
#[Test, DataProviderExternal(ApiKeyDataProviders::class, 'adminApiKeysProvider')]
public function shortCodeIsProperlyParsed(?ApiKey $apiKey): void
{
$shortUrl = ShortUrl::withLongUrl('https://expected_url');
@ -59,7 +58,7 @@ class ShortUrlResolverTest extends TestCase
self::assertSame($shortUrl, $result);
}
#[Test, DataProvider('provideAdminApiKeys')]
#[Test, DataProviderExternal(ApiKeyDataProviders::class, 'adminApiKeysProvider')]
public function exceptionIsThrownIfShortcodeIsNotFound(?ApiKey $apiKey): void
{
$shortCode = 'abc123';

View file

@ -21,15 +21,12 @@ use Shlinkio\Shlink\Core\ShortUrl\Resolver\SimpleShortUrlRelationResolver;
use Shlinkio\Shlink\Core\ShortUrl\ShortUrlResolverInterface;
use Shlinkio\Shlink\Core\ShortUrl\ShortUrlService;
use Shlinkio\Shlink\Rest\Entity\ApiKey;
use ShlinkioTest\Shlink\Core\Util\ApiKeyHelpersTrait;
use function array_fill_keys;
use function Shlinkio\Shlink\Core\enumValues;
class ShortUrlServiceTest extends TestCase
{
use ApiKeyHelpersTrait;
private ShortUrlService $service;
private MockObject & ShortUrlResolverInterface $urlResolver;
private MockObject & ShortUrlTitleResolutionHelperInterface $titleResolutionHelper;

View file

@ -6,6 +6,7 @@ namespace ShlinkioTest\Shlink\Core\Tag;
use Doctrine\ORM\EntityManagerInterface;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\DataProviderExternal;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
@ -22,12 +23,10 @@ use Shlinkio\Shlink\Core\Tag\TagService;
use Shlinkio\Shlink\Rest\ApiKey\Model\ApiKeyMeta;
use Shlinkio\Shlink\Rest\ApiKey\Model\RoleDefinition;
use Shlinkio\Shlink\Rest\Entity\ApiKey;
use ShlinkioTest\Shlink\Core\Util\ApiKeyHelpersTrait;
use ShlinkioTest\Shlink\Core\Util\ApiKeyDataProviders;
class TagServiceTest extends TestCase
{
use ApiKeyHelpersTrait;
private TagService $service;
private MockObject & EntityManagerInterface $em;
private MockObject & TagRepository $repo;
@ -101,7 +100,7 @@ class TagServiceTest extends TestCase
];
}
#[Test, DataProvider('provideAdminApiKeys')]
#[Test, DataProviderExternal(ApiKeyDataProviders::class, 'adminApiKeysProvider')]
public function deleteTagsDelegatesOnRepository(?ApiKey $apiKey): void
{
$this->repo->expects($this->once())->method('deleteByName')->with(['foo', 'bar'])->willReturn(4);
@ -122,7 +121,7 @@ class TagServiceTest extends TestCase
);
}
#[Test, DataProvider('provideAdminApiKeys')]
#[Test, DataProviderExternal(ApiKeyDataProviders::class, 'adminApiKeysProvider')]
public function renameInvalidTagThrowsException(?ApiKey $apiKey): void
{
$this->repo->expects($this->once())->method('findOneBy')->willReturn(null);
@ -152,7 +151,7 @@ class TagServiceTest extends TestCase
yield 'different names names' => ['foo', 'bar', 0];
}
#[Test, DataProvider('provideAdminApiKeys')]
#[Test, DataProviderExternal(ApiKeyDataProviders::class, 'adminApiKeysProvider')]
public function renameTagToAnExistingNameThrowsException(?ApiKey $apiKey): void
{
$this->repo->expects($this->once())->method('findOneBy')->willReturn(new Tag('foo'));

View file

@ -1,16 +0,0 @@
<?php
declare(strict_types=1);
namespace ShlinkioTest\Shlink\Core\Util;
use Shlinkio\Shlink\Rest\Entity\ApiKey;
trait ApiKeyHelpersTrait
{
public static function provideAdminApiKeys(): iterable
{
yield 'no API key' => [null];
yield 'admin API key' => [ApiKey::create()];
}
}

View file

@ -8,6 +8,7 @@ use Doctrine\ORM\EntityManagerInterface;
use Laminas\Stdlib\ArrayUtils;
use PHPUnit\Framework\Assert;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\DataProviderExternal;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
@ -30,7 +31,7 @@ use Shlinkio\Shlink\Core\Visit\Persistence\VisitsListFiltering;
use Shlinkio\Shlink\Core\Visit\Repository\VisitRepository;
use Shlinkio\Shlink\Core\Visit\VisitsStatsHelper;
use Shlinkio\Shlink\Rest\Entity\ApiKey;
use ShlinkioTest\Shlink\Core\Util\ApiKeyHelpersTrait;
use ShlinkioTest\Shlink\Core\Util\ApiKeyDataProviders;
use function count;
use function Functional\map;
@ -38,8 +39,6 @@ use function range;
class VisitsStatsHelperTest extends TestCase
{
use ApiKeyHelpersTrait;
private VisitsStatsHelper $helper;
private MockObject & EntityManagerInterface $em;
@ -81,7 +80,7 @@ class VisitsStatsHelperTest extends TestCase
];
}
#[Test, DataProvider('provideAdminApiKeys')]
#[Test, DataProviderExternal(ApiKeyDataProviders::class, 'adminApiKeysProvider')]
public function infoReturnsVisitsForCertainShortCode(?ApiKey $apiKey): void
{
$shortCode = '123ABC';
@ -141,7 +140,7 @@ class VisitsStatsHelperTest extends TestCase
$this->helper->visitsForTag($tag, new VisitsParams(), $apiKey);
}
#[Test, DataProvider('provideAdminApiKeys')]
#[Test, DataProviderExternal(ApiKeyDataProviders::class, 'adminApiKeysProvider')]
public function visitsForTagAreReturnedAsExpected(?ApiKey $apiKey): void
{
$tag = 'foo';
@ -179,7 +178,7 @@ class VisitsStatsHelperTest extends TestCase
$this->helper->visitsForDomain($domain, new VisitsParams(), $apiKey);
}
#[Test, DataProvider('provideAdminApiKeys')]
#[Test, DataProviderExternal(ApiKeyDataProviders::class, 'adminApiKeysProvider')]
public function visitsForNonDefaultDomainAreReturnedAsExpected(?ApiKey $apiKey): void
{
$domain = 'foo.com';
@ -207,7 +206,7 @@ class VisitsStatsHelperTest extends TestCase
self::assertEquals($list, ArrayUtils::iteratorToArray($paginator->getCurrentPageResults()));
}
#[Test, DataProvider('provideAdminApiKeys')]
#[Test, DataProviderExternal(ApiKeyDataProviders::class, 'adminApiKeysProvider')]
public function visitsForDefaultDomainAreReturnedAsExpected(?ApiKey $apiKey): void
{
$repo = $this->createMock(DomainRepository::class);