diff --git a/lib/Cron/Workers/SendingQueue/Tasks/Links.php b/lib/Cron/Workers/SendingQueue/Tasks/Links.php index 530052f197..fa208e8196 100644 --- a/lib/Cron/Workers/SendingQueue/Tasks/Links.php +++ b/lib/Cron/Workers/SendingQueue/Tasks/Links.php @@ -23,6 +23,7 @@ class Links { // join HTML and TEXT rendered body into a text string $content = Helpers::joinObject($rendered_newsletter); list($content, $links) = NewsletterLinks::process($content, $newsletter_id, $queue_id); + $links = NewsletterLinks::ensureUnsubscribeLink($links); // split the processed body with hashed links back to HTML and TEXT list($rendered_newsletter['html'], $rendered_newsletter['text']) = Helpers::splitObject($content); diff --git a/tests/integration/Cron/Workers/SendingQueue/Tasks/LinksTest.php b/tests/integration/Cron/Workers/SendingQueue/Tasks/LinksTest.php index a02ac2a77d..30c043d86b 100644 --- a/tests/integration/Cron/Workers/SendingQueue/Tasks/LinksTest.php +++ b/tests/integration/Cron/Workers/SendingQueue/Tasks/LinksTest.php @@ -53,6 +53,21 @@ class LinksTest extends \MailPoetTest { expect($result['html'])->contains($newsletter_link->hash); } + function testItCanEnsureThatUnsubscribeLinkIsAlwaysPresent() { + $newsletter = Newsletter::create(); + $newsletter->type = Newsletter::TYPE_STANDARD; + $newsletter->save(); + $rendered_newsletter = [ + 'html' => 'Example Link', + 'text' => 'Example Link', + ]; + $queue = (object)['id' => 2]; + Links::process($rendered_newsletter, $newsletter, $queue); + $unsubscribe_count = NewsletterLink::where('newsletter_id', $newsletter->id) + ->where('url', NewsletterLink::UNSUBSCRIBE_LINK_SHORT_CODE)->count(); + expect($unsubscribe_count)->equals(1); + } + function _after() { \ORM::raw_execute('TRUNCATE ' . Newsletter::$_table); \ORM::raw_execute('TRUNCATE ' . NewsletterLink::$_table);