PageRenderTime 45ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/app/code/Magento/Integration/Test/Unit/Model/Config/XsdTest.php

https://gitlab.com/crazybutterfly815/magento2
PHP | 277 lines | 247 code | 4 blank | 26 comment | 2 complexity | 8368e89d655df310bec99fe1b2e1e425 MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Integration\Test\Unit\Model\Config;
  7. /**
  8. * Test for validation rules implemented by XSD schema for integration configuration.
  9. */
  10. class XsdTest extends \PHPUnit_Framework_TestCase
  11. {
  12. /**
  13. * @var string
  14. */
  15. protected $schemaFile;
  16. protected function setUp()
  17. {
  18. if (!function_exists('libxml_set_external_entity_loader')) {
  19. $this->markTestSkipped('Skipped on HHVM. Will be fixed in MAGETWO-45033');
  20. }
  21. $urnResolver = new \Magento\Framework\Config\Dom\UrnResolver();
  22. $this->schemaFile = $urnResolver->getRealPath(
  23. 'urn:magento:module:Magento_Integration:etc/integration/config.xsd'
  24. );
  25. }
  26. /**
  27. * @param string $fixtureXml
  28. * @param array $expectedErrors
  29. * @dataProvider exemplarXmlDataProvider
  30. */
  31. public function testExemplarXml($fixtureXml, array $expectedErrors)
  32. {
  33. $validationStateMock = $this->getMock(
  34. \Magento\Framework\Config\ValidationStateInterface::class,
  35. [],
  36. [],
  37. '',
  38. false
  39. );
  40. $validationStateMock->method('isValidationRequired')
  41. ->willReturn(true);
  42. $messageFormat = '%message%';
  43. $dom = new \Magento\Framework\Config\Dom($fixtureXml, $validationStateMock, [], null, null, $messageFormat);
  44. $actualResult = $dom->validate($this->schemaFile, $actualErrors);
  45. $this->assertEquals(empty($expectedErrors), $actualResult, "Validation result is invalid.");
  46. $this->assertEquals($expectedErrors, $actualErrors, "Validation errors does not match.");
  47. }
  48. /**
  49. * @return array
  50. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  51. */
  52. public function exemplarXmlDataProvider()
  53. {
  54. return [
  55. /** Valid configurations */
  56. 'valid' => [
  57. '<integrations>
  58. <integration name="TestIntegration">
  59. <email>test-integration@magento.com</email>
  60. <endpoint_url>https://endpoint.url</endpoint_url>
  61. <identity_link_url>http://www.example.com/identity</identity_link_url>
  62. </integration>
  63. </integrations>',
  64. [],
  65. ],
  66. 'valid with several entities' => [
  67. '<integrations>
  68. <integration name="TestIntegration1">
  69. <email>test-integration1@magento.com</email>
  70. <endpoint_url>http://endpoint.url</endpoint_url>
  71. <identity_link_url>http://www.example.com/identity</identity_link_url>
  72. </integration>
  73. <integration name="TestIntegration2">
  74. <email>test-integration2@magento.com</email>
  75. </integration>
  76. </integrations>',
  77. [],
  78. ],
  79. /** Missing required elements */
  80. 'empty root node' => [
  81. '<integrations/>',
  82. ["Element 'integrations': Missing child element(s). Expected is ( integration )."],
  83. ],
  84. 'empty integration' => [
  85. '<integrations>
  86. <integration name="TestIntegration" />
  87. </integrations>',
  88. ["Element 'integration': Missing child element(s). Expected is ( email )."],
  89. ],
  90. 'integration without email' => [
  91. '<integrations>
  92. <integration name="TestIntegration1">
  93. <endpoint_url>http://endpoint.url</endpoint_url>
  94. <identity_link_url>http://www.example.com/identity</identity_link_url>
  95. </integration>
  96. </integrations>',
  97. ["Element 'endpoint_url': This element is not expected. Expected is ( email )."],
  98. ],
  99. /** Empty nodes */
  100. 'empty email' => [
  101. '<integrations>
  102. <integration name="TestIntegration1">
  103. <email></email>
  104. <endpoint_url>http://endpoint.url</endpoint_url>
  105. <identity_link_url>http://www.example.com/identity</identity_link_url>
  106. </integration>
  107. </integrations>',
  108. [
  109. "Element 'email': [facet 'pattern'] The value '' is not " .
  110. "accepted by the pattern '[^@]+@[^\.]+\..+'.",
  111. "Element 'email': '' is not a valid value of the atomic type 'emailType'."
  112. ],
  113. ],
  114. 'endpoint_url is empty' => [
  115. '<integrations>
  116. <integration name="TestIntegration1">
  117. <email>test-integration1@magento.com</email>
  118. <endpoint_url></endpoint_url>
  119. </integration>
  120. </integrations>',
  121. [
  122. "Element 'endpoint_url': [facet 'minLength'] The value has a length of '0'; this underruns" .
  123. " the allowed minimum length of '4'.",
  124. "Element 'endpoint_url': '' is not a valid value of the atomic type 'urlType'."
  125. ],
  126. ],
  127. 'identity_link_url is empty' => [
  128. '<integrations>
  129. <integration name="TestIntegration1">
  130. <email>test-integration1@magento.com</email>
  131. <endpoint_url>http://endpoint.url</endpoint_url>
  132. <identity_link_url></identity_link_url>
  133. </integration>
  134. </integrations>',
  135. [
  136. "Element 'identity_link_url': [facet 'minLength'] The value has a length of '0'; this underruns" .
  137. " the allowed minimum length of '4'.",
  138. "Element 'identity_link_url': '' is not a valid value of the atomic type 'urlType'."
  139. ],
  140. ],
  141. /** Invalid structure */
  142. 'irrelevant root node' => [
  143. '<integration name="TestIntegration"/>',
  144. ["Element 'integration': No matching global declaration available for the validation root."],
  145. ],
  146. 'irrelevant node in root' => [
  147. '<integrations>
  148. <integration name="TestIntegration1">
  149. <email>test-integration1@magento.com</email>
  150. <endpoint_url>http://endpoint.url</endpoint_url>
  151. <identity_link_url>http://www.example.com/identity</identity_link_url>
  152. </integration>
  153. <invalid/>
  154. </integrations>',
  155. ["Element 'invalid': This element is not expected. Expected is ( integration )."],
  156. ],
  157. 'irrelevant node in integration' => [
  158. '<integrations>
  159. <integration name="TestIntegration1">
  160. <email>test-integration1@magento.com</email>
  161. <endpoint_url>http://endpoint.url</endpoint_url>
  162. <identity_link_url>http://www.example.com/identity</identity_link_url>
  163. <invalid/>
  164. </integration>
  165. </integrations>',
  166. ["Element 'invalid': This element is not expected."],
  167. ],
  168. 'irrelevant node in authentication' => [
  169. '<integrations>
  170. <integration name="TestIntegration1">
  171. <email>test-integration1@magento.com</email>
  172. <endpoint_url>http://endpoint.url</endpoint_url>
  173. <identity_link_url>http://www.example.com/identity</identity_link_url>
  174. <invalid/>
  175. </integration>
  176. </integrations>',
  177. ["Element 'invalid': This element is not expected."],
  178. ],
  179. /** Excessive attributes */
  180. 'invalid attribute in root' => [
  181. '<integrations invalid="invalid">
  182. <integration name="TestIntegration1">
  183. <email>test-integration1@magento.com</email>
  184. <endpoint_url>http://endpoint.url</endpoint_url>
  185. <identity_link_url>http://www.example.com/identity</identity_link_url>
  186. </integration>
  187. </integrations>',
  188. ["Element 'integrations', attribute 'invalid': The attribute 'invalid' is not allowed."],
  189. ],
  190. 'invalid attribute in integration' => [
  191. '<integrations>
  192. <integration name="TestIntegration1" invalid="invalid">
  193. <email>test-integration1@magento.com</email>
  194. <endpoint_url>http://endpoint.url</endpoint_url>
  195. <identity_link_url>http://www.example.com/identity</identity_link_url>
  196. </integration>
  197. </integrations>',
  198. ["Element 'integration', attribute 'invalid': The attribute 'invalid' is not allowed."],
  199. ],
  200. 'invalid attribute in email' => [
  201. '<integrations>
  202. <integration name="TestIntegration1">
  203. <email invalid="invalid">test-integration1@magento.com</email>
  204. <endpoint_url>http://endpoint.url</endpoint_url>
  205. <identity_link_url>http://www.example.com/identity</identity_link_url>
  206. </integration>
  207. </integrations>',
  208. ["Element 'email', attribute 'invalid': The attribute 'invalid' is not allowed."],
  209. ],
  210. 'invalid attribute in endpoint_url' => [
  211. '<integrations>
  212. <integration name="TestIntegration1">
  213. <email>test-integration1@magento.com</email>
  214. <endpoint_url invalid="invalid">http://endpoint.url</endpoint_url>
  215. <identity_link_url>http://www.example.com/identity</identity_link_url>
  216. </integration>
  217. </integrations>',
  218. ["Element 'endpoint_url', attribute 'invalid': The attribute 'invalid' is not allowed."],
  219. ],
  220. 'invalid attribute in identity_link_url' => [
  221. '<integrations>
  222. <integration name="TestIntegration1">
  223. <email>test-integration1@magento.com</email>
  224. <endpoint_url>http://endpoint.url</endpoint_url>
  225. <identity_link_url invalid="invalid">http://endpoint.url</identity_link_url>
  226. </integration>
  227. </integrations>',
  228. ["Element 'identity_link_url', attribute 'invalid': The attribute 'invalid' is not allowed."],
  229. ],
  230. /** Missing or empty required attributes */
  231. 'integration without name' => [
  232. '<integrations>
  233. <integration>
  234. <email>test-integration1@magento.com</email>
  235. <endpoint_url>http://endpoint.url</endpoint_url>
  236. <identity_link_url>http://www.example.com/identity</identity_link_url>
  237. </integration>
  238. </integrations>',
  239. ["Element 'integration': The attribute 'name' is required but missing."],
  240. ],
  241. 'integration with empty name' => [
  242. '<integrations>
  243. <integration name="">
  244. <email>test-integration1@magento.com</email>
  245. <endpoint_url>http://endpoint.url</endpoint_url>
  246. <identity_link_url>http://www.example.com/identity</identity_link_url>
  247. </integration>
  248. </integrations>',
  249. [
  250. "Element 'integration', attribute 'name': [facet 'minLength'] The value '' has a length of '0'; " .
  251. "this underruns the allowed minimum length of '2'.",
  252. "Element 'integration', attribute 'name': " .
  253. "'' is not a valid value of the atomic type 'integrationNameType'."
  254. ],
  255. ],
  256. /** Invalid values */
  257. 'invalid email' => [
  258. '<integrations>
  259. <integration name="TestIntegration1">
  260. <email>invalid</email>
  261. <endpoint_url>http://endpoint.url</endpoint_url>
  262. <identity_link_url>http://www.example.com/identity</identity_link_url>
  263. </integration>
  264. </integrations>',
  265. [
  266. "Element 'email': [facet 'pattern'] The value 'invalid' " .
  267. "is not accepted by the pattern '[^@]+@[^\.]+\..+'.",
  268. "Element 'email': 'invalid' is not a valid value of the atomic type 'emailType'."
  269. ],
  270. ]
  271. ];
  272. }
  273. }