Skip to content

Commit

Permalink
magento#27589 Cover with Integration Tests the template changes.
Browse files Browse the repository at this point in the history
  • Loading branch information
lbajsarowicz committed Apr 5, 2020
1 parent 1ac923d commit 16cb18d
Showing 1 changed file with 199 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
<?php
declare(strict_types=1);

namespace Magento\Customer\Controller\Account;

use Magento\Customer\Model\Session;
use Magento\Framework\App\Request\Http as HttpRequest;
use Magento\Framework\Data\Form\FormKey;
use Magento\Framework\Mail\EmailMessage;
use Magento\Framework\Message\MessageInterface;
use Magento\TestFramework\Mail\Template\TransportBuilderMock;
use Magento\TestFramework\TestCase\AbstractController;

/**
* Set of tests to verify e-mail templates delivered to Customers
*
* @magentoAppArea frontend
*/
class EmailTemplateTest extends AbstractController
{
private const FIXTURE_CUSTOMER_EMAIL = 'customer@example.com';
private const FIXTURE_CUSTOMER_FIRSTNAME = 'John';
private const FIXTURE_CUSTOMER_LASTNAME = 'Smith';
private const FIXTURE_CUSTOMER_ID = 1;
private const FIXTURE_CUSTOMER_PASSWORD = 'password';
private const EXPECTED_GREETING = self::FIXTURE_CUSTOMER_FIRSTNAME . ' ' . self::FIXTURE_CUSTOMER_LASTNAME . ',';

/**
* @var TransportBuilderMock
*/
private $transportBuilderMock;

/**
* @var Session
*/
private $session;

/**
* @var FormKey
*/
private $formKey;

protected function setUp()
{
parent::setUp();
$this->transportBuilderMock = $this->_objectManager->get(TransportBuilderMock::class);
$this->session = $this->_objectManager->get(Session::class);
$this->formKey = $this->_objectManager->get(FormKey::class);
}

/**
* @magentoDataFixture Magento/Customer/_files/customer.php
* @magentoConfigFixture current_store customer/captcha/enable 0
*/
public function testForgotPasswordEmailTemplateGreeting()
{
$this->getRequest()->setMethod(HttpRequest::METHOD_POST)
->setPostValue(['email' => self::FIXTURE_CUSTOMER_EMAIL]);
$this->dispatch('customer/account/forgotPasswordPost');

$this->assertSameGreeting(self::EXPECTED_GREETING, $this->transportBuilderMock->getSentMessage());
}

/**
* @covers Magento_Customer::view/frontend/email/change_email.html
*
* @magentoDataFixture Magento/Customer/_files/customer.php
* @magentoConfigFixture current_store customer/captcha/enable 0
*/
public function testCustomerEmailChangeNotificationTemplateGreeting()
{
$this->loginByCustomerId(self::FIXTURE_CUSTOMER_ID);

$this->sendAccountEditRequest([
'email' => 'new.email@example.com',
'change_email' => 1,
]);

$this->assertRedirect($this->stringContains('customer/account/'));
$this->assertSessionMessages(
$this->equalTo(['You saved the account information.']),
MessageInterface::TYPE_SUCCESS
);

$this->assertSameGreeting(self::EXPECTED_GREETING, $this->transportBuilderMock->getSentMessage());
}

/**
* @covers Magento_Customer::view/frontend/email/change_email_and_password.html
*
* @magentoDataFixture Magento/Customer/_files/customer.php
* @magentoConfigFixture current_store customer/captcha/enable 0
*/
public function testCustomerEmailAndPasswordChangeNotificationTemplateGreeting()
{
$this->loginByCustomerId(self::FIXTURE_CUSTOMER_ID);

$this->sendAccountEditRequest([
'email' => 'new.email@example.com',
'change_email' => 1,
'change_password' => 1,
'password' => 'new-Password1',
'password_confirmation' => 'new-Password1',
]);

$this->assertRedirect($this->stringContains('customer/account/'));
$this->assertSessionMessages(
$this->equalTo(['You saved the account information.']),
MessageInterface::TYPE_SUCCESS
);

$this->assertSameGreeting(self::EXPECTED_GREETING, $this->transportBuilderMock->getSentMessage());
}

/**
* @covers Magento_Customer::view/frontend/email/change_password.html
*
* @magentoDataFixture Magento/Customer/_files/customer.php
* @magentoConfigFixture current_store customer/captcha/enable 0
*/
public function testCustomerPasswordChangeNotificationTemplateGreeting()
{
$this->loginByCustomerId(self::FIXTURE_CUSTOMER_ID);

$this->sendAccountEditRequest([
'change_password' => 1,
'password' => 'new-Password1',
'password_confirmation' => 'new-Password1',
]);

$this->assertRedirect($this->stringContains('customer/account/'));
$this->assertSessionMessages(
$this->equalTo(['You saved the account information.']),
MessageInterface::TYPE_SUCCESS
);

$this->assertSameGreeting(self::EXPECTED_GREETING, $this->transportBuilderMock->getSentMessage());
}

/**
* Wraps Customer Edit POST request
*
* @param array $customData
*/
private function sendAccountEditRequest(array $customData): void
{
$basicData = [
'form_key' => $this->formKey->getFormKey(),
'firstname' => self::FIXTURE_CUSTOMER_FIRSTNAME,
'lastname' => self::FIXTURE_CUSTOMER_LASTNAME,
'current_password' => self::FIXTURE_CUSTOMER_PASSWORD
];

$this->getRequest()->setMethod(HttpRequest::METHOD_POST)
->setPostValue(array_merge($basicData, $customData));

$this->dispatch('customer/account/editPost');
}

/**
* Verifies if `<p class="greeting"/>` text contents equals the expected one.
*
* @param string $expectedGreeting
* @param EmailMessage $message
*/
private function assertSameGreeting(string $expectedGreeting, EmailMessage $message)
{
$messageContent = $this->getMessageRawContent($message);
$emailDom = new \DOMDocument();
$emailDom->loadHTML($messageContent);

$emailXpath = new \DOMXPath($emailDom);
$greeting = $emailXpath->query('//p[@class="greeting"]')->item(0);

$this->assertSame($expectedGreeting, $greeting->textContent);
}

/**
* 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();
}

/**
* Performs Customer log in
*
* @param int $customerId
*/
private function loginByCustomerId(int $customerId): void
{
$this->session->loginById($customerId);
}
}

0 comments on commit 16cb18d

Please sign in to comment.