Test: Validate personalized values in newsletters getting send out

Adds a test whether the personalized values are correct when newsletters get send out
in the SendingQueue with the processing method 'individual'. [MAILPOET-3943]
This commit is contained in:
David Remer
2022-02-01 10:32:28 +02:00
committed by Veljko V
parent 57c842f37f
commit 77c1d65f4d

View File

@@ -14,6 +14,7 @@ use MailPoet\Cron\Workers\SendingQueue\Tasks\Links as TasksLinks;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Mailer as MailerTask;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterTask;
use MailPoet\Cron\Workers\StatsNotifications\Scheduler as StatsNotificationsScheduler;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\NewsletterLinkEntity;
use MailPoet\Entities\NewsletterPostEntity;
@@ -47,6 +48,7 @@ use MailPoet\Settings\SettingsController;
use MailPoet\Settings\SettingsRepository;
use MailPoet\Settings\TrackingConfig;
use MailPoet\Subscribers\LinkTokens;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\Subscription\SubscriptionUrlFactory;
use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\WP\Functions as WPFunctions;
@@ -435,6 +437,78 @@ class SendingQueueTest extends \MailPoetTest {
expect($statistics)->notEquals(false);
}
public function testItSendCorrectDataToSubscribersOneByOne() {
/**
* @var Subscriber[] $subscribers
*/
$subscribers = [
Subscriber::create(),
Subscriber::create(),
];
$subscribers[0]->set('id', 1);
$subscribers[1]->set('id', 2);
$subscribers[0]->set('status', 'status-1');
$subscribers[1]->set('status', 'status-2');
$subscribers[0]->set('source', 'source-1');
$subscribers[1]->set('source', 'source-2');
$subscribers[0]->set('email', '1@localhost.com');
$subscribers[1]->set('email', '2@localhost.com');
$subscribersRepository = ContainerWrapper::getInstance()->get(SubscribersRepository::class);
/**
* @var SubscriberEntity $entity
*/
$entity = $subscribersRepository->findOneById(1);
$entity->setEmail('1@localhost.com');
$subscribersRepository->persist($entity);
$entity = $subscribersRepository->findOneById(2);
$entity->setEmail('2@localhost.com');
$subscribersRepository->persist($entity);
$subscriberIds = array_map(function(Subscriber $item): int { return (int)$item->id();
}, $subscribers);
$queue = SendingTask::create();
$queue->newsletterRenderedBody = ['html' => '<p>Hello [subscriber:email]</p>', 'text' => 'Hello [subscriber:email]'];
$queue->newsletterRenderedSubject = 'News for [subscriber:email]';
$queue->setSubscribers($subscriberIds);
$this->settings->set('tracking.level', TrackingConfig::LEVEL_BASIC);
$newsletter = $this->newsletter;
$timer = 1000000000000000000;
$sendingQueueWorker = $this->getSendingQueueWorker(
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),
Stub::make(
MailerTask::class,
[
'prepareSubscriberForSending' => function($subscriber) {
return $subscriber->get('email');
},
'getProcessingMethod' => 'individual',
'send' => Expected::exactly(2, function($newsletter, $subscriberEmail, $extraParams) use ($subscribersRepository, $queue) {
$subscriberId = explode('@', $subscriberEmail);
$subscriberId = (int)$subscriberId[0];
$subscriber = $subscribersRepository->findOneById($subscriberId);
$subscriptionUrlFactory = SubscriptionUrlFactory::getInstance();
$unsubscribeUrl = $subscriptionUrlFactory->getUnsubscribeUrl($subscriber, $queue->id);
expect($newsletter['subject'])->equals('News for ' . $subscriberEmail);
expect($newsletter['body']['html'])->equals('<p>Hello ' . $subscriberEmail . '</p>');
expect($newsletter['body']['text'])->equals('Hello ' . $subscriberEmail);
expect($extraParams['meta']['email_type'])->equals('newsletter');
expect($extraParams['meta']['subscriber_status'])->equals('status-' . $subscriberId);
expect($extraParams['meta']['subscriber_source'])->equals('source-' . $subscriberId);
expect($extraParams['unsubscribe_url'])->equals($unsubscribeUrl);
return $this->mailerTaskDummyResponse;
}),
],
$this
)
);
$sendingQueueWorker->processQueue($queue, $newsletter, $subscribers, $timer);
}
public function testItCanProcessSubscribersInBulk() {
$sendingQueueWorker = $this->getSendingQueueWorker(
Stub::makeEmpty(NewslettersRepository::class, ['findOneById' => new NewsletterEntity()]),