40 private $appEmulation;
45 private $storeManager;
65 private $filterFactory;
70 private $filterManager;
85 private $templateFactory;
90 private $serializerMock;
94 $this->context = $this->getMockBuilder(\
Magento\Framework\Model\Context::class)
95 ->disableOriginalConstructor()
98 $this->design = $this->getMockBuilder(\
Magento\Framework\View\DesignInterface::class)
99 ->disableOriginalConstructor()
102 $this->registry = $this->getMockBuilder(\
Magento\Framework\Registry::class)
103 ->disableOriginalConstructor()
106 $this->appEmulation = $this->getMockBuilder(\
Magento\Store\Model\
App\Emulation::class)
107 ->disableOriginalConstructor()
110 $this->storeManager = $this->getMockBuilder(\
Magento\Store\Model\StoreManagerInterface::class)
111 ->disableOriginalConstructor()
114 $this->assetRepo = $this->getMockBuilder(\
Magento\Framework\View\Asset\Repository::class)
115 ->disableOriginalConstructor()
118 $this->filesystem = $this->getMockBuilder(\
Magento\Framework\Filesystem::class)
119 ->disableOriginalConstructor()
122 $this->scopeConfig = $this->getMockBuilder(\
Magento\Framework\
App\Config\ScopeConfigInterface::class)
123 ->disableOriginalConstructor()
126 $this->emailConfig = $this->getMockBuilder(\
Magento\Email\Model\Template\Config::class)
127 ->disableOriginalConstructor()
130 $this->templateFactory = $this->getMockBuilder(\
Magento\Email\Model\TemplateFactory::class)
131 ->disableOriginalConstructor()
134 $this->filterManager = $this->getMockBuilder(\
Magento\Framework\Filter\FilterManager::class)
135 ->disableOriginalConstructor()
138 $this->urlModel = $this->getMockBuilder(\
Magento\Framework\Url::class)
139 ->disableOriginalConstructor()
142 $this->filterFactory = $this->getMockBuilder(\
Magento\Email\Model\Template\FilterFactory::class)
143 ->setMethods([
'create'])
144 ->disableOriginalConstructor()
147 $this->serializerMock = $this->getMockBuilder(\
Magento\Framework\Serialize\Serializer\Json::class)->getMock();
158 return $this->getMockBuilder(\
Magento\Email\Model\Template::class)
159 ->setMethods(array_merge($mockedMethods, [
'__wakeup',
'__sleep',
'_init']))
160 ->setConstructorArgs([
170 $this->templateFactory,
171 $this->filterManager,
173 $this->filterFactory,
175 $this->serializerMock
183 $model->setIsChildTemplate(
true);
184 $this->assertSame(
true,
$model->isChildTemplate());
186 $model->setIsChildTemplate(
false);
187 $this->assertSame(
false,
$model->isChildTemplate());
193 $filterTemplate = $this->getMockBuilder(\
Magento\Email\Model\Template\Filter::class)
194 ->disableOriginalConstructor()
196 $model->setTemplateFilter($filterTemplate);
197 $this->assertSame($filterTemplate,
$model->getTemplateFilter());
202 $filterTemplate = $this->getMockBuilder(\
Magento\Framework\Filter\Template::class)
203 ->setMethods([
'setUseAbsoluteLinks',
'setStoreId',
'setUrlModel'])
204 ->disableOriginalConstructor()
206 $filterTemplate->expects($this->once())
207 ->method(
'setUseAbsoluteLinks')
208 ->will($this->returnSelf());
209 $filterTemplate->expects($this->once())
210 ->method(
'setStoreId')
211 ->will($this->returnSelf());
212 $this->filterFactory->method(
'create')
213 ->will($this->returnValue($filterTemplate));
214 $designConfig = $this->getMockBuilder(\
Magento\Framework\DataObject::class)
215 ->setMethods([
'getStore'])
216 ->disableOriginalConstructor()
220 $model->expects($this->once())
221 ->method(
'getDesignConfig')
222 ->will($this->returnValue($designConfig));
224 $this->assertSame($filterTemplate,
$model->getTemplateFilter());
240 $expectedTemplateSubject,
241 $expectedOrigTemplateVariables,
242 $expectedTemplateStyles
250 'theme' =>
'Magento/blank',
254 $model->expects($this->once())
255 ->method(
'getDesignParams')
256 ->will($this->returnValue($designParams));
260 $templateFile =
'templateFile';
261 $this->emailConfig->expects($this->once())
262 ->method(
'getTemplateFilename')
264 ->will($this->returnValue($templateFile));
265 $this->emailConfig->expects($this->once())
266 ->method(
'getTemplateType')
270 $modulesDir = $this->getMockBuilder(\
Magento\Framework\Filesystem\Directory\ReadInterface::class)
271 ->setMethods([
'readFile',
'getRelativePath'])
272 ->getMockForAbstractClass();
275 $modulesDir->expects($this->once())
276 ->method(
'getRelativePath')
277 ->with($templateFile)
279 $modulesDir->expects($this->once())
281 ->will($this->returnValue($templateText));
283 $this->filesystem->expects($this->once())
284 ->method(
'getDirectoryRead')
286 ->will($this->returnValue($modulesDir));
296 $this->assertEquals($parsedTemplateText,
$model->getTemplateText());
297 $this->assertEquals($expectedTemplateSubject,
$model->getTemplateSubject());
298 $this->assertEquals($expectedOrigTemplateVariables,
$model->getData(
'orig_template_variables'));
299 $this->assertEquals($expectedTemplateStyles,
$model->getTemplateStyles());
309 'templateType' =>
'html',
310 'templateText' =>
'',
311 'parsedTemplateText' =>
'',
312 'expectedTemplateSubject' =>
null,
313 'expectedOrigTemplateVariables' =>
null,
314 'expectedTemplateStyles' =>
null,
316 'copyright in Plain Text Removed' => [
317 'templateType' =>
'text',
318 'templateText' =>
'<!-- Copyright © Magento, Inc. All rights reserved. -->',
319 'parsedTemplateText' =>
'',
320 'expectedTemplateSubject' =>
null,
321 'expectedOrigTemplateVariables' =>
null,
322 'expectedTemplateStyles' =>
null,
324 'copyright in HTML Removed' => [
325 'templateType' =>
'html',
326 'templateText' =>
'<!-- Copyright © Magento, Inc. All rights reserved. -->',
327 'parsedTemplateText' =>
'',
328 'expectedTemplateSubject' =>
null,
329 'expectedOrigTemplateVariables' =>
null,
330 'expectedTemplateStyles' =>
null,
333 'templateType' =>
'html',
334 'templateText' =>
'<!--@subject Email Subject @-->',
335 'parsedTemplateText' =>
'',
336 'expectedTemplateSubject' =>
'Email Subject',
337 'expectedOrigTemplateVariables' =>
null,
338 'expectedTemplateStyles' =>
null,
340 'orig_template_variables set' => [
341 'templateType' =>
'html',
342 'templateText' =>
'<!--@vars {"store url=\"\"":"Store Url"} @-->Some Other Text',
343 'parsedTemplateText' =>
'Some Other Text',
344 'expectedTemplateSubject' =>
null,
345 'expectedOrigTemplateVariables' =>
'{"store url=\"\"":"Store Url"}',
346 'expectedTemplateStyles' =>
null,
349 'templateType' =>
'html',
350 'templateText' =>
'<!--@styles p { color: #000; } @-->Some Other Text',
351 'parsedTemplateText' =>
'Some Other Text',
352 'expectedTemplateSubject' =>
null,
353 'expectedOrigTemplateVariables' =>
null,
354 'expectedTemplateStyles' =>
'p { color: #000; }',
368 $configPath =
'design/email/header_template';
377 $designConfig = $this->getMockBuilder(\
Magento\Framework\DataObject::class)
378 ->setMethods([
'getStore'])
379 ->disableOriginalConstructor()
383 $designConfig->expects($this->once())
385 ->will($this->returnValue(
$storeId));
386 $model->expects($this->once())
387 ->method(
'getDesignConfig')
388 ->will($this->returnValue($designConfig));
390 if ($loadFromDatabase) {
392 $model->expects($this->once())
395 ->will($this->returnSelf());
398 $model->expects($this->once())
399 ->method(
'loadDefault')
401 ->will($this->returnSelf());
404 $this->scopeConfig->expects($this->once())
409 $model->loadByConfigPath($configPath);
418 'Load from filesystem' => [
420 'Test template content',
421 'Test template content',
423 'Load from database' => [
425 'Test template content',
426 'Test template content',
447 $model = $this->
getModelMock([
'getSenderName',
'getSenderEmail',
'getTemplateSubject']);
448 $model->expects($this->any())
449 ->method(
'getSenderName')
450 ->will($this->returnValue($senderName));
451 $model->expects($this->any())
452 ->method(
'getSenderEmail')
453 ->will($this->returnValue($senderEmail));
454 $model->expects($this->any())
455 ->method(
'getTemplateSubject')
456 ->will($this->returnValue($templateSubject));
457 $this->assertEquals($expectedValue,
$model->isValidForSend());
466 'should be valid' => [
467 'senderName' =>
'sender name',
469 'templateSubject' =>
'template subject',
470 'expectedValue' => true
472 'no sender name so not valid' => [
475 'templateSubject' =>
'template subject',
476 'expectedValue' =>
false 478 'no sender email so not valid' => [
479 'senderName' =>
'sender name',
481 'templateSubject' =>
'template subject',
482 'expectedValue' =>
false 484 'no subject so not valid' => [
485 'senderName' =>
'sender name',
487 'templateSubject' =>
'',
488 'expectedValue' =>
false 495 $model = $this->
getModelMock([
'getTemplateFilter',
'getDesignConfig',
'applyDesignConfig']);
497 $templateSubject =
'templateSubject';
498 $model->setTemplateSubject($templateSubject);
500 $filterTemplate = $this->getMockBuilder(\
Magento\Framework\Filter\Template::class)
501 ->setMethods([
'setVariables',
'setStoreId',
'filter'])
502 ->disableOriginalConstructor()
504 $model->expects($this->once())
505 ->method(
'getTemplateFilter')
506 ->will($this->returnValue($filterTemplate));
508 $model->expects($this->once())
509 ->method(
'applyDesignConfig');
511 $designConfig = $this->getMockBuilder(\
Magento\Framework\DataObject::class)
512 ->setMethods([
'getStore'])
513 ->disableOriginalConstructor()
516 $designConfig->expects($this->once())
518 ->will($this->returnValue(
$storeId));
519 $model->expects($this->once())
520 ->method(
'getDesignConfig')
521 ->will($this->returnValue($designConfig));
523 $filterTemplate->expects($this->once())
524 ->method(
'setStoreId')
526 ->will($this->returnSelf());
527 $expectedResult =
'expected';
528 $filterTemplate->expects($this->once())
530 ->with($templateSubject)
531 ->will($this->returnValue($expectedResult));
533 $variables = [
'key' =>
'value' ];
534 $filterTemplate->expects($this->once())
535 ->method(
'setVariables')
536 ->with(array_merge($variables, [
'this' =>
$model]));
537 $this->assertEquals($expectedResult,
$model->getProcessedTemplateSubject($variables));
549 $model->setData(
'orig_template_variables', $templateVariables);
551 $this->serializerMock->expects($this->any())->method(
'unserialize')
553 json_decode($templateVariables,
true)
555 $this->assertEquals($expectedResult,
$model->getVariablesOptionArray($withGroup));
564 'empty variables' => [
565 'withGroup' =>
false,
566 'templateVariables' =>
'',
567 'expectedResult' => [],
569 'empty variables with grouped option' => [
571 'templateVariables' =>
'',
572 'expectedResult' => [],
574 'customer account new variables' => [
575 'withGroup' =>
false,
576 'templateVariables' =>
'{"store url=\"\"":"Store Url","var logo_url":"Email Logo Image Url",' 577 .
'"var customer.name":"Customer Name"}',
578 'expectedResult' => [
580 'value' =>
'{{store url=""}}',
581 'label' =>
__(
'%1',
'Store Url'),
584 'value' =>
'{{var logo_url}}',
585 'label' =>
__(
'%1',
'Email Logo Image Url'),
588 'value' =>
'{{var customer.name}}',
589 'label' =>
__(
'%1',
'Customer Name'),
593 'customer account new variables with grouped option' => [
595 'templateVariables' =>
'{"store url=\"\"":"Store Url","var logo_url":"Email Logo Image Url",' 596 .
'"var customer.name":"Customer Name"}',
597 'expectedResult' => [
598 'label' =>
__(
'Template Variables'),
601 'value' =>
'{{store url=""}}',
602 'label' =>
__(
'%1',
'Store Url'),
605 'value' =>
'{{var logo_url}}',
606 'label' =>
__(
'%1',
'Email Logo Image Url'),
609 'value' =>
'{{var customer.name}}',
610 'label' =>
__(
'%1',
'Customer Name'),
628 'getProcessedTemplate',
630 'cancelDesignConfig',
634 $model->expects($this->once())
638 $model->expects($this->once())
639 ->method(
'loadDefault')
643 $model->expects($this->once())
644 ->method(
'applyDesignConfig')
645 ->will($this->returnValue(
true));
646 $model->expects($this->once())
647 ->method(
'cancelDesignConfig')
648 ->will($this->returnValue(
true));
650 $vars = [
'key' =>
'value' ];
652 $model->expects($this->once())
653 ->method(
'getProcessedTemplate')
655 ->will($this->returnValue($expectedResult));
657 $this->assertEquals($expectedResult,
$model->processTemplate());
658 $this->assertTrue(
$model->getUseAbsoluteLinks());
669 'expectedResult' =>
'expected result',
672 'templateId' =>
'my id',
673 'expectedResult' =>
'expected result',
687 $model->expects($this->once())
688 ->method(
'loadDefault')
689 ->will($this->returnValue(
true));
691 $model->expects($this->once())
692 ->method(
'applyDesignConfig')
693 ->will($this->returnValue(
true));
695 $model->processTemplate();
700 $variables = [
'key' =>
'value'];
702 $model->setVars($variables);
703 $expectedResult =
'result';
704 $model->expects($this->once())
705 ->method(
'getProcessedTemplateSubject')
707 ->will($this->returnValue($expectedResult));
708 $this->assertEquals($expectedResult,
$model->getSubject());
713 $options = [
'someOption' =>
'someValue'];
715 $model->expects($this->once())
716 ->method(
'setDesignConfig')
728 $emailConfig = $this->getMockBuilder(\
Magento\Email\Model\Template\Config::class)
729 ->setMethods([
'getTemplateType'])
730 ->disableOriginalConstructor()
733 $emailConfig->expects($this->once())->method(
'getTemplateType')->will($this->returnValue(
$templateType));
736 $model = $this->getMockBuilder(\
Magento\Email\Model\Template::class)
737 ->setMethods([
'_init'])
738 ->setConstructorArgs([
739 $this->createMock(\
Magento\Framework\Model\Context::class),
740 $this->createMock(\
Magento\Theme\Model\View\Design::class),
741 $this->createMock(\
Magento\Framework\Registry::class),
742 $this->createMock(\
Magento\Store\Model\
App\Emulation::class),
743 $this->createMock(\
Magento\Store\Model\StoreManager::class),
744 $this->createMock(\
Magento\Framework\View\Asset\Repository::class),
745 $this->createMock(\
Magento\Framework\Filesystem::class),
746 $this->createMock(\
Magento\Framework\
App\Config\ScopeConfigInterface::class),
748 $this->createMock(\
Magento\Email\Model\TemplateFactory::class),
749 $this->createMock(\
Magento\Framework\Filter\FilterManager::class),
750 $this->createMock(\
Magento\Framework\Url::class),
751 $this->createMock(\
Magento\Email\Model\Template\FilterFactory::class),
755 $model->setTemplateId(10);
757 $this->assertEquals($expectedResult,
$model->getType());
765 return [[
'text', 1], [
'html', 2]];
testGetProcessedTemplateSubject()
getVariablesOptionArrayDataProvider()
testLoadByConfigPath($loadFromDatabase)
loadByConfigPathDataProvider()
testSetAndGetIsChildTemplate()
const DEFAULT_SYSTEM_LOCALE
testGetVariablesOptionArray($withGroup, $templateVariables, $expectedResult)
testSetAndGetTemplateFilter()
loadDefaultDataProvider()
processTemplateVariable()
testLoadDefault( $templateType, $templateText, $parsedTemplateText, $expectedTemplateSubject, $expectedOrigTemplateVariables, $expectedTemplateStyles)
testProcessTemplate($templateId, $expectedResult)
isValidForSendDataProvider()
testGetTemplateFilterWithEmptyValue()
testIsValidForSend($senderName, $senderEmail, $templateSubject, $expectedValue)
getModelMock(array $mockedMethods=[])
testProcessTemplateThrowsExceptionNonExistentTemplate()