ValidatorTest.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Theme\Test\Unit\Model\Config;
  7. /**
  8. * Class ValidatorTest to test \Magento\Theme\Model\Design\Config\Validator
  9. */
  10. class ValidatorTest extends \PHPUnit\Framework\TestCase
  11. {
  12. /**
  13. * @var \Magento\Theme\Model\Design\Config\Validator
  14. */
  15. private $model;
  16. /**
  17. * @var \Magento\Framework\Mail\TemplateInterfaceFactory
  18. */
  19. private $templateFactoryMock;
  20. protected function setUp()
  21. {
  22. $this->templateFactoryMock = $this->getMockBuilder(\Magento\Framework\Mail\TemplateInterfaceFactory::class)
  23. ->disableOriginalConstructor()
  24. ->setMethods(['create'])
  25. ->getMock();
  26. $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  27. $this->model = $objectManagerHelper->getObject(
  28. \Magento\Theme\Model\Design\Config\Validator::class,
  29. [
  30. "templateFactory" => $this->templateFactoryMock,
  31. "fields" => ["email_header_template", "no_reference"]
  32. ]
  33. );
  34. }
  35. /**
  36. * @expectedException \Magento\Framework\Exception\LocalizedException
  37. */
  38. public function testValidateHasRecursiveReference()
  39. {
  40. $fieldConfig = [
  41. 'path' => 'design/email/header_template',
  42. 'fieldset' => 'other_settings/email',
  43. 'field' => 'email_header_template'
  44. ];
  45. $designConfigMock = $this->getMockBuilder(\Magento\Theme\Api\Data\DesignConfigInterface::class)
  46. ->getMock();
  47. $designConfigExtensionMock =
  48. $this->getMockBuilder(\Magento\Theme\Api\Data\DesignConfigExtensionInterface::class)
  49. ->setMethods(['getDesignConfigData'])
  50. ->getMockForAbstractClass();
  51. $designElementMock = $this->getMockBuilder(\Magento\Theme\Model\Data\Design\Config\Data::class)
  52. ->disableOriginalConstructor()
  53. ->getMock();
  54. $designConfigMock->expects($this->once())
  55. ->method('getExtensionAttributes')
  56. ->willReturn($designConfigExtensionMock);
  57. $designConfigExtensionMock->expects($this->once())
  58. ->method('getDesignConfigData')
  59. ->willReturn([$designElementMock]);
  60. $designElementMock->expects($this->any())->method('getFieldConfig')->willReturn($fieldConfig);
  61. $designElementMock->expects($this->once())->method('getPath')->willReturn($fieldConfig['path']);
  62. $designElementMock->expects($this->once())->method('getValue')->willReturn($fieldConfig['field']);
  63. $templateMock = $this->getMockBuilder(\Magento\Email\Model\TemplateInterface::class)
  64. ->setMethods(['getTemplateText', 'emulateDesign', 'loadDefault', 'revertDesign', 'setForcedArea'])
  65. ->getMock();
  66. $this->templateFactoryMock->expects($this->once())->method('create')->willReturn($templateMock);
  67. $templateMock->expects($this->once())->method('getTemplateText')->willReturn(
  68. file_get_contents(__DIR__ . '/_files/template_fixture.html')
  69. );
  70. $this->model->validate($designConfigMock);
  71. $this->expectExceptionMessage(
  72. 'The "email_header_template" template contains an incorrect configuration, with a reference to itself. '
  73. . 'Remove or change the reference, then try again.'
  74. );
  75. }
  76. public function testValidateNoRecursiveReference()
  77. {
  78. $fieldConfig = [
  79. 'path' => 'no/reference',
  80. 'fieldset' => 'no/reference',
  81. 'field' => 'no_reference'
  82. ];
  83. $designConfigMock = $this->getMockBuilder(\Magento\Theme\Api\Data\DesignConfigInterface::class)
  84. ->getMock();
  85. $designConfigExtensionMock =
  86. $this->getMockBuilder(\Magento\Theme\Api\Data\DesignConfigExtensionInterface::class)
  87. ->setMethods(['getDesignConfigData'])
  88. ->getMockForAbstractClass();
  89. $designElementMock = $this->getMockBuilder(\Magento\Theme\Model\Data\Design\Config\Data::class)
  90. ->disableOriginalConstructor()
  91. ->getMock();
  92. $designConfigMock->expects($this->once())
  93. ->method('getExtensionAttributes')
  94. ->willReturn($designConfigExtensionMock);
  95. $designConfigExtensionMock->expects($this->once())
  96. ->method('getDesignConfigData')
  97. ->willReturn([$designElementMock]);
  98. $designElementMock->expects($this->any())->method('getFieldConfig')->willReturn($fieldConfig);
  99. $designElementMock->expects($this->once())->method('getPath')->willReturn($fieldConfig['path']);
  100. $designElementMock->expects($this->once())->method('getValue')->willReturn($fieldConfig['field']);
  101. $templateMock = $this->getMockBuilder(\Magento\Email\Model\TemplateInterface::class)
  102. ->setMethods(['getTemplateText', 'emulateDesign', 'loadDefault', 'revertDesign', 'setForcedArea'])
  103. ->getMock();
  104. $this->templateFactoryMock->expects($this->once())->method('create')->willReturn($templateMock);
  105. $templateMock->expects($this->once())->method('getTemplateText')->willReturn(
  106. file_get_contents(__DIR__ . '/_files/template_fixture.html')
  107. );
  108. $this->model->validate($designConfigMock);
  109. }
  110. }