/** * Start active campaigns and stop inactive ones */ public function fire() { $active = Campaign::isActive()->isNotRunning()->get(); $inactive = Campaign::isNotActive()->isRunning()->get(); foreach ($active as $campaign) { CampaignManager::start($campaign); } foreach ($inactive as $campaign) { CampaignManager::end($campaign); } }
public function test_isActive_and_isNotActive_scopes() { // Active 1, defined start date $active1 = $this->mockCampaign(); $active1->start_at = Carbon::yesterday(); $active1->save(); // Inactive 1, expired end date $inactive1 = $this->mockCampaign(); $inactive1->start_at = Carbon::yesterday()->subDays(1); $inactive1->end_at = Carbon::yesterday(); $inactive1->save(); // Inactive 2, future start date $inactive2 = $this->mockCampaign(); $inactive2->start_at = Carbon::tomorrow(); $inactive2->end_at = Carbon::tomorrow()->addDays(1); $inactive2->save(); // Query the active campaigns $query = Campaign::isActive()->get(); $this->assertEquals(1, $query->count()); $this->assertEquals($active1->id, $query->first()->id); // Query the inactive campaigns $query = Campaign::isNotActive()->get(); $this->assertEquals(2, $query->count()); }