function it_doesnt_error_if_the_response_type_is_fine(ContainerInterface $container, Route $route, ControllerClosureBuilder $thingBeingDecorated, ServerRequestInterface $request, ResponseInterface $initialResponseObject) { // ARRANGE $controllerClosureWithWrongReturnType = function ($requestPassedIn, $responsePassedIn) { return new JsonResponse([]); }; $thingBeingDecorated->buildControllerClosure($container, $route)->willReturn($controllerClosureWithWrongReturnType); // ACT $controllerClosureProduced = $this->buildControllerClosure($container, $route); // ASSERT $controllerClosureProduced($request, $initialResponseObject)->shouldHaveType('\\Zend\\Diactoros\\Response\\JsonResponse'); }
function it_can_build_a_controller_closure(ServerRequestInterface $initialRequest, ResponseInterface $initialResponse, RequestAndResponse $requestAndResponseBeforeUserController, ServerRequestInterface $requestPassedToUserController, ResponseInterface $responsePassedToUserController, ResponseInterface $responseReturnedByUserController, ResponseInterface $finalResponse, MiddlewareManager $middlewareManager, ContainerInterface $container, Route $route, ControllerClosureBuilder $thingBeingDecorated) { // ARRANGE $middlewareManager->applyBeforeMiddlewares(Argument::type('\\Sainsburys\\HttpService\\Components\\Middlewares\\Http\\RequestAndResponse'))->willReturn($requestAndResponseBeforeUserController); $requestAndResponseBeforeUserController->request()->willReturn($requestPassedToUserController); $requestAndResponseBeforeUserController->response()->willReturn($responsePassedToUserController); $controllerClosureBeingDecorated = function ($requestPassedIn, $responsePassedIn) use($responseReturnedByUserController) { return new JsonResponse([]); }; $middlewareManager->applyAfterMiddlewares(Argument::any())->willReturn($finalResponse); $thingBeingDecorated->buildControllerClosure($container, $route)->willReturn($controllerClosureBeingDecorated); // ACT $decoratedClosure = $this->buildControllerClosure($container, $route); $result = $decoratedClosure($initialRequest, $initialResponse); // ASSERT $result->shouldBe($finalResponse); }
function it_can_apply_routes_to_the_slim_application(ControllerClosureBuilder $controllerClosureBuilder, SlimAppAdapter $slimAppAdapter, Route $route, ContainerInterface $container, SlimRoute $slimRoute) { // ARRANGE // The controller closure builder builds the thing $controllerClosure = function () { }; $controllerClosureBuilder->buildControllerClosure($container, $route)->willReturn($controllerClosure); // Route has stuff on it $route->controllerServiceId()->willReturn('controller-service-id'); $route->httpVerb()->willReturn('GET'); $route->name()->willReturn('route-name'); $route->pathExpression()->willReturn('/path/'); // Controller is in container $container->has('controller-service-id')->willReturn(true); // ACT $this->configureApplicationWithRoutes($slimAppAdapter, [$route], $container); // ASSERT $slimAppAdapter->addRoute($route, $controllerClosure)->shouldHaveBeenCalled(); }
private function configureApplicationWithRoute(SlimAppAdapter $slimAppAdapter, Route $route, ContainerInterface $container) { $this->validateControllerIsInDiConfig($route, $container); $controllerClosure = $this->controllerClosureBuilder->buildControllerClosure($container, $route); $this->applyRouteToSlimApplication($slimAppAdapter, $route, $controllerClosure); }
public function buildControllerClosure(ContainerInterface $container, Route $route) : \Closure { $rawControllerClosure = $this->thingBeingDecorated->buildControllerClosure($container, $route); $closureWhichAlsoDoesTypeChecking = $this->decorateWithResponseTypeChecking($rawControllerClosure); return $closureWhichAlsoDoesTypeChecking; }
public function buildControllerClosure(ContainerInterface $container, Route $route) : \Closure { $rawControllerClosure = $this->thingBeingDecorated->buildControllerClosure($container, $route); $closureWhichAppliesMiddlewares = $this->decorateWithMiddlewares($rawControllerClosure, $this->middlewareManager); return $closureWhichAppliesMiddlewares; }