registerTestingGetRoute($path, function (Request $req) use (&$request) { $request = $req; }); $response = $this->get("$this->prefix/$path", ['query' => [ 'required' => 'required', 'string' => 'abc', 'number-1' => '0.123', 'number-2' => '123', 'integer-1' => '123', 'integer-2' => '-123', 'boolean-1' => '0', 'boolean-2' => 'true', ]]); $this->assertInstanceOf(Request::class, $request); $this->assertSame(['data' => null], $response); $this->assertSame([ 'required' => 'required', 'string' => 'abc', 'number-1' => 0.123, 'number-2' => 123.0, 'integer-1' => 123, 'integer-2' => -123, 'boolean-1' => false, 'boolean-2' => true, ], $request->getParams()); } public function testPostParams(): void { $path = strtolower(__FUNCTION__); $request = null; $this->registerTestingPostRoute($path, function (Request $req) use (&$request) { $request = $req; }); $response = $this->post("$this->prefix/$path", ['post' => [ 'required' => 'required', 'string' => 'abc', 'number-1' => 0.123, 'number-2' => 123, 'integer-1' => 123, 'integer-2' => -123, 'boolean-1' => 0, 'boolean-2' => true, ]]); $this->assertInstanceOf(Request::class, $request); $this->assertSame(['data' => null], $response); $this->assertSame([ 'required' => 'required', 'string' => 'abc', 'number-1' => 0.123, 'number-2' => 123.0, 'integer-1' => 123, 'integer-2' => -123, 'boolean-1' => false, 'boolean-2' => true, ], $request->getParams()); } public function testMissingParam(): void { $path = strtolower(__FUNCTION__); $this->registerTestingGetRoute($path); $response = $this->get("$this->prefix/$path"); $this->assertSame([ 'code' => 'rest_missing_callback_param', 'message' => 'Missing parameter(s): required', 'data' => [ 'status' => 400, 'params' => ['required'], ], ], $response); } public function testExtraParam(): void { $path = strtolower(__FUNCTION__); $request = null; $this->registerTestingGetRoute($path, function (Request $req) use (&$request) { $request = $req; }); $this->get("$this->prefix/$path", ['query' => ['required' => 'required', 'extra' => 'extra']]); $this->assertInstanceOf(Request::class, $request); $this->assertSame($request->getParams(), ['required' => 'required']); } private function registerTestingGetRoute(string $path, callable $requestCallback = null): void { $api = $this->createApi($requestCallback); $api->registerGetRoute("mailpoet-api-testing-route/$path", Endpoint::class); } private function registerTestingPostRoute(string $path, callable $requestCallback = null): void { $api = $this->createApi($requestCallback); $api->registerPostRoute("mailpoet-api-testing-route/$path", Endpoint::class); } private function createApi(callable $requestCallback = null): API { // ensure REST server is initialized for endpoint registration rest_get_server(); return new API( $this->make(EndpointContainer::class, [ 'get' => function () use ($requestCallback) { return new Endpoint($requestCallback); } ]), $this->diContainer->get(WPFunctions::class) ); } }