Add tests for campaignId generation

[MAILPOET-5033]
This commit is contained in:
John Oleksowicz
2023-02-14 12:53:35 -06:00
committed by Aschepikov
parent 1a04b05e0d
commit a6824cce36
2 changed files with 49 additions and 0 deletions

View File

@ -427,6 +427,14 @@ class SendingQueue {
); );
} }
/**
* @param NewsletterEntity $newsletter
* @param string $textBody - The pre-processed text body of the newsletter, before any shortcodes have been processed.
* Leaving the shortcodes unprocessed ensures that we get the same campaignId for different subscribers, as well as
* for different sends of the same automatic email when link tracking is enabled.
*
* @return string
*/
public function calculateCampaignId(NewsletterEntity $newsletter, string $textBody): string { public function calculateCampaignId(NewsletterEntity $newsletter, string $textBody): string {
return substr(md5(implode('|', [$newsletter->getId(), $textBody, $newsletter->getSubject()])), 0, 16); return substr(md5(implode('|', [$newsletter->getId(), $textBody, $newsletter->getSubject()])), 0, 16);
} }

View File

@ -1273,6 +1273,47 @@ class SendingQueueTest extends \MailPoetTest {
} }
} }
public function testCampaignIdDoesNotChangeIfContentStaysTheSame() {
$newsletter = (new \MailPoet\Test\DataFactories\Newsletter())->withSubject('Subject')->create();
$campaignId = $this->sendingQueueWorker->calculateCampaignId($newsletter, 'text body');
expect($campaignId)->equals($this->sendingQueueWorker->calculateCampaignId($newsletter, 'text body'));
}
public function testCampaignIdChangesIfSubjectChanges() {
$newsletter = (new \MailPoet\Test\DataFactories\Newsletter())->withSubject('Subject')->create();
$originalCampaignId = $this->sendingQueueWorker->calculateCampaignId($newsletter, 'text body');
$newsletter->setSubject('Subject 2');
$this->entityManager->persist($newsletter);
$this->entityManager->flush();
expect($originalCampaignId)->notEquals($this->sendingQueueWorker->calculateCampaignId($newsletter, 'text body'));
}
public function testCampaignIdRevertsIfContentReverts() {
$newsletter = (new \MailPoet\Test\DataFactories\Newsletter())->withSubject('Subject')->create();
$originalCampaignId = $this->sendingQueueWorker->calculateCampaignId($newsletter, 'text body');
$newsletter->setSubject('Subject 2');
$this->entityManager->persist($newsletter);
$this->entityManager->flush();
expect($originalCampaignId)->notEquals($this->sendingQueueWorker->calculateCampaignId($newsletter, 'text body changed'));
$newsletter->setSubject('Subject');
$this->entityManager->persist($newsletter);
$this->entityManager->flush();
expect($originalCampaignId)->equals($this->sendingQueueWorker->calculateCampaignId($newsletter, 'text body'));
}
public function testCampaignIdDependsOnNewsletterId() {
$newsletter1 = (new \MailPoet\Test\DataFactories\Newsletter())->withSubject('Subject')->create();
$newsletter2 = (new \MailPoet\Test\DataFactories\Newsletter())->withSubject('Subject')->create();
$sameContent = 'content';
expect($this->sendingQueueWorker->calculateCampaignId($newsletter1, $sameContent))->notEquals($this->sendingQueueWorker->calculateCampaignId($newsletter2, $sameContent));
}
public function testCampaignIdChangesIfContentChanges() {
$newsletter = (new \MailPoet\Test\DataFactories\Newsletter())->withSubject('Subject')->create();
$originalCampaignId = $this->sendingQueueWorker->calculateCampaignId($newsletter, 'text body');
expect($originalCampaignId)->notEquals($this->sendingQueueWorker->calculateCampaignId($newsletter, 'different text body'));
}
public function _after() { public function _after() {
$this->truncateEntity(SubscriberEntity::class); $this->truncateEntity(SubscriberEntity::class);
$this->truncateEntity(SubscriberSegmentEntity::class); $this->truncateEntity(SubscriberSegmentEntity::class);