visitsHelper = $this->createMock(VisitsStatsHelperInterface::class); $this->action = new ShortUrlVisitsAction($this->visitsHelper); } /** @test */ public function providingCorrectShortCodeReturnsVisits(): void { $shortCode = 'abc123'; $this->visitsHelper->expects($this->once())->method('visitsForShortUrl')->with( ShortUrlIdentifier::fromShortCodeAndDomain($shortCode), $this->isInstanceOf(VisitsParams::class), $this->isInstanceOf(ApiKey::class), )->willReturn(new Paginator(new ArrayAdapter([]))); $response = $this->action->handle($this->requestWithApiKey()->withAttribute('shortCode', $shortCode)); self::assertEquals(200, $response->getStatusCode()); } /** @test */ public function paramsAreReadFromQuery(): void { $shortCode = 'abc123'; $this->visitsHelper->expects($this->once())->method('visitsForShortUrl')->with( ShortUrlIdentifier::fromShortCodeAndDomain($shortCode), new VisitsParams( DateRange::until(Chronos::parse('2016-01-01 00:00:00')), 3, 10, ), $this->isInstanceOf(ApiKey::class), )->willReturn(new Paginator(new ArrayAdapter([]))); $response = $this->action->handle( $this->requestWithApiKey()->withAttribute('shortCode', $shortCode) ->withQueryParams([ 'endDate' => '2016-01-01 00:00:00', 'page' => '3', 'itemsPerPage' => '10', ]), ); self::assertEquals(200, $response->getStatusCode()); } private function requestWithApiKey(): ServerRequestInterface { return ServerRequestFactory::fromGlobals()->withAttribute(ApiKey::class, ApiKey::create()); } }