diff --git a/tests/integration/API/JSON/v1/NewslettersTest.php b/tests/integration/API/JSON/v1/NewslettersTest.php index 08f4efca17..17841c39c5 100644 --- a/tests/integration/API/JSON/v1/NewslettersTest.php +++ b/tests/integration/API/JSON/v1/NewslettersTest.php @@ -32,6 +32,7 @@ use MailPoet\Settings\SettingsController; use MailPoet\Subscription\SubscriptionUrlFactory; use MailPoet\Tasks\Sending as SendingTask; use MailPoet\WooCommerce\Helper as WCHelper; +use MailPoet\WP\Emoji; use MailPoet\WP\Functions as WPFunctions; class NewslettersTest extends \MailPoetTest { @@ -138,7 +139,8 @@ class NewslettersTest extends \MailPoetTest { ContainerWrapper::getInstance()->get(NewslettersRepository::class), ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class), ContainerWrapper::getInstance()->get(PostNotificationScheduler::class), - ContainerWrapper::getInstance()->get(MetaInfo::class) + ContainerWrapper::getInstance()->get(MetaInfo::class), + ContainerWrapper::getInstance()->get(Emoji::class) ); $response = $this->endpoint->get(['id' => $this->newsletter->id]); expect($response->status)->equals(APIResponse::STATUS_OK); @@ -166,8 +168,17 @@ class NewslettersTest extends \MailPoetTest { 'options' => [ $newsletter_option_field->name => 'some_option_value', ], + 'body' => 'some text', ]; + $emoji = $this->make( + Emoji::class, + ['encodeForUTF8Column' => Expected::once(function ($params) { + return $params; + })], + $this + ); + $wp = Stub::make(new WPFunctions, [ 'applyFilters' => asCallable([WPHooksHelper::class, 'applyFilters']), 'doAction' => asCallable([WPHooksHelper::class, 'doAction']), @@ -182,7 +193,8 @@ class NewslettersTest extends \MailPoetTest { ContainerWrapper::getInstance()->get(NewslettersRepository::class), ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class), ContainerWrapper::getInstance()->get(PostNotificationScheduler::class), - ContainerWrapper::getInstance()->get(MetaInfo::class) + ContainerWrapper::getInstance()->get(MetaInfo::class), + $emoji ); $response = $this->endpoint->save($valid_data); @@ -554,7 +566,8 @@ class NewslettersTest extends \MailPoetTest { ContainerWrapper::getInstance()->get(NewslettersRepository::class), ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class), ContainerWrapper::getInstance()->get(PostNotificationScheduler::class), - ContainerWrapper::getInstance()->get(MetaInfo::class) + ContainerWrapper::getInstance()->get(MetaInfo::class), + ContainerWrapper::getInstance()->get(Emoji::class) ); $response = $this->endpoint->duplicate(['id' => $this->newsletter->id]); @@ -870,6 +883,33 @@ class NewslettersTest extends \MailPoetTest { 'id' => $this->newsletter->id, 'body' => 'fake body', ]; + + $emoji = $this->make( + Emoji::class, + ['encodeForUTF8Column' => Expected::once(function ($params) { + return $params; + })], + $this + ); + + $wp = Stub::make(new WPFunctions, [ + 'applyFilters' => asCallable([WPHooksHelper::class, 'applyFilters']), + 'doAction' => asCallable([WPHooksHelper::class, 'doAction']), + ]); + $this->endpoint = new Newsletters( + ContainerWrapper::getInstance()->get(BulkActionController::class), + ContainerWrapper::getInstance()->get(Handler::class), + $wp, + $this->makeEmpty(WCHelper::class), + new SettingsController(), + ContainerWrapper::getInstance()->get(AuthorizedEmailsController::class), + ContainerWrapper::getInstance()->get(NewslettersRepository::class), + ContainerWrapper::getInstance()->get(NewslettersResponseBuilder::class), + ContainerWrapper::getInstance()->get(PostNotificationScheduler::class), + ContainerWrapper::getInstance()->get(MetaInfo::class), + $emoji + ); + $response = $this->endpoint->showPreview($data); expect($response->meta['preview_url'])->notContains('http'); expect($response->meta['preview_url'])->regExp('!^\/\/!'); diff --git a/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php b/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php index f13fea3609..1ba1d2b1bd 100644 --- a/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php +++ b/tests/integration/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php @@ -3,6 +3,7 @@ namespace MailPoet\Test\Cron\Workers\SendingQueue\Tasks; use Codeception\Stub; +use Codeception\Stub\Expected; use Codeception\Util\Fixtures; use Helper\WordPressHooks as WPHooksHelper; use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterTask; @@ -19,6 +20,7 @@ use MailPoet\Models\Setting; use MailPoet\Models\Subscriber; use MailPoet\Router\Router; use MailPoet\Tasks\Sending as SendingTask; +use MailPoet\WP\Emoji; use MailPoet\WP\Functions as WPFunctions; class NewsletterTest extends \MailPoetTest { @@ -283,7 +285,15 @@ class NewsletterTest extends \MailPoetTest { 'text' => 'queue TEXT body', ]; $queue->newsletter_rendered_subject = 'queue subject'; - $result = $this->newsletter_task->prepareNewsletterForSending( + $emoji = $this->make( + Emoji::class, + ['decodeEmojisInBody' => Expected::once(function ($params) { + return $params; + })], + $this + ); + $newsletter_task = new NewsletterTask(null, null, null, $emoji); + $result = $newsletter_task->prepareNewsletterForSending( $this->newsletter, $this->subscriber, $queue @@ -421,7 +431,16 @@ class NewsletterTest extends \MailPoetTest { $sending_queue = \ORM::forTable(SendingQueue::$_table)->findOne($queue->id); $sending_queue->set('newsletter_rendered_body', 'a:2:{s:4:"html";s:4:"test";s:4:"text";s:4:"test";}'); $sending_queue->save(); - expect($this->newsletter_task->preProcessNewsletter($this->newsletter, $queue_mock))->equals($this->newsletter); + + $emoji = $this->make( + Emoji::class, + ['encodeEmojisInBody' => Expected::once(function ($params) { + return $params; + })], + $this + ); + $newsletter_task = new NewsletterTask(null, null, null, $emoji); + expect($newsletter_task->preProcessNewsletter($this->newsletter, $queue_mock))->equals($this->newsletter); } function _after() { diff --git a/tests/integration/Models/SendingQueueTest.php b/tests/integration/Models/SendingQueueTest.php index 2d5f4203dd..7ede174047 100644 --- a/tests/integration/Models/SendingQueueTest.php +++ b/tests/integration/Models/SendingQueueTest.php @@ -2,7 +2,6 @@ namespace MailPoet\Test\Models; -use AspectMock\Test as Mock; use MailPoet\Models\ScheduledTask; use MailPoet\Models\ScheduledTaskSubscriber; use MailPoet\Models\SendingQueue; @@ -23,26 +22,6 @@ class SendingQueueTest extends \MailPoetTest { ]; } - function testItCanEncodeEmojisInBody() { - $mock = Mock::double('MailPoet\WP\Emoji', [ - 'encodeForUTF8Column' => function($params) { - return $params; - }, - ]); - $this->queue->encodeEmojisInBody($this->rendered_body); - $mock->verifyInvokedMultipleTimes('encodeForUTF8Column', 2); - } - - function testItCanDecodeEmojisInBody() { - $mock = Mock::double('MailPoet\WP\Emoji', [ - 'decodeEntities' => function($params) { - return $params; - }, - ]); - $this->queue->decodeEmojisInBody($this->rendered_body); - $mock->verifyInvokedMultipleTimes('decodeEntities', 2); - } - function testItChecksProcessedSubscribersForOldQueues() { $subscriber_id = 123; expect($this->queue->isSubscriberProcessed($subscriber_id))->false(); @@ -149,7 +128,6 @@ class SendingQueueTest extends \MailPoetTest { } function _after() { - Mock::clean(); \ORM::raw_execute('TRUNCATE ' . ScheduledTask::$_table); \ORM::raw_execute('TRUNCATE ' . ScheduledTaskSubscriber::$_table); \ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table); diff --git a/tests/integration/Newsletter/ViewInBrowserTest.php b/tests/integration/Newsletter/ViewInBrowserTest.php index 5beb82d929..8a479bf97b 100644 --- a/tests/integration/Newsletter/ViewInBrowserTest.php +++ b/tests/integration/Newsletter/ViewInBrowserTest.php @@ -2,6 +2,7 @@ namespace MailPoet\Test\Newsletter; +use Codeception\Stub\Expected; use MailPoet\Models\Newsletter; use MailPoet\Models\NewsletterLink; use MailPoet\Models\ScheduledTask; @@ -12,6 +13,7 @@ use MailPoet\Newsletter\ViewInBrowser; use MailPoet\Router\Router; use MailPoet\Settings\SettingsController; use MailPoet\Tasks\Sending as SendingTask; +use MailPoet\WP\Emoji; class ViewInBrowserTest extends \MailPoetTest { function _before() { @@ -72,7 +74,8 @@ class ViewInBrowserTest extends \MailPoetTest { 'html' => '

Newsletter from queue. Hello, [subscriber:firstname | default:reader]. Unsubscribe or visit Google

', 'text' => 'test', ]; - $this->view_in_browser = new ViewInBrowser(false); + $this->emoji = new Emoji(); + $this->view_in_browser = new ViewInBrowser($this->emoji, false); // create newsletter $newsletter = Newsletter::create(); $newsletter->hydrate($this->newsletter); @@ -115,7 +118,15 @@ class ViewInBrowserTest extends \MailPoetTest { } function testItReusesRenderedNewsletterBodyWhenQueueExists() { - $rendered_body = $this->view_in_browser->renderNewsletter( + $emoji = $this->make( + Emoji::class, + ['decodeEmojisInBody' => Expected::once(function ($params) { + return $params; + })], + $this + ); + $view_in_browser = new ViewInBrowser($emoji, false); + $rendered_body = $view_in_browser->renderNewsletter( $this->newsletter, $this->subscriber, $this->queue, @@ -140,7 +151,7 @@ class ViewInBrowserTest extends \MailPoetTest { function testItRewritesLinksToRouterEndpointWhenTrackingIsEnabled() { $settings = new SettingsController(); $settings->set('tracking.enabled', true); - $view_in_browser = new ViewInBrowser(true); + $view_in_browser = new ViewInBrowser($this->emoji, true); $queue = $this->queue; $queue->newsletter_rendered_body = $this->queue_rendered_newsletter_with_tracking; $rendered_body = $view_in_browser->renderNewsletter( diff --git a/tests/integration/Router/Endpoints/ViewInBrowserTest.php b/tests/integration/Router/Endpoints/ViewInBrowserTest.php index 43353fdc77..080a1222d1 100644 --- a/tests/integration/Router/Endpoints/ViewInBrowserTest.php +++ b/tests/integration/Router/Endpoints/ViewInBrowserTest.php @@ -13,6 +13,7 @@ use MailPoet\Router\Endpoints\ViewInBrowser; use MailPoet\Settings\SettingsController; use MailPoet\Subscribers\LinkTokens; use MailPoet\Tasks\Sending as SendingTask; +use MailPoet\WP\Emoji; use MailPoet\WP\Functions; class ViewInBrowserTest extends \MailPoetTest { @@ -44,7 +45,7 @@ class ViewInBrowserTest extends \MailPoetTest { 'preview' => false, ]; // instantiate class - $this->view_in_browser = new ViewInBrowser(new AccessControl(new Functions()), new SettingsController(), new LinkTokens()); + $this->view_in_browser = new ViewInBrowser(new AccessControl(new Functions()), new SettingsController(), new LinkTokens(), new Emoji()); } function testItAbortsWhenBrowserPreviewDataIsMissing() { @@ -154,12 +155,12 @@ class ViewInBrowserTest extends \MailPoetTest { $wp_user = wp_set_current_user(0); // when WP user does not have 'manage options' permission, false should be returned $wp_user->remove_role('administrator'); - $view_in_browser = new ViewInBrowser(new AccessControl(new Functions()), new SettingsController(), new LinkTokens()); + $view_in_browser = new ViewInBrowser(new AccessControl(new Functions()), new SettingsController(), new LinkTokens(), new Emoji()); expect($view_in_browser->_validateBrowserPreviewData($data))->false(); // when WP has 'manage options' permission, data should be returned $wp_user->add_role('administrator'); - $view_in_browser = new ViewInBrowser(new AccessControl(new Functions()), new SettingsController(), new LinkTokens()); + $view_in_browser = new ViewInBrowser(new AccessControl(new Functions()), new SettingsController(), new LinkTokens(), new Emoji()); expect($view_in_browser->_validateBrowserPreviewData($data))->equals($data); } @@ -175,7 +176,7 @@ class ViewInBrowserTest extends \MailPoetTest { ); $data->preview = true; wp_set_current_user(1); - $view_in_browser = new ViewInBrowser(new AccessControl(new Functions()), new SettingsController(), new LinkTokens(), new LinkTokens()); + $view_in_browser = new ViewInBrowser(new AccessControl(new Functions()), new SettingsController(), new LinkTokens(), new Emoji()); $result = $view_in_browser->_validateBrowserPreviewData($data); expect($result->subscriber->id)->equals(1); } @@ -211,6 +212,7 @@ class ViewInBrowserTest extends \MailPoetTest { 'link_tokens' => new LinkTokens, '_displayNewsletter' => Expected::exactly(1), 'settings' => new SettingsController(), + 'emoji' => new Emoji(), ], $this); $view_in_browser->view($this->browser_preview_data); } diff --git a/tests/integration/WP/EmojiTest.php b/tests/integration/WP/EmojiTest.php index ba2df89869..a358a648b0 100644 --- a/tests/integration/WP/EmojiTest.php +++ b/tests/integration/WP/EmojiTest.php @@ -2,6 +2,7 @@ namespace MailPoet\Test\WP; +use Codeception\Stub\Expected; use MailPoet\Config\Env; use MailPoet\WP\Emoji; @@ -15,6 +16,30 @@ class EmojiTest extends \MailPoetTest { $this->emoji = new Emoji(); } + function testItCanEncodeNewsletterRenderedBody() { + $emoji = $this->make( + Emoji::class, + ['encodeForUTF8Column' => Expected::exactly(3, function ($params) { + return $params; + })], + $this + ); + $emoji->encodeEmojisInBody(['text' => 'call 1', 'html' => 'call 2']); + $emoji->encodeEmojisInBody('string, call 3'); + } + + function testItCanDecodeNewsletterBody() { + $emoji = $this->make( + Emoji::class, + ['decodeEntities' => Expected::exactly(3, function ($params) { + return $params; + })], + $this + ); + $emoji->decodeEmojisInBody(['text' => 'call 1', 'html' => 'call 2']); + $emoji->decodeEmojisInBody('string, call 3'); + } + function testItCanEncodeForUTF8Column() { $table = Env::$db_prefix . 'dummytable_utf8'; $this->createTable($table, 'utf8');