@@ -10,15 +10,26 @@ class XsdTest extends \PHPUnit\Framework\TestCase
1010 /**
1111 * @var string
1212 */
13- protected $ _schemaFile ;
13+ private $ schemaFile ;
1414
15+ /**
16+ * @var string
17+ */
18+ private $ schemaQueueFile ;
19+
20+ /**
21+ * Set up.
22+ *
23+ * @return void
24+ */
1525 protected function setUp ()
1626 {
1727 if (!function_exists ('libxml_set_external_entity_loader ' )) {
1828 $ this ->markTestSkipped ('Skipped on HHVM. Will be fixed in MAGETWO-45033 ' );
1929 }
2030 $ 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 ' );
2233 }
2334
2435 /**
@@ -29,13 +40,13 @@ protected function setUp()
2940 public function testExemplarXml ($ fixtureXml , array $ expectedErrors )
3041 {
3142 $ validationState = $ this ->createMock (\Magento \Framework \Config \ValidationStateInterface::class);
32- $ validationState ->expects ($ this ->any ())
43+ $ validationState ->expects ($ this ->atLeastOnce ())
3344 ->method ('isValidationRequired ' )
3445 ->willReturn (true );
3546 $ messageFormat = '%message% ' ;
3647 $ dom = new \Magento \Framework \Config \Dom ($ fixtureXml , $ validationState , [], null , null , $ messageFormat );
3748 $ actualErrors = [];
38- $ actualResult = $ dom ->validate ($ this ->_schemaFile , $ actualErrors );
49+ $ actualResult = $ dom ->validate ($ this ->schemaFile , $ actualErrors );
3950 $ this ->assertEquals (empty ($ expectedErrors ), $ actualResult , "Validation result is invalid. " );
4051 $ this ->assertEquals ($ expectedErrors , $ actualErrors , "Validation errors does not match. " );
4152 }
@@ -125,4 +136,106 @@ public function exemplarXmlDataProvider()
125136 ];
126137 // @codingStandardsIgnoreEnd
127138 }
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+ }
128241}
0 commit comments