/** * {@inheritdoc} */ public function call(Identity $identity, Request $request, callable $next) { if (!$this->router->supports($request)) { return $next($identity, $request); } $callable = $this->router->get($request); return $this->normalizeResponse($callable($identity, $request)); }
/** * {@inheritdoc} */ public function get(Request $request) { $callable = $this->inner->get($request); foreach ($this->decorators as $decorator) { $callable = $decorator($callable); } return $callable; }
/** * @param mixed $response * * @dataProvider provideDenormalizedResponses */ public function testCallResponseNormalization($response) { $this->router->expects(self::once())->method('supports')->with(new Request('foo'))->willReturn(true); $this->router->expects(self::once())->method('get')->with(new Request('foo'))->willReturn($this->getCallableMock(self::once(), function () use($response) { return $response; })); $promise = $this->middleware->call(new Identity('foo', []), new Request('foo'), $this->getCallableMock(self::never())); self::assertInstanceOf(Promise::class, $promise); $response = $promise->resolve(); self::assertInstanceOf(Response::class, $response); self::assertEquals('abc', $response->getValue()); }
public function testGetWithDecoration() { $request = new Request('foo'); $inner = $this->getCallableMock(self::once(), function (Identity $identity, Request $request) { return sprintf('<inner request="%s" identity="%s">', $request->getMethod(), $identity->getName()); }); $this->innerRouter->expects(self::once())->method('get')->with($request)->willReturn($inner); $this->router->decorate($this->getCallableMock(self::once(), function ($callable) { return function (Identity $identity, Request $request) use($callable) { return '<outer>' . $callable($identity, $request) . '</outer>'; }; })); $callable = $this->router->get($request); $result = $callable(new Identity('baz'), $request); self::assertEquals('<outer><inner request="foo" identity="baz"></outer>', $result); }
/** * {@inheritdoc} */ public function get(Request $request) { return $this->router->get($request); }