From 15e829832e641ed8f2551e178928dfbd60fab5ac Mon Sep 17 00:00:00 2001 From: Max Poliakov <48586126+Jaimies@users.noreply.github.com> Date: Sun, 30 Oct 2022 18:20:32 +0100 Subject: [PATCH 1/2] add CUX (Currency Details) segment --- src/Segments/CUXCurrencyDetails.php | 28 +++++++++++++++++++ src/Segments/SegmentFactory.php | 1 + .../Unit/Segments/CUXCurrencyDetailsTest.php | 24 ++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 src/Segments/CUXCurrencyDetails.php create mode 100644 tests/Unit/Segments/CUXCurrencyDetailsTest.php diff --git a/src/Segments/CUXCurrencyDetails.php b/src/Segments/CUXCurrencyDetails.php new file mode 100644 index 0000000..b9166d9 --- /dev/null +++ b/src/Segments/CUXCurrencyDetails.php @@ -0,0 +1,28 @@ +rawValues[1][0]; + } + + public function rawValues(): array + { + return $this->rawValues; + } +} diff --git a/src/Segments/SegmentFactory.php b/src/Segments/SegmentFactory.php index a2f04e1..38a1a80 100644 --- a/src/Segments/SegmentFactory.php +++ b/src/Segments/SegmentFactory.php @@ -24,6 +24,7 @@ final class SegmentFactory implements SegmentFactoryInterface 'BGM' => BGMBeginningOfMessage::class, 'UNT' => UNTMessageFooter::class, 'RFF' => RFFReference::class, + 'CUX' => CUXCurrencyDetails::class, ]; private const TAG_LENGTH = 3; diff --git a/tests/Unit/Segments/CUXCurrencyDetailsTest.php b/tests/Unit/Segments/CUXCurrencyDetailsTest.php new file mode 100644 index 0000000..b27a5ba --- /dev/null +++ b/tests/Unit/Segments/CUXCurrencyDetailsTest.php @@ -0,0 +1,24 @@ +tag()); + self::assertEquals('5', $segment->subId()); + self::assertEquals($rawValues, $segment->rawValues()); + } +} From 21d5c36712f2a5ef369b792abd14160955158829 Mon Sep 17 00:00:00 2001 From: Max Poliakov <48586126+Jaimies@users.noreply.github.com> Date: Sun, 30 Oct 2022 19:31:17 +0100 Subject: [PATCH 2/2] use a 3-letter code for SegmentInterface::tag() instead of the class name --- src/Segments/BGMBeginningOfMessage.php | 2 +- src/Segments/CNTControl.php | 2 +- src/Segments/CUXCurrencyDetails.php | 2 +- src/Segments/DTMDateTimePeriod.php | 2 +- src/Segments/MEADimensions.php | 2 +- src/Segments/NADNameAddress.php | 2 +- src/Segments/PCIPackageId.php | 2 +- src/Segments/RFFReference.php | 4 +- src/Segments/UNHMessageHeader.php | 2 +- src/Segments/UNTMessageFooter.php | 2 +- src/Segments/UnknownSegment.php | 2 +- src/TransactionMessage.php | 2 +- tests/Functional/EdifactParserTest.php | 10 ++--- .../Segments/BGMBeginningOfMessageTest.php | 2 +- tests/Unit/Segments/CNTControlTest.php | 2 +- .../Unit/Segments/CUXCurrencyDetailsTest.php | 2 +- tests/Unit/Segments/DTMDateTimePeriodTest.php | 2 +- tests/Unit/Segments/MEADimensionsTest.php | 2 +- tests/Unit/Segments/NADNameAddressTest.php | 2 +- tests/Unit/Segments/PCIPackageIdTest.php | 2 +- tests/Unit/Segments/RFFReferenceTest.php | 2 +- tests/Unit/Segments/UNHMessageHeaderTest.php | 2 +- tests/Unit/Segments/UNTMessageFooterTest.php | 2 +- tests/Unit/Segments/UnknownSegmentTest.php | 2 +- tests/Unit/TransactionMessageTest.php | 40 +++++++++---------- 25 files changed, 50 insertions(+), 48 deletions(-) diff --git a/src/Segments/BGMBeginningOfMessage.php b/src/Segments/BGMBeginningOfMessage.php index 4deccd3..24656cb 100644 --- a/src/Segments/BGMBeginningOfMessage.php +++ b/src/Segments/BGMBeginningOfMessage.php @@ -16,7 +16,7 @@ public function __construct(array $rawValues) public function tag(): string { - return self::class; + return 'BGM'; } public function subId(): string diff --git a/src/Segments/CNTControl.php b/src/Segments/CNTControl.php index decaf19..c36c3ef 100644 --- a/src/Segments/CNTControl.php +++ b/src/Segments/CNTControl.php @@ -20,7 +20,7 @@ public function __construct(array $rawValues) public function tag(): string { - return self::class; + return 'CNT'; } public function subId(): string diff --git a/src/Segments/CUXCurrencyDetails.php b/src/Segments/CUXCurrencyDetails.php index b9166d9..55a08b4 100644 --- a/src/Segments/CUXCurrencyDetails.php +++ b/src/Segments/CUXCurrencyDetails.php @@ -13,7 +13,7 @@ public function __construct(private array $rawValues) public function tag(): string { - return self::class; + return 'CUX'; } public function subId(): string diff --git a/src/Segments/DTMDateTimePeriod.php b/src/Segments/DTMDateTimePeriod.php index 236f613..605d5ad 100644 --- a/src/Segments/DTMDateTimePeriod.php +++ b/src/Segments/DTMDateTimePeriod.php @@ -18,7 +18,7 @@ public function __construct(array $rawValues) public function tag(): string { - return self::class; + return 'DTM'; } public function subId(): string diff --git a/src/Segments/MEADimensions.php b/src/Segments/MEADimensions.php index 707b0c4..1fb08cc 100644 --- a/src/Segments/MEADimensions.php +++ b/src/Segments/MEADimensions.php @@ -18,7 +18,7 @@ public function __construct(array $rawValues) public function tag(): string { - return self::class; + return 'MEA'; } public function subId(): string diff --git a/src/Segments/NADNameAddress.php b/src/Segments/NADNameAddress.php index be1a3f5..165e179 100644 --- a/src/Segments/NADNameAddress.php +++ b/src/Segments/NADNameAddress.php @@ -18,7 +18,7 @@ public function __construct(array $rawValues) public function tag(): string { - return self::class; + return 'NAD'; } public function subId(): string diff --git a/src/Segments/PCIPackageId.php b/src/Segments/PCIPackageId.php index 65e2123..cad1005 100644 --- a/src/Segments/PCIPackageId.php +++ b/src/Segments/PCIPackageId.php @@ -16,7 +16,7 @@ public function __construct(array $rawValues) public function tag(): string { - return self::class; + return 'PCI'; } public function subId(): string diff --git a/src/Segments/RFFReference.php b/src/Segments/RFFReference.php index ed48f19..557ba45 100644 --- a/src/Segments/RFFReference.php +++ b/src/Segments/RFFReference.php @@ -13,12 +13,14 @@ public function __construct(private array $rawValues) public function tag(): string { - return self::class; + return 'RFF'; } + public function subId(): string { return $this->rawValues[1][0]; } + public function rawValues(): array { return $this->rawValues; diff --git a/src/Segments/UNHMessageHeader.php b/src/Segments/UNHMessageHeader.php index 114eb36..a57a636 100644 --- a/src/Segments/UNHMessageHeader.php +++ b/src/Segments/UNHMessageHeader.php @@ -18,7 +18,7 @@ public function __construct(array $rawValues) public function tag(): string { - return self::class; + return 'UNH'; } public function subId(): string diff --git a/src/Segments/UNTMessageFooter.php b/src/Segments/UNTMessageFooter.php index 35f5733..9de80a2 100644 --- a/src/Segments/UNTMessageFooter.php +++ b/src/Segments/UNTMessageFooter.php @@ -16,7 +16,7 @@ public function __construct(array $rawValues) public function tag(): string { - return self::class; + return 'UNT'; } public function subId(): string diff --git a/src/Segments/UnknownSegment.php b/src/Segments/UnknownSegment.php index aa176e9..504f0f0 100644 --- a/src/Segments/UnknownSegment.php +++ b/src/Segments/UnknownSegment.php @@ -16,7 +16,7 @@ public function __construct(array $rawValues) public function tag(): string { - return self::class; + return 'Unknown'; } public function subId(): string diff --git a/src/TransactionMessage.php b/src/TransactionMessage.php index 2488b19..27b407a 100644 --- a/src/TransactionMessage.php +++ b/src/TransactionMessage.php @@ -68,7 +68,7 @@ private static function hasUnhSegment(self ...$messages): array { return array_values( array_filter($messages, static function (self $m) { - return !empty($m->segmentsByTag(UNHMessageHeader::class)); + return !empty($m->segmentsByTag('UNH')); }) ); } diff --git a/tests/Functional/EdifactParserTest.php b/tests/Functional/EdifactParserTest.php index e7aba79..8c5510b 100644 --- a/tests/Functional/EdifactParserTest.php +++ b/tests/Functional/EdifactParserTest.php @@ -63,19 +63,19 @@ public function extract_values_from_message(): void $message = $transactionResult[0]; /** @var UNHMessageHeader $unh */ - $unh = $message->segmentByTagAndSubId(UNHMessageHeader::class, '1'); + $unh = $message->segmentByTagAndSubId('UNH', '1'); self::assertEquals(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']], $unh->rawValues()); /** @var CNTControl $cnt7 */ - $cnt7 = $message->segmentByTagAndSubId(CNTControl::class, '7'); + $cnt7 = $message->segmentByTagAndSubId('CNT', '7'); self::assertEquals(['CNT', ['7', '0.1', 'KGM']], $cnt7->rawValues()); /** @var CNTControl $cnt11 */ - $cnt11 = $message->segmentByTagAndSubId(CNTControl::class, '11'); + $cnt11 = $message->segmentByTagAndSubId('CNT', '11'); self::assertEquals(['CNT', ['11', '1', 'PCE']], $cnt11->rawValues()); /** @var UNTMessageFooter $unt */ - $unt = $message->segmentByTagAndSubId(UNTMessageFooter::class, '19'); + $unt = $message->segmentByTagAndSubId('UNT', '19'); self::assertEquals(['UNT', '19', '1'], $unt->rawValues()); } @@ -102,7 +102,7 @@ public function use_a_custom_segment_factory(): void self::assertEquals(['CUSTOM', 'anyKey', ['whatever', 'value', '9']], $custom->rawValues()); /** @var CNTControl $cnt11 */ - $cnt11 = $message->segmentByTagAndSubId(CNTControl::class, '11'); + $cnt11 = $message->segmentByTagAndSubId('CNT', '11'); self::assertEquals(['CNT', ['11', '1', 'PCE']], $cnt11->rawValues()); } } diff --git a/tests/Unit/Segments/BGMBeginningOfMessageTest.php b/tests/Unit/Segments/BGMBeginningOfMessageTest.php index 0cbe33d..30045b0 100644 --- a/tests/Unit/Segments/BGMBeginningOfMessageTest.php +++ b/tests/Unit/Segments/BGMBeginningOfMessageTest.php @@ -17,7 +17,7 @@ public function segment_values(): void $rawValues = ['BGM', '340', '00250559268149700889', '9']; $segment = new BGMBeginningOfMessage($rawValues); - self::assertEquals(BGMBeginningOfMessage::class, $segment->tag()); + self::assertEquals('BGM', $segment->tag()); self::assertEquals('340', $segment->subId()); self::assertEquals($rawValues, $segment->rawValues()); } diff --git a/tests/Unit/Segments/CNTControlTest.php b/tests/Unit/Segments/CNTControlTest.php index cdc83e3..78671cd 100644 --- a/tests/Unit/Segments/CNTControlTest.php +++ b/tests/Unit/Segments/CNTControlTest.php @@ -18,7 +18,7 @@ public function segment_values(): void $rawValues = ['CNT', ['7', '0.1', 'KGM']]; $segment = new CNTControl($rawValues); - self::assertEquals(CNTControl::class, $segment->tag()); + self::assertEquals('CNT', $segment->tag()); self::assertEquals('7', $segment->subId()); self::assertEquals($rawValues, $segment->rawValues()); } diff --git a/tests/Unit/Segments/CUXCurrencyDetailsTest.php b/tests/Unit/Segments/CUXCurrencyDetailsTest.php index b27a5ba..6133c7f 100644 --- a/tests/Unit/Segments/CUXCurrencyDetailsTest.php +++ b/tests/Unit/Segments/CUXCurrencyDetailsTest.php @@ -17,7 +17,7 @@ public function segment_values(): void $rawValues = ['CUX', ['5', 'GBP', '9']]; $segment = new CUXCurrencyDetails($rawValues); - self::assertEquals(CUXCurrencyDetails::class, $segment->tag()); + self::assertEquals('CUX', $segment->tag()); self::assertEquals('5', $segment->subId()); self::assertEquals($rawValues, $segment->rawValues()); } diff --git a/tests/Unit/Segments/DTMDateTimePeriodTest.php b/tests/Unit/Segments/DTMDateTimePeriodTest.php index 77be34a..d982d67 100644 --- a/tests/Unit/Segments/DTMDateTimePeriodTest.php +++ b/tests/Unit/Segments/DTMDateTimePeriodTest.php @@ -18,7 +18,7 @@ public function segment_values(): void $rawValues = ['DTM', ['10', '20191002', '102']]; $segment = new DTMDateTimePeriod($rawValues); - self::assertEquals(DTMDateTimePeriod::class, $segment->tag()); + self::assertEquals('DTM', $segment->tag()); self::assertEquals('10', $segment->subId()); self::assertEquals($rawValues, $segment->rawValues()); } diff --git a/tests/Unit/Segments/MEADimensionsTest.php b/tests/Unit/Segments/MEADimensionsTest.php index 764466c..a50b155 100644 --- a/tests/Unit/Segments/MEADimensionsTest.php +++ b/tests/Unit/Segments/MEADimensionsTest.php @@ -17,7 +17,7 @@ public function segment_values(): void $rawValues = ['MEA', 'WT', 'G', ['KGM', '0.1']]; $segment = new MEADimensions($rawValues); - self::assertEquals(MEADimensions::class, $segment->tag()); + self::assertEquals('MEA', $segment->tag()); self::assertEquals('WT', $segment->subId()); self::assertEquals($rawValues, $segment->rawValues()); } diff --git a/tests/Unit/Segments/NADNameAddressTest.php b/tests/Unit/Segments/NADNameAddressTest.php index a40babe..3b9d693 100644 --- a/tests/Unit/Segments/NADNameAddressTest.php +++ b/tests/Unit/Segments/NADNameAddressTest.php @@ -28,7 +28,7 @@ public function segment_values(): void ]; $segment = new NADNameAddress($rawValues); - self::assertEquals(NADNameAddress::class, $segment->tag()); + self::assertEquals('NAD', $segment->tag()); self::assertEquals('CZ', $segment->subId()); self::assertEquals($rawValues, $segment->rawValues()); } diff --git a/tests/Unit/Segments/PCIPackageIdTest.php b/tests/Unit/Segments/PCIPackageIdTest.php index 5a482ea..4f052e6 100644 --- a/tests/Unit/Segments/PCIPackageIdTest.php +++ b/tests/Unit/Segments/PCIPackageIdTest.php @@ -17,7 +17,7 @@ public function segment_values(): void $rawValues = ['PCI', '18', '00250559268149700889']; $segment = new PCIPackageId($rawValues); - self::assertEquals(PCIPackageId::class, $segment->tag()); + self::assertEquals('PCI', $segment->tag()); self::assertEquals('18', $segment->subId()); self::assertEquals($rawValues, $segment->rawValues()); } diff --git a/tests/Unit/Segments/RFFReferenceTest.php b/tests/Unit/Segments/RFFReferenceTest.php index b50d63e..ec614f7 100644 --- a/tests/Unit/Segments/RFFReferenceTest.php +++ b/tests/Unit/Segments/RFFReferenceTest.php @@ -17,7 +17,7 @@ public function segment_values(): void $rawValues = ['RFF', ['ADE', '123413287423784']]; $segment = new RFFReference($rawValues); - self::assertEquals(RFFReference::class, $segment->tag()); + self::assertEquals('RFF', $segment->tag()); self::assertEquals('ADE', $segment->subId()); self::assertEquals($rawValues, $segment->rawValues()); } diff --git a/tests/Unit/Segments/UNHMessageHeaderTest.php b/tests/Unit/Segments/UNHMessageHeaderTest.php index 6719765..366a024 100644 --- a/tests/Unit/Segments/UNHMessageHeaderTest.php +++ b/tests/Unit/Segments/UNHMessageHeaderTest.php @@ -18,7 +18,7 @@ public function segment_values(): void $rawValues = ['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']]; $segment = new UNHMessageHeader($rawValues); - self::assertEquals(UNHMessageHeader::class, $segment->tag()); + self::assertEquals('UNH', $segment->tag()); self::assertEquals('1', $segment->subId()); self::assertEquals($rawValues, $segment->rawValues()); } diff --git a/tests/Unit/Segments/UNTMessageFooterTest.php b/tests/Unit/Segments/UNTMessageFooterTest.php index 5098383..33c1180 100644 --- a/tests/Unit/Segments/UNTMessageFooterTest.php +++ b/tests/Unit/Segments/UNTMessageFooterTest.php @@ -17,7 +17,7 @@ public function segment_values(): void $rawValues = ['UNT', '19', '1']; $segment = new UNTMessageFooter($rawValues); - self::assertEquals(UNTMessageFooter::class, $segment->tag()); + self::assertEquals('UNT', $segment->tag()); self::assertEquals('19', $segment->subId()); self::assertEquals($rawValues, $segment->rawValues()); } diff --git a/tests/Unit/Segments/UnknownSegmentTest.php b/tests/Unit/Segments/UnknownSegmentTest.php index 07a49f1..76590c1 100644 --- a/tests/Unit/Segments/UnknownSegmentTest.php +++ b/tests/Unit/Segments/UnknownSegmentTest.php @@ -17,7 +17,7 @@ public function segment_values(): void $rawValues = ['UNKNOWN', 'SEGMENT']; $segment = new UnknownSegment($rawValues); - self::assertEquals(UnknownSegment::class, $segment->tag()); + self::assertEquals('Unknown', $segment->tag()); self::assertEquals(md5(json_encode($rawValues)), $segment->subId()); self::assertEquals($rawValues, $segment->rawValues()); } diff --git a/tests/Unit/TransactionMessageTest.php b/tests/Unit/TransactionMessageTest.php index 96ae1c2..3aac21f 100644 --- a/tests/Unit/TransactionMessageTest.php +++ b/tests/Unit/TransactionMessageTest.php @@ -23,10 +23,10 @@ public function segments_in_one_message(): void self::assertEquals([ new TransactionMessage([ - UNHMessageHeader::class => [ + 'UNH' => [ '1' => new UNHMessageHeader(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']]), ], - UNTMessageFooter::class => [ + 'UNT' => [ '19' => new UNTMessageFooter(['UNT', '19', '1']), ], ]), @@ -47,18 +47,18 @@ public function segments_in_two_messages(): void EDI; self::assertEquals([ new TransactionMessage([ - UNHMessageHeader::class => [ + 'UNH' => [ '1' => new UNHMessageHeader(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']]), ], - UNTMessageFooter::class => [ + 'UNT' => [ '19' => new UNTMessageFooter(['UNT', '19', '1']), ], ]), new TransactionMessage([ - UNHMessageHeader::class => [ + 'UNH' => [ '2' => new UNHMessageHeader(['UNH', '2', ['IFTMIN', 'S', '94A', 'UN', 'PN002']]), ], - UNTMessageFooter::class => [ + 'UNT' => [ '19' => new UNTMessageFooter(['UNT', '19', '2']), ], ]), @@ -80,13 +80,13 @@ public function one_message_with_multiple_segments_with_the_same_name(): void EDI; self::assertEquals([ new TransactionMessage([ - UNHMessageHeader::class => [ + 'UNH' => [ '1' => new UNHMessageHeader(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']]), ], - UNTMessageFooter::class => [ + 'UNT' => [ '19' => new UNTMessageFooter(['UNT', '19', '1']), ], - CNTControl::class => [ + 'CNT' => [ '7' => new CNTControl(['CNT', ['7', '0.1', 'KGM']]), '11' => new CNTControl(['CNT', ['11', '1', 'PCE']]), '15' => new CNTControl(['CNT', ['15', '0.068224', 'MTQ']]), @@ -112,21 +112,21 @@ public function one_message_is_created_when_start_with_unh_and_ends_with_unt(): EDI; self::assertEquals([ new TransactionMessage([ - UNHMessageHeader::class => [ + 'UNH' => [ '1' => new UNHMessageHeader(['UNH', '1', 'anything']), ], - CNTControl::class => [ + 'CNT' => [ '7' => new CNTControl(['CNT', ['7', '0.1', 'KGM']]), ], - UNTMessageFooter::class => [ + 'UNT' => [ '19' => new UNTMessageFooter(['UNT', '19', '1']), ], ]), new TransactionMessage([ - UNHMessageHeader::class => [ + 'UNH' => [ '2' => new UNHMessageHeader(['UNH', '2', 'anything']), ], - UNTMessageFooter::class => [ + 'UNT' => [ '19' => new UNTMessageFooter(['UNT', '19', '2']), ], ]), @@ -149,13 +149,13 @@ public function previous_unh_are_overridden_if_they_doesnt_have_unt(): void EDI; self::assertEquals([ new TransactionMessage([ - UNHMessageHeader::class => [ + 'UNH' => [ '2' => new UNHMessageHeader(['UNH', '2', 'anything']), ], - CNTControl::class => [ + 'CNT' => [ '5' => new CNTControl(['CNT', ['5', '0.1', 'KGM']]), ], - UNTMessageFooter::class => [ + 'UNT' => [ '10' => new UNTMessageFooter(['UNT', '10', '2']), ], ]), @@ -197,7 +197,7 @@ public function segments_by_tag(): void self::assertEquals([ '5' => new CNTControl(['CNT', ['5', '0.1', 'KGM']]), - ], $firstMessage->segmentsByTag(CNTControl::class)); + ], $firstMessage->segmentsByTag('CNT')); self::assertEmpty($firstMessage->segmentsByTag('unknown')); } @@ -220,10 +220,10 @@ public function segment_by_tag_and_sub_id(): void self::assertEquals( new CNTControl(['CNT', ['5', '0.1', 'KGM']]), - $firstMessage->segmentByTagAndSubId(CNTControl::class, '5') + $firstMessage->segmentByTagAndSubId('CNT', '5') ); - self::assertNull($firstMessage->segmentByTagAndSubId(CNTControl::class, 'unknown')); + self::assertNull($firstMessage->segmentByTagAndSubId('CNT', 'unknown')); } private function transactionMessages(string $fileContent): array