forked from phpcfdi/cfdi-cleaner
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSetKnownSchemaLocationsTest.php
113 lines (95 loc) · 4.29 KB
/
SetKnownSchemaLocationsTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<?php
/** @noinspection XmlPathReference */
declare(strict_types=1);
namespace PhpCfdi\CfdiCleaner\Tests\Features\XmlDocumentCleaners;
use PhpCfdi\CfdiCleaner\Tests\TestCase;
use PhpCfdi\CfdiCleaner\Tests\Traits\UseSatNsRegistryTrait;
use PhpCfdi\CfdiCleaner\XmlDocumentCleaners\SetKnownSchemaLocations;
final class SetKnownSchemaLocationsTest extends TestCase
{
use UseSatNsRegistryTrait;
public function testSetKnownSchemaLocations(): void
{
$document = $this->createDocument(<<<XML
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" Version="3.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 cfdi.xsd"
>
<cfdi:Complemento>
<tfd:TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" Version="1.1"
xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital tfd.xsd"
/>
</cfdi:Complemento>
</cfdi:Comprobante>
XML);
$cleaner = new SetKnownSchemaLocations();
$cleaner->clean($document);
$xsdCfd = 'http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd';
$xsdTfd = 'http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/TimbreFiscalDigitalv11.xsd';
$expected = $this->createDocument(<<<XML
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" Version="3.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 $xsdCfd"
>
<cfdi:Complemento>
<tfd:TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" Version="1.1"
xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital $xsdTfd"
/>
</cfdi:Complemento>
</cfdi:Comprobante>
XML);
$this->assertEquals($expected, $document);
}
public function testSetKnownSchemaLocationsWithoutVersion(): void
{
$document = $this->createDocument(<<<XML
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 cfdi.xsd"/>
XML);
$cleaner = new SetKnownSchemaLocations();
$cleaner->clean($document);
$expected = $this->createDocument(<<<XML
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 cfdi.xsd"/>
XML);
$this->assertEquals($expected, $document);
}
public function testSetKnownSchemaLocationsWithUnknownNamespace(): void
{
$document = $this->createDocument(<<<XML
<foo:Foo xmlns:foo="http://tempuri.org/foo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tempuri.org/foo foo.xsd" />
XML);
$cleaner = new SetKnownSchemaLocations();
$cleaner->clean($document);
$expected = $this->createDocument(<<<XML
<foo:Foo xmlns:foo="http://tempuri.org/foo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tempuri.org/foo foo.xsd" />
XML);
$this->assertEquals($expected, $document);
}
public function testKnowAllLocationsFromSatNsRegistry(): void
{
$registry = $this->getSatNsRegistry();
// re-create the known list of namespace#version => xsd-location
$expected = [];
foreach ($registry as $entry) {
$namespace = $entry->namespace ?? '';
$version = $entry->version ?? '';
$xsd = $entry->xsd ?? '';
if ($namespace && $xsd) {
$expected[$namespace . '#' . $version] = $xsd;
}
}
ksort($expected, SORT_STRING);
$knownLocations = SetKnownSchemaLocations::getKnownNamespaces();
ksort($knownLocations, SORT_STRING);
$this->assertSame(
$expected,
$knownLocations,
'The list of known namespace#version => xsd-location is different from phpcfdi/sat-ns-registry',
);
}
}