request = $this->prophesize("\\Psr\\Http\\Message\\ServerRequestInterface"); $this->response = $this->prophesize("\\Psr\\Http\\Message\\ResponseInterface"); $this->response->withStatus(Argument::any())->willReturn($this->response->reveal()); $this->response->withBody(Argument::any())->willReturn($this->response->reveal()); $this->response->getStatusCode()->willReturn(200); $this->middleware = $this->prophesize("\\WellRESTed\\Routing\\MiddlewareInterface"); $this->middleware->dispatch(Argument::cetera())->willReturn(); } public function testDispatchedRoute() { $this->request->getRequestTarget()->willReturn("/cats/"); $router = new Router(); $router->add("/cats/", $this->middleware->reveal()); $router->dispatch($this->request->reveal(), $this->response->reveal()); $this->middleware->dispatch(Argument::cetera())->shouldHaveBeenCalled(); } public function testRespondsWithErrorResponseForHttpException() { $this->request->getRequestTarget()->willReturn("/cats/"); $this->middleware->dispatch(Argument::cetera())->willThrow(new NotFoundException()); $router = new Router(); $router->add("/cats/", $this->middleware->reveal()); $router->dispatch($this->request->reveal(), $this->response->reveal()); $this->response->withStatus(404)->shouldHaveBeenCalled(); } public function testDispatchesErrorHandlerForStatusCode() { $this->response->getStatusCode()->willReturn(403); $statusMiddleware = $this->prophesize("\\WellRESTed\\Routing\\MiddlewareInterface"); $statusMiddleware->dispatch(Argument::cetera())->willReturn(); $router = new Router(); $router->add("/cats/", $this->middleware->reveal()); $router->setStatusHandler(403, $statusMiddleware->reveal()); $router->dispatch($this->request->reveal(), $this->response->reveal()); $statusMiddleware->dispatch(Argument::cetera())->shouldHaveBeenCalled(); } public function testRegisterRouteWithMethodMap() { $this->request->getRequestTarget()->willReturn("/cats/"); $this->request->getMethod()->willReturn("GET"); $router = new Router(); $router->add("/cats/", ["GET" => $this->middleware->reveal()]); $router->dispatch($this->request->reveal(), $this->response->reveal()); $this->middleware->dispatch(Argument::cetera())->shouldHaveBeenCalled(); } }