Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
XsdTest.php
Go to the documentation of this file.
1 <?php
7 
8 class XsdTest extends \PHPUnit\Framework\TestCase
9 {
13  protected $_schemaFile;
14 
15  protected function setUp()
16  {
17  if (!function_exists('libxml_set_external_entity_loader')) {
18  $this->markTestSkipped('Skipped on HHVM. Will be fixed in MAGETWO-45033');
19  }
20  $urnResolver = new \Magento\Framework\Config\Dom\UrnResolver();
21  $this->_schemaFile = $urnResolver->getRealPath('urn:magento:framework-message-queue:etc/publisher.xsd');
22  }
23 
29  public function testExemplarXml($fixtureXml, array $expectedErrors)
30  {
31  $validationState = $this->createMock(\Magento\Framework\Config\ValidationStateInterface::class);
32  $validationState->expects($this->any())
33  ->method('isValidationRequired')
34  ->willReturn(true);
35  $messageFormat = '%message%';
36  $dom = new \Magento\Framework\Config\Dom($fixtureXml, $validationState, [], null, null, $messageFormat);
37  $actualErrors = [];
38  $actualResult = $dom->validate($this->_schemaFile, $actualErrors);
39  $this->assertEquals(empty($expectedErrors), $actualResult, "Validation result is invalid.");
40  $this->assertEquals($expectedErrors, $actualErrors, "Validation errors does not match.");
41  }
42 
47  public function exemplarXmlDataProvider()
48  {
49  // @codingStandardsIgnoreStart
50  return [
52  'valid' => [
53  '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/publisher.xsd">
54  <publisher topic="topic.message.queue.config.01">
55  <connection name="amqp" exchange="magento2" />
56  <connection name="db" exchange="magento2" disabled="true" />
57  </publisher>
58  <publisher topic="topic.message.queue.config.02">
59  <connection name="amqp" exchange="magento2" disabled="true"/>
60  <connection name="db" exchange="magento2" disabled="true" />
61  </publisher>
62  <publisher topic="topic.message.queue.config.03" disabled="true" />
63  </config>',
64  [],
65  ],
66  'non unique publisher topic' => [
67  '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/publisher.xsd">
68  <publisher topic="topic.message.queue.config.01">
69  <connection name="amqp" exchange="magento2" />
70  </publisher>
71  <publisher topic="topic.message.queue.config.01">
72  <connection name="amqp" exchange="magento2" disabled="true"/>
73  </publisher>
74  </config>',
75  [
76  "Element 'publisher': Duplicate key-sequence ['topic.message.queue.config.01'] in unique identity-constraint 'unique-publisher-topic'."
77  ],
78  ],
79  'non unique publisher connection name' => [
80  '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/publisher.xsd">
81  <publisher topic="topic.message.queue.config.01">
82  <connection name="amqp" exchange="magento2" />
83  <connection name="amqp" exchange="magento2" />
84  </publisher>
85  </config>',
86  [
87  "Element 'connection': Duplicate key-sequence ['amqp'] in unique identity-constraint 'unique-connection-name'."
88  ],
89  ],
90  'missed required publisher attribute' => [
91  '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/publisher.xsd">
92  <publisher disabled="false">
93  <connection name="amqp" exchange="magento2" />
94  </publisher>
95  </config>',
96  [
97  "Element 'publisher': The attribute 'topic' is required but missing."
98  ],
99  ],
100  'missed required connection attribute' => [
101  '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/publisher.xsd">
102  <publisher topic="top01">
103  <connection exchange="magento2" />
104  </publisher>
105  </config>',
106  [
107  "Element 'connection': The attribute 'name' is required but missing."
108  ],
109  ],
110  'unexpected publisher element' => [
111  '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/publisher.xsd">
112  <unexpected name="10">20</unexpected>
113  <publisher topic="topic.message.queue.config.03" disabled="true" />
114  </config>',
115  [
116  "Element 'unexpected': This element is not expected. Expected is ( publisher )."
117  ],
118  ],
119  'unexpected connection element' => [
120  '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/publisher.xsd">
121  <publisher topic="topic.message.queue.config.03" disabled="true">
122  <connection name="amqp" exchange="magento2" />
123  <unexpected name="10">20</unexpected>
124  </publisher>
125  </config>',
126  [
127  "Element 'unexpected': This element is not expected. Expected is ( connection )."
128  ],
129  ],
130  'unexpected publisher attribute' => [
131  '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/publisher.xsd">
132  <publisher topic="topic.message.queue.config.03" disabled="true" unexpected="10"/>
133  </config>',
134  [
135  "Element 'publisher', attribute 'unexpected': The attribute 'unexpected' is not allowed.",
136  ],
137  ],
138  'unexpected connection attribute' => [
139  '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/publisher.xsd">
140  <publisher topic="topic.message.queue.config.03" disabled="true">
141  <connection name="amqp" exchange="magento2" unexpected="10"/>
142  </publisher>
143  </config>',
144  [
145  "Element 'connection', attribute 'unexpected': The attribute 'unexpected' is not allowed.",
146  ],
147  ],
148  'invalid connection attribute value' => [
149  '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/publisher.xsd">
150  <publisher topic="topic.message.queue.config.03" disabled="true">
151  <connection name="amqp" exchange="magento2" disabled="disabled"/>
152  </publisher>
153  </config>',
154  [
155  "Element 'connection', attribute 'disabled': 'disabled' is not a valid value of the atomic type 'xs:boolean'.",
156  ],
157  ],
158  'invalid publisher attribute value' => [
159  '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/publisher.xsd">
160  <publisher topic="topic.message.queue.config.03" disabled="disabled">
161  <connection name="amqp" exchange="magento2" />
162  </publisher>
163  </config>',
164  [
165  "Element 'publisher', attribute 'disabled': 'disabled' is not a valid value of the atomic type 'xs:boolean'.",
166  ],
167  ],
168  ];
169  // @codingStandardsIgnoreEnd
170  }
171 }
testExemplarXml($fixtureXml, array $expectedErrors)
Definition: XsdTest.php:29