argument('source'); $limit = (int) $this->option('limit'); $this->info('Testing Job API Integrations...'); $this->newLine(); try { if ($sourceName) { // Test specific source $this->testSingleSource($sourceName, $limit); } else { // Test all active sources $this->testAllSources($limit); } return self::SUCCESS; } catch (\Exception $e) { $this->error("Failed to test APIs: {$e->getMessage()}"); return self::FAILURE; } } private function testAllSources(int $limit): void { $clients = JobApiClientFactory::makeAll(); if (empty($clients)) { $this->warn('No active job sources found. Run: php artisan db:seed --class=JobSourceSeeder'); return; } $this->info('Testing ' . count($clients) . ' active job sources...'); $this->newLine(); foreach ($clients as $client) { $this->testClient($client, $limit); $this->newLine(); } } private function testSingleSource(string $sourceName, int $limit): void { try { $client = JobApiClientFactory::makeByName($sourceName); $this->testClient($client, $limit); } catch (ApiException $e) { $this->error("Failed to create client for '{$sourceName}': {$e->getMessage()}"); } } private function testClient($client, int $limit): void { $sourceName = $client->getSourceName(); $this->line("Testing: {$sourceName}"); try { // Fetch sample jobs $jobs = $client->fetchJobs(['limit' => $limit]); if (empty($jobs)) { $this->warn(" No jobs returned from {$sourceName}"); return; } $this->info(" ✓ Successfully fetched " . count($jobs) . " jobs"); // Display sample jobs $this->table( ['ID', 'Title', 'Company', 'Location', 'Remote'], collect($jobs)->take(3)->map(fn($job) => [ substr($job->externalId, 0, 10) . '...', substr($job->title, 0, 40), substr($job->company, 0, 20), substr($job->location ?? 'N/A', 0, 20), $job->remoteAllowed ? 'Yes' : 'No', ])->toArray() ); } catch (ApiException $e) { $this->error(" ✗ API Error: {$e->getMessage()}"); if ($context = $e->getContext()) { $this->line(" Context: " . json_encode($context, JSON_PRETTY_PRINT)); } } catch (\Exception $e) { $this->error(" ✗ Unexpected Error: {$e->getMessage()}"); $this->line(" " . $e->getTraceAsString()); } } }