@@ -10,15 +10,26 @@ class XsdTest extends \PHPUnit\Framework\TestCase
10
10
/**
11
11
* @var string
12
12
*/
13
- protected $ _schemaFile ;
13
+ private $ schemaFile ;
14
14
15
+ /**
16
+ * @var string
17
+ */
18
+ private $ schemaQueueFile ;
19
+
20
+ /**
21
+ * Set up.
22
+ *
23
+ * @return void
24
+ */
15
25
protected function setUp ()
16
26
{
17
27
if (!function_exists ('libxml_set_external_entity_loader ' )) {
18
28
$ this ->markTestSkipped ('Skipped on HHVM. Will be fixed in MAGETWO-45033 ' );
19
29
}
20
30
$ urnResolver = new \Magento \Framework \Config \Dom \UrnResolver ();
21
- $ this ->_schemaFile = $ urnResolver ->getRealPath ('urn:magento:framework-message-queue:etc/consumer.xsd ' );
31
+ $ this ->schemaFile = $ urnResolver ->getRealPath ('urn:magento:framework-message-queue:etc/consumer.xsd ' );
32
+ $ this ->schemaQueueFile = $ urnResolver ->getRealPath ('urn:magento:framework-message-queue:etc/queue.xsd ' );
22
33
}
23
34
24
35
/**
@@ -29,13 +40,13 @@ protected function setUp()
29
40
public function testExemplarXml ($ fixtureXml , array $ expectedErrors )
30
41
{
31
42
$ validationState = $ this ->createMock (\Magento \Framework \Config \ValidationStateInterface::class);
32
- $ validationState ->expects ($ this ->any ())
43
+ $ validationState ->expects ($ this ->atLeastOnce ())
33
44
->method ('isValidationRequired ' )
34
45
->willReturn (true );
35
46
$ messageFormat = '%message% ' ;
36
47
$ dom = new \Magento \Framework \Config \Dom ($ fixtureXml , $ validationState , [], null , null , $ messageFormat );
37
48
$ actualErrors = [];
38
- $ actualResult = $ dom ->validate ($ this ->_schemaFile , $ actualErrors );
49
+ $ actualResult = $ dom ->validate ($ this ->schemaFile , $ actualErrors );
39
50
$ this ->assertEquals (empty ($ expectedErrors ), $ actualResult , "Validation result is invalid. " );
40
51
$ this ->assertEquals ($ expectedErrors , $ actualErrors , "Validation errors does not match. " );
41
52
}
@@ -125,4 +136,106 @@ public function exemplarXmlDataProvider()
125
136
];
126
137
// @codingStandardsIgnoreEnd
127
138
}
139
+
140
+ /**
141
+ * @param string $fixtureXml
142
+ * @param array $expectedErrors
143
+ * @dataProvider exemplarQueueXmlDataProvider
144
+ */
145
+ public function testExemplarQueueXml ($ fixtureXml , array $ expectedErrors )
146
+ {
147
+ $ validationState = $ this ->createMock (\Magento \Framework \Config \ValidationStateInterface::class);
148
+ $ validationState ->expects ($ this ->atLeastOnce ())
149
+ ->method ('isValidationRequired ' )
150
+ ->willReturn (true );
151
+ $ messageFormat = '%message% ' ;
152
+ $ dom = new \Magento \Framework \Config \Dom ($ fixtureXml , $ validationState , [], null , null , $ messageFormat );
153
+ $ actualErrors = [];
154
+ $ actualResult = $ dom ->validate ($ this ->schemaQueueFile , $ actualErrors );
155
+ $ this ->assertEquals (empty ($ expectedErrors ), $ actualResult , "Validation result is invalid. " );
156
+ $ this ->assertEquals ($ expectedErrors , $ actualErrors , "Validation errors does not match. " );
157
+ }
158
+
159
+ /**
160
+ * @return array
161
+ * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
162
+ */
163
+ public function exemplarQueueXmlDataProvider ()
164
+ {
165
+ // @codingStandardsIgnoreStart
166
+ return [
167
+ 'valid ' => [
168
+ '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
169
+ <broker topic="asd" >
170
+ <queue name="queue1" consumer="consumer1" handler="handlerClassOne1::handlerMethod1" consumerInstance="consumerClass1" maxMessages="5"/>
171
+ <queue name="queue2" consumer="consumer2" handler="handlerClassOne2::handlerMethod2" consumerInstance="consumerClass2" maxMessages="5"/>
172
+ </broker>
173
+ </config> ' ,
174
+ [],
175
+ ],
176
+ 'invalid handler format ' => [
177
+ '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
178
+ <broker topic="asd" >
179
+ <queue name="queue1" consumer="consumer1" handler="handlerClass_One1::handlerMethod1" consumerInstance="consumerClass1" maxMessages="5"/>
180
+ <queue name="queue2" consumer="consumer2" handler="handlerClassOne2::handler_Method2" consumerInstance="consumerClass2" maxMessages="5"/>
181
+ </broker>
182
+ </config> ' ,
183
+ [
184
+ "Element 'queue', attribute 'handler': [facet 'pattern'] The value 'handlerClass_One1::handlerMethod1' is not accepted by the pattern '[a-zA-Z0-9 \\\\]+::[a-zA-Z0-9]+'. " ,
185
+ "Element 'queue', attribute 'handler': 'handlerClass_One1::handlerMethod1' is not a valid value of the atomic type 'handlerType'. " ,
186
+ "Element 'queue', attribute 'handler': [facet 'pattern'] The value 'handlerClassOne2::handler_Method2' is not accepted by the pattern '[a-zA-Z0-9 \\\\]+::[a-zA-Z0-9]+'. " ,
187
+ "Element 'queue', attribute 'handler': 'handlerClassOne2::handler_Method2' is not a valid value of the atomic type 'handlerType'. " ,
188
+ ],
189
+ ],
190
+ 'invalid instance format ' => [
191
+ '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
192
+ <broker topic="asd" >
193
+ <queue name="queue1" consumer="consumer1" handler="handlerClassOne1::handlerMethod1" consumerInstance="consumer_Class1" maxMessages="5"/>
194
+ <queue name="queue2" consumer="consumer2" handler="handlerClassOne2::handlerMethod2" consumerInstance="consumerClass_2" maxMessages="5"/>
195
+ </broker>
196
+ </config> ' ,
197
+ [
198
+ "Element 'queue', attribute 'consumerInstance': [facet 'pattern'] The value 'consumer_Class1' is not accepted by the pattern '[a-zA-Z0-9 \\\\]+'. " ,
199
+ "Element 'queue', attribute 'consumerInstance': 'consumer_Class1' is not a valid value of the atomic type 'instanceType'. " ,
200
+ "Element 'queue', attribute 'consumerInstance': [facet 'pattern'] The value 'consumerClass_2' is not accepted by the pattern '[a-zA-Z0-9 \\\\]+'. " ,
201
+ "Element 'queue', attribute 'consumerInstance': 'consumerClass_2' is not a valid value of the atomic type 'instanceType'. " ,
202
+ ],
203
+ ],
204
+ 'invalid maxMessages format ' => [
205
+ '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
206
+ <broker topic="asd" >
207
+ <queue name="queue1" consumer="consumer1" handler="handlerClassOne1::handlerMethod1" consumerInstance="consumerClass1" maxMessages="ABC"/>
208
+ <queue name="queue2" consumer="consumer2" handler="handlerClassOne2::handlerMethod2" consumerInstance="consumerClass2" maxMessages="5"/>
209
+ </broker>
210
+ </config> ' ,
211
+ [
212
+ "Element 'queue', attribute 'maxMessages': 'ABC' is not a valid value of the atomic type 'xs:integer'. " ,
213
+ ],
214
+ ],
215
+ 'unexpected element ' => [
216
+ '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
217
+ <broker topic="asd" >
218
+ <queue name="queue1" consumer="consumer1" handler="handlerClassOne1::handlerMethod1" consumerInstance="consumerClass1" maxMessages="2"/>
219
+ <queue name="queue2" consumer="consumer2" handler="handlerClassOne2::handlerMethod2" consumerInstance="consumerClass2" maxMessages="5"/>
220
+ <unexpected name="queue2"/>
221
+ </broker>
222
+ </config> ' ,
223
+ [
224
+ "Element 'unexpected': This element is not expected. Expected is ( queue ). " ,
225
+ ],
226
+ ],
227
+ 'unexpected attribute ' => [
228
+ '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework-message-queue:etc/queue.xsd">
229
+ <broker topic="asd" >
230
+ <queue name="queue1" consumer="consumer1" handler="handlerClassOne1::handlerMethod1" consumerInstance="consumerClass1" maxMessages="2"/>
231
+ <queue name="queue2" consumer="consumer2" handler="handlerClassOne2::handlerMethod2" consumerInstance="consumerClass2" maxMessages="5" unexpected="unexpected"/>
232
+ </broker>
233
+ </config> ' ,
234
+ [
235
+ "Element 'queue', attribute 'unexpected': The attribute 'unexpected' is not allowed. " ,
236
+ ],
237
+ ],
238
+ ];
239
+ // @codingStandardsIgnoreEnd
240
+ }
128
241
}
0 commit comments