217 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			217 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
namespace Magento\Newsletter\Model;
 | 
						|
 | 
						|
use Magento\Framework\App\TemplateTypesInterface;
 | 
						|
use Magento\Framework\View\DesignInterface;
 | 
						|
use Magento\Store\Model\ScopeInterface;
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
 | 
						|
/**
 | 
						|
 * @magentoDataFixture Magento/Store/_files/core_fixturestore.php
 | 
						|
 */
 | 
						|
class TemplateTest extends \PHPUnit\Framework\TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var \Magento\Newsletter\Model\Template
 | 
						|
     */
 | 
						|
    protected $_model = null;
 | 
						|
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->_model = Bootstrap::getObjectManager()->create(
 | 
						|
            \Magento\Newsletter\Model\Template::class
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * This test expects next themes for areas:
 | 
						|
     * current_store design/theme/full_name Magento/luma
 | 
						|
     * fixturestore_store design/theme/full_name Magento/blank
 | 
						|
     *
 | 
						|
     * @magentoAppIsolation  enabled
 | 
						|
     * @magentoAppArea adminhtml
 | 
						|
     * @dataProvider getProcessedTemplateFrontendDataProvider
 | 
						|
     */
 | 
						|
    public function testGetProcessedTemplateFrontend($store, $design)
 | 
						|
    {
 | 
						|
        $this->_model->setTemplateText('{{view url="Magento_Theme::favicon.ico"}}');
 | 
						|
        if ($store != 'default') {
 | 
						|
            Bootstrap::getObjectManager()->get(
 | 
						|
                \Magento\Framework\App\Config\MutableScopeConfigInterface::class
 | 
						|
            )->setValue(
 | 
						|
                \Magento\Theme\Model\View\Design::XML_PATH_THEME_ID,
 | 
						|
                $design,
 | 
						|
                'store',
 | 
						|
                $store
 | 
						|
            );
 | 
						|
        }
 | 
						|
        $this->_model->emulateDesign($store, 'frontend');
 | 
						|
        $processedTemplate = Bootstrap::getObjectManager()->get(
 | 
						|
            \Magento\Framework\App\State::class
 | 
						|
        )->emulateAreaCode(
 | 
						|
            'frontend',
 | 
						|
            [$this->_model, 'getProcessedTemplate']
 | 
						|
        );
 | 
						|
        $expectedTemplateText = "frontend/{$design}/en_US/Magento_Theme/favicon.ico";
 | 
						|
        $this->assertStringEndsWith($expectedTemplateText, $processedTemplate);
 | 
						|
        $this->_model->revertDesign();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    public function getProcessedTemplateFrontendDataProvider()
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            'frontend' => ['default', 'Magento/luma'],
 | 
						|
            'frontend store' => ['fixturestore', 'Magento/blank']
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * This test expects next themes for areas:
 | 
						|
     * adminhtml/design/theme/full_name Magento/backend
 | 
						|
     *
 | 
						|
     * @magentoAppIsolation  enabled
 | 
						|
     * @dataProvider getProcessedTemplateAreaDataProvider
 | 
						|
     */
 | 
						|
    public function testGetProcessedTemplateArea($area, $design)
 | 
						|
    {
 | 
						|
        $this->_model->setTemplateText('{{view url="Magento_Theme::favicon.ico"}}');
 | 
						|
        $this->_model->emulateDesign('default', $area);
 | 
						|
        $processedTemplate = Bootstrap::getObjectManager()->get(
 | 
						|
            \Magento\Framework\App\State::class
 | 
						|
        )->emulateAreaCode(
 | 
						|
            $area,
 | 
						|
            [$this->_model, 'getProcessedTemplate']
 | 
						|
        );
 | 
						|
        $expectedTemplateText = "{$area}/{$design}/en_US/Magento_Theme/favicon.ico";
 | 
						|
        $this->assertStringEndsWith($expectedTemplateText, $processedTemplate);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    public function getProcessedTemplateAreaDataProvider()
 | 
						|
    {
 | 
						|
        $designTheme = Bootstrap::getObjectManager()
 | 
						|
            ->get(DesignInterface::class)
 | 
						|
            ->getConfigurationDesignTheme('adminhtml');
 | 
						|
        return [
 | 
						|
            'backend' => ['adminhtml', $designTheme]
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoConfigFixture current_store system/smtp/disable 0
 | 
						|
     * @magentoAppIsolation enabled
 | 
						|
     * @dataProvider isValidToSendDataProvider
 | 
						|
     */
 | 
						|
    public function testIsValidToSend($senderEmail, $senderName, $subject, $isValid)
 | 
						|
    {
 | 
						|
        $this->_model->setTemplateSenderEmail(
 | 
						|
            $senderEmail
 | 
						|
        )->setTemplateSenderName(
 | 
						|
            $senderName
 | 
						|
        )->setTemplateSubject(
 | 
						|
            $subject
 | 
						|
        );
 | 
						|
        $this->assertSame($isValid, $this->_model->isValidForSend());
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    public function isValidToSendDataProvider()
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            ['john.doe@example.com', 'john.doe', 'Test Subject', true],
 | 
						|
            ['john.doe@example.com', 'john.doe', '', false],
 | 
						|
            ['john.doe@example.com', '', 'Test Subject', false],
 | 
						|
            ['john.doe@example.com', '', '', false],
 | 
						|
            ['', 'john.doe', 'Test Subject', false],
 | 
						|
            ['', '', 'Test Subject', false],
 | 
						|
            ['', 'john.doe', '', false],
 | 
						|
            ['', '', '', false]
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoAppIsolation enabled
 | 
						|
     * @magentoDbIsolation enabled
 | 
						|
     */
 | 
						|
    public function testLegacyTemplateFromDbLoadsInStrictMode()
 | 
						|
    {
 | 
						|
        $objectManager = Bootstrap::getObjectManager();
 | 
						|
 | 
						|
        $this->_model->setTemplateType(TemplateTypesInterface::TYPE_HTML);
 | 
						|
        $templateText = '{{var store.isSaveAllowed()}} - {{template config_path="foobar"}}';
 | 
						|
        $this->_model->setTemplateText($templateText);
 | 
						|
        $this->_model->setTemplateId('abc');
 | 
						|
 | 
						|
        $template = $objectManager->create(\Magento\Email\Model\Template::class);
 | 
						|
        $templateData = [
 | 
						|
            'template_code' => 'some_unique_code',
 | 
						|
            'template_type' => TemplateTypesInterface::TYPE_HTML,
 | 
						|
            'template_text' => '{{var this.template_code}}'
 | 
						|
                . ' - {{var store.isSaveAllowed()}} - {{var this.getTemplateCode()}}',
 | 
						|
        ];
 | 
						|
        $template->setData($templateData);
 | 
						|
        $template->save();
 | 
						|
 | 
						|
        // Store the ID of the newly created template in the system config so that this template will be loaded
 | 
						|
        $objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class)
 | 
						|
            ->setValue('foobar', $template->getId(), ScopeInterface::SCOPE_STORE, 'default');
 | 
						|
 | 
						|
        $this->_model->emulateDesign('default', 'frontend');
 | 
						|
        $processedTemplate = Bootstrap::getObjectManager()->get(
 | 
						|
            \Magento\Framework\App\State::class
 | 
						|
        )->emulateAreaCode(
 | 
						|
            'frontend',
 | 
						|
            [$this->_model, 'getProcessedTemplate']
 | 
						|
        );
 | 
						|
        self::assertEquals(' - some_unique_code -  - some_unique_code', $processedTemplate);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoAppIsolation enabled
 | 
						|
     * @magentoDbIsolation enabled
 | 
						|
     */
 | 
						|
    public function testTemplateFromDbLoadsInStrictMode()
 | 
						|
    {
 | 
						|
        $objectManager = Bootstrap::getObjectManager();
 | 
						|
 | 
						|
        $this->_model->setTemplateType(TemplateTypesInterface::TYPE_HTML);
 | 
						|
        $templateText = '{{var store.isSaveAllowed()}} - {{template config_path="foobar"}}';
 | 
						|
        $this->_model->setTemplateText($templateText);
 | 
						|
        $this->_model->setTemplateId('abc');
 | 
						|
 | 
						|
        $template = $objectManager->create(\Magento\Email\Model\Template::class);
 | 
						|
        $templateData = [
 | 
						|
            'template_code' => 'some_unique_code',
 | 
						|
            'template_type' => TemplateTypesInterface::TYPE_HTML,
 | 
						|
            'template_text' => '{{var this.template_code}}'
 | 
						|
                . ' - {{var store.isSaveAllowed()}} - {{var this.getTemplateCode()}}',
 | 
						|
        ];
 | 
						|
        $template->setData($templateData);
 | 
						|
        $template->save();
 | 
						|
 | 
						|
        // Store the ID of the newly created template in the system config so that this template will be loaded
 | 
						|
        $objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class)
 | 
						|
            ->setValue('foobar', $template->getId(), ScopeInterface::SCOPE_STORE, 'default');
 | 
						|
 | 
						|
        $this->_model->emulateDesign('default', 'frontend');
 | 
						|
        $processedTemplate = Bootstrap::getObjectManager()->get(
 | 
						|
            \Magento\Framework\App\State::class
 | 
						|
        )->emulateAreaCode(
 | 
						|
            'frontend',
 | 
						|
            [$this->_model, 'getProcessedTemplate']
 | 
						|
        );
 | 
						|
        self::assertEquals(' - some_unique_code -  - some_unique_code', $processedTemplate);
 | 
						|
    }
 | 
						|
}
 |