diff --git a/module/Rest/src/Action/ShortUrl/ListShortUrlsAction.php b/module/Rest/src/Action/ShortUrl/ListShortUrlsAction.php index 24c44628..87e7930b 100644 --- a/module/Rest/src/Action/ShortUrl/ListShortUrlsAction.php +++ b/module/Rest/src/Action/ShortUrl/ListShortUrlsAction.php @@ -58,19 +58,20 @@ class ListShortUrlsAction extends AbstractRestAction */ private function queryToListParams(array $query): array { - $dateRange = null; - $startDate = isset($query['startDate']) ? Chronos::parse($query['startDate']) : null; - $endDate = isset($query['endDate']) ? Chronos::parse($query['endDate']) : null; - if ($startDate !== null || $endDate !== null) { - $dateRange = new DateRange($startDate, $endDate); - } - return [ (int) ($query['page'] ?? 1), $query['searchTerm'] ?? null, $query['tags'] ?? [], $query['orderBy'] ?? null, - $dateRange, + $this->determineDateRangeFromQuery($query), ]; } + + private function determineDateRangeFromQuery(array $query): DateRange + { + return new DateRange( + isset($query['startDate']) ? Chronos::parse($query['startDate']) : null, + isset($query['endDate']) ? Chronos::parse($query['endDate']) : null + ); + } } diff --git a/module/Rest/test/Action/ShortUrl/ListShortUrlsActionTest.php b/module/Rest/test/Action/ShortUrl/ListShortUrlsActionTest.php index cfe9a683..1dfdc258 100644 --- a/module/Rest/test/Action/ShortUrl/ListShortUrlsActionTest.php +++ b/module/Rest/test/Action/ShortUrl/ListShortUrlsActionTest.php @@ -4,9 +4,11 @@ declare(strict_types=1); namespace ShlinkioTest\Shlink\Rest\Action\ShortUrl; +use Cake\Chronos\Chronos; use PHPUnit\Framework\TestCase; use Prophecy\Prophecy\ObjectProphecy; use Psr\Log\LoggerInterface; +use Shlinkio\Shlink\Common\Util\DateRange; use Shlinkio\Shlink\Core\Service\ShortUrlService; use Shlinkio\Shlink\Rest\Action\ShortUrl\ListShortUrlsAction; use Zend\Diactoros\Response\JsonResponse; @@ -43,14 +45,15 @@ class ListShortUrlsActionTest extends TestCase int $expectedPage, ?string $expectedSearchTerm, array $expectedTags, - ?string $expectedOrderBy + ?string $expectedOrderBy, + DateRange $expectedDateRange ): void { $listShortUrls = $this->service->listShortUrls( $expectedPage, $expectedSearchTerm, $expectedTags, $expectedOrderBy, - null + $expectedDateRange )->willReturn(new Paginator(new ArrayAdapter())); /** @var JsonResponse $response */ @@ -66,17 +69,44 @@ class ListShortUrlsActionTest extends TestCase public function provideFilteringData(): iterable { - yield [[], 1, null, [], null]; - yield [['page' => 10], 10, null, [], null]; - yield [['page' => null], 1, null, [], null]; - yield [['page' => '8'], 8, null, [], null]; - yield [['searchTerm' => $searchTerm = 'foo'], 1, $searchTerm, [], null]; - yield [['tags' => $tags = ['foo','bar']], 1, null, $tags, null]; - yield [['orderBy' => $orderBy = 'something'], 1, null, [], $orderBy]; + yield [[], 1, null, [], null, new DateRange()]; + yield [['page' => 10], 10, null, [], null, new DateRange()]; + yield [['page' => null], 1, null, [], null, new DateRange()]; + yield [['page' => '8'], 8, null, [], null, new DateRange()]; + yield [['searchTerm' => $searchTerm = 'foo'], 1, $searchTerm, [], null, new DateRange()]; + yield [['tags' => $tags = ['foo','bar']], 1, null, $tags, null, new DateRange()]; + yield [['orderBy' => $orderBy = 'something'], 1, null, [], $orderBy, new DateRange()]; yield [[ 'page' => '2', 'orderBy' => $orderBy = 'something', 'tags' => $tags = ['one', 'two'], - ], 2, null, $tags, $orderBy]; + ], 2, null, $tags, $orderBy, new DateRange()]; + yield [ + ['startDate' => $date = Chronos::now()->toAtomString()], + 1, + null, + [], + null, + new DateRange(Chronos::parse($date)), + ]; + yield [ + ['endDate' => $date = Chronos::now()->toAtomString()], + 1, + null, + [], + null, + new DateRange(null, Chronos::parse($date)), + ]; + yield [ + [ + 'startDate' => $startDate = Chronos::now()->subDays(10)->toAtomString(), + 'endDate' => $endDate = Chronos::now()->toAtomString(), + ], + 1, + null, + [], + null, + new DateRange(Chronos::parse($startDate), Chronos::parse($endDate)), + ]; } }