From 7f43890713b2f1c0852c0a2576d9824fc16b4623 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Sun, 1 Dec 2019 12:26:31 +0100 Subject: [PATCH] Improved CreateShortUrlAction test so that it cover more mutants --- .../ShortUrl/CreateShortUrlActionTest.php | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/module/Rest/test/Action/ShortUrl/CreateShortUrlActionTest.php b/module/Rest/test/Action/ShortUrl/CreateShortUrlActionTest.php index 92a3c2aa..37f737f9 100644 --- a/module/Rest/test/Action/ShortUrl/CreateShortUrlActionTest.php +++ b/module/Rest/test/Action/ShortUrl/CreateShortUrlActionTest.php @@ -4,14 +4,17 @@ declare(strict_types=1); namespace ShlinkioTest\Shlink\Rest\Action\ShortUrl; +use Cake\Chronos\Chronos; use PHPUnit\Framework\TestCase; use Prophecy\Argument; use Prophecy\Prophecy\ObjectProphecy; use Shlinkio\Shlink\Core\Entity\ShortUrl; use Shlinkio\Shlink\Core\Exception\ValidationException; +use Shlinkio\Shlink\Core\Model\ShortUrlMeta; use Shlinkio\Shlink\Core\Service\UrlShortener; use Shlinkio\Shlink\Rest\Action\ShortUrl\CreateShortUrlAction; use Zend\Diactoros\ServerRequest; +use Zend\Diactoros\ServerRequestFactory; use Zend\Diactoros\Uri; use function strpos; @@ -41,20 +44,41 @@ class CreateShortUrlActionTest extends TestCase $this->action->handle(new ServerRequest()); } - /** @test */ - public function properShortcodeConversionReturnsData(): void + /** + * @test + * @dataProvider provideRequestBodies + */ + public function properShortcodeConversionReturnsData(array $body, ShortUrlMeta $expectedMeta): void { $shortUrl = new ShortUrl(''); - $this->urlShortener->urlToShortCode(Argument::type(Uri::class), Argument::type('array'), Argument::cetera()) - ->willReturn($shortUrl) - ->shouldBeCalledOnce(); + $shorten = $this->urlShortener->urlToShortCode( + Argument::type(Uri::class), + Argument::type('array'), + $expectedMeta + )->willReturn($shortUrl); - $request = (new ServerRequest())->withParsedBody([ - 'longUrl' => 'http://www.domain.com/foo/bar', - ]); + $request = ServerRequestFactory::fromGlobals()->withParsedBody($body); $response = $this->action->handle($request); + $this->assertEquals(200, $response->getStatusCode()); $this->assertTrue(strpos($response->getBody()->getContents(), $shortUrl->toString(self::DOMAIN_CONFIG)) > 0); + $shorten->shouldHaveBeenCalledOnce(); + } + + public function provideRequestBodies(): iterable + { + $fullMeta = [ + 'longUrl' => 'http://www.domain.com/foo/bar', + 'validSince' => Chronos::now()->toAtomString(), + 'validUntil' => Chronos::now()->toAtomString(), + 'customSlug' => 'foo-bar-baz', + 'maxVisits' => 50, + 'findIfExists' => true, + 'domain' => 'my-domain.com', + ]; + + yield [['longUrl' => 'http://www.domain.com/foo/bar'], ShortUrlMeta::createEmpty()]; + yield [$fullMeta, ShortUrlMeta::createFromRawData($fullMeta)]; } /**