- Adds unit tests

This commit is contained in:
Vlad
2016-11-12 18:42:40 -05:00
parent 709b76d01e
commit 89545ba104
4 changed files with 119 additions and 59 deletions

View 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();
}
}

View File

@ -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(

View File

@ -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() {

View File

@ -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);
}