mirror of
https://github.com/shlinkio/shlink.git
synced 2025-03-29 04:52:54 +03:00
Added test covering the case in which fetching existing short URLs, more than one result is found
This commit is contained in:
parent
2906d42f97
commit
734fdf83c1
1 changed files with 38 additions and 2 deletions
|
@ -27,6 +27,8 @@ use Shlinkio\Shlink\Core\Repository\ShortUrlRepositoryInterface;
|
||||||
use Shlinkio\Shlink\Core\Service\UrlShortener;
|
use Shlinkio\Shlink\Core\Service\UrlShortener;
|
||||||
use Zend\Diactoros\Uri;
|
use Zend\Diactoros\Uri;
|
||||||
|
|
||||||
|
use function array_map;
|
||||||
|
|
||||||
class UrlShortenerTest extends TestCase
|
class UrlShortenerTest extends TestCase
|
||||||
{
|
{
|
||||||
/** @var UrlShortener */
|
/** @var UrlShortener */
|
||||||
|
@ -146,20 +148,23 @@ class UrlShortenerTest extends TestCase
|
||||||
?ShortUrl $expected
|
?ShortUrl $expected
|
||||||
): void {
|
): void {
|
||||||
$repo = $this->prophesize(ShortUrlRepository::class);
|
$repo = $this->prophesize(ShortUrlRepository::class);
|
||||||
$findExisting = $repo->findBy(Argument::any())->willReturn([$expected]);
|
$findExisting = $repo->findBy(Argument::any())->willReturn($expected !== null ? [$expected] : []);
|
||||||
$getRepo = $this->em->getRepository(ShortUrl::class)->willReturn($repo->reveal());
|
$getRepo = $this->em->getRepository(ShortUrl::class)->willReturn($repo->reveal());
|
||||||
|
|
||||||
$result = $this->urlShortener->urlToShortCode(new Uri($url), $tags, $meta);
|
$result = $this->urlShortener->urlToShortCode(new Uri($url), $tags, $meta);
|
||||||
|
|
||||||
$this->assertSame($expected, $result);
|
|
||||||
$findExisting->shouldHaveBeenCalledOnce();
|
$findExisting->shouldHaveBeenCalledOnce();
|
||||||
$getRepo->shouldHaveBeenCalledOnce();
|
$getRepo->shouldHaveBeenCalledOnce();
|
||||||
|
if ($expected) {
|
||||||
|
$this->assertSame($expected, $result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function provideExistingShortUrls(): iterable
|
public function provideExistingShortUrls(): iterable
|
||||||
{
|
{
|
||||||
$url = 'http://foo.com';
|
$url = 'http://foo.com';
|
||||||
|
|
||||||
|
yield [$url, [], ShortUrlMeta::createFromRawData(['findIfExists' => true]), null];
|
||||||
yield [$url, [], ShortUrlMeta::createFromRawData(['findIfExists' => true]), new ShortUrl($url)];
|
yield [$url, [], ShortUrlMeta::createFromRawData(['findIfExists' => true]), new ShortUrl($url)];
|
||||||
yield [$url, [], ShortUrlMeta::createFromRawData(
|
yield [$url, [], ShortUrlMeta::createFromRawData(
|
||||||
['findIfExists' => true, 'customSlug' => 'foo']
|
['findIfExists' => true, 'customSlug' => 'foo']
|
||||||
|
@ -203,6 +208,37 @@ class UrlShortenerTest extends TestCase
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @test */
|
||||||
|
public function properExistingShortUrlIsReturnedWhenMultipleMatch(): void
|
||||||
|
{
|
||||||
|
$url = 'http://foo.com';
|
||||||
|
$tags = ['baz', 'foo', 'bar'];
|
||||||
|
$meta = ShortUrlMeta::createFromRawData([
|
||||||
|
'findIfExists' => true,
|
||||||
|
'validUntil' => Chronos::parse('2017-01-01'),
|
||||||
|
'maxVisits' => 4,
|
||||||
|
]);
|
||||||
|
$tagsCollection = new ArrayCollection(array_map(function (string $tag) {
|
||||||
|
return new Tag($tag);
|
||||||
|
}, $tags));
|
||||||
|
$expected = (new ShortUrl($url, $meta))->setTags($tagsCollection);
|
||||||
|
|
||||||
|
$repo = $this->prophesize(ShortUrlRepository::class);
|
||||||
|
$findExisting = $repo->findBy(Argument::any())->willReturn([
|
||||||
|
new ShortUrl($url),
|
||||||
|
new ShortUrl($url, $meta),
|
||||||
|
$expected,
|
||||||
|
(new ShortUrl($url))->setTags($tagsCollection),
|
||||||
|
]);
|
||||||
|
$getRepo = $this->em->getRepository(ShortUrl::class)->willReturn($repo->reveal());
|
||||||
|
|
||||||
|
$result = $this->urlShortener->urlToShortCode(new Uri($url), $tags, $meta);
|
||||||
|
|
||||||
|
$this->assertSame($expected, $result);
|
||||||
|
$findExisting->shouldHaveBeenCalledOnce();
|
||||||
|
$getRepo->shouldHaveBeenCalledOnce();
|
||||||
|
}
|
||||||
|
|
||||||
/** @test */
|
/** @test */
|
||||||
public function shortCodeIsProperlyParsed(): void
|
public function shortCodeIsProperlyParsed(): void
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue