shortUrlService = $this->prophesize(ShortUrlServiceInterface::class); $this->action = new EditShortCodeAction($this->shortUrlService->reveal(), Translator::factory([])); } /** * @test */ public function invalidDataReturnsError() { $request = ServerRequestFactory::fromGlobals()->withParsedBody([ 'maxVisits' => 'invalid', ]); /** @var JsonResponse $resp */ $resp = $this->action->handle($request); $payload = $resp->getPayload(); $this->assertEquals(400, $resp->getStatusCode()); $this->assertEquals(RestUtils::INVALID_ARGUMENT_ERROR, $payload['error']); $this->assertEquals('Provided data is invalid.', $payload['message']); } /** * @test */ public function incorrectShortCodeReturnsError() { $request = ServerRequestFactory::fromGlobals()->withAttribute('shortCode', 'abc123') ->withParsedBody([ 'maxVisits' => 5, ]); $updateMeta = $this->shortUrlService->updateMetadataByShortCode(Argument::cetera())->willThrow( InvalidShortCodeException::class ); /** @var JsonResponse $resp */ $resp = $this->action->handle($request); $payload = $resp->getPayload(); $this->assertEquals(404, $resp->getStatusCode()); $this->assertEquals(RestUtils::INVALID_SHORTCODE_ERROR, $payload['error']); $this->assertEquals('No URL found for short code "abc123"', $payload['message']); $updateMeta->shouldHaveBeenCalled(); } /** * @test */ public function correctShortCodeReturnsSuccess() { $request = ServerRequestFactory::fromGlobals()->withAttribute('shortCode', 'abc123') ->withParsedBody([ 'maxVisits' => 5, ]); $updateMeta = $this->shortUrlService->updateMetadataByShortCode(Argument::cetera())->willReturn(new ShortUrl()); $resp = $this->action->handle($request); $this->assertEquals(204, $resp->getStatusCode()); $updateMeta->shouldHaveBeenCalled(); } }