-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
EdifactParserTest.php
105 lines (89 loc) · 3.01 KB
/
EdifactParserTest.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
<?php
declare(strict_types=1);
namespace EdifactParser\Tests\Functional;
use EdifactParser\EdifactParser;
use EdifactParser\Exception\InvalidFile;
use EdifactParser\Segments\CNTControl;
use EdifactParser\Segments\SegmentInterface;
use EdifactParser\Segments\UNHMessageHeader;
use EdifactParser\Segments\UNTMessageFooter;
use PHPUnit\Framework\TestCase;
final class EdifactParserTest extends TestCase
{
/** @test */
public function invalidFileDueToANonPrintableChar(): void
{
$fileContent = <<<EDI
\xE2\x80\xAF
EDI;
$this->expectException(InvalidFile::class);
EdifactParser::create()->parse($fileContent);
}
/** @test */
public function parseMoreThanOneMessage(): void
{
$fileContent = <<<EDI
UNA:+.? '
UNH+1+IFTMIN:S:93A:UN:PN001'
UNT+19+1'
UNH+2+IFTMIN:S:94A:UN:PN002'
UNT+19+2'
UNH+3+IFTMIN:S:94A:UN:PN003'
UNT+19+3'
UNZ+3+4'
EDI;
$transactionResult = EdifactParser::create()->parse($fileContent);
self::assertCount(3, $transactionResult->messages());
}
/** @test */
public function extractValuesFromMessage(): void
{
$fileContent = <<<EDI
UNA:+.? '
UNH+1+IFTMIN:S:93A:UN:PN001'
CNT+7:0.1:KGM'
CNT+11:1:PCE'
UNT+19+1'
UNZ+1+3'
EDI;
$transactionResult = EdifactParser::create()->parse($fileContent);
self::assertCount(1, $transactionResult->messages());
$firstMessage = $transactionResult->messages()[0];
$segments = $firstMessage->segments();
/** @var UNHMessageHeader $unh */
$unh = $segments[UNHMessageHeader::class]['1'];
self::assertEquals(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']], $unh->rawValues());
/** @var CNTControl $cnt7 */
$cnt7 = $segments[CNTControl::class]['7'];
self::assertEquals(['CNT', ['7', '0.1', 'KGM']], $cnt7->rawValues());
/** @var CNTControl $cnt11 */
$cnt11 = $segments[CNTControl::class]['11'];
self::assertEquals(['CNT', ['11', '1', 'PCE']], $cnt11->rawValues());
/** @var UNTMessageFooter $unt */
$unt = $segments[UNTMessageFooter::class]['19'];
self::assertEquals(['UNT', '19', '1'], $unt->rawValues());
}
/** @test */
public function useACustomSegmentFactory(): void
{
$fileContent = <<<EDI
UNA:+.? '
UNH+1+IFTMIN:S:93A:UN:PN001'
CUSTOM+anyKey+whatever:value:9'
CNT+11:1:PCE'
UNT+19+1'
UNZ+1+3'
EDI;
$parser = EdifactParser::create(new TestingSegmentFactory('CUSTOM'));
$transactionResult = $parser($fileContent);
self::assertCount(1, $transactionResult->messages());
$firstMessage = $transactionResult->messages()[0];
$segments = $firstMessage->segments();
/** @var SegmentInterface $custom */
$custom = $segments['CUSTOM']['anyKey'];
self::assertEquals(['CUSTOM', 'anyKey', ['whatever', 'value', '9']], $custom->rawValues());
/** @var CNTControl $cnt11 */
$cnt11 = $segments[CNTControl::class]['11'];
self::assertEquals(['CNT', ['11', '1', 'PCE']], $cnt11->rawValues());
}
}