Updates sending queue worker to set newsletter's sent_at field when
newsletter is sent
This commit is contained in:
@ -70,7 +70,7 @@ class SendingQueue {
|
|||||||
);
|
);
|
||||||
$queue->removeNonexistentSubscribers($subscibers_to_remove);
|
$queue->removeNonexistentSubscribers($subscibers_to_remove);
|
||||||
if(!count($queue->subscribers['to_process'])) {
|
if(!count($queue->subscribers['to_process'])) {
|
||||||
$this->newsletter_task->markNewsletterAsSent($newsletter);
|
$this->newsletter_task->markNewsletterAsSent($newsletter, $queue);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -80,7 +80,7 @@ class SendingQueue {
|
|||||||
$found_subscribers
|
$found_subscribers
|
||||||
);
|
);
|
||||||
if($queue->status === SendingQueueModel::STATUS_COMPLETED) {
|
if($queue->status === SendingQueueModel::STATUS_COMPLETED) {
|
||||||
$this->newsletter_task->markNewsletterAsSent($newsletter);
|
$this->newsletter_task->markNewsletterAsSent($newsletter, $queue);
|
||||||
}
|
}
|
||||||
$this->enforceSendingAndExecutionLimits();
|
$this->enforceSendingAndExecutionLimits();
|
||||||
}
|
}
|
||||||
|
@ -125,12 +125,14 @@ class Newsletter {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function markNewsletterAsSent($newsletter) {
|
function markNewsletterAsSent($newsletter, $queue) {
|
||||||
// if it's a standard or notification history newsletter, update its status
|
// if it's a standard or notification history newsletter, update its status
|
||||||
if($newsletter->type === NewsletterModel::TYPE_STANDARD ||
|
if($newsletter->type === NewsletterModel::TYPE_STANDARD ||
|
||||||
$newsletter->type === NewsletterModel::TYPE_NOTIFICATION_HISTORY
|
$newsletter->type === NewsletterModel::TYPE_NOTIFICATION_HISTORY
|
||||||
) {
|
) {
|
||||||
$newsletter->setStatus(NewsletterModel::STATUS_SENT);
|
$newsletter->status = NewsletterModel::STATUS_SENT;
|
||||||
|
$newsletter->sent_at = $queue->processed_at;
|
||||||
|
$newsletter->save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -341,6 +341,53 @@ class SendingQueueTest extends MailPoetTest {
|
|||||||
expect($statistics)->notEquals(false);
|
expect($statistics)->notEquals(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItProcessesStandardewsletters() {
|
||||||
|
$sending_queue_worker = new SendingQueueWorker(
|
||||||
|
$timer = false,
|
||||||
|
Stub::make(
|
||||||
|
new MailerTask(),
|
||||||
|
array(
|
||||||
|
'send' => Stub::exactly(1, function($newsletter, $subscriber) {
|
||||||
|
// newsletter body should not be empty
|
||||||
|
expect(!empty($newsletter['body']['html']))->true();
|
||||||
|
expect(!empty($newsletter['body']['text']))->true();
|
||||||
|
return true;
|
||||||
|
})
|
||||||
|
),
|
||||||
|
$this
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$sending_queue_worker->process();
|
||||||
|
|
||||||
|
// queue status is set to completed
|
||||||
|
$updated_queue = SendingQueue::findOne($this->queue->id);
|
||||||
|
expect($updated_queue->status)->equals(SendingQueue::STATUS_COMPLETED);
|
||||||
|
|
||||||
|
// newsletter status is set to sent and sent_at date is populated
|
||||||
|
$updated_newsletter = Newsletter::findOne($this->newsletter->id);
|
||||||
|
expect($updated_newsletter->status)->equals(Newsletter::STATUS_SENT);
|
||||||
|
expect($updated_newsletter->sent_at)->equals($updated_queue->processed_at);
|
||||||
|
|
||||||
|
// queue subscriber processed/to process count is updated
|
||||||
|
$updated_queue->subscribers = $updated_queue->getSubscribers();
|
||||||
|
expect($updated_queue->subscribers)->equals(
|
||||||
|
array(
|
||||||
|
'to_process' => array(),
|
||||||
|
'processed' => array($this->subscriber->id)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
expect($updated_queue->count_total)->equals(1);
|
||||||
|
expect($updated_queue->count_processed)->equals(1);
|
||||||
|
expect($updated_queue->count_to_process)->equals(0);
|
||||||
|
|
||||||
|
// statistics entry should 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)->notEquals(false);
|
||||||
|
}
|
||||||
|
|
||||||
function testItCanProcessWelcomeNewsletters() {
|
function testItCanProcessWelcomeNewsletters() {
|
||||||
$this->newsletter->type = Newsletter::TYPE_WELCOME;
|
$this->newsletter->type = Newsletter::TYPE_WELCOME;
|
||||||
$this->newsletter_segment->delete();
|
$this->newsletter_segment->delete();
|
||||||
|
@ -183,30 +183,34 @@ class NewsletterTaskTest extends MailPoetTest {
|
|||||||
expect($newsletter_post->post_id)->equals('10');
|
expect($newsletter_post->post_id)->equals('10');
|
||||||
}
|
}
|
||||||
|
|
||||||
function testItUpdatesStatusToSentOnlyForStandardAndPostNotificationNewsletters() {
|
function testItUpdatesStatusAndSetsSentAtDateOnlyForStandardAndPostNotificationNewsletters() {
|
||||||
$newsletter = $this->newsletter;
|
$newsletter = $this->newsletter;
|
||||||
|
$queue = new stdClass();
|
||||||
|
$queue->processed_at = date('Y-m-d H:i:s');
|
||||||
|
|
||||||
// newsletter type is 'standard'
|
// newsletter type is 'standard'
|
||||||
$newsletter->type = Newsletter::TYPE_STANDARD;
|
$newsletter->type = Newsletter::TYPE_STANDARD;
|
||||||
$newsletter->status = 'not_sent';
|
$newsletter->status = 'not_sent';
|
||||||
$newsletter->save();
|
$newsletter->save();
|
||||||
$this->newsletter_task->markNewsletterAsSent($newsletter);
|
$this->newsletter_task->markNewsletterAsSent($newsletter, $queue);
|
||||||
$updated_newsletter = Newsletter::findOne($newsletter->id);
|
$updated_newsletter = Newsletter::findOne($newsletter->id);
|
||||||
expect($updated_newsletter->status)->equals(Newsletter::STATUS_SENT);
|
expect($updated_newsletter->status)->equals(Newsletter::STATUS_SENT);
|
||||||
|
expect($updated_newsletter->sent_at)->equals($queue->processed_at);
|
||||||
|
|
||||||
// newsletter type is 'notification history'
|
// newsletter type is 'notification history'
|
||||||
$newsletter->type = Newsletter::TYPE_NOTIFICATION_HISTORY;
|
$newsletter->type = Newsletter::TYPE_NOTIFICATION_HISTORY;
|
||||||
$newsletter->status = 'not_sent';
|
$newsletter->status = 'not_sent';
|
||||||
$newsletter->save();
|
$newsletter->save();
|
||||||
$this->newsletter_task->markNewsletterAsSent($newsletter);
|
$this->newsletter_task->markNewsletterAsSent($newsletter, $queue);
|
||||||
$updated_newsletter = Newsletter::findOne($newsletter->id);
|
$updated_newsletter = Newsletter::findOne($newsletter->id);
|
||||||
expect($updated_newsletter->status)->equals(Newsletter::STATUS_SENT);
|
expect($updated_newsletter->status)->equals(Newsletter::STATUS_SENT);
|
||||||
|
expect($updated_newsletter->sent_at)->equals($queue->processed_at);
|
||||||
|
|
||||||
// all other newsletter types
|
// all other newsletter types
|
||||||
$newsletter->type = Newsletter::TYPE_WELCOME;
|
$newsletter->type = Newsletter::TYPE_WELCOME;
|
||||||
$newsletter->status = 'not_sent';
|
$newsletter->status = 'not_sent';
|
||||||
$newsletter->save();
|
$newsletter->save();
|
||||||
$this->newsletter_task->markNewsletterAsSent($newsletter);
|
$this->newsletter_task->markNewsletterAsSent($newsletter, $queue);
|
||||||
$updated_newsletter = Newsletter::findOne($newsletter->id);
|
$updated_newsletter = Newsletter::findOne($newsletter->id);
|
||||||
expect($updated_newsletter->status)->notEquals(Newsletter::STATUS_SENT);
|
expect($updated_newsletter->status)->notEquals(Newsletter::STATUS_SENT);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user