From 9f21ff128580d59f582910bdce14f8092aedc452 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ja=CC=81n=20Mikla=CC=81s=CC=8C?= Date: Tue, 14 May 2019 16:17:01 +0200 Subject: [PATCH] Fix checking if post notification email contains any ALC posts [MAILPOET-2029] --- lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php | 5 ++--- lib/Cron/Workers/SendingQueue/Tasks/Posts.php | 6 ++++++ .../Cron/Workers/SendingQueue/Tasks/NewsletterTest.php | 7 ++++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php b/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php index 68888d7308..ac72564b1b 100644 --- a/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php +++ b/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php @@ -97,10 +97,9 @@ class Newsletter { $newsletter ); } - // check if this is a post notification and if it contains posts - $newsletter_contains_posts = strpos($rendered_newsletter['html'], 'data-post-id'); + // check if this is a post notification and if it contains at least 1 ALC post if ($newsletter->type === NewsletterModel::TYPE_NOTIFICATION_HISTORY && - !$newsletter_contains_posts + $this->posts_task->getAlcPostsCount($rendered_newsletter, $newsletter) === 0 ) { // delete notification history record since it will never be sent $newsletter->delete(); diff --git a/lib/Cron/Workers/SendingQueue/Tasks/Posts.php b/lib/Cron/Workers/SendingQueue/Tasks/Posts.php index 1d9715df21..4204d6ea58 100644 --- a/lib/Cron/Workers/SendingQueue/Tasks/Posts.php +++ b/lib/Cron/Workers/SendingQueue/Tasks/Posts.php @@ -28,4 +28,10 @@ class Posts { } return true; } + + function getAlcPostsCount($rendered_newsletter, \MailPoet\Models\Newsletter $newsletter) { + $template_posts_count = substr_count($newsletter->body, 'data-post-id'); + $newsletter_posts_count = substr_count($rendered_newsletter['html'], 'data-post-id'); + return $newsletter_posts_count - $template_posts_count; + } } diff --git a/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php b/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php index 85b2e0b82d..8da5c6c3e6 100644 --- a/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php +++ b/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php @@ -6,6 +6,7 @@ use AspectMock\Test as Mock; use Codeception\Util\Fixtures; use Helper\WordPressHooks as WPHooksHelper; use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterTask; +use MailPoet\Cron\Workers\SendingQueue\Tasks\Posts as PostsTask; use MailPoet\Mailer\MailerLog; use MailPoet\Models\Newsletter; use MailPoet\Models\NewsletterLink; @@ -192,7 +193,11 @@ class NewsletterTest extends \MailPoetTest { function testItSavesNewsletterPosts() { $this->newsletter->type = Newsletter::TYPE_NOTIFICATION_HISTORY; $this->newsletter->parent_id = $this->newsletter->id; - $result = $this->newsletter_task->preProcessNewsletter($this->newsletter, $this->queue); + $posts_task = $this->make(PostsTask::class, [ + 'getAlcPostsCount' => 1 + ]); + $newsletter_task = new NewsletterTask(new WPFunctions, $posts_task); + $result = $newsletter_task->preProcessNewsletter($this->newsletter, $this->queue); $newsletter_post = NewsletterPost::where('newsletter_id', $this->newsletter->id) ->findOne(); expect($result)->notEquals(false);