mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
383 lines
21 KiB
PHP
383 lines
21 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
namespace Magento\Integration\Test\Unit\Model\Config;
|
|
|
|
use Magento\Framework\Config\Dom;
|
|
use Magento\Framework\Config\Dom\UrnResolver;
|
|
use Magento\Framework\Config\ValidationStateInterface;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
/**
|
|
* Test for validation rules implemented by XSD schema for integration configuration.
|
|
*/
|
|
class XsdTest extends TestCase
|
|
{
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $schemaFile;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
if (!function_exists('libxml_set_external_entity_loader')) {
|
|
$this->markTestSkipped('Skipped on HHVM. Will be fixed in MAGETWO-45033');
|
|
}
|
|
$urnResolver = new UrnResolver();
|
|
$this->schemaFile = $urnResolver->getRealPath(
|
|
'urn:magento:module:Magento_Integration:etc/integration/config.xsd'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @param string $fixtureXml
|
|
* @param array $expectedErrors
|
|
* @dataProvider exemplarXmlDataProvider
|
|
*/
|
|
public function testExemplarXml($fixtureXml, array $expectedErrors)
|
|
{
|
|
$validationStateMock = $this->getMockForAbstractClass(ValidationStateInterface::class);
|
|
$validationStateMock->method('isValidationRequired')
|
|
->willReturn(true);
|
|
$messageFormat = '%message%';
|
|
$dom = new Dom($fixtureXml, $validationStateMock, [], null, null, $messageFormat);
|
|
$actualResult = $dom->validate($this->schemaFile, $actualErrors);
|
|
$this->assertEquals(empty($expectedErrors), $actualResult, "Validation result is invalid.");
|
|
foreach ($expectedErrors as $error) {
|
|
$this->assertContains($error, $actualErrors, "Validation errors does not match.");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
|
*/
|
|
public function exemplarXmlDataProvider()
|
|
{
|
|
return [
|
|
/** Valid configurations */
|
|
'valid' => [
|
|
'<integrations>
|
|
<integration name="TestIntegration">
|
|
<email>test-integration@magento.com</email>
|
|
<endpoint_url>https://endpoint.url</endpoint_url>
|
|
<identity_link_url>http://www.example.com/identity</identity_link_url>
|
|
</integration>
|
|
</integrations>',
|
|
[],
|
|
],
|
|
'valid with several entities' => [
|
|
'<integrations>
|
|
<integration name="TestIntegration1">
|
|
<email>test-integration1@magento.com</email>
|
|
<endpoint_url>http://endpoint.url</endpoint_url>
|
|
<identity_link_url>http://www.example.com/identity</identity_link_url>
|
|
</integration>
|
|
<integration name="TestIntegration2">
|
|
<email>test-integration2@magento.com</email>
|
|
</integration>
|
|
</integrations>',
|
|
[],
|
|
],
|
|
/** Missing required elements */
|
|
'empty root node' => [
|
|
'<integrations/>',
|
|
[
|
|
"Element 'integrations': Missing child element(s). Expected is ( integration ).The xml was: \n" .
|
|
"0:<?xml version=\"1.0\"?>\n1:<integrations/>\n2:\n"
|
|
],
|
|
],
|
|
'empty integration' => [
|
|
'<integrations>
|
|
<integration name="TestIntegration" />
|
|
</integrations>',
|
|
[
|
|
"Element 'integration': Missing child element(s). Expected is ( email ).The xml was: \n" .
|
|
"0:<?xml version=\"1.0\"?>\n1:<integrations>\n2: <integration " .
|
|
"name=\"TestIntegration\"/>\n3: </integrations>\n4:\n"
|
|
],
|
|
],
|
|
'integration without email' => [
|
|
'<integrations>
|
|
<integration name="TestIntegration1">
|
|
<endpoint_url>http://endpoint.url</endpoint_url>
|
|
<identity_link_url>http://www.example.com/identity</identity_link_url>
|
|
</integration>
|
|
</integrations>',
|
|
[
|
|
"Element 'endpoint_url': This element is not expected. Expected is ( email ).The xml was: \n" .
|
|
"0:<?xml version=\"1.0\"?>\n1:<integrations>\n2: <integration " .
|
|
"name=\"TestIntegration1\">\n3: <endpoint_url>http://endpoint.url" .
|
|
"</endpoint_url>\n4: <identity_link_url>http://www.example.com/identity" .
|
|
"</identity_link_url>\n5: </integration>\n6: " .
|
|
"</integrations>\n7:\n"
|
|
],
|
|
],
|
|
/** Empty nodes */
|
|
'empty email' => [
|
|
'<integrations>
|
|
<integration name="TestIntegration1">
|
|
<email></email>
|
|
<endpoint_url>http://endpoint.url</endpoint_url>
|
|
<identity_link_url>http://www.example.com/identity</identity_link_url>
|
|
</integration>
|
|
</integrations>',
|
|
[
|
|
"Element 'email': [facet 'pattern'] The value '' is not accepted by the pattern " .
|
|
"'[^@]+@[^\.]+\..+'.The xml was: \n0:<?xml version=\"1.0\"?>\n1:<integrations>\n" .
|
|
"2: <integration name=\"TestIntegration1\">\n3: " .
|
|
"<email/>\n4: <endpoint_url>http://endpoint.url</endpoint_url>\n" .
|
|
"5: <identity_link_url>http://www.example.com/identity" .
|
|
"</identity_link_url>\n6: </integration>\n7: " .
|
|
"</integrations>\n8:\n"
|
|
],
|
|
],
|
|
'endpoint_url is empty' => [
|
|
'<integrations>
|
|
<integration name="TestIntegration1">
|
|
<email>test-integration1@magento.com</email>
|
|
<endpoint_url></endpoint_url>
|
|
</integration>
|
|
</integrations>',
|
|
[
|
|
"Element 'endpoint_url': [facet 'minLength'] The value has a length of '0'; this underruns the " .
|
|
"allowed minimum length of '4'.The xml was: \n0:<?xml version=\"1.0\"?>\n1:<integrations>\n" .
|
|
"2: <integration name=\"TestIntegration1\">\n3: " .
|
|
"<email>test-integration1@magento.com</email>\n4: <endpoint_url/>\n" .
|
|
"5: </integration>\n6: </integrations>\n7:\n"
|
|
],
|
|
],
|
|
'identity_link_url is empty' => [
|
|
'<integrations>
|
|
<integration name="TestIntegration1">
|
|
<email>test-integration1@magento.com</email>
|
|
<endpoint_url>http://endpoint.url</endpoint_url>
|
|
<identity_link_url></identity_link_url>
|
|
</integration>
|
|
</integrations>',
|
|
[
|
|
"Element 'identity_link_url': [facet 'minLength'] The value has a length of '0'; this underruns " .
|
|
"the allowed minimum length of '4'.The xml was: \n0:<?xml version=\"1.0\"?>\n1:<integrations>\n" .
|
|
"2: <integration name=\"TestIntegration1\">\n3: " .
|
|
"<email>test-integration1@magento.com</email>\n4: <endpoint_url>" .
|
|
"http://endpoint.url</endpoint_url>\n5: <identity_link_url/>\n" .
|
|
"6: </integration>\n7: </integrations>\n8:\n"
|
|
],
|
|
],
|
|
/** Invalid structure */
|
|
'irrelevant root node' => [
|
|
'<integration name="TestIntegration"/>',
|
|
[
|
|
"Element 'integration': No matching global declaration available for the validation root." .
|
|
"The xml was: \n0:<?xml version=\"1.0\"?>\n1:<integration name=\"TestIntegration\"/>\n2:\n"
|
|
],
|
|
],
|
|
'irrelevant node in root' => [
|
|
'<integrations>
|
|
<integration name="TestIntegration1">
|
|
<email>test-integration1@magento.com</email>
|
|
<endpoint_url>http://endpoint.url</endpoint_url>
|
|
<identity_link_url>http://www.example.com/identity</identity_link_url>
|
|
</integration>
|
|
<invalid/>
|
|
</integrations>',
|
|
[
|
|
"Element 'invalid': This element is not expected. Expected is ( integration ).The xml was: \n" .
|
|
"2: <integration name=\"TestIntegration1\">\n3: " .
|
|
"<email>test-integration1@magento.com</email>\n4: <endpoint_url>" .
|
|
"http://endpoint.url</endpoint_url>\n5: <identity_link_url>" .
|
|
"http://www.example.com/identity</identity_link_url>\n6: </integration>\n" .
|
|
"7: <invalid/>\n8: </integrations>\n9:\n"
|
|
],
|
|
],
|
|
'irrelevant node in integration' => [
|
|
'<integrations>
|
|
<integration name="TestIntegration1">
|
|
<email>test-integration1@magento.com</email>
|
|
<endpoint_url>http://endpoint.url</endpoint_url>
|
|
<identity_link_url>http://www.example.com/identity</identity_link_url>
|
|
<invalid/>
|
|
</integration>
|
|
</integrations>',
|
|
[
|
|
"Element 'invalid': This element is not expected.The xml was: \n1:<integrations>\n" .
|
|
"2: <integration name=\"TestIntegration1\">\n3: " .
|
|
"<email>test-integration1@magento.com</email>\n4: <endpoint_url>" .
|
|
"http://endpoint.url</endpoint_url>\n5: <identity_link_url>" .
|
|
"http://www.example.com/identity</identity_link_url>\n6: <invalid/>\n" .
|
|
"7: </integration>\n8: </integrations>\n9:\n"
|
|
],
|
|
],
|
|
'irrelevant node in authentication' => [
|
|
'<integrations>
|
|
<integration name="TestIntegration1">
|
|
<email>test-integration1@magento.com</email>
|
|
<endpoint_url>http://endpoint.url</endpoint_url>
|
|
<identity_link_url>http://www.example.com/identity</identity_link_url>
|
|
<invalid/>
|
|
</integration>
|
|
</integrations>',
|
|
[
|
|
"Element 'invalid': This element is not expected.The xml was: \n1:<integrations>\n" .
|
|
"2: <integration name=\"TestIntegration1\">\n3: " .
|
|
"<email>test-integration1@magento.com</email>\n4: <endpoint_url>" .
|
|
"http://endpoint.url</endpoint_url>\n5: <identity_link_url>" .
|
|
"http://www.example.com/identity</identity_link_url>\n6: <invalid/>\n" .
|
|
"7: </integration>\n8: </integrations>\n9:\n"
|
|
],
|
|
],
|
|
/** Excessive attributes */
|
|
'invalid attribute in root' => [
|
|
'<integrations invalid="invalid">
|
|
<integration name="TestIntegration1">
|
|
<email>test-integration1@magento.com</email>
|
|
<endpoint_url>http://endpoint.url</endpoint_url>
|
|
<identity_link_url>http://www.example.com/identity</identity_link_url>
|
|
</integration>
|
|
</integrations>',
|
|
[
|
|
"Element 'integrations', attribute 'invalid': The attribute 'invalid' is not allowed.The xml " .
|
|
"was: \n0:<?xml version=\"1.0\"?>\n1:<integrations invalid=\"invalid\">\n2: " .
|
|
"<integration name=\"TestIntegration1\">\n3: <email>" .
|
|
"test-integration1@magento.com</email>\n4: <endpoint_url>" .
|
|
"http://endpoint.url</endpoint_url>\n5: <identity_link_url>" .
|
|
"http://www.example.com/identity</identity_link_url>\n6: </integration>\n" .
|
|
"7: </integrations>\n8:\n"
|
|
],
|
|
],
|
|
'invalid attribute in integration' => [
|
|
'<integrations>
|
|
<integration name="TestIntegration1" invalid="invalid">
|
|
<email>test-integration1@magento.com</email>
|
|
<endpoint_url>http://endpoint.url</endpoint_url>
|
|
<identity_link_url>http://www.example.com/identity</identity_link_url>
|
|
</integration>
|
|
</integrations>',
|
|
[
|
|
"Element 'integration', attribute 'invalid': The attribute 'invalid' is not allowed.The xml " .
|
|
"was: \n0:<?xml version=\"1.0\"?>\n1:<integrations>\n2: <integration " .
|
|
"name=\"TestIntegration1\" invalid=\"invalid\">\n3: <email>" .
|
|
"test-integration1@magento.com</email>\n4: <endpoint_url>" .
|
|
"http://endpoint.url</endpoint_url>\n5: <identity_link_url>" .
|
|
"http://www.example.com/identity</identity_link_url>\n6: </integration>\n" .
|
|
"7: </integrations>\n8:\n"
|
|
],
|
|
],
|
|
'invalid attribute in email' => [
|
|
'<integrations>
|
|
<integration name="TestIntegration1">
|
|
<email invalid="invalid">test-integration1@magento.com</email>
|
|
<endpoint_url>http://endpoint.url</endpoint_url>
|
|
<identity_link_url>http://www.example.com/identity</identity_link_url>
|
|
</integration>
|
|
</integrations>',
|
|
[
|
|
"Element 'email', attribute 'invalid': The attribute 'invalid' is not allowed.The xml was: \n" .
|
|
"0:<?xml version=\"1.0\"?>\n1:<integrations>\n2: <integration " .
|
|
"name=\"TestIntegration1\">\n3: <email invalid=\"invalid\">" .
|
|
"test-integration1@magento.com</email>\n4: <endpoint_url>" .
|
|
"http://endpoint.url</endpoint_url>\n5: <identity_link_url>" .
|
|
"http://www.example.com/identity</identity_link_url>\n6: </integration>\n" .
|
|
"7: </integrations>\n8:\n"
|
|
],
|
|
],
|
|
'invalid attribute in endpoint_url' => [
|
|
'<integrations>
|
|
<integration name="TestIntegration1">
|
|
<email>test-integration1@magento.com</email>
|
|
<endpoint_url invalid="invalid">http://endpoint.url</endpoint_url>
|
|
<identity_link_url>http://www.example.com/identity</identity_link_url>
|
|
</integration>
|
|
</integrations>',
|
|
[
|
|
"Element 'endpoint_url', attribute 'invalid': The attribute 'invalid' is not allowed.The xml " .
|
|
"was: \n0:<?xml version=\"1.0\"?>\n1:<integrations>\n2: <integration " .
|
|
"name=\"TestIntegration1\">\n3: <email>test-integration1@magento.com" .
|
|
"</email>\n4: <endpoint_url invalid=\"invalid\">http://endpoint.url" .
|
|
"</endpoint_url>\n5: <identity_link_url>http://www.example.com/identity" .
|
|
"</identity_link_url>\n6: </integration>\n7: " .
|
|
"</integrations>\n8:\n"
|
|
],
|
|
],
|
|
'invalid attribute in identity_link_url' => [
|
|
'<integrations>
|
|
<integration name="TestIntegration1">
|
|
<email>test-integration1@magento.com</email>
|
|
<endpoint_url>http://endpoint.url</endpoint_url>
|
|
<identity_link_url invalid="invalid">http://endpoint.url</identity_link_url>
|
|
</integration>
|
|
</integrations>',
|
|
[
|
|
"Element 'identity_link_url', attribute 'invalid': The attribute 'invalid' is not allowed." .
|
|
"The xml was: \n0:<?xml version=\"1.0\"?>\n1:<integrations>\n2: <integration" .
|
|
" name=\"TestIntegration1\">\n3: <email>test-integration1@magento.com" .
|
|
"</email>\n4: <endpoint_url>http://endpoint.url</endpoint_url>\n" .
|
|
"5: <identity_link_url invalid=\"invalid\">http://endpoint.url" .
|
|
"</identity_link_url>\n6: </integration>\n" .
|
|
"7: </integrations>\n8:\n"
|
|
],
|
|
],
|
|
/** Missing or empty required attributes */
|
|
'integration without name' => [
|
|
'<integrations>
|
|
<integration>
|
|
<email>test-integration1@magento.com</email>
|
|
<endpoint_url>http://endpoint.url</endpoint_url>
|
|
<identity_link_url>http://www.example.com/identity</identity_link_url>
|
|
</integration>
|
|
</integrations>',
|
|
[
|
|
"Element 'integration': The attribute 'name' is required but missing.The xml was: \n" .
|
|
"0:<?xml version=\"1.0\"?>\n1:<integrations>\n2: <integration>\n" .
|
|
"3: <email>test-integration1@magento.com</email>\n" .
|
|
"4: <endpoint_url>http://endpoint.url</endpoint_url>\n" .
|
|
"5: <identity_link_url>http://www.example.com/identity" .
|
|
"</identity_link_url>\n6: </integration>\n7: " .
|
|
"</integrations>\n8:\n"
|
|
],
|
|
],
|
|
'integration with empty name' => [
|
|
'<integrations>
|
|
<integration name="">
|
|
<email>test-integration1@magento.com</email>
|
|
<endpoint_url>http://endpoint.url</endpoint_url>
|
|
<identity_link_url>http://www.example.com/identity</identity_link_url>
|
|
</integration>
|
|
</integrations>',
|
|
[
|
|
"Element 'integration', attribute 'name': '' is not a valid value of the atomic type " .
|
|
"'integrationNameType'.The xml was: \n0:<?xml version=\"1.0\"?>\n1:<integrations>\n" .
|
|
"2: <integration name=\"\">\n3: <email>" .
|
|
"test-integration1@magento.com</email>\n4: <endpoint_url>" .
|
|
"http://endpoint.url</endpoint_url>\n5: <identity_link_url>" .
|
|
"http://www.example.com/identity</identity_link_url>\n6: </integration>\n" .
|
|
"7: </integrations>\n8:\n"
|
|
],
|
|
],
|
|
/** Invalid values */
|
|
'invalid email' => [
|
|
'<integrations>
|
|
<integration name="TestIntegration1">
|
|
<email>invalid</email>
|
|
<endpoint_url>http://endpoint.url</endpoint_url>
|
|
<identity_link_url>http://www.example.com/identity</identity_link_url>
|
|
</integration>
|
|
</integrations>',
|
|
[
|
|
"Element 'email': 'invalid' is not a valid value of the atomic type 'emailType'.The xml was: \n" .
|
|
"0:<?xml version=\"1.0\"?>\n1:<integrations>\n2: <integration " .
|
|
"name=\"TestIntegration1\">\n3: <email>invalid</email>\n" .
|
|
"4: <endpoint_url>http://endpoint.url</endpoint_url>\n" .
|
|
"5: <identity_link_url>http://www.example.com/identity" .
|
|
"</identity_link_url>\n6: </integration>\n" .
|
|
"7: </integrations>\n8:\n"
|
|
],
|
|
]
|
|
];
|
|
}
|
|
}
|