EdifactParserTest   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 84
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 53
c 3
b 0
f 0
dl 0
loc 84
rs 10
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A invalidFileDueToANonPrintableChar() 0 7 1
A parseMoreThanOneMessage() 0 14 1
A useACustomSegmentFactory() 0 22 1
A extractValuesFromMessage() 0 29 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace EdifactParser\Tests\Functional;
6
7
use EdifactParser\EdifactParser;
8
use EdifactParser\Exception\InvalidFile;
9
use EdifactParser\Segments\CNTControl;
10
use EdifactParser\Segments\SegmentInterface;
11
use EdifactParser\Segments\UNHMessageHeader;
12
use EdifactParser\Segments\UNTMessageFooter;
13
use PHPUnit\Framework\TestCase;
14
15
final class EdifactParserTest extends TestCase
16
{
17
    /** @test */
18
    public function invalidFileDueToANonPrintableChar(): void
19
    {
20
        $fileContent = <<<EDI
21
\xE2\x80\xAF
22
EDI;
23
        $this->expectException(InvalidFile::class);
24
        EdifactParser::createWithDefaultSegments()->parse($fileContent);
25
    }
26
27
    /** @test */
28
    public function parseMoreThanOneMessage(): void
29
    {
30
        $fileContent = <<<EDI
31
UNA:+.? '
32
UNH+1+IFTMIN:S:93A:UN:PN001'
33
UNT+19+1'
34
UNH+2+IFTMIN:S:94A:UN:PN002'
35
UNT+19+2'
36
UNH+3+IFTMIN:S:94A:UN:PN003'
37
UNT+19+3'
38
UNZ+3+4'
39
EDI;
40
        $transactionResult = EdifactParser::createWithDefaultSegments()->parse($fileContent);
41
        self::assertCount(3, $transactionResult);
42
    }
43
44
    /** @test */
45
    public function extractValuesFromMessage(): void
46
    {
47
        $fileContent = <<<EDI
48
UNA:+.? '
49
UNH+1+IFTMIN:S:93A:UN:PN001'
50
CNT+7:0.1:KGM'
51
CNT+11:1:PCE'
52
UNT+19+1'
53
UNZ+1+3'
54
EDI;
55
        $transactionResult = EdifactParser::createWithDefaultSegments()->parse($fileContent);
56
        self::assertCount(1, $transactionResult);
57
        $message = $transactionResult[0];
58
59
        /** @var UNHMessageHeader $unh */
60
        $unh = $message->segmentByTagAndSubId(UNHMessageHeader::class, '1');
61
        self::assertEquals(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']], $unh->rawValues());
62
63
        /** @var CNTControl $cnt7 */
64
        $cnt7 = $message->segmentByTagAndSubId(CNTControl::class, '7');
65
        self::assertEquals(['CNT', ['7', '0.1', 'KGM']], $cnt7->rawValues());
66
67
        /** @var CNTControl $cnt11 */
68
        $cnt11 = $message->segmentByTagAndSubId(CNTControl::class, '11');
69
        self::assertEquals(['CNT', ['11', '1', 'PCE']], $cnt11->rawValues());
70
71
        /** @var UNTMessageFooter $unt */
72
        $unt = $message->segmentByTagAndSubId(UNTMessageFooter::class, '19');
73
        self::assertEquals(['UNT', '19', '1'], $unt->rawValues());
74
    }
75
76
    /** @test */
77
    public function useACustomSegmentFactory(): void
78
    {
79
        $fileContent = <<<EDI
80
UNA:+.? '
81
UNH+1+IFTMIN:S:93A:UN:PN001'
82
CUSTOM+anyKey+whatever:value:9'
83
CNT+11:1:PCE'
84
UNT+19+1'
85
UNZ+1+3'
86
EDI;
87
        $parser = new EdifactParser(new TestingSegmentFactory('CUSTOM'));
88
        $transactionResult = $parser->parse($fileContent);
89
        self::assertCount(1, $transactionResult);
90
        $message = $transactionResult[0];
91
92
        /** @var SegmentInterface $custom */
93
        $custom = $message->segmentByTagAndSubId('CUSTOM', 'anyKey');
94
        self::assertEquals(['CUSTOM', 'anyKey', ['whatever', 'value', '9']], $custom->rawValues());
95
96
        /** @var CNTControl $cnt11 */
97
        $cnt11 = $message->segmentByTagAndSubId(CNTControl::class, '11');
98
        self::assertEquals(['CNT', ['11', '1', 'PCE']], $cnt11->rawValues());
99
    }
100
}
101