====== tests/api/runner.php ====== **Source:** ''tests/api/runner.php'' · 186 lines, ~883 statements · namespace: //(global)// · `declare(strict_types=1)`: no ---- API Test Subprocess Runner Executes a single API controller action (or routes a request through a fresh ApiRouter) inside an isolated PHP process and reports the resulting HTTP status code, response body, headers, and rate-limit state. This runner exists because ApiResponse::send() terminates the process (exit) — a controller action cannot be invoked safely in the PHPUnit process itself. Each invocation is a clean, isolated request. Usage: php tests/api/runner.php The environment JSON supports two execution modes: 1. Direct controller action: { "controller": "Scriptlog\\Controller\\Api\\PostsApiController", "action": "index", "params": { "id": "1" } } 2. Router dispatch: { "dispatch": { "method": "GET", "uri": "posts", "query": {} }, "routes": [ { "method": "get", "pattern": "posts", "handler": "PostsApiController@index" } ] } Both modes accept the following optional keys: \ - "server": $_SERVER overrides (REQUEST_METHOD, HTTP_ACCEPT, ...) \ - "get"/"post"/"files": superglobal values to install \ - "api_key": plaintext API key to send as the X-API-Key header \ - "session_user": associative array passed to ApiAuth::setSessionUser() \ - "session": $_SESSION values to install before dispatch Output protocol (STDOUT): API_RESULT_START \ ,"headers":[...],"body":"...","rate":...}> ======= Includes ======= ^ Mode ^ Target ^ Line ^ | ''require'' | ''require_once __DIR__ . '/../bootstrap_api.php';'' | 64 | ---- //Generated by 'tools/gendoc'.//