cronHelper = ContainerWrapper::getInstance()->get(CronHelper::class); $this->worker = new MockSimpleWorker(); $this->scheduledTasksRepository = $this->diContainer->get(ScheduledTasksRepository::class); } public function testItRequiresTaskTypeToConstruct() { $worker = Stub::make( 'MailPoet\Cron\Workers\SimpleWorker', [], $this ); $workerClass = get_class($worker); try { new $workerClass(); $this->fail('SimpleWorker did not throw an exception'); } catch (\Exception $e) { expect($e->getMessage())->equals('Constant TASK_TYPE is not defined on subclass ' . $workerClass); } } public function testItSchedulesTask() { expect($this->scheduledTasksRepository->findBy(['type' => MockSimpleWorker::TASK_TYPE]))->isEmpty(); (new MockSimpleWorker())->schedule(); expect($this->scheduledTasksRepository->findBy(['type' => MockSimpleWorker::TASK_TYPE]))->notEmpty(); } public function testItDoesNotScheduleTaskTwice() { $worker = new MockSimpleWorker(); expect(count($this->scheduledTasksRepository->findBy(['type' => MockSimpleWorker::TASK_TYPE])))->equals(0); $worker->schedule(); expect(count($this->scheduledTasksRepository->findBy(['type' => MockSimpleWorker::TASK_TYPE])))->equals(1); $worker->schedule(); expect(count($this->scheduledTasksRepository->findBy(['type' => MockSimpleWorker::TASK_TYPE])))->equals(1); } public function testItCalculatesNextRunDateWithinNextWeekBoundaries() { $currentDate = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp')); /** @var Carbon $nextRunDate */ $nextRunDate = (new MockSimpleWorker())->getNextRunDate(); $difference = $nextRunDate->diffInDays($currentDate); // Subtract days left in the current week $difference -= (Carbon::DAYS_PER_WEEK - (int)$currentDate->format('N')); expect($difference)->lessOrEquals(7); expect($difference)->greaterOrEquals(0); } }