public function test_timeable_scopes() { $past = Factory::create(new Discount(), ['start_at' => Carbon::now()->subDays(10), 'end_at' => Carbon::now()->subDays(5)]); $present = Factory::create(new Discount(), ['start_at' => Carbon::now()->subDays(5), 'end_at' => Carbon::now()->addDays(5)]); $future = Factory::create(new Discount(), ['start_at' => Carbon::now()->addDays(5), 'end_at' => Carbon::now()->addDays(10)]); $expired = Discount::isExpired()->get(); $this->assertEquals(1, count($expired)); $this->assertEquals($past->id, $expired->first()->id); $running = Discount::isRunning()->get(); $this->assertEquals(1, count($running)); $this->assertEquals($present->id, $running->first()->id); $upcoming = Discount::isUpcoming()->get(); $this->assertEquals(1, count($upcoming)); $this->assertEquals($future->id, $upcoming->first()->id); $runningOrUpcoming = Discount::isRunningOrUpcoming()->get(); $this->assertEquals(2, count($runningOrUpcoming)); $this->assertTrue($runningOrUpcoming->contains('id', $present->id)); $this->assertTrue($runningOrUpcoming->contains('id', $future->id)); }
/** * Syncs all non-expired discounts * * @return void */ public static function syncAll() { $discounts = Discount::isRunningOrUpcoming()->get(); foreach ($discounts as $discount) { $discount->syncPrices(); } }