Fix Welcome email sending [MAILPOET-859]

This commit is contained in:
Alexey Stoletniy
2017-03-15 12:12:47 +03:00
parent 95e66f1f29
commit 8dd698ec75
2 changed files with 61 additions and 4 deletions

View File

@ -43,10 +43,19 @@ class SendingQueue {
self::BATCH_SIZE
);
foreach($subscriber_batches as $subscribers_to_process_ids) {
if (!empty($newsletter_segments_ids[0])) {
// Check that subscribers are in segments
$found_subscribers = SubscriberModel::findSubscribersInSegments(
$subscribers_to_process_ids, $newsletter_segments_ids
)->findMany();
$found_subscribers_ids = SubscriberModel::extractSubscribersIds($found_subscribers);
} else {
// No segments = Welcome emails
$found_subscribers = SubscriberModel::whereIn('id', $subscribers_to_process_ids)
->whereNull('deleted_at')
->findMany();
$found_subscribers_ids = SubscriberModel::extractSubscribersIds($found_subscribers);
}
// if some subscribers weren't found, remove them from the processing list
if(count($found_subscribers_ids) !== count($subscribers_to_process_ids)) {
$subscibers_to_remove = array_diff(

View File

@ -282,6 +282,54 @@ class SendingQueueTest extends MailPoetTest {
expect($statistics)->notEquals(false);
}
function testItCanProcessWelcomeNewsletters() {
$this->newsletter->type = Newsletter::TYPE_WELCOME;
$this->newsletter_segment->delete();
$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;
})
)
)
);
$sending_queue_worker->process();
// newsletter status is set to sent
$updated_newsletter = Newsletter::findOne($this->newsletter->id);
expect($updated_newsletter->status)->equals(Newsletter::STATUS_SENT);
// queue status is set to completed
$updated_queue = SendingQueue::findOne($this->queue->id);
expect($updated_queue->status)->equals(SendingQueue::STATUS_COMPLETED);
// 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 testItRemovesNonexistentSubscribersFromProcessingList() {
$queue = $this->queue;
$queue->subscribers = serialize(