/** * Handle an incoming request. * * @param LaravelRequest $request * @param Closure $next * * @return mixed */ public function handle(LaravelRequest $request, Closure $next) { $message = new Request($request->getMethod(), new Uri($request->getUri()), $request->headers->all(), $request->getContent()); $result = $this->extractor->getRequest($message); $event = $this->logger->begin($result['request'], $request->getUri(), $request->getMethod(), ''); $response = null; try { /** @var LaravelResponse $response */ $response = $next($request); } catch (Exception $e) { $response = LaravelResponse::create($e->getMessage(), 500); } finally { $this->logResponse($response, $event); } return $response; }
function it_handles_communication_logging(CommunicationLogger $logger, CommunicationExtractor $extractor, Request $request, Response $response, HeaderBag $requestHeaders, IEvent $event) { $request->getMethod()->shouldBeCalled()->willReturn('POST'); $request->getContent()->shouldBeCalled()->willReturn('request'); $request->getUri()->shouldBeCalled()->willReturn('http://example.com'); $request->headers = $requestHeaders; $requestHeaders->all()->shouldBeCalled()->willReturn([]); $next = function (Request $request) use($response) { return new Response(); }; $extractor->getRequest(Argument::type(GuzzleRequest::class))->shouldBeCalled()->willReturn(['request' => 'request']); $extractor->getResponse(Argument::type(GuzzleResponse::class))->shouldBeCalled()->willReturn(['response' => 'response']); $logger->begin('request', 'http://example.com', 'POST', '')->shouldBeCalled()->willReturn($event); $logger->end($event, 'response')->shouldBeCalled(); $this->handle($request, $next); }