Files
piratepoet/mailpoet/tests/integration/Cron/DaemonTest.php
David Remer 1a8f0c384c Improve logging of errors in cron
Sometimes errors overlap each other so that the 'Last Seen error' we log
does not provide sufficient information on the cause of a problem.

E.g. one worker might cause an SQL issue, which closes the EntityManager and a
subsequent worker might overwrite this error with the information that the
EntityManager is closed.

With this commit, both those issues will be logged as an error.

[MAILPOET-4699]
2022-10-06 12:06:13 +02:00

77 lines
3.1 KiB
PHP

<?php
namespace MailPoet\Test\Cron;
use Codeception\Stub\Expected;
use MailPoet\Cron\CronHelper;
use MailPoet\Cron\CronWorkerRunner;
use MailPoet\Cron\Daemon;
use MailPoet\Cron\Workers\SimpleWorker;
use MailPoet\Cron\Workers\WorkersFactory;
use MailPoet\Logging\LoggerFactory;
use MailPoet\Settings\SettingsController;
use MailPoet\Settings\SettingsRepository;
class DaemonTest extends \MailPoetTest {
public $cronHelper;
/** @var SettingsController */
private $settings;
public function _before() {
parent::_before();
$this->settings = SettingsController::getInstance();
$this->cronHelper = $this->diContainer->get(CronHelper::class);
}
public function testItCanRun() {
$cronWorkerRunner = $this->make(CronWorkerRunner::class, [
'run' => null,
]);
$data = [
'token' => 123,
];
$this->settings->set(CronHelper::DAEMON_SETTING, $data);
$daemon = new Daemon($this->cronHelper, $cronWorkerRunner, $this->createWorkersFactoryMock(), $this->diContainer->get(LoggerFactory::class));
$daemon->run($data);
}
public function _after() {
$this->diContainer->get(SettingsRepository::class)->truncate();
}
private function createWorkersFactoryMock(array $workers = []) {
return $this->make(WorkersFactory::class, $workers + [
'createScheduleWorker' => $this->createSimpleWorkerMock(),
'createQueueWorker' => $this->createSimpleWorkerMock(),
'createStatsNotificationsWorker' => $this->createSimpleWorkerMock(),
'createStatsNotificationsWorkerForAutomatedEmails' => $this->createSimpleWorkerMock(),
'createSendingServiceKeyCheckWorker' => $this->createSimpleWorkerMock(),
'createPremiumKeyCheckWorker' => $this->createSimpleWorkerMock(),
'createSubscribersStatsReportWorker' => $this->createSimpleWorkerMock(),
'createBounceWorker' => $this->createSimpleWorkerMock(),
'createMigrationWorker' => $this->createSimpleWorkerMock(),
'createWooCommerceSyncWorker' => $this->createSimpleWorkerMock(),
'createExportFilesCleanupWorker' => $this->createSimpleWorkerMock(),
'createSubscribersEmailCountsWorker' => $this->createSimpleWorkerMock(),
'createInactiveSubscribersWorker' => $this->createSimpleWorkerMock(),
'createAuthorizedSendingEmailsCheckWorker' => $this->createSimpleWorkerMock(),
'createWooCommercePastOrdersWorker' => $this->createSimpleWorkerMock(),
'createBeamerkWorker' => $this->createSimpleWorkerMock(),
'createUnsubscribeTokensWorker' => $this->createSimpleWorkerMock(),
'createSubscriberLinkTokensWorker' => $this->createSimpleWorkerMock(),
'createSubscribersEngagementScoreWorker' => $this->createSimpleWorkerMock(),
'createSubscribersLastEngagementWorker' => $this->createSimpleWorkerMock(),
'createSubscribersCountCacheRecalculationWorker' => $this->createSimpleWorkerMock(),
'createReEngagementEmailsSchedulerWorker' => $this->createSimpleWorkerMock(),
'createNewsletterTemplateThumbnailsWorker' => $this->createSimpleWorkerMock(),
]);
}
private function createSimpleWorkerMock() {
return $this->makeEmpty(SimpleWorker::class, [
'process' => Expected::once(),
]);
}
}