endpoint('https://user.example.com/home/users/login', 'detail'), 'Detail must use the existing user URL host and isolated upstream controller' ); miniCorrectionAssertSame( 'https://user.example.com/home/evus_correction/submit', $service->endpoint('https://user.example.com/home/users/login?source=mini', 'submit'), 'Submit must remove the existing users action and query string' ); miniCorrectionAssertSame('', $service->endpoint('https://user.example.com/home/users/login', 'delete'), 'Unknown upstream actions must be rejected'); miniCorrectionAssertSame( ['user_id' => 88, 'order_sn' => 'EVUS-1'], $service->payload(88, ['user_id' => 999, 'order_sn' => 'EVUS-1']), 'Authenticated user ID must override an untrusted client value' ); $routeFile = __DIR__ . '/../app/miniapi/route/app.php'; $routes = is_file($routeFile) ? file_get_contents($routeFile) : false; if (!is_string($routes) || !str_contains($routes, "Route::get('evus/correction', 'EvusCorrection/detail');") || !str_contains($routes, "Route::post('evus/correction/submit', 'EvusCorrection/submit');") ) { throw new RuntimeException('The miniapi app must register explicit correction detail and submit routes in its multi-app route directory'); } if (str_contains($routes, "Route::group('miniapi'")) { throw new RuntimeException('App-specific routes must not repeat the miniapi application prefix'); } if (!str_contains($routes, "Route::pattern(['product_id' => '[A-Za-z0-9_-]+']);") || !str_contains($routes, "Route::group('app', function () {") || !str_contains($routes, "Route::get('bootstrap', 'AppCatalog/bootstrap');") || !str_contains($routes, "Route::get('visas/:product_id', 'AppCatalog/detail');") ) { throw new RuntimeException('The existing app catalog routes must remain available'); } if (is_file(__DIR__ . '/../route/app.php')) { throw new RuntimeException('Multi-app routes must not remain in the ignored project-level route directory'); } $upload = file_get_contents(__DIR__ . '/../app/miniapi/controller/Upload.php'); if (!is_string($upload) || !str_contains($upload, "'evus_correction'") || !str_contains($upload, "'evus-correction/' . \$contactUserId . '/' . \$fileName") ) { throw new RuntimeException('The correction upload scene must require login and use the account-scoped OSS prefix'); } echo "Miniapi EVUS correction route self-check passed\n";