prophesize(RouterInterface::class); $router->generateUri(Argument::cetera())->willReturn('/foo/bar'); $this->urlShortener = $this->prophesize(UrlShortener::class); $this->action = new QrCodeAction($router->reveal(), $this->urlShortener->reveal()); } /** * @test */ public function aNonexistentShortCodeWillReturnNotFoundResponse() { $shortCode = 'abc123'; $this->urlShortener->shortCodeToUrl($shortCode)->willReturn(null)->shouldBeCalledTimes(1); $resp = $this->action->__invoke( ServerRequestFactory::fromGlobals()->withAttribute('shortCode', $shortCode), new Response(), function ($req, $resp) { return $resp; } ); $this->assertEquals(404, $resp->getStatusCode()); } /** * @test */ public function anInvalidShortCodeWillReturnNotFoundResponse() { $shortCode = 'abc123'; $this->urlShortener->shortCodeToUrl($shortCode)->willThrow(InvalidShortCodeException::class) ->shouldBeCalledTimes(1); $resp = $this->action->__invoke( ServerRequestFactory::fromGlobals()->withAttribute('shortCode', $shortCode), new Response(), function ($req, $resp) { return $resp; } ); $this->assertEquals(404, $resp->getStatusCode()); } /** * @test */ public function aCorrectRequestReturnsTheQrCodeResponse() { $shortCode = 'abc123'; $this->urlShortener->shortCodeToUrl($shortCode)->willReturn(new ShortUrl())->shouldBeCalledTimes(1); $resp = $this->action->__invoke( ServerRequestFactory::fromGlobals()->withAttribute('shortCode', $shortCode), new Response(), function ($req, $resp) { return $resp; } ); $this->assertInstanceOf(QrCodeResponse::class, $resp); $this->assertEquals(200, $resp->getStatusCode()); } }