- Adds unit tests
This commit is contained in:
21
tests/unit/API/Endpoints/MailerTest.php
Normal file
21
tests/unit/API/Endpoints/MailerTest.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use MailPoet\API\Endpoints\Mailer;
|
||||||
|
use MailPoet\API\Response as APIResponse;
|
||||||
|
use MailPoet\Mailer\MailerLog;
|
||||||
|
|
||||||
|
class MailerEndpointTest extends MailPoetTest {
|
||||||
|
function testItResumesSending() {
|
||||||
|
// create mailer log with a "paused" status
|
||||||
|
$mailer_log = array('status' => MailerLog::STATUS_PAUSED);
|
||||||
|
MailerLog::updateMailerLog($mailer_log);
|
||||||
|
$mailer_log = MailerLog::getMailerLog();
|
||||||
|
expect($mailer_log['status'])->equals(MailerLog::STATUS_PAUSED);
|
||||||
|
// resumeSending() method should clear the mailer log's status
|
||||||
|
$mailer_endpoint = new Mailer();
|
||||||
|
$response = $mailer_endpoint->resumeSending();
|
||||||
|
expect($response->status)->equals(APIResponse::STATUS_OK);
|
||||||
|
$mailer_log = MailerLog::getMailerLog();
|
||||||
|
expect($mailer_log['status'])->null();
|
||||||
|
}
|
||||||
|
}
|
@ -37,8 +37,7 @@ class SendingQueueTest extends MailPoetTest {
|
|||||||
$this->queue->subscribers = serialize(
|
$this->queue->subscribers = serialize(
|
||||||
array(
|
array(
|
||||||
'to_process' => array($this->subscriber->id),
|
'to_process' => array($this->subscriber->id),
|
||||||
'processed' => array(),
|
'processed' => array()
|
||||||
'failed' => array()
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
$this->queue->count_total = 1;
|
$this->queue->count_total = 1;
|
||||||
@ -118,18 +117,16 @@ class SendingQueueTest extends MailPoetTest {
|
|||||||
$updated_queue = SendingQueue::findOne($this->queue->id);
|
$updated_queue = SendingQueue::findOne($this->queue->id);
|
||||||
expect($updated_queue->status)->equals(SendingQueue::STATUS_COMPLETED);
|
expect($updated_queue->status)->equals(SendingQueue::STATUS_COMPLETED);
|
||||||
|
|
||||||
// queue subscriber processed/failed/to process count is updated
|
// queue subscriber processed/to process count is updated
|
||||||
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
||||||
expect($updated_queue->subscribers)->equals(
|
expect($updated_queue->subscribers)->equals(
|
||||||
array(
|
array(
|
||||||
'to_process' => array(),
|
'to_process' => array(),
|
||||||
'failed' => array(),
|
|
||||||
'processed' => array($this->subscriber->id)
|
'processed' => array($this->subscriber->id)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
expect($updated_queue->count_total)->equals(1);
|
expect($updated_queue->count_total)->equals(1);
|
||||||
expect($updated_queue->count_processed)->equals(1);
|
expect($updated_queue->count_processed)->equals(1);
|
||||||
expect($updated_queue->count_failed)->equals(0);
|
|
||||||
expect($updated_queue->count_to_process)->equals(0);
|
expect($updated_queue->count_to_process)->equals(0);
|
||||||
|
|
||||||
// statistics entry should be created
|
// statistics entry should be created
|
||||||
@ -166,18 +163,16 @@ class SendingQueueTest extends MailPoetTest {
|
|||||||
$updated_queue = SendingQueue::findOne($this->queue->id);
|
$updated_queue = SendingQueue::findOne($this->queue->id);
|
||||||
expect($updated_queue->status)->equals(SendingQueue::STATUS_COMPLETED);
|
expect($updated_queue->status)->equals(SendingQueue::STATUS_COMPLETED);
|
||||||
|
|
||||||
// queue subscriber processed/failed/to process count is updated
|
// queue subscriber processed/to process count is updated
|
||||||
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
||||||
expect($updated_queue->subscribers)->equals(
|
expect($updated_queue->subscribers)->equals(
|
||||||
array(
|
array(
|
||||||
'to_process' => array(),
|
'to_process' => array(),
|
||||||
'failed' => array(),
|
|
||||||
'processed' => array($this->subscriber->id)
|
'processed' => array($this->subscriber->id)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
expect($updated_queue->count_total)->equals(1);
|
expect($updated_queue->count_total)->equals(1);
|
||||||
expect($updated_queue->count_processed)->equals(1);
|
expect($updated_queue->count_processed)->equals(1);
|
||||||
expect($updated_queue->count_failed)->equals(0);
|
|
||||||
expect($updated_queue->count_to_process)->equals(0);
|
expect($updated_queue->count_to_process)->equals(0);
|
||||||
|
|
||||||
// statistics entry should be created
|
// statistics entry should be created
|
||||||
@ -196,8 +191,7 @@ class SendingQueueTest extends MailPoetTest {
|
|||||||
$this->subscriber->id(),
|
$this->subscriber->id(),
|
||||||
123
|
123
|
||||||
),
|
),
|
||||||
'processed' => array(),
|
'processed' => array()
|
||||||
'failed' => array()
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
$queue->count_total = 2;
|
$queue->count_total = 2;
|
||||||
@ -210,18 +204,16 @@ class SendingQueueTest extends MailPoetTest {
|
|||||||
$sending_queue_worker->process();
|
$sending_queue_worker->process();
|
||||||
|
|
||||||
$updated_queue = SendingQueue::findOne($queue->id);
|
$updated_queue = SendingQueue::findOne($queue->id);
|
||||||
// queue subscriber processed/failed/to process count is updated
|
// queue subscriber processed/to process count is updated
|
||||||
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
||||||
expect($updated_queue->subscribers)->equals(
|
expect($updated_queue->subscribers)->equals(
|
||||||
array(
|
array(
|
||||||
'to_process' => array(),
|
'to_process' => array(),
|
||||||
'failed' => array(),
|
|
||||||
'processed' => array($this->subscriber->id)
|
'processed' => array($this->subscriber->id)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
expect($updated_queue->count_total)->equals(1);
|
expect($updated_queue->count_total)->equals(1);
|
||||||
expect($updated_queue->count_processed)->equals(1);
|
expect($updated_queue->count_processed)->equals(1);
|
||||||
expect($updated_queue->count_failed)->equals(0);
|
|
||||||
expect($updated_queue->count_to_process)->equals(0);
|
expect($updated_queue->count_to_process)->equals(0);
|
||||||
|
|
||||||
// statistics entry should be created only for 1 subscriber
|
// statistics entry should be created only for 1 subscriber
|
||||||
@ -237,8 +229,7 @@ class SendingQueueTest extends MailPoetTest {
|
|||||||
123,
|
123,
|
||||||
456
|
456
|
||||||
),
|
),
|
||||||
'processed' => array(),
|
'processed' => array()
|
||||||
'failed' => array()
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
$queue->count_total = 2;
|
$queue->count_total = 2;
|
||||||
@ -251,54 +242,19 @@ class SendingQueueTest extends MailPoetTest {
|
|||||||
$sending_queue_worker->process();
|
$sending_queue_worker->process();
|
||||||
|
|
||||||
$updated_queue = SendingQueue::findOne($queue->id);
|
$updated_queue = SendingQueue::findOne($queue->id);
|
||||||
// queue subscriber processed/failed/to process count is updated
|
// queue subscriber processed/to process count is updated
|
||||||
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
||||||
expect($updated_queue->subscribers)->equals(
|
expect($updated_queue->subscribers)->equals(
|
||||||
array(
|
array(
|
||||||
'to_process' => array(),
|
'to_process' => array(),
|
||||||
'failed' => array(),
|
|
||||||
'processed' => array()
|
'processed' => array()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
expect($updated_queue->count_total)->equals(0);
|
expect($updated_queue->count_total)->equals(0);
|
||||||
expect($updated_queue->count_processed)->equals(0);
|
expect($updated_queue->count_processed)->equals(0);
|
||||||
expect($updated_queue->count_failed)->equals(0);
|
|
||||||
expect($updated_queue->count_to_process)->equals(0);
|
expect($updated_queue->count_to_process)->equals(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItUpdatesFailedListWhenSendingFailed() {
|
|
||||||
$sending_queue_worker = new SendingQueueWorker(
|
|
||||||
$timer = false,
|
|
||||||
Stub::make(
|
|
||||||
new MailerTask(),
|
|
||||||
array('send' => Stub::exactly(1, function($newsletter, $subscriber) { return false; }))
|
|
||||||
)
|
|
||||||
);
|
|
||||||
$sending_queue_worker->process();
|
|
||||||
|
|
||||||
// queue subscriber processed/failed/to process count is updated
|
|
||||||
$updated_queue = SendingQueue::findOne($this->queue->id);
|
|
||||||
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
|
||||||
expect($updated_queue->subscribers)->equals(
|
|
||||||
array(
|
|
||||||
'to_process' => array(),
|
|
||||||
'failed' => array($this->subscriber->id),
|
|
||||||
'processed' => array()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
expect($updated_queue->count_total)->equals(1);
|
|
||||||
expect($updated_queue->count_processed)->equals(1);
|
|
||||||
expect($updated_queue->count_failed)->equals(1);
|
|
||||||
expect($updated_queue->count_to_process)->equals(0);
|
|
||||||
|
|
||||||
// statistics entry should not be created
|
|
||||||
$statistics = StatisticsNewsletters::where('newsletter_id', $this->newsletter->id)
|
|
||||||
->where('subscriber_id', $this->subscriber->id)
|
|
||||||
->where('queue_id', $this->queue->id)
|
|
||||||
->findOne();
|
|
||||||
expect($statistics)->false();
|
|
||||||
}
|
|
||||||
|
|
||||||
function testItDoesNotSendToTrashedSubscribers() {
|
function testItDoesNotSendToTrashedSubscribers() {
|
||||||
$sending_queue_worker = $this->sending_queue_worker;
|
$sending_queue_worker = $this->sending_queue_worker;
|
||||||
$sending_queue_worker->mailer_task = Stub::make(
|
$sending_queue_worker->mailer_task = Stub::make(
|
||||||
|
@ -51,8 +51,7 @@ class MailerTaskTest extends MailPoetTest {
|
|||||||
|
|
||||||
function testItGetsMailerLog() {
|
function testItGetsMailerLog() {
|
||||||
$mailer_log = $this->mailer_task->getMailerLog();
|
$mailer_log = $this->mailer_task->getMailerLog();
|
||||||
expect(isset($mailer_log['sent']))->true();
|
expect(is_array($mailer_log))->true();
|
||||||
expect(isset($mailer_log['started']))->true();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItUpdatesMailerLogSentCount() {
|
function testItUpdatesMailerLogSentCount() {
|
||||||
|
@ -107,29 +107,113 @@ class MailerLogTest extends MailPoetTest {
|
|||||||
expect($updated_mailer_log['sent'])->equals(0);
|
expect($updated_mailer_log['sent'])->equals(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItCanEnforceSendingLimit() {
|
function testItResumesSending() {
|
||||||
|
// set status to "paused"
|
||||||
|
$mailer_log = array('status' => MailerLog::STATUS_PAUSED);
|
||||||
|
MailerLog::updateMailerLog($mailer_log);
|
||||||
|
$mailer_log = MailerLog::getMailerLog();
|
||||||
|
expect($mailer_log['status'])->equals(MailerLog::STATUS_PAUSED);
|
||||||
|
// status is reset when sending is resumed
|
||||||
|
MailerLog::resumeSending();
|
||||||
|
$mailer_log = MailerLog::getMailerLog();
|
||||||
|
expect($mailer_log['status'])->null();
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItPausesSending() {
|
||||||
|
$mailer_log = array(
|
||||||
|
'status' => null,
|
||||||
|
'retry_attempt' => MailerLog::RETRY_ATTEMPTS_LIMIT,
|
||||||
|
'retry_at' => time() + 20
|
||||||
|
);
|
||||||
|
// status is set to PAUSED, retry attempt and retry at time are cleared
|
||||||
|
MailerLog::pauseSending($mailer_log);
|
||||||
|
$mailer_log = MailerLog::getMailerLog();
|
||||||
|
expect($mailer_log['status'])->equals(MailerLog::STATUS_PAUSED);
|
||||||
|
expect($mailer_log['retry_attempt'])->null();
|
||||||
|
expect($mailer_log['retry_at'])->null();
|
||||||
|
}
|
||||||
|
|
||||||
|
function itProcessesSendingError() {
|
||||||
|
// retry-related mailer values should be null
|
||||||
|
$mailer_log = MailerLog::getMailerLog();
|
||||||
|
expect($mailer_log['retry_attempt'])->null();
|
||||||
|
expect($mailer_log['retry_at'])->null();
|
||||||
|
expect($mailer_log['error'])->null();
|
||||||
|
// retry attempt should be incremented, error logged, retry attempt scheduled
|
||||||
|
MailerLog::processSendingError($operation = 'send', $error = 'email rejected');
|
||||||
|
$mailer_log = MailerLog::getMailerLog();
|
||||||
|
expect($mailer_log['retry_attempt'])->equals(1);
|
||||||
|
expect($mailer_log['retry_at'])->greaterThan(time());
|
||||||
|
expect($mailer_log['error'])->equals(
|
||||||
|
array(
|
||||||
|
'operation' => 'send',
|
||||||
|
'error_message' => 'email rejected'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItEnforcesSendingLimit() {
|
||||||
$mailer_config = array(
|
$mailer_config = array(
|
||||||
'frequency' => array(
|
'frequency' => array(
|
||||||
'emails' => 2,
|
'emails' => 2,
|
||||||
'interval' => 1
|
'interval' => 1
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
$mailer_log = array(
|
$mailer_log = MailerLog::createMailerLog();
|
||||||
'sent' => 2,
|
$mailer_log['sent'] = 2;
|
||||||
'started' => time()
|
$mailer_log['started'] = time();
|
||||||
);
|
|
||||||
Setting::setValue(MailerLog::SETTING_NAME, $mailer_log);
|
Setting::setValue(MailerLog::SETTING_NAME, $mailer_log);
|
||||||
Setting::setValue(Mailer::MAILER_CONFIG_SETTING_NAME, $mailer_config);
|
Setting::setValue(Mailer::MAILER_CONFIG_SETTING_NAME, $mailer_config);
|
||||||
|
|
||||||
// exception is thrown when sending limit is reached
|
// exception is thrown when sending limit is reached
|
||||||
try {
|
try {
|
||||||
MailerLog::enforceSendingLimit();
|
MailerLog::enforceExecutionRequirements();
|
||||||
self::fail('Sending frequency exception was not thrown.');
|
self::fail('Sending frequency exception was not thrown.');
|
||||||
} catch(\Exception $e) {
|
} catch(\Exception $e) {
|
||||||
expect($e->getMessage())->equals('Sending frequency limit has been reached.');
|
expect($e->getMessage())->equals('Sending frequency limit has been reached.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItEnforcesRetryAtTime() {
|
||||||
|
$mailer_log = MailerLog::createMailerLog();
|
||||||
|
$mailer_log['retry_at'] = time() + 10;
|
||||||
|
// exception is thrown when current time is sooner than 120 seconds
|
||||||
|
try {
|
||||||
|
MailerLog::enforceExecutionRequirements($mailer_log);
|
||||||
|
self::fail('Sending waiting to be retried exception was not thrown.');
|
||||||
|
} catch(\Exception $e) {
|
||||||
|
expect($e->getMessage())->equals('Sending is waiting to be retried.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItEnforcesRetryAttempts() {
|
||||||
|
$mailer_log = MailerLog::createMailerLog();
|
||||||
|
$mailer_log['retry_attempt'] = 2;
|
||||||
|
// allow less than 3 attempts
|
||||||
|
expect(MailerLog::enforceExecutionRequirements($mailer_log))->null();
|
||||||
|
// pase sending and throw exception when more than 3 attempts
|
||||||
|
$mailer_log['retry_attempt'] = MailerLog::RETRY_ATTEMPTS_LIMIT;
|
||||||
|
try {
|
||||||
|
MailerLog::enforceExecutionRequirements($mailer_log);
|
||||||
|
self::fail('Sending paused exception was not thrown.');
|
||||||
|
} catch(\Exception $e) {
|
||||||
|
expect($e->getMessage())->equals('Sending has been paused.');
|
||||||
|
}
|
||||||
|
$mailer_log = MailerLog::getMailerLog();
|
||||||
|
expect($mailer_log['status'])->equals(MailerLog::STATUS_PAUSED);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItEnforcesPuasedStatus() {
|
||||||
|
$mailer_log = MailerLog::createMailerLog();
|
||||||
|
$mailer_log['status'] = MailerLog::STATUS_PAUSED;
|
||||||
|
try {
|
||||||
|
MailerLog::enforceExecutionRequirements($mailer_log);
|
||||||
|
self::fail('Sending paused exception was not thrown.');
|
||||||
|
} catch(\Exception $e) {
|
||||||
|
expect($e->getMessage())->equals('Sending has been paused.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function _after() {
|
function _after() {
|
||||||
ORM::raw_execute('TRUNCATE ' . Setting::$_table);
|
ORM::raw_execute('TRUNCATE ' . Setting::$_table);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user