Fix tests

[MAILPOET-1571]
This commit is contained in:
Pavel Dohnal
2019-01-15 14:43:16 +01:00
parent 1db75f40fb
commit b66c724c4a
8 changed files with 94 additions and 51 deletions

View File

@ -90,9 +90,11 @@ class Worker {
private function getNewsletter(ScheduledTask $task) { private function getNewsletter(ScheduledTask $task) {
$statsNotificationModel = $task->statsNotification()->findOne(); $statsNotificationModel = $task->statsNotification()->findOne();
return $statsNotificationModel $newsletter = $statsNotificationModel->newsletter()->findOne();
->newsletter() if(!$newsletter) {
->findOne() throw new \Exception('Newsletter not found');
}
return $newsletter
->withSendingQueue() ->withSendingQueue()
->withTotalSent() ->withTotalSent()
->withStatistics(); ->withStatistics();

View File

@ -6,6 +6,7 @@ use MailPoet\Config\Renderer;
use MailPoet\Models\Segment; use MailPoet\Models\Segment;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\WP\Functions;
class NewSubscriberNotificationMailer { class NewSubscriberNotificationMailer {
@ -18,11 +19,15 @@ class NewSubscriberNotificationMailer {
/** @var \MailPoet\Mailer\Mailer */ /** @var \MailPoet\Mailer\Mailer */
private $mailer; private $mailer;
/** @var Functions */
private $wordpress_functions;
/** /**
* @param \MailPoet\Mailer\Mailer|null $mailer * @param \MailPoet\Mailer\Mailer|null $mailer
* @param Renderer|null $renderer * @param Renderer|null $renderer
* @param Functions|null $wordpress_functions
*/ */
function __construct($mailer = null, $renderer = null) { function __construct($mailer = null, $renderer = null, $wordpress_functions = null) {
if($renderer) { if($renderer) {
$this->renderer = $renderer; $this->renderer = $renderer;
} else { } else {
@ -30,6 +35,11 @@ class NewSubscriberNotificationMailer {
$debugging = WP_DEBUG; $debugging = WP_DEBUG;
$this->renderer = new Renderer($caching, $debugging); $this->renderer = new Renderer($caching, $debugging);
} }
if($wordpress_functions) {
$this->wordpress_functions = $wordpress_functions;
} else {
$this->wordpress_functions = new Functions();
}
if($mailer) { if($mailer) {
$this->mailer = $mailer; $this->mailer = $mailer;
} else { } else {
@ -75,7 +85,7 @@ class NewSubscriberNotificationMailer {
} }
private function constructSenderEmail() { private function constructSenderEmail() {
$url_parts = parse_url(home_url()); $url_parts = parse_url($this->wordpress_functions->homeUrl());
$site_name = strtolower($url_parts['host']); $site_name = strtolower($url_parts['host']);
if(substr($site_name, 0, 4) === 'www.') { if(substr($site_name, 0, 4) === 'www.') {
$site_name = substr($site_name, 4); $site_name = substr($site_name, 4);

View File

@ -28,6 +28,10 @@ class Functions {
return call_user_func_array('current_time', func_get_args()); return call_user_func_array('current_time', func_get_args());
} }
function homeUrl() {
return call_user_func_array('home_url', func_get_args());
}
function getImageInfo($id) { function getImageInfo($id) {
/* /*
* In some cases wp_get_attachment_image_src ignore the second parameter * In some cases wp_get_attachment_image_src ignore the second parameter

View File

@ -17,6 +17,10 @@ class CronHelperTest extends \MailPoetTest {
Setting::setValue('cron_trigger', array( Setting::setValue('cron_trigger', array(
'method' => 'none' 'method' => 'none'
)); ));
Setting::setValue('sender', array(
'name' => 'John Doe',
'address' => 'john.doe@example.com'
));
} }
function testItDefinesConstants() { function testItDefinesConstants() {

View File

@ -22,27 +22,25 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
} }
function testItDoesNotRunWithoutRequestData() { function testItDoesNotRunWithoutRequestData() {
$daemon = Stub::construct( $daemon = Stub::make(
new DaemonHttpRunner(new Daemon(new WorkersFactory(new SendingErrorHandler()))), DaemonHttpRunner::class,
array(), [
array(
'abortWithError' => function($message) { 'abortWithError' => function($message) {
return $message; return $message;
} }
) ]
); );
expect($daemon->run(false))->equals('Invalid or missing request data.'); expect($daemon->run(false))->equals('Invalid or missing request data.');
} }
function testItDoesNotRunWhenThereIsInvalidOrMissingToken() { function testItDoesNotRunWhenThereIsInvalidOrMissingToken() {
$daemon = Stub::construct( $daemon = Stub::make(
new DaemonHttpRunner(new Daemon(new WorkersFactory(new SendingErrorHandler()))), DaemonHttpRunner::class,
array(), [
array(
'abortWithError' => function($message) { 'abortWithError' => function($message) {
return $message; return $message;
} }
) ]
); );
$daemon->settings_daemon_data = array( $daemon->settings_daemon_data = array(
'token' => 123 'token' => 123
@ -54,14 +52,19 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
$data = array( $data = array(
'token' => 123 'token' => 123
); );
$daemon = Stub::construct(Daemon::class, [new WorkersFactory(new SendingErrorHandler())], array( $daemon = Stub::make(
'executeScheduleWorker' => function() { Daemon::class,
throw new \Exception('Message'); [
}, 'executeScheduleWorker' => function() {
'executeQueueWorker' => function() { throw new \Exception('Message');
throw new \Exception(); },
}, 'executeQueueWorker' => function() {
), $this); throw new \Exception();
},
'executeMigrationWorker' => null,
'executeStatsNotificationsWorker' => null,
]
);
$daemon_http_runner = Stub::make(new DaemonHttpRunner($daemon), array( $daemon_http_runner = Stub::make(new DaemonHttpRunner($daemon), array(
'pauseExecution' => null, 'pauseExecution' => null,
'callSelf' => null 'callSelf' => null
@ -74,16 +77,14 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
} }
function testItCanPauseExecution() { function testItCanPauseExecution() {
$daemon = Stub::construct(Daemon::class, [new WorkersFactory(new SendingErrorHandler())], array( $daemon = Stub::makeEmpty(Daemon::class);
'executeScheduleWorker' => null, $daemon_http_runner = Stub::make(DaemonHttpRunner::class, array(
'executeQueueWorker' => null,
), $this);
$daemon_http_runner = Stub::make(new DaemonHttpRunner($daemon), array(
'pauseExecution' => Expected::exactly(1, function($pause_delay) { 'pauseExecution' => Expected::exactly(1, function($pause_delay) {
expect($pause_delay)->lessThan(CronHelper::DAEMON_EXECUTION_LIMIT); expect($pause_delay)->lessThan(CronHelper::DAEMON_EXECUTION_LIMIT);
expect($pause_delay)->greaterThan(CronHelper::DAEMON_EXECUTION_LIMIT - 1); expect($pause_delay)->greaterThan(CronHelper::DAEMON_EXECUTION_LIMIT - 1);
}), }),
'callSelf' => null 'callSelf' => null,
'terminateRequest' => null,
), $this); ), $this);
$data = array( $data = array(
'token' => 123 'token' => 123
@ -107,7 +108,7 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
'token' => 123 'token' => 123
); );
Setting::setValue(CronHelper::DAEMON_SETTING, $data); Setting::setValue(CronHelper::DAEMON_SETTING, $data);
$daemon->__construct(new Daemon(new WorkersFactory(new SendingErrorHandler()))); $daemon->__construct(Stub::makeEmpty(Daemon::class));
$daemon->run($data); $daemon->run($data);
} }
@ -127,7 +128,7 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
'token' => 123 'token' => 123
); );
Setting::setValue(CronHelper::DAEMON_SETTING, $data); Setting::setValue(CronHelper::DAEMON_SETTING, $data);
$daemon->__construct(new Daemon(new WorkersFactory(new SendingErrorHandler()))); $daemon->__construct(Stub::makeEmpty(Daemon::class));
$daemon->run($data); $daemon->run($data);
$data_after_run = Setting::getValue(CronHelper::DAEMON_SETTING); $data_after_run = Setting::getValue(CronHelper::DAEMON_SETTING);
expect($data_after_run['token'], 567); expect($data_after_run['token'], 567);
@ -145,7 +146,7 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
'status' => CronHelper::DAEMON_STATUS_INACTIVE, 'status' => CronHelper::DAEMON_STATUS_INACTIVE,
]; ];
Setting::setValue(CronHelper::DAEMON_SETTING, $data); Setting::setValue(CronHelper::DAEMON_SETTING, $data);
$daemon->__construct(new Daemon(new WorkersFactory(new SendingErrorHandler()))); $daemon->__construct(Stub::makeEmpty(Daemon::class));
$daemon->run($data); $daemon->run($data);
} }
@ -154,25 +155,31 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
'executeScheduleWorker' => null, 'executeScheduleWorker' => null,
'executeQueueWorker' => null, 'executeQueueWorker' => null,
'pauseExecution' => null, 'pauseExecution' => null,
'callSelf' => null 'callSelf' => null,
'terminateRequest' => null,
), $this); ), $this);
$data = array( $data = array(
'token' => 123 'token' => 123
); );
Setting::setValue(CronHelper::DAEMON_SETTING, $data); Setting::setValue(CronHelper::DAEMON_SETTING, $data);
$daemon_http_runner->__construct(new Daemon(new WorkersFactory(new SendingErrorHandler()))); $daemon_http_runner->__construct(Stub::makeEmptyExcept(Daemon::class, 'run'));
$daemon_http_runner->run($data); $daemon_http_runner->run($data);
$updated_daemon = Setting::getValue(CronHelper::DAEMON_SETTING); $updated_daemon = Setting::getValue(CronHelper::DAEMON_SETTING);
expect($updated_daemon['token'])->equals($daemon_http_runner->token); expect($updated_daemon['token'])->equals($daemon_http_runner->token);
} }
function testItUpdatesTimestampsDuringExecution() { function testItUpdatesTimestampsDuringExecution() {
$daemon = Stub::construct(Daemon::class, [new WorkersFactory(new SendingErrorHandler())], array( $daemon = Stub::make(Daemon::class, [
'executeScheduleWorker' => function() { 'executeScheduleWorker' => function() {
sleep(2); sleep(2);
}, },
'executeQueueWorker' => null, 'executeQueueWorker' => function() {
), $this); throw new \Exception();
},
'executeMigrationWorker' => null,
'executeStatsNotificationsWorker' => null,
]
);
$daemon_http_runner = Stub::make(new DaemonHttpRunner($daemon), array( $daemon_http_runner = Stub::make(new DaemonHttpRunner($daemon), array(
'pauseExecution' => null, 'pauseExecution' => null,
'callSelf' => null 'callSelf' => null
@ -201,12 +208,13 @@ class DaemonHttpRunnerTest extends \MailPoetTest {
'executeQueueWorker' => Expected::exactly(1), 'executeQueueWorker' => Expected::exactly(1),
// daemon should call itself // daemon should call itself
'callSelf' => Expected::exactly(1), 'callSelf' => Expected::exactly(1),
'terminateRequest' => null,
), $this); ), $this);
$data = array( $data = array(
'token' => 123 'token' => 123
); );
Setting::setValue(CronHelper::DAEMON_SETTING, $data); Setting::setValue(CronHelper::DAEMON_SETTING, $data);
$daemon->__construct(new Daemon(new WorkersFactory(new SendingErrorHandler()))); $daemon->__construct(Stub::makeEmptyExcept(Daemon::class, 'run'));
$daemon->run($data); $daemon->run($data);
expect(ignore_user_abort())->equals(1); expect(ignore_user_abort())->equals(1);
} }

View File

@ -13,11 +13,14 @@ use MailPoet\Models\Setting;
class DaemonTest extends \MailPoetTest { class DaemonTest extends \MailPoetTest {
function testItCanExecuteWorkers() { function testItCanExecuteWorkers() {
$daemon = Stub::construct(Daemon::class, [new WorkersFactory(new SendingErrorHandler())], array( $daemon = Stub::make(Daemon::class, array(
'executeScheduleWorker' => Expected::exactly(1), 'executeScheduleWorker' => Expected::exactly(1),
'executeQueueWorker' => Expected::exactly(1), 'executeQueueWorker' => Expected::exactly(1),
'pauseExecution' => null, 'executeMigrationWorker' => null,
'callSelf' => null 'executeStatsNotificationsWorker' => null,
'executeSendingServiceKeyCheckWorker' => null,
'executePremiumKeyCheckWorker' => null,
'executeBounceWorker' => null,
), $this); ), $this);
$data = array( $data = array(
'token' => 123 'token' => 123
@ -27,13 +30,15 @@ class DaemonTest extends \MailPoetTest {
} }
function testItCanRun() { function testItCanRun() {
$daemon = Stub::construct(Daemon::class, [new WorkersFactory(new SendingErrorHandler())], array( $daemon = Stub::make(Daemon::class, array(
'pauseExecution' => null,
// workers should be executed // workers should be executed
'executeScheduleWorker' => Expected::exactly(1), 'executeScheduleWorker' => Expected::exactly(1),
'executeQueueWorker' => Expected::exactly(1), 'executeQueueWorker' => Expected::exactly(1),
// daemon should call itself 'executeMigrationWorker' => Expected::exactly(1),
'callSelf' => Expected::exactly(1), 'executeStatsNotificationsWorker' => Expected::exactly(1),
'executeSendingServiceKeyCheckWorker' => Expected::exactly(1),
'executePremiumKeyCheckWorker' => Expected::exactly(1),
'executeBounceWorker' => Expected::exactly(1)
), $this); ), $this);
$data = array( $data = array(
'token' => 123 'token' => 123

View File

@ -17,7 +17,7 @@ use PHPUnit\Framework\MockObject\MockObject;
class WorkerTest extends \MailPoetTest { class WorkerTest extends \MailPoetTest {
/** @var Scheduler */ /** @var Worker */
private $stats_notifications; private $stats_notifications;
/** @var MockObject */ /** @var MockObject */
@ -27,6 +27,9 @@ class WorkerTest extends \MailPoetTest {
private $renderer; private $renderer;
function _before() { function _before() {
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
\ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
$this->mailer = $this->createMock(Mailer::class); $this->mailer = $this->createMock(Mailer::class);
$this->renderer = $this->createMock(Renderer::class); $this->renderer = $this->createMock(Renderer::class);
$this->stats_notifications = new Worker($this->mailer, $this->renderer); $this->stats_notifications = new Worker($this->mailer, $this->renderer);

View File

@ -8,6 +8,7 @@ use MailPoet\Mailer\Mailer;
use MailPoet\Models\Segment; use MailPoet\Models\Segment;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\WP\Functions;
class NewSubscriberNotificationMailerTest extends \MailPoetTest { class NewSubscriberNotificationMailerTest extends \MailPoetTest {
@ -85,7 +86,6 @@ class NewSubscriberNotificationMailerTest extends \MailPoetTest {
function testItRemovesWwwFromSenderAddress() { function testItRemovesWwwFromSenderAddress() {
Setting::setValue(NewSubscriberNotificationMailer::SETTINGS_KEY, ['enabled' => true,'address' => 'a@b.c']); Setting::setValue(NewSubscriberNotificationMailer::SETTINGS_KEY, ['enabled' => true,'address' => 'a@b.c']);
update_option( 'home', 'http://www.example.com/xyz' );
$mailer = Stub::makeEmpty(Mailer::class, [ $mailer = Stub::makeEmpty(Mailer::class, [
'getSenderNameAndAddress' => 'getSenderNameAndAddress' =>
@ -96,7 +96,14 @@ class NewSubscriberNotificationMailerTest extends \MailPoetTest {
}), }),
], $this); ], $this);
$service = new NewSubscriberNotificationMailer($mailer); $functions = Stub::makeEmpty(Functions::class, [
'homeUrl' =>
Expected::once(function() {
return 'http://www.example.com/xyz';
}),
], $this);
$service = new NewSubscriberNotificationMailer($mailer, null, $functions);
$service->send($this->subscriber, $this->segments); $service->send($this->subscriber, $this->segments);
} }
} }