Fix flaky schedule automatic email test
[MAILPOET-3793]
This commit is contained in:
@@ -7,8 +7,18 @@ use MailPoet\Models\ScheduledTask;
|
||||
use MailPoet\Models\ScheduledTaskSubscriber;
|
||||
use MailPoet\Models\SendingQueue;
|
||||
use MailPoet\Tasks\Sending as SendingTask;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
|
||||
class AutomaticEmailScheduler {
|
||||
/** @var WPFunctions|null */
|
||||
private $wp;
|
||||
|
||||
public function __construct(
|
||||
?WPFunctions $wp = null
|
||||
) {
|
||||
$this->wp = $wp;
|
||||
}
|
||||
|
||||
public function scheduleAutomaticEmail($group, $event, $schedulingCondition = false, $subscriberId = false, $meta = false) {
|
||||
$newsletters = Scheduler::getNewsletters(Newsletter::TYPE_AUTOMATIC, $group);
|
||||
if (empty($newsletters)) return false;
|
||||
@@ -92,7 +102,7 @@ class AutomaticEmailScheduler {
|
||||
$sendingTask->status = SendingQueue::STATUS_SCHEDULED;
|
||||
$sendingTask->priority = SendingQueue::PRIORITY_MEDIUM;
|
||||
|
||||
$sendingTask->scheduledAt = Scheduler::getScheduledTimeWithDelay($newsletter->afterTimeType, $newsletter->afterTimeNumber);
|
||||
$sendingTask->scheduledAt = Scheduler::getScheduledTimeWithDelay($newsletter->afterTimeType, $newsletter->afterTimeNumber, $this->wp);
|
||||
return $sendingTask->save();
|
||||
}
|
||||
|
||||
@@ -102,7 +112,7 @@ class AutomaticEmailScheduler {
|
||||
$sendingTask->__set('meta', $meta);
|
||||
}
|
||||
// compute new 'scheduled_at' from now
|
||||
$sendingTask->scheduledAt = Scheduler::getScheduledTimeWithDelay($newsletter->afterTimeType, $newsletter->afterTimeNumber);
|
||||
$sendingTask->scheduledAt = Scheduler::getScheduledTimeWithDelay($newsletter->afterTimeType, $newsletter->afterTimeNumber, $this->wp);
|
||||
$sendingTask->save();
|
||||
}
|
||||
}
|
||||
|
@@ -33,8 +33,8 @@ class Scheduler {
|
||||
return $previousRunDate;
|
||||
}
|
||||
|
||||
public static function getScheduledTimeWithDelay($afterTimeType, $afterTimeNumber) {
|
||||
$wp = WPFunctions::get();
|
||||
public static function getScheduledTimeWithDelay($afterTimeType, $afterTimeNumber, $wp = null): Carbon {
|
||||
$wp = $wp ?? WPFunctions::get();
|
||||
$currentTime = Carbon::createFromTimestamp($wp->currentTime('timestamp'));
|
||||
switch ($afterTimeType) {
|
||||
case 'minutes':
|
||||
|
@@ -148,7 +148,6 @@ class AutomaticEmailTest extends \MailPoetTest {
|
||||
|
||||
public function testItSchedulesAutomaticEmailWhenConditionMatches() {
|
||||
$currentTime = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'));
|
||||
Carbon::setTestNow($currentTime); // mock carbon to return current time
|
||||
$newsletter1 = $this->_createNewsletter();
|
||||
$this->_createNewsletterOptions(
|
||||
$newsletter1->id,
|
||||
@@ -175,8 +174,13 @@ class AutomaticEmailTest extends \MailPoetTest {
|
||||
return $email->sendTo === 'segment';
|
||||
};
|
||||
|
||||
$wpMock = $this->createMock(WPFunctions::class);
|
||||
$wpMock->expects($this->any())
|
||||
->method('currentTime')
|
||||
->willReturn($currentTime->getTimestamp());
|
||||
$automaticEmailScheduler = new AutomaticEmailScheduler($wpMock);
|
||||
// email should only be scheduled if it matches condition ("send to segment")
|
||||
$this->automaticEmailScheduler->scheduleAutomaticEmail('some_group', 'some_event', $condition);
|
||||
$automaticEmailScheduler->scheduleAutomaticEmail('some_group', 'some_event', $condition);
|
||||
$result = SendingQueue::findMany();
|
||||
expect($result)->count(1);
|
||||
expect($result[0]->newsletter_id)->equals($newsletter2->id);
|
||||
|
Reference in New Issue
Block a user