create(['is_active' => true]); // Act & Assert /** @var PendingCommand $exitCode */ $exitCode = $this->artisan('article:refresh'); $exitCode->assertSuccessful(); // The command should complete without the "no feeds" message $exitCode->assertExitCode(0); } public function test_command_does_not_dispatch_jobs_when_no_active_feeds_exist(): void { // Arrange Queue::fake(); // No active feeds created // Act /** @var PendingCommand $exitCode */ $exitCode = $this->artisan('article:refresh'); // Assert $exitCode->assertSuccessful(); Queue::assertNotPushed(ArticleDiscoveryJob::class); } public function test_command_does_not_dispatch_jobs_when_only_inactive_feeds_exist(): void { // Arrange Queue::fake(); Feed::factory()->create(['is_active' => false]); // Act /** @var PendingCommand $exitCode */ $exitCode = $this->artisan('article:refresh'); // Assert $exitCode->assertSuccessful(); Queue::assertNotPushed(ArticleDiscoveryJob::class); } public function test_command_logs_when_no_feeds_available(): void { // Arrange Queue::fake(); // Act /** @var PendingCommand $exitCode */ $exitCode = $this->artisan('article:refresh'); // Assert $exitCode->assertSuccessful(); $exitCode->expectsOutput('No active feeds found. Article discovery skipped.'); } }