Skip to content

Commit b981ba1

Browse files
committed
* DtdValidator can be instantiated with custom dtds
* DtdValidator can be instantiated for a directory with DTDs `::forDtdDirectory()`
1 parent b99c7d6 commit b981ba1

11 files changed

+24
-22
lines changed

src/CXml/Validation/DtdValidator.php

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,19 @@
1515

1616
readonly class DtdValidator
1717
{
18-
public function __construct(private string $pathToCxmlDtds)
18+
public function __construct(
19+
private array $pathToDtds,
20+
) {
21+
Assertion::notEmpty($pathToDtds);
22+
}
23+
24+
public static function forDtdDirectory(string $directory): self
1925
{
20-
Assertion::directory($pathToCxmlDtds);
21-
Assertion::file($pathToCxmlDtds . '/cXML.dtd');
22-
Assertion::file($pathToCxmlDtds . '/Fulfill.dtd');
23-
Assertion::file($pathToCxmlDtds . '/Quote.dtd');
26+
Assertion::directory($directory);
27+
28+
$pathToDtds = glob($directory . '/*.dtd');
29+
30+
return new self($pathToDtds);
2431
}
2532

2633
/**
@@ -38,12 +45,7 @@ public function validateAgainstDtd(string $xml): void
3845
$old = new DOMDocument();
3946
$old->loadXML($xml);
4047

41-
$validateFiles = ['cXML.dtd', 'Fulfill.dtd', 'Quote.dtd'];
42-
if (file_exists($this->pathToCxmlDtds . '/Custom.dtd')) {
43-
$validateFiles[] = 'Custom.dtd';
44-
}
45-
46-
$this->validateAgainstMultipleDtd($validateFiles, $old);
48+
$this->validateAgainstMultipleDtd($this->pathToDtds, $old);
4749

4850
// reset throwing of php errors for libxml
4951
libxml_use_internal_errors($internalErrors);
@@ -57,7 +59,7 @@ private function injectDtd(DOMDocument $originalDomDocument, string $dtdFilename
5759
$creator = new DOMImplementation();
5860

5961
try {
60-
$doctype = $creator->createDocumentType('cXML', '', $this->pathToCxmlDtds . '/' . $dtdFilename);
62+
$doctype = $creator->createDocumentType('cXML', '', $dtdFilename);
6163
$new = $creator->createDocument('', '', $doctype);
6264
} catch (DOMException $domException) {
6365
throw new CXmlInvalidException($domException->getMessage(), (string)$originalDomDocument->saveXML(), $domException);

tests/CXmlTest/Handling/HandlerTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ private static function loadFixture(string $filename): ?string
5252
public function testEndpoint(string $requestCxml, string $expectedHandlerCalled): void
5353
{
5454
$serializer = Serializer::create();
55-
$messageValidator = new DtdValidator(__DIR__ . '/../../metadata/cxml/dtd/1.2.050');
55+
$messageValidator = DtdValidator::forDtdDirectory(__DIR__ . '/../../metadata/cxml/dtd/1.2.050');
5656

5757
$credentialRepository = new Registry();
5858
$credentialRepository->registerCredential(

tests/CXmlTest/Model/OrderRequestTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ final class OrderRequestTest extends TestCase implements PayloadIdentityFactoryI
4343

4444
protected function setUp(): void
4545
{
46-
$this->dtdValidator = new DtdValidator(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
46+
$this->dtdValidator = DtdValidator::forDtdDirectory(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
4747
}
4848

4949
public function testMinimumExample(): void

tests/CXmlTest/Model/ProductActivityMessageTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ final class ProductActivityMessageTest extends TestCase implements PayloadIdenti
3131

3232
protected function setUp(): void
3333
{
34-
$this->dtdValidator = new DtdValidator(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
34+
$this->dtdValidator = DtdValidator::forDtdDirectory(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
3535
}
3636

3737
public function testMinimumExample(): void

tests/CXmlTest/Model/PunchOutSetupRequestTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ final class PunchOutSetupRequestTest extends TestCase implements PayloadIdentity
4141

4242
protected function setUp(): void
4343
{
44-
$this->dtdValidator = new DtdValidator(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
44+
$this->dtdValidator = DtdValidator::forDtdDirectory(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
4545
}
4646

4747
public function testMinimumExample(): void

tests/CXmlTest/Model/PunchoutOrderMessageAdvancedPricingTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ final class PunchoutOrderMessageAdvancedPricingTest extends TestCase implements
3232

3333
protected function setUp(): void
3434
{
35-
$this->dtdValidator = new DtdValidator(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
35+
$this->dtdValidator = DtdValidator::forDtdDirectory(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
3636
}
3737

3838
public function testMinimumExampleAdvPricing(): void

tests/CXmlTest/Model/PunchoutOrderMessageTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ final class PunchoutOrderMessageTest extends TestCase implements PayloadIdentity
3232

3333
protected function setUp(): void
3434
{
35-
$this->dtdValidator = new DtdValidator(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
35+
$this->dtdValidator = DtdValidator::forDtdDirectory(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
3636
}
3737

3838
public function testMinimumExample(): void

tests/CXmlTest/Model/QuoteMessageTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ final class QuoteMessageTest extends TestCase implements PayloadIdentityFactoryI
3737

3838
protected function setUp(): void
3939
{
40-
$this->dtdValidator = new DtdValidator(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
40+
$this->dtdValidator = DtdValidator::forDtdDirectory(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
4141
}
4242

4343
public function testMinimumExample(): void

tests/CXmlTest/Model/ShipNoticeRequestTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ final class ShipNoticeRequestTest extends TestCase implements PayloadIdentityFac
3030

3131
protected function setUp(): void
3232
{
33-
$this->dtdValidator = new DtdValidator(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
33+
$this->dtdValidator = DtdValidator::forDtdDirectory(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
3434
}
3535

3636
public function testMinimumExample(): void

tests/CXmlTest/Model/StatusUpdateRequestTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ final class StatusUpdateRequestTest extends TestCase implements PayloadIdentityF
2626

2727
protected function setUp(): void
2828
{
29-
$this->dtdValidator = new DtdValidator(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
29+
$this->dtdValidator = DtdValidator::forDtdDirectory(__DIR__ . '/../../metadata/cxml/dtd/1.2.050/');
3030
}
3131

3232
public function testMinimumExample(): void

0 commit comments

Comments
 (0)