From 766a6ab88961289c46e7441be0d26b66f2f0ef75 Mon Sep 17 00:00:00 2001 From: Lukasz Bajsarowicz Date: Sun, 5 Apr 2020 04:26:09 +0200 Subject: [PATCH 1/2] magento/magento2#27357 Fix the test coverage for e-mail contents --- .../Newsletter/Model/SubscriberTest.php | 73 ++++++++++++++----- 1 file changed, 56 insertions(+), 17 deletions(-) diff --git a/dev/tests/integration/testsuite/Magento/Newsletter/Model/SubscriberTest.php b/dev/tests/integration/testsuite/Magento/Newsletter/Model/SubscriberTest.php index 06c8902f45897..0fdcfdb659b5d 100644 --- a/dev/tests/integration/testsuite/Magento/Newsletter/Model/SubscriberTest.php +++ b/dev/tests/integration/testsuite/Magento/Newsletter/Model/SubscriberTest.php @@ -8,6 +8,7 @@ namespace Magento\Newsletter\Model; use Magento\Customer\Api\CustomerRepositoryInterface; +use Magento\Framework\Mail\EmailMessage; use Magento\Framework\ObjectManagerInterface; use Magento\TestFramework\Helper\Bootstrap; use Magento\TestFramework\Mail\Template\TransportBuilderMock; @@ -20,13 +21,16 @@ */ class SubscriberTest extends TestCase { - /** @var ObjectManagerInterface */ + private const CONFIRMATION_SUBSCRIBE = 'You have been successfully subscribed to our newsletter.'; + const CONFIRMATION_UNSUBSCRIBE = 'You have been unsubscribed from the newsletter.'; + + /** @var ObjectManagerInterface */ private $objectManager; /** @var SubscriberFactory */ private $subscriberFactory; - /** @var TransportBuilderMock */ + /** @var TransportBuilderMock */ private $transportBuilder; /** @var CustomerRepositoryInterface */ @@ -87,17 +91,19 @@ public function testUnsubscribeSubscribe(): void $subscriber = $this->subscriberFactory->create(); $this->assertSame($subscriber, $subscriber->loadByCustomerId(1)); $this->assertEquals($subscriber, $subscriber->unsubscribe()); - $this->assertContains( - 'You have been unsubscribed from the newsletter.', - $this->transportBuilder->getSentMessage()->getRawMessage() + $this->assertConfirmationParagraphExists( + self::CONFIRMATION_UNSUBSCRIBE, + $this->transportBuilder->getSentMessage() ); + $this->assertEquals(Subscriber::STATUS_UNSUBSCRIBED, $subscriber->getSubscriberStatus()); // Subscribe and verify $this->assertEquals(Subscriber::STATUS_SUBSCRIBED, $subscriber->subscribe('customer@example.com')); $this->assertEquals(Subscriber::STATUS_SUBSCRIBED, $subscriber->getSubscriberStatus()); - $this->assertContains( - 'You have been successfully subscribed to our newsletter.', - $this->transportBuilder->getSentMessage()->getRawMessage() + + $this->assertConfirmationParagraphExists( + self::CONFIRMATION_SUBSCRIBE, + $this->transportBuilder->getSentMessage() ); } @@ -114,16 +120,17 @@ public function testUnsubscribeSubscribeByCustomerId(): void // Unsubscribe and verify $this->assertSame($subscriber, $subscriber->unsubscribeCustomerById(1)); $this->assertEquals(Subscriber::STATUS_UNSUBSCRIBED, $subscriber->getSubscriberStatus()); - $this->assertContains( - 'You have been unsubscribed from the newsletter.', - $this->transportBuilder->getSentMessage()->getRawMessage() + $this->assertConfirmationParagraphExists( + self::CONFIRMATION_UNSUBSCRIBE, + $this->transportBuilder->getSentMessage() ); + // Subscribe and verify $this->assertSame($subscriber, $subscriber->subscribeCustomerById(1)); $this->assertEquals(Subscriber::STATUS_SUBSCRIBED, $subscriber->getSubscriberStatus()); - $this->assertContains( - 'You have been successfully subscribed to our newsletter.', - $this->transportBuilder->getSentMessage()->getRawMessage() + $this->assertConfirmationParagraphExists( + self::CONFIRMATION_SUBSCRIBE, + $this->transportBuilder->getSentMessage() ); } @@ -141,9 +148,10 @@ public function testConfirm(): void $subscriber->subscribe($customerEmail); $subscriber->loadByEmail($customerEmail); $subscriber->confirm($subscriber->getSubscriberConfirmCode()); - $this->assertContains( - 'You have been successfully subscribed to our newsletter.', - $this->transportBuilder->getSentMessage()->getRawMessage() + + $this->assertConfirmationParagraphExists( + self::CONFIRMATION_SUBSCRIBE, + $this->transportBuilder->getSentMessage() ); } @@ -174,4 +182,35 @@ public function testSubscribeUnconfirmedCustomerWithoutSubscription(): void $subscriber->subscribeCustomerById($customer->getId()); $this->assertEquals(Subscriber::STATUS_UNCONFIRMED, $subscriber->getStatus()); } + + /** + * Verifies if Paragraph with specified message is in e-mail + * + * @param string $expectedMessage + * @param EmailMessage $message + */ + private function assertConfirmationParagraphExists(string $expectedMessage, EmailMessage $message): void + { + $messageContent = $this->getMessageRawContent($message); + + $emailDom = new \DOMDocument(); + $emailDom->loadHTML($messageContent); + + $emailXpath = new \DOMXPath($emailDom); + $greeting = $emailXpath->query("//p[contains(text(), '$expectedMessage')]"); + + $this->assertSame(1, $greeting->length, "Cannot find the confirmation paragraph in e-mail contents"); + } + + /** + * Returns raw content of provided message + * + * @param EmailMessage $message + * @return string + */ + private function getMessageRawContent(EmailMessage $message): string + { + $emailParts = $message->getBody()->getParts(); + return current($emailParts)->getRawContent(); + } } From dcd807bd2e8500bd4a53916a5307fa9e26eb4035 Mon Sep 17 00:00:00 2001 From: Lukasz Bajsarowicz Date: Sun, 5 Apr 2020 04:28:13 +0200 Subject: [PATCH 2/2] magento/magento2#27357 Add missing visibility --- .../testsuite/Magento/Newsletter/Model/SubscriberTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/tests/integration/testsuite/Magento/Newsletter/Model/SubscriberTest.php b/dev/tests/integration/testsuite/Magento/Newsletter/Model/SubscriberTest.php index 0fdcfdb659b5d..6715304239eb6 100644 --- a/dev/tests/integration/testsuite/Magento/Newsletter/Model/SubscriberTest.php +++ b/dev/tests/integration/testsuite/Magento/Newsletter/Model/SubscriberTest.php @@ -22,7 +22,7 @@ class SubscriberTest extends TestCase { private const CONFIRMATION_SUBSCRIBE = 'You have been successfully subscribed to our newsletter.'; - const CONFIRMATION_UNSUBSCRIBE = 'You have been unsubscribed from the newsletter.'; + private const CONFIRMATION_UNSUBSCRIBE = 'You have been unsubscribed from the newsletter.'; /** @var ObjectManagerInterface */ private $objectManager;