![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/cartforge.co/vendor/magento/module-email/Test/Unit/Model/Template/Config/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ /** * Test for validation rules implemented by XSD schemas for email templates configuration */ declare(strict_types=1); namespace Magento\Email\Test\Unit\Model\Template\Config; use Magento\Framework\Config\Dom; use Magento\Framework\Config\Dom\UrnResolver; use Magento\Framework\Config\ValidationStateInterface; use PHPUnit\Framework\TestCase; class XsdTest extends TestCase { /** * Test validation rules implemented by XSD schema for merged configs * * @param string $fixtureXml * @param array $expectedErrors * @dataProvider mergedXmlDataProvider */ public function testMergedXml($fixtureXml, array $expectedErrors) { if (!function_exists('libxml_set_external_entity_loader')) { $this->markTestSkipped('Skipped on HHVM. Will be fixed in MAGETWO-45033'); } $urnResolver = new UrnResolver(); $schemaFile = $urnResolver->getRealPath('urn:magento:module:Magento_Email:etc/email_templates.xsd'); $this->_testXmlAgainstXsd($fixtureXml, $schemaFile, $expectedErrors); } /** * @return array */ public function mergedXmlDataProvider() { // @codingStandardsIgnoreStart return [ 'valid' => [ '<config><template id="test" label="Test" file="test.txt" type="text" module="Module" area="frontend"/></config>', [], ], 'empty root node' => [ '<config/>', ["Element 'config': Missing child element(s). Expected is ( template )."], ], 'irrelevant root node' => [ '<template id="test" label="Test" file="test.txt" type="text" module="Module" area="frontend"/>', ["Element 'template': No matching global declaration available for the validation root."], ], 'invalid node' => [ '<config><invalid/></config>', ["Element 'invalid': This element is not expected. Expected is ( template )."], ], 'node "template" with value' => [ '<config> <template id="test" label="Test" file="test.txt" type="text" module="Module" area="frontend">invalid</template> </config>', ["Element 'template': Character content is not allowed, because the content type is empty."], ], 'node "template" with children' => [ '<config> <template id="test" label="Test" file="test.txt" type="text" module="Module" area="frontend"><invalid/></template> </config>', ["Element 'template': Element content is not allowed, because the content type is empty."], ], 'node "template" without attribute "id"' => [ '<config><template label="Test" file="test.txt" type="text" module="Module" area="frontend"/></config>', ["Element 'template': The attribute 'id' is required but missing."], ], 'node "template" without attribute "label"' => [ '<config><template id="test" file="test.txt" type="text" module="Module" area="frontend"/></config>', ["Element 'template': The attribute 'label' is required but missing."], ], 'node "template" without attribute "file"' => [ '<config><template id="test" label="Test" type="text" module="Module" area="frontend"/></config>', ["Element 'template': The attribute 'file' is required but missing."], ], 'node "template" without attribute "type"' => [ '<config><template id="test" label="Test" file="test.txt" module="Module" area="frontend"/></config>', ["Element 'template': The attribute 'type' is required but missing."], ], 'node "template" with invalid attribute "type"' => [ '<config><template id="test" label="Test" file="test.txt" type="invalid" module="Module" area="frontend"/></config>', [ "Element 'template', attribute 'type': " . "[facet 'enumeration'] The value 'invalid' is not an element of the set {'html', 'text'}." ], ], 'node "template" without attribute "area"' => [ '<config><template id="test" label="Test" file="test.txt" type="text" module="Module"/></config>', ["Element 'template': The attribute 'area' is required but missing."], ], 'node "template" with invalid attribute "area"' => [ '<config><template id="test" label="Test" file="test.txt" type="text" module="Module" area="invalid"/></config>', [ "Element 'template', attribute 'area': " . "[facet 'enumeration'] The value 'invalid' is not an element of the set {'frontend', 'adminhtml'}.", ], ], 'node "template" with unknown attribute' => [ '<config> <template id="test" label="Test" file="test.txt" type="text" module="Module" area="frontend" unknown="true"/> </config>', ["Element 'template', attribute 'unknown': The attribute 'unknown' is not allowed."], ] ]; // @codingStandardsIgnoreEnd } /** * Test that XSD schema validates fixture XML contents producing expected results * * @param string $fixtureXml * @param string $schemaFile * @param array $expectedErrors */ protected function _testXmlAgainstXsd($fixtureXml, $schemaFile, array $expectedErrors) { $validationStateMock = $this->getMockForAbstractClass(ValidationStateInterface::class); $validationStateMock->method('isValidationRequired') ->willReturn(true); $dom = new Dom($fixtureXml, $validationStateMock, [], null, null, '%message%'); $actualResult = $dom->validate($schemaFile, $actualErrors); $this->assertEquals(empty($expectedErrors), $actualResult); foreach ($expectedErrors as $error) { $this->assertContains($error, $actualErrors); } } }