Renamed InvalidShortCodeException to ShortCodeNotFoundException

This commit is contained in:
Alejandro Celaya 2019-11-24 23:11:25 +01:00
parent cdd36b6712
commit 2f1de4a162
24 changed files with 58 additions and 47 deletions

View file

@ -55,7 +55,7 @@ class DeleteShortUrlCommand extends Command
try { try {
$this->runDelete($io, $shortCode, $ignoreThreshold); $this->runDelete($io, $shortCode, $ignoreThreshold);
return ExitCodes::EXIT_SUCCESS; return ExitCodes::EXIT_SUCCESS;
} catch (Exception\InvalidShortCodeException $e) { } catch (Exception\ShortUrlNotFoundException $e) {
$io->error(sprintf('Provided short code "%s" could not be found.', $shortCode)); $io->error(sprintf('Provided short code "%s" could not be found.', $shortCode));
return ExitCodes::EXIT_FAILURE; return ExitCodes::EXIT_FAILURE;
} catch (Exception\DeleteShortUrlException $e) { } catch (Exception\DeleteShortUrlException $e) {

View file

@ -6,7 +6,7 @@ namespace Shlinkio\Shlink\CLI\Command\ShortUrl;
use Shlinkio\Shlink\CLI\Util\ExitCodes; use Shlinkio\Shlink\CLI\Util\ExitCodes;
use Shlinkio\Shlink\Core\Exception\EntityDoesNotExistException; use Shlinkio\Shlink\Core\Exception\EntityDoesNotExistException;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Core\Service\UrlShortenerInterface; use Shlinkio\Shlink\Core\Service\UrlShortenerInterface;
use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
@ -65,7 +65,7 @@ class ResolveUrlCommand extends Command
$url = $this->urlShortener->shortCodeToUrl($shortCode, $domain); $url = $this->urlShortener->shortCodeToUrl($shortCode, $domain);
$output->writeln(sprintf('Long URL: <info>%s</info>', $url->getLongUrl())); $output->writeln(sprintf('Long URL: <info>%s</info>', $url->getLongUrl()));
return ExitCodes::EXIT_SUCCESS; return ExitCodes::EXIT_SUCCESS;
} catch (InvalidShortCodeException $e) { } catch (ShortUrlNotFoundException $e) {
$io->error(sprintf('Provided short code "%s" has an invalid format.', $shortCode)); $io->error(sprintf('Provided short code "%s" has an invalid format.', $shortCode));
return ExitCodes::EXIT_FAILURE; return ExitCodes::EXIT_FAILURE;
} catch (EntityDoesNotExistException $e) { } catch (EntityDoesNotExistException $e) {

View file

@ -58,7 +58,7 @@ class DeleteShortUrlCommandTest extends TestCase
{ {
$shortCode = 'abc123'; $shortCode = 'abc123';
$deleteByShortCode = $this->service->deleteByShortCode($shortCode, false)->willThrow( $deleteByShortCode = $this->service->deleteByShortCode($shortCode, false)->willThrow(
Exception\InvalidShortCodeException::class Exception\ShortUrlNotFoundException::class
); );
$this->commandTester->execute(['shortCode' => $shortCode]); $this->commandTester->execute(['shortCode' => $shortCode]);

View file

@ -9,7 +9,7 @@ use Prophecy\Prophecy\ObjectProphecy;
use Shlinkio\Shlink\CLI\Command\ShortUrl\ResolveUrlCommand; use Shlinkio\Shlink\CLI\Command\ShortUrl\ResolveUrlCommand;
use Shlinkio\Shlink\Core\Entity\ShortUrl; use Shlinkio\Shlink\Core\Entity\ShortUrl;
use Shlinkio\Shlink\Core\Exception\EntityDoesNotExistException; use Shlinkio\Shlink\Core\Exception\EntityDoesNotExistException;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Core\Service\UrlShortener; use Shlinkio\Shlink\Core\Service\UrlShortener;
use Symfony\Component\Console\Application; use Symfony\Component\Console\Application;
use Symfony\Component\Console\Tester\CommandTester; use Symfony\Component\Console\Tester\CommandTester;
@ -63,7 +63,7 @@ class ResolveUrlCommandTest extends TestCase
public function wrongShortCodeFormatOutputsErrorMessage(): void public function wrongShortCodeFormatOutputsErrorMessage(): void
{ {
$shortCode = 'abc123'; $shortCode = 'abc123';
$this->urlShortener->shortCodeToUrl($shortCode, null)->willThrow(new InvalidShortCodeException()) $this->urlShortener->shortCodeToUrl($shortCode, null)->willThrow(new ShortUrlNotFoundException())
->shouldBeCalledOnce(); ->shouldBeCalledOnce();
$this->commandTester->execute(['shortCode' => $shortCode]); $this->commandTester->execute(['shortCode' => $shortCode]);

View file

@ -12,7 +12,7 @@ use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger; use Psr\Log\NullLogger;
use Shlinkio\Shlink\Core\Entity\ShortUrl; use Shlinkio\Shlink\Core\Entity\ShortUrl;
use Shlinkio\Shlink\Core\Exception\EntityDoesNotExistException; use Shlinkio\Shlink\Core\Exception\EntityDoesNotExistException;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Core\Model\Visitor; use Shlinkio\Shlink\Core\Model\Visitor;
use Shlinkio\Shlink\Core\Options\AppOptions; use Shlinkio\Shlink\Core\Options\AppOptions;
use Shlinkio\Shlink\Core\Service\UrlShortenerInterface; use Shlinkio\Shlink\Core\Service\UrlShortenerInterface;
@ -72,7 +72,7 @@ abstract class AbstractTrackingAction implements MiddlewareInterface
} }
return $this->createSuccessResp($this->buildUrlToRedirectTo($url, $query, $disableTrackParam)); return $this->createSuccessResp($this->buildUrlToRedirectTo($url, $query, $disableTrackParam));
} catch (InvalidShortCodeException | EntityDoesNotExistException $e) { } catch (ShortUrlNotFoundException | EntityDoesNotExistException $e) {
$this->logger->warning('An error occurred while tracking short code. {e}', ['e' => $e]); $this->logger->warning('An error occurred while tracking short code. {e}', ['e' => $e]);
return $this->createErrorResp($request, $handler); return $this->createErrorResp($request, $handler);
} }

View file

@ -12,7 +12,7 @@ use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger; use Psr\Log\NullLogger;
use Shlinkio\Shlink\Common\Response\ResponseUtilsTrait; use Shlinkio\Shlink\Common\Response\ResponseUtilsTrait;
use Shlinkio\Shlink\Core\Exception\EntityDoesNotExistException; use Shlinkio\Shlink\Core\Exception\EntityDoesNotExistException;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Core\Service\UrlShortenerInterface; use Shlinkio\Shlink\Core\Service\UrlShortenerInterface;
use Shlinkio\Shlink\PreviewGenerator\Exception\PreviewGenerationException; use Shlinkio\Shlink\PreviewGenerator\Exception\PreviewGenerationException;
use Shlinkio\Shlink\PreviewGenerator\Service\PreviewGeneratorInterface; use Shlinkio\Shlink\PreviewGenerator\Service\PreviewGeneratorInterface;
@ -56,7 +56,7 @@ class PreviewAction implements MiddlewareInterface
$url = $this->urlShortener->shortCodeToUrl($shortCode); $url = $this->urlShortener->shortCodeToUrl($shortCode);
$imagePath = $this->previewGenerator->generatePreview($url->getLongUrl()); $imagePath = $this->previewGenerator->generatePreview($url->getLongUrl());
return $this->generateImageResponse($imagePath); return $this->generateImageResponse($imagePath);
} catch (InvalidShortCodeException | EntityDoesNotExistException | PreviewGenerationException $e) { } catch (ShortUrlNotFoundException | EntityDoesNotExistException | PreviewGenerationException $e) {
$this->logger->warning('An error occurred while generating preview image. {e}', ['e' => $e]); $this->logger->warning('An error occurred while generating preview image. {e}', ['e' => $e]);
return $handler->handle($request); return $handler->handle($request);
} }

View file

@ -13,7 +13,7 @@ use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger; use Psr\Log\NullLogger;
use Shlinkio\Shlink\Common\Response\QrCodeResponse; use Shlinkio\Shlink\Common\Response\QrCodeResponse;
use Shlinkio\Shlink\Core\Exception\EntityDoesNotExistException; use Shlinkio\Shlink\Core\Exception\EntityDoesNotExistException;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Core\Service\UrlShortenerInterface; use Shlinkio\Shlink\Core\Service\UrlShortenerInterface;
use Zend\Expressive\Router\Exception\RuntimeException; use Zend\Expressive\Router\Exception\RuntimeException;
use Zend\Expressive\Router\RouterInterface; use Zend\Expressive\Router\RouterInterface;
@ -60,7 +60,7 @@ class QrCodeAction implements MiddlewareInterface
try { try {
$this->urlShortener->shortCodeToUrl($shortCode, $domain); $this->urlShortener->shortCodeToUrl($shortCode, $domain);
} catch (InvalidShortCodeException | EntityDoesNotExistException $e) { } catch (ShortUrlNotFoundException | EntityDoesNotExistException $e) {
$this->logger->warning('An error occurred while creating QR code. {e}', ['e' => $e]); $this->logger->warning('An error occurred while creating QR code. {e}', ['e' => $e]);
return $handler->handle($request); return $handler->handle($request);
} }

View file

@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
namespace Shlinkio\Shlink\Core\Exception;
use DomainException as SplDomainException;
class DomainException extends SplDomainException implements ExceptionInterface
{
}

View file

@ -10,11 +10,11 @@ use Zend\ProblemDetails\Exception\ProblemDetailsExceptionInterface;
use function sprintf; use function sprintf;
class InvalidShortCodeException extends RuntimeException implements ProblemDetailsExceptionInterface class ShortUrlNotFoundException extends DomainException implements ProblemDetailsExceptionInterface
{ {
use CommonProblemDetailsExceptionTrait; use CommonProblemDetailsExceptionTrait;
private const TITLE = 'Invalid short code'; private const TITLE = 'Short URL not found';
public const TYPE = 'INVALID_SHORTCODE'; public const TYPE = 'INVALID_SHORTCODE';
public static function fromNotFoundShortCode(string $shortCode): self public static function fromNotFoundShortCode(string $shortCode): self

View file

@ -25,7 +25,7 @@ class DeleteShortUrlService implements DeleteShortUrlServiceInterface
} }
/** /**
* @throws Exception\InvalidShortCodeException * @throws Exception\ShortUrlNotFoundException
* @throws Exception\DeleteShortUrlException * @throws Exception\DeleteShortUrlException
*/ */
public function deleteByShortCode(string $shortCode, bool $ignoreThreshold = false): void public function deleteByShortCode(string $shortCode, bool $ignoreThreshold = false): void

View file

@ -9,7 +9,7 @@ use Shlinkio\Shlink\Core\Exception;
interface DeleteShortUrlServiceInterface interface DeleteShortUrlServiceInterface
{ {
/** /**
* @throws Exception\InvalidShortCodeException * @throws Exception\ShortUrlNotFoundException
* @throws Exception\DeleteShortUrlException * @throws Exception\DeleteShortUrlException
*/ */
public function deleteByShortCode(string $shortCode, bool $ignoreThreshold = false): void; public function deleteByShortCode(string $shortCode, bool $ignoreThreshold = false): void;

View file

@ -6,14 +6,14 @@ namespace Shlinkio\Shlink\Core\Service\ShortUrl;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Shlinkio\Shlink\Core\Entity\ShortUrl; use Shlinkio\Shlink\Core\Entity\ShortUrl;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
trait FindShortCodeTrait trait FindShortCodeTrait
{ {
/** /**
* @param string $shortCode * @param string $shortCode
* @return ShortUrl * @return ShortUrl
* @throws InvalidShortCodeException * @throws ShortUrlNotFoundException
*/ */
private function findByShortCode(EntityManagerInterface $em, string $shortCode): ShortUrl private function findByShortCode(EntityManagerInterface $em, string $shortCode): ShortUrl
{ {
@ -22,7 +22,7 @@ trait FindShortCodeTrait
'shortCode' => $shortCode, 'shortCode' => $shortCode,
]); ]);
if ($shortUrl === null) { if ($shortUrl === null) {
throw InvalidShortCodeException::fromNotFoundShortCode($shortCode); throw ShortUrlNotFoundException::fromNotFoundShortCode($shortCode);
} }
return $shortUrl; return $shortUrl;

View file

@ -6,7 +6,7 @@ namespace Shlinkio\Shlink\Core\Service;
use Doctrine\ORM; use Doctrine\ORM;
use Shlinkio\Shlink\Core\Entity\ShortUrl; use Shlinkio\Shlink\Core\Entity\ShortUrl;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Core\Model\ShortUrlMeta; use Shlinkio\Shlink\Core\Model\ShortUrlMeta;
use Shlinkio\Shlink\Core\Paginator\Adapter\ShortUrlRepositoryAdapter; use Shlinkio\Shlink\Core\Paginator\Adapter\ShortUrlRepositoryAdapter;
use Shlinkio\Shlink\Core\Repository\ShortUrlRepository; use Shlinkio\Shlink\Core\Repository\ShortUrlRepository;
@ -45,7 +45,7 @@ class ShortUrlService implements ShortUrlServiceInterface
/** /**
* @param string[] $tags * @param string[] $tags
* @throws InvalidShortCodeException * @throws ShortUrlNotFoundException
*/ */
public function setTagsByShortCode(string $shortCode, array $tags = []): ShortUrl public function setTagsByShortCode(string $shortCode, array $tags = []): ShortUrl
{ {
@ -57,7 +57,7 @@ class ShortUrlService implements ShortUrlServiceInterface
} }
/** /**
* @throws InvalidShortCodeException * @throws ShortUrlNotFoundException
*/ */
public function updateMetadataByShortCode(string $shortCode, ShortUrlMeta $shortUrlMeta): ShortUrl public function updateMetadataByShortCode(string $shortCode, ShortUrlMeta $shortUrlMeta): ShortUrl
{ {

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace Shlinkio\Shlink\Core\Service; namespace Shlinkio\Shlink\Core\Service;
use Shlinkio\Shlink\Core\Entity\ShortUrl; use Shlinkio\Shlink\Core\Entity\ShortUrl;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Core\Model\ShortUrlMeta; use Shlinkio\Shlink\Core\Model\ShortUrlMeta;
use Zend\Paginator\Paginator; use Zend\Paginator\Paginator;
@ -20,12 +20,12 @@ interface ShortUrlServiceInterface
/** /**
* @param string[] $tags * @param string[] $tags
* @throws InvalidShortCodeException * @throws ShortUrlNotFoundException
*/ */
public function setTagsByShortCode(string $shortCode, array $tags = []): ShortUrl; public function setTagsByShortCode(string $shortCode, array $tags = []): ShortUrl;
/** /**
* @throws InvalidShortCodeException * @throws ShortUrlNotFoundException
*/ */
public function updateMetadataByShortCode(string $shortCode, ShortUrlMeta $shortUrlMeta): ShortUrl; public function updateMetadataByShortCode(string $shortCode, ShortUrlMeta $shortUrlMeta): ShortUrl;
} }

View file

@ -9,7 +9,7 @@ use Psr\EventDispatcher\EventDispatcherInterface;
use Shlinkio\Shlink\Core\Entity\ShortUrl; use Shlinkio\Shlink\Core\Entity\ShortUrl;
use Shlinkio\Shlink\Core\Entity\Visit; use Shlinkio\Shlink\Core\Entity\Visit;
use Shlinkio\Shlink\Core\EventDispatcher\ShortUrlVisited; use Shlinkio\Shlink\Core\EventDispatcher\ShortUrlVisited;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Core\Model\Visitor; use Shlinkio\Shlink\Core\Model\Visitor;
use Shlinkio\Shlink\Core\Model\VisitsParams; use Shlinkio\Shlink\Core\Model\VisitsParams;
use Shlinkio\Shlink\Core\Paginator\Adapter\VisitsPaginatorAdapter; use Shlinkio\Shlink\Core\Paginator\Adapter\VisitsPaginatorAdapter;
@ -51,14 +51,14 @@ class VisitsTracker implements VisitsTrackerInterface
* Returns the visits on certain short code * Returns the visits on certain short code
* *
* @return Visit[]|Paginator * @return Visit[]|Paginator
* @throws InvalidShortCodeException * @throws ShortUrlNotFoundException
*/ */
public function info(string $shortCode, VisitsParams $params): Paginator public function info(string $shortCode, VisitsParams $params): Paginator
{ {
/** @var ORM\EntityRepository $repo */ /** @var ORM\EntityRepository $repo */
$repo = $this->em->getRepository(ShortUrl::class); $repo = $this->em->getRepository(ShortUrl::class);
if ($repo->count(['shortCode' => $shortCode]) < 1) { if ($repo->count(['shortCode' => $shortCode]) < 1) {
throw InvalidShortCodeException::fromNotFoundShortCode($shortCode); throw ShortUrlNotFoundException::fromNotFoundShortCode($shortCode);
} }
/** @var VisitRepository $repo */ /** @var VisitRepository $repo */

View file

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace Shlinkio\Shlink\Core\Service; namespace Shlinkio\Shlink\Core\Service;
use Shlinkio\Shlink\Core\Entity\Visit; use Shlinkio\Shlink\Core\Entity\Visit;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Core\Model\Visitor; use Shlinkio\Shlink\Core\Model\Visitor;
use Shlinkio\Shlink\Core\Model\VisitsParams; use Shlinkio\Shlink\Core\Model\VisitsParams;
use Zend\Paginator\Paginator; use Zend\Paginator\Paginator;
@ -21,7 +21,7 @@ interface VisitsTrackerInterface
* Returns the visits on certain short code * Returns the visits on certain short code
* *
* @return Visit[]|Paginator * @return Visit[]|Paginator
* @throws InvalidShortCodeException * @throws ShortUrlNotFoundException
*/ */
public function info(string $shortCode, VisitsParams $params): Paginator; public function info(string $shortCode, VisitsParams $params): Paginator;
} }

View file

@ -12,7 +12,7 @@ use Psr\Http\Server\RequestHandlerInterface;
use Shlinkio\Shlink\Core\Action\PreviewAction; use Shlinkio\Shlink\Core\Action\PreviewAction;
use Shlinkio\Shlink\Core\Entity\ShortUrl; use Shlinkio\Shlink\Core\Entity\ShortUrl;
use Shlinkio\Shlink\Core\Exception\EntityDoesNotExistException; use Shlinkio\Shlink\Core\Exception\EntityDoesNotExistException;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Core\Service\UrlShortener; use Shlinkio\Shlink\Core\Service\UrlShortener;
use Shlinkio\Shlink\PreviewGenerator\Service\PreviewGenerator; use Shlinkio\Shlink\PreviewGenerator\Service\PreviewGenerator;
use Zend\Diactoros\Response; use Zend\Diactoros\Response;
@ -74,7 +74,7 @@ class PreviewActionTest extends TestCase
public function invalidShortCodeExceptionFallsBackToNextMiddleware(): void public function invalidShortCodeExceptionFallsBackToNextMiddleware(): void
{ {
$shortCode = 'abc123'; $shortCode = 'abc123';
$this->urlShortener->shortCodeToUrl($shortCode)->willThrow(InvalidShortCodeException::class) $this->urlShortener->shortCodeToUrl($shortCode)->willThrow(ShortUrlNotFoundException::class)
->shouldBeCalledOnce(); ->shouldBeCalledOnce();
$delegate = $this->prophesize(RequestHandlerInterface::class); $delegate = $this->prophesize(RequestHandlerInterface::class);
$process = $delegate->handle(Argument::any())->willReturn(new Response()); $process = $delegate->handle(Argument::any())->willReturn(new Response());

View file

@ -12,7 +12,7 @@ use Shlinkio\Shlink\Common\Response\QrCodeResponse;
use Shlinkio\Shlink\Core\Action\QrCodeAction; use Shlinkio\Shlink\Core\Action\QrCodeAction;
use Shlinkio\Shlink\Core\Entity\ShortUrl; use Shlinkio\Shlink\Core\Entity\ShortUrl;
use Shlinkio\Shlink\Core\Exception\EntityDoesNotExistException; use Shlinkio\Shlink\Core\Exception\EntityDoesNotExistException;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Core\Service\UrlShortener; use Shlinkio\Shlink\Core\Service\UrlShortener;
use Zend\Diactoros\Response; use Zend\Diactoros\Response;
use Zend\Diactoros\ServerRequest; use Zend\Diactoros\ServerRequest;
@ -53,7 +53,7 @@ class QrCodeActionTest extends TestCase
public function anInvalidShortCodeWillReturnNotFoundResponse(): void public function anInvalidShortCodeWillReturnNotFoundResponse(): void
{ {
$shortCode = 'abc123'; $shortCode = 'abc123';
$this->urlShortener->shortCodeToUrl($shortCode, '')->willThrow(InvalidShortCodeException::class) $this->urlShortener->shortCodeToUrl($shortCode, '')->willThrow(ShortUrlNotFoundException::class)
->shouldBeCalledOnce(); ->shouldBeCalledOnce();
$delegate = $this->prophesize(RequestHandlerInterface::class); $delegate = $this->prophesize(RequestHandlerInterface::class);
$process = $delegate->handle(Argument::any())->willReturn(new Response()); $process = $delegate->handle(Argument::any())->willReturn(new Response());

View file

@ -5,14 +5,14 @@ declare(strict_types=1);
namespace ShlinkioTest\Shlink\Core\Exception; namespace ShlinkioTest\Shlink\Core\Exception;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
class InvalidShortCodeExceptionTest extends TestCase class InvalidShortCodeExceptionTest extends TestCase
{ {
/** @test */ /** @test */
public function properlyCreatesExceptionFromNotFoundShortCode(): void public function properlyCreatesExceptionFromNotFoundShortCode(): void
{ {
$e = InvalidShortCodeException::fromNotFoundShortCode('abc123'); $e = ShortUrlNotFoundException::fromNotFoundShortCode('abc123');
$this->assertEquals('No URL found for short code "abc123"', $e->getMessage()); $this->assertEquals('No URL found for short code "abc123"', $e->getMessage());
} }

View file

@ -12,7 +12,7 @@ use Prophecy\Argument;
use Prophecy\Prophecy\ObjectProphecy; use Prophecy\Prophecy\ObjectProphecy;
use Shlinkio\Shlink\Core\Entity\ShortUrl; use Shlinkio\Shlink\Core\Entity\ShortUrl;
use Shlinkio\Shlink\Core\Entity\Tag; use Shlinkio\Shlink\Core\Entity\Tag;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Core\Model\ShortUrlMeta; use Shlinkio\Shlink\Core\Model\ShortUrlMeta;
use Shlinkio\Shlink\Core\Repository\ShortUrlRepository; use Shlinkio\Shlink\Core\Repository\ShortUrlRepository;
use Shlinkio\Shlink\Core\Service\ShortUrlService; use Shlinkio\Shlink\Core\Service\ShortUrlService;
@ -62,7 +62,7 @@ class ShortUrlServiceTest extends TestCase
->shouldBeCalledOnce(); ->shouldBeCalledOnce();
$this->em->getRepository(ShortUrl::class)->willReturn($repo->reveal()); $this->em->getRepository(ShortUrl::class)->willReturn($repo->reveal());
$this->expectException(InvalidShortCodeException::class); $this->expectException(ShortUrlNotFoundException::class);
$this->service->setTagsByShortCode($shortCode); $this->service->setTagsByShortCode($shortCode);
} }

View file

@ -8,7 +8,7 @@ use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Shlinkio\Shlink\Common\Paginator\Util\PaginatorUtilsTrait; use Shlinkio\Shlink\Common\Paginator\Util\PaginatorUtilsTrait;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Core\Model\VisitsParams; use Shlinkio\Shlink\Core\Model\VisitsParams;
use Shlinkio\Shlink\Core\Service\VisitsTrackerInterface; use Shlinkio\Shlink\Core\Service\VisitsTrackerInterface;
use Shlinkio\Shlink\Rest\Action\AbstractRestAction; use Shlinkio\Shlink\Rest\Action\AbstractRestAction;
@ -43,7 +43,7 @@ class GetVisitsAction extends AbstractRestAction
return new JsonResponse([ return new JsonResponse([
'visits' => $this->serializePaginator($visits), 'visits' => $this->serializePaginator($visits),
]); ]);
} catch (InvalidShortCodeException $e) { } catch (ShortUrlNotFoundException $e) {
$this->logger->warning('Provided nonexistent short code {e}', ['e' => $e]); $this->logger->warning('Provided nonexistent short code {e}', ['e' => $e]);
return new JsonResponse([ return new JsonResponse([
'error' => RestUtils::INVALID_ARGUMENT_ERROR, // FIXME Wrong code. Use correct one in "type" 'error' => RestUtils::INVALID_ARGUMENT_ERROR, // FIXME Wrong code. Use correct one in "type"

View file

@ -6,14 +6,14 @@ namespace Shlinkio\Shlink\Rest\Util;
use Shlinkio\Shlink\Common\Exception as Common; use Shlinkio\Shlink\Common\Exception as Common;
use Shlinkio\Shlink\Core\Exception as Core; use Shlinkio\Shlink\Core\Exception as Core;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Rest\Exception as Rest; use Shlinkio\Shlink\Rest\Exception as Rest;
use Throwable; use Throwable;
class RestUtils class RestUtils
{ {
/** @deprecated */ /** @deprecated */
public const INVALID_SHORTCODE_ERROR = InvalidShortCodeException::TYPE; public const INVALID_SHORTCODE_ERROR = ShortUrlNotFoundException::TYPE;
// FIXME Should be INVALID_SHORT_URL_DELETION // FIXME Should be INVALID_SHORT_URL_DELETION
public const INVALID_SHORTCODE_DELETION_ERROR = 'INVALID_SHORTCODE_DELETION'; public const INVALID_SHORTCODE_DELETION_ERROR = 'INVALID_SHORTCODE_DELETION';
public const INVALID_URL_ERROR = 'INVALID_URL'; public const INVALID_URL_ERROR = 'INVALID_URL';
@ -30,7 +30,7 @@ class RestUtils
public static function getRestErrorCodeFromException(Throwable $e): string public static function getRestErrorCodeFromException(Throwable $e): string
{ {
switch (true) { switch (true) {
case $e instanceof Core\InvalidShortCodeException: case $e instanceof Core\ShortUrlNotFoundException:
return self::INVALID_SHORTCODE_ERROR; return self::INVALID_SHORTCODE_ERROR;
case $e instanceof Core\InvalidUrlException: case $e instanceof Core\InvalidUrlException:
return self::INVALID_URL_ERROR; return self::INVALID_URL_ERROR;

View file

@ -9,7 +9,7 @@ use PHPUnit\Framework\TestCase;
use Prophecy\Argument; use Prophecy\Argument;
use Prophecy\Prophecy\ObjectProphecy; use Prophecy\Prophecy\ObjectProphecy;
use Shlinkio\Shlink\Common\Util\DateRange; use Shlinkio\Shlink\Common\Util\DateRange;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Core\Model\VisitsParams; use Shlinkio\Shlink\Core\Model\VisitsParams;
use Shlinkio\Shlink\Core\Service\VisitsTracker; use Shlinkio\Shlink\Core\Service\VisitsTracker;
use Shlinkio\Shlink\Rest\Action\Visit\GetVisitsAction; use Shlinkio\Shlink\Rest\Action\Visit\GetVisitsAction;
@ -47,7 +47,7 @@ class GetVisitsActionTest extends TestCase
{ {
$shortCode = 'abc123'; $shortCode = 'abc123';
$this->visitsTracker->info($shortCode, Argument::type(VisitsParams::class))->willThrow( $this->visitsTracker->info($shortCode, Argument::type(VisitsParams::class))->willThrow(
InvalidShortCodeException::class ShortUrlNotFoundException::class
)->shouldBeCalledOnce(); )->shouldBeCalledOnce();
$response = $this->action->handle((new ServerRequest())->withAttribute('shortCode', $shortCode)); $response = $this->action->handle((new ServerRequest())->withAttribute('shortCode', $shortCode));

View file

@ -6,7 +6,7 @@ namespace ShlinkioTest\Shlink\Rest\Util;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use Shlinkio\Shlink\Common\Exception\InvalidArgumentException; use Shlinkio\Shlink\Common\Exception\InvalidArgumentException;
use Shlinkio\Shlink\Core\Exception\InvalidShortCodeException; use Shlinkio\Shlink\Core\Exception\ShortUrlNotFoundException;
use Shlinkio\Shlink\Core\Exception\InvalidUrlException; use Shlinkio\Shlink\Core\Exception\InvalidUrlException;
use Shlinkio\Shlink\IpGeolocation\Exception\WrongIpException; use Shlinkio\Shlink\IpGeolocation\Exception\WrongIpException;
use Shlinkio\Shlink\Rest\Exception\AuthenticationException; use Shlinkio\Shlink\Rest\Exception\AuthenticationException;
@ -19,7 +19,7 @@ class RestUtilsTest extends TestCase
{ {
$this->assertEquals( $this->assertEquals(
RestUtils::INVALID_SHORTCODE_ERROR, RestUtils::INVALID_SHORTCODE_ERROR,
RestUtils::getRestErrorCodeFromException(new InvalidShortCodeException()) RestUtils::getRestErrorCodeFromException(new ShortUrlNotFoundException())
); );
$this->assertEquals( $this->assertEquals(
RestUtils::INVALID_URL_ERROR, RestUtils::INVALID_URL_ERROR,