resolveSuite($jiraId); if ($suite instanceof JsonResponse) { return $suite; } return response()->json($suite->run($request->all())); } public function runCustom(Request $request, string $jiraId): JsonResponse { $suite = $this->resolveSuite($jiraId); if ($suite instanceof JsonResponse) { return $suite; } $params = $request->all(); if (empty($params)) { return response()->json([ 'message' => 'No input provided. Please retry with the sample input below.', 'sample_body' => $suite->sampleInput(), ], 422); } return response()->json($suite->custom($params)); } private function resolveSuite(string $jiraId) { if (!preg_match('/^[A-Z]+-\d+$/i', $jiraId)) { return response()->json([ 'error' => 'Invalid Jira ID. Expected format: PROJ-1234 (e.g. CRED-6043)', ], 400); } $key = strtoupper(str_replace('-', '', $jiraId)); $className = "App\\TestRunner\\Tests\\{$key}\\TestSuite"; if (!class_exists($className)) { return response()->json([ 'error' => "No test suite found for {$jiraId}", 'hint' => "Create app/TestRunner/Tests/{$key}/TestSuite.php extending App\\TestRunner\\BaseTestSuite", ], 404); } return new $className(); } }