- 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(
|
||||
array(
|
||||
'to_process' => array($this->subscriber->id),
|
||||
'processed' => array(),
|
||||
'failed' => array()
|
||||
'processed' => array()
|
||||
)
|
||||
);
|
||||
$this->queue->count_total = 1;
|
||||
@ -118,18 +117,16 @@ class SendingQueueTest extends MailPoetTest {
|
||||
$updated_queue = SendingQueue::findOne($this->queue->id);
|
||||
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();
|
||||
expect($updated_queue->subscribers)->equals(
|
||||
array(
|
||||
'to_process' => array(),
|
||||
'failed' => array(),
|
||||
'processed' => array($this->subscriber->id)
|
||||
)
|
||||
);
|
||||
expect($updated_queue->count_total)->equals(1);
|
||||
expect($updated_queue->count_processed)->equals(1);
|
||||
expect($updated_queue->count_failed)->equals(0);
|
||||
expect($updated_queue->count_to_process)->equals(0);
|
||||
|
||||
// statistics entry should be created
|
||||
@ -166,18 +163,16 @@ class SendingQueueTest extends MailPoetTest {
|
||||
$updated_queue = SendingQueue::findOne($this->queue->id);
|
||||
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();
|
||||
expect($updated_queue->subscribers)->equals(
|
||||
array(
|
||||
'to_process' => array(),
|
||||
'failed' => array(),
|
||||
'processed' => array($this->subscriber->id)
|
||||
)
|
||||
);
|
||||
expect($updated_queue->count_total)->equals(1);
|
||||
expect($updated_queue->count_processed)->equals(1);
|
||||
expect($updated_queue->count_failed)->equals(0);
|
||||
expect($updated_queue->count_to_process)->equals(0);
|
||||
|
||||
// statistics entry should be created
|
||||
@ -196,8 +191,7 @@ class SendingQueueTest extends MailPoetTest {
|
||||
$this->subscriber->id(),
|
||||
123
|
||||
),
|
||||
'processed' => array(),
|
||||
'failed' => array()
|
||||
'processed' => array()
|
||||
)
|
||||
);
|
||||
$queue->count_total = 2;
|
||||
@ -210,18 +204,16 @@ class SendingQueueTest extends MailPoetTest {
|
||||
$sending_queue_worker->process();
|
||||
|
||||
$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();
|
||||
expect($updated_queue->subscribers)->equals(
|
||||
array(
|
||||
'to_process' => array(),
|
||||
'failed' => array(),
|
||||
'processed' => array($this->subscriber->id)
|
||||
)
|
||||
);
|
||||
expect($updated_queue->count_total)->equals(1);
|
||||
expect($updated_queue->count_processed)->equals(1);
|
||||
expect($updated_queue->count_failed)->equals(0);
|
||||
expect($updated_queue->count_to_process)->equals(0);
|
||||
|
||||
// statistics entry should be created only for 1 subscriber
|
||||
@ -237,8 +229,7 @@ class SendingQueueTest extends MailPoetTest {
|
||||
123,
|
||||
456
|
||||
),
|
||||
'processed' => array(),
|
||||
'failed' => array()
|
||||
'processed' => array()
|
||||
)
|
||||
);
|
||||
$queue->count_total = 2;
|
||||
@ -251,54 +242,19 @@ class SendingQueueTest extends MailPoetTest {
|
||||
$sending_queue_worker->process();
|
||||
|
||||
$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();
|
||||
expect($updated_queue->subscribers)->equals(
|
||||
array(
|
||||
'to_process' => array(),
|
||||
'failed' => array(),
|
||||
'processed' => array()
|
||||
)
|
||||
);
|
||||
expect($updated_queue->count_total)->equals(0);
|
||||
expect($updated_queue->count_processed)->equals(0);
|
||||
expect($updated_queue->count_failed)->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() {
|
||||
$sending_queue_worker = $this->sending_queue_worker;
|
||||
$sending_queue_worker->mailer_task = Stub::make(
|
||||
|
@ -51,8 +51,7 @@ class MailerTaskTest extends MailPoetTest {
|
||||
|
||||
function testItGetsMailerLog() {
|
||||
$mailer_log = $this->mailer_task->getMailerLog();
|
||||
expect(isset($mailer_log['sent']))->true();
|
||||
expect(isset($mailer_log['started']))->true();
|
||||
expect(is_array($mailer_log))->true();
|
||||
}
|
||||
|
||||
function testItUpdatesMailerLogSentCount() {
|
||||
|
@ -107,29 +107,113 @@ class MailerLogTest extends MailPoetTest {
|
||||
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(
|
||||
'frequency' => array(
|
||||
'emails' => 2,
|
||||
'interval' => 1
|
||||
)
|
||||
);
|
||||
$mailer_log = array(
|
||||
'sent' => 2,
|
||||
'started' => time()
|
||||
);
|
||||
$mailer_log = MailerLog::createMailerLog();
|
||||
$mailer_log['sent'] = 2;
|
||||
$mailer_log['started'] = time();
|
||||
Setting::setValue(MailerLog::SETTING_NAME, $mailer_log);
|
||||
Setting::setValue(Mailer::MAILER_CONFIG_SETTING_NAME, $mailer_config);
|
||||
|
||||
// exception is thrown when sending limit is reached
|
||||
try {
|
||||
MailerLog::enforceSendingLimit();
|
||||
MailerLog::enforceExecutionRequirements();
|
||||
self::fail('Sending frequency exception was not thrown.');
|
||||
} catch(\Exception $e) {
|
||||
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() {
|
||||
ORM::raw_execute('TRUNCATE ' . Setting::$_table);
|
||||
}
|
||||
|
Reference in New Issue
Block a user