/** * @param object $requestData * @return Request */ public function createRequest($requestData) { if (!is_object($requestData)) { throw new BadRequestException(); } if (!isset($requestData->jsonrpc) || $requestData->jsonrpc !== "2.0") { throw new BadRequestException(); } if (empty($requestData->method) || !is_string($requestData->method)) { throw new BadRequestException(); } $params = null; if (!empty($requestData->params)) { if (is_array($requestData->params)) { $params = RequestParams::constructPositional($requestData->params); } elseif (is_object($requestData->params)) { $params = RequestParams::constructNamed((array) $requestData->params); } else { throw new BadRequestException(); } } return new Request($requestData->method, $params, isset($requestData->id) ? $requestData->id : null); }
public function testDependencyInjectionWithNamedParameters() { $route = $this->getMockBuilder(RouteInterface::class)->getMock(); $route->method('getControllerClass')->willReturn(RouteDispatcherTest_StubController::class); $route->method('getActionName')->willReturn('dependenciesWithArgs'); /** @var RouteInterface $route */ $container = $this->getMockBuilder(Container::class)->getMock(); $container->method('make')->will($this->returnCallback(function ($className) { return new $className(); })); /** @var Container $container */ $routeDispatcher = new RouteDispatcher($container); $result = $routeDispatcher->dispatch($route, RequestParams::constructNamed(['required' => 1, 'optional' => 42])); $this->assertEquals(['required' => 1, 'optional' => 42], $result, 'Failed with provided optional value'); $result = $routeDispatcher->dispatch($route, RequestParams::constructNamed(['required' => 2])); $this->assertEquals(['required' => 2, 'optional' => 'default'], $result, 'Failed with missing optional value'); $this->setExpectedException(InvalidParamsException::class, '"required" is required', -32602); $routeDispatcher->dispatch($route, null); }