Files
2026-09-15 10:26:34 +08:00

155 lines
5.1 KiB
PHP

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\Email\Model\Template;
use Magento\Email\Model\ResourceModel\Template\Collection as TemplateCollection;
use Magento\Framework\App\Config\MutableScopeConfigInterface;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Framework\Exception\NotFoundException;
use Magento\Framework\ObjectManagerInterface;
use Magento\Store\Model\ScopeInterface;
use Magento\Framework\Phrase;
use Magento\TestFramework\Helper\Bootstrap;
use Magento\TestFramework\Mail\Template\TransportBuilderMock;
use Magento\TestFramework\Bootstrap as TestFrameworkBootstrap;
/**
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class NewAccountEmailTemplateTest extends \PHPUnit\Framework\TestCase
{
/**
* @var ObjectManagerInterface
*/
private $objectManager;
/**
* @var ScopeConfigInterface
*/
private $config;
/**
* @var array
*/
protected $storeData = [];
/**
* Set up
*/
protected function setUp(): void
{
parent::setUp();
$this->objectManager = Bootstrap::getObjectManager();
$this->config = $this->objectManager->get(ScopeConfigInterface::class);
$this->storeData['name'] = $this->config->getValue(
'general/store_information/name',
ScopeInterface::SCOPE_STORES
);
$this->storeData['phone'] = $this->config->getValue(
'general/store_information/phone',
ScopeInterface::SCOPE_STORES
);
$this->storeData['city'] = $this->config->getValue(
'general/store_information/city',
ScopeInterface::SCOPE_STORES
);
$this->storeData['country'] = $this->config->getValue(
'general/store_information/country_id',
ScopeInterface::SCOPE_STORES
);
}
/**
* @magentoConfigFixture current_store general/store_information/name TestStore
* @magentoConfigFixture default_store general/store_information/phone 5124666492
* @magentoConfigFixture default_store general/store_information/hours 10 to 2
* @magentoConfigFixture default_store general/store_information/street_line1 1 Test Dr
* @magentoConfigFixture default_store general/store_information/street_line2 2nd Addr Line
* @magentoConfigFixture default_store general/store_information/city Austin
* @magentoConfigFixture default_store general/store_information/zip 78739
* @magentoConfigFixture default_store general/store_information/country_id US
* @magentoConfigFixture default_store general/store_information/region_id 57
* @magentoDataFixture Magento/Email/Model/_files/email_template.php
*/
public function testNewAccountEmailTemplate(): void
{
/** @var MutableScopeConfigInterface $config */
$config = Bootstrap::getObjectManager()
->get(MutableScopeConfigInterface::class);
$config->setValue(
'admin/emails/email_template',
$this->getCustomEmailTemplateId(
'template_fixture'
)
);
/** @var \Magento\User\Model\User $userModel */
$userModel = Bootstrap::getObjectManager()->get(\Magento\User\Model\User::class);
$userModel->setFirstname(
'John'
)->setLastname(
'Doe'
)->setUsername(
'user1'
)->setPassword(
TestFrameworkBootstrap::ADMIN_PASSWORD
)->setEmail(
'user1@magento.com'
);
$userModel->save();
$userModel->sendNotificationEmailsIfRequired();
/** @var TransportBuilderMock $transportBuilderMock */
$transportBuilderMock = Bootstrap::getObjectManager()
->get(TransportBuilderMock::class);
$sentMessage = $transportBuilderMock->getSentMessage();
$sentMessage->getBodyText();
$storeText = implode(',', $this->storeData);
$this->assertStringContainsString("John,", $sentMessage->getBodyText());
$this->assertStringContainsString("TestStore", $storeText);
$this->assertStringContainsString("5124666492", $storeText);
$this->assertStringContainsString("Austin", $storeText);
$this->assertStringContainsString("US", $storeText);
}
/**
* Return email template id by origin template code
*
* @param string $origTemplateCode
* @return int|null
* @throws NotFoundException
*/
private function getCustomEmailTemplateId(string $origTemplateCode): ?int
{
$templateId = null;
$templateCollection = Bootstrap::getObjectManager()
->create(TemplateCollection::class);
foreach ($templateCollection as $template) {
if ($template->getOrigTemplateCode() == $origTemplateCode) {
$templateId = (int) $template->getId();
}
}
if ($templateId === null) {
throw new NotFoundException(new Phrase(
'Customized %templateCode% email template not found',
['templateCode' => $origTemplateCode]
));
}
return $templateId;
}
}