create(['is_active' => true]); /** @var PendingCommand $exitCode */ $exitCode = $this->artisan('article:refresh'); $exitCode->assertSuccessful(); $exitCode->assertExitCode(0); } public function test_command_does_not_dispatch_jobs_when_no_active_feeds_exist(): void { Queue::fake(); /** @var PendingCommand $exitCode */ $exitCode = $this->artisan('article:refresh'); $exitCode->assertSuccessful(); Queue::assertNotPushed(ArticleDiscoveryJob::class); } public function test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist(): void { Queue::fake(); Feed::factory()->create(['is_active' => false]); /** @var PendingCommand $exitCode */ $exitCode = $this->artisan('article:refresh'); $exitCode->assertSuccessful(); Queue::assertNotPushed(ArticleDiscoveryJob::class); } public function test_command_logs_when_no_feeds_available(): void { Queue::fake(); /** @var PendingCommand $exitCode */ $exitCode = $this->artisan('article:refresh'); $exitCode->assertSuccessful(); $exitCode->expectsOutput('No active feeds found. Article discovery skipped.'); } }