Passed
Push — master ( 8f83e8...e4d779 )
by Chema
02:15
created

EdifactParserTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 86
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 54
dl 0
loc 86
rs 10
c 0
b 0
f 0
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A invalidFileDueToANonPrintableChar() 0 7 1
A useACustomSegmentFactory() 0 20 1
A extractValuesFromMessage() 0 33 1
A parseMoreThanOneMessage() 0 14 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
        (new EdifactParser)->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 = (new EdifactParser)->parse($fileContent);
41
        self::assertCount(3, $transactionResult->messages());
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
56
        $parser = new EdifactParser();
57
        $transactionResult = $parser->parse($fileContent);
58
59
        self::assertCount(1, $transactionResult->messages());
60
        $firstMessage = $transactionResult->messages()[0];
61
        $segments = $firstMessage->segments();
62
63
        /** @var UNHMessageHeader $unh */
64
        $unh = $segments[UNHMessageHeader::NAME]['1'];
65
        self::assertEquals(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']], $unh->rawValues());
66
67
        /** @var CNTControl $cnt7 */
68
        $cnt7 = $segments[CNTControl::NAME]['7'];
69
        self::assertEquals(['CNT', ['7', '0.1', 'KGM']], $cnt7->rawValues());
70
71
        /** @var CNTControl $cnt11 */
72
        $cnt11 = $segments[CNTControl::NAME]['11'];
73
        self::assertEquals(['CNT', ['11', '1', 'PCE']], $cnt11->rawValues());
74
75
        /** @var UNTMessageFooter $unt */
76
        $unt = $segments[UNTMessageFooter::NAME]['19'];
77
        self::assertEquals(['UNT', '19', '1'], $unt->rawValues());
78
    }
79
80
    /** @test */
81
    public function useACustomSegmentFactory(): void
82
    {
83
        $fileContent = <<<EDI
84
UNA:+.? '
85
UNH+1+IFTMIN:S:93A:UN:PN001'
86
CUSTOM+anyKey+whatever:value:9'
87
CNT+11:1:PCE'
88
UNT+19+1'
89
UNZ+1+3'
90
EDI;
91
        $parser = new EdifactParser(new TestingCustomSegmentFactory('CUSTOM'));
92
        $transactionResult = $parser->parse($fileContent);
93
94
        self::assertCount(1, $transactionResult->messages());
95
        $firstMessage = $transactionResult->messages()[0];
96
        $segments = $firstMessage->segments();
97
98
        /** @var SegmentInterface $custom */
99
        $custom = $segments['CUSTOM']['anyKey'];
100
        self::assertEquals(['CUSTOM', 'anyKey', ['whatever', 'value', '9']], $custom->rawValues());
101
    }
102
}
103