Passed
Push — master ( f27e95...6a73f4 )
by Chema
08:35 queued 11s
created

TransactionMessageTest::transactionMessages()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace EdifactParser\Tests\Unit;
6
7
use EDI\Parser;
8
use EdifactParser\SegmentList;
9
use EdifactParser\Segments\CNTControl;
10
use EdifactParser\Segments\UNHMessageHeader;
11
use EdifactParser\Segments\UNTMessageFooter;
12
use EdifactParser\TransactionMessage;
13
use PHPUnit\Framework\TestCase;
14
15
final class TransactionMessageTest extends TestCase
16
{
17
    /** @test */
18
    public function segmentsInOneMessage(): void
19
    {
20
        $fileContent = "UNH+1+IFTMIN:S:93A:UN:PN001'\nUNT+19+1'";
21
22
        self::assertEquals([
23
            new TransactionMessage([
24
                UNHMessageHeader::class => [
25
                    '1' => new UNHMessageHeader(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']]),
26
                ],
27
                UNTMessageFooter::class => [
28
                    '19' => new UNTMessageFooter(['UNT', '19', '1']),
29
                ],
30
            ]),
31
        ], $this->transactionMessages($fileContent));
32
    }
33
34
    /** @test */
35
    public function segmentsInTwoMessages(): void
36
    {
37
        $fileContent = <<<EDI
38
UNA:+.? '
39
UNH+1+IFTMIN:S:93A:UN:PN001'
40
UNT+19+1'
41
UNH+2+IFTMIN:S:94A:UN:PN002'
42
UNT+19+2'
43
EDI;
44
        self::assertEquals([
45
            new TransactionMessage([
46
                UNHMessageHeader::class => [
47
                    '1' => new UNHMessageHeader(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']]),
48
                ],
49
                UNTMessageFooter::class => [
50
                    '19' => new UNTMessageFooter(['UNT', '19', '1']),
51
                ],
52
            ]),
53
            new TransactionMessage([
54
                UNHMessageHeader::class => [
55
                    '2' => new UNHMessageHeader(['UNH', '2', ['IFTMIN', 'S', '94A', 'UN', 'PN002']]),
56
                ],
57
                UNTMessageFooter::class => [
58
                    '19' => new UNTMessageFooter(['UNT', '19', '2']),
59
                ],
60
            ]),
61
        ], $this->transactionMessages($fileContent));
62
    }
63
64
    /** @test */
65
    public function oneMessageWithMultipleSegmentsWithTheSameName(): void
66
    {
67
        $fileContent = <<<EDI
68
UNA:+.? '
69
UNH+1+IFTMIN:S:93A:UN:PN001'
70
CNT+7:0.1:KGM'
71
CNT+11:1:PCE'
72
CNT+15:0.068224:MTQ'
73
UNT+19+1'
74
EDI;
75
        self::assertEquals([
76
            new TransactionMessage([
77
                UNHMessageHeader::class => [
78
                    '1' => new UNHMessageHeader(['UNH', '1', ['IFTMIN', 'S', '93A', 'UN', 'PN001']]),
79
                ],
80
                UNTMessageFooter::class => [
81
                    '19' => new UNTMessageFooter(['UNT', '19', '1']),
82
                ],
83
                CNTControl::class => [
84
                    '7' => new CNTControl(['CNT', ['7', '0.1', 'KGM']]),
85
                    '11' => new CNTControl(['CNT', ['11', '1', 'PCE']]),
86
                    '15' => new CNTControl(['CNT', ['15', '0.068224', 'MTQ']]),
87
                ],
88
            ]),
89
        ], $this->transactionMessages($fileContent));
90
    }
91
92
    private function transactionMessages(string $fileContent): array
93
    {
94
        return TransactionMessage::groupSegmentsByMessage(
95
            ...SegmentList::factory()->fromRaw((new Parser($fileContent))->get())
96
        );
97
    }
98
}
99