Passed
Pull Request — master (#13)
by Jesús
02:13
created

TransactionMessageTest   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 156
Duplicated Lines 0 %

Importance

Changes 11
Bugs 0 Features 0
Metric Value
wmc 7
eloc 98
c 11
b 0
f 0
dl 0
loc 156
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A segmentsInOneMessage() 0 14 1
A segmentsInTwoMessages() 0 27 1
A oneMessageWithMultipleSegmentsWithTheSameName() 0 25 1
A messageNotCreatedIfUNTDoesntHaveUNHOrViceVersa() 0 9 1
A transactionMessages() 0 4 1
A previousUNHAreOverriddenIfTheyDoesntHaveUNT() 0 24 1
A oneMessageIsCreatedWhenStartWithUNHAndEndsWithUNT() 0 33 1
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
    /** @test */
93
    public function oneMessageIsCreatedWhenStartWithUNHAndEndsWithUNT(): void
94
    {
95
        $fileContent = <<<EDI
96
UNA:+.? '
97
UNH+1+anything'
98
CNT+7:0.1:KGM'
99
UNT+19+1'
100
IGN+ORE:ME'
101
UNH+2+anything'
102
UNT+19+2'
103
UNZ+2+3'
104
EDI;
105
        self::assertEquals([
106
            new TransactionMessage([
107
                UNHMessageHeader::class => [
108
                    '1' => new UNHMessageHeader(['UNH', '1', 'anything']),
109
                ],
110
                CNTControl::class => [
111
                    '7' => new CNTControl(['CNT', ['7', '0.1', 'KGM']]),
112
                ],
113
                UNTMessageFooter::class => [
114
                    '19' => new UNTMessageFooter(['UNT', '19', '1']),
115
                ],
116
            ]),
117
            new TransactionMessage([
118
                UNHMessageHeader::class => [
119
                    '2' => new UNHMessageHeader(['UNH', '2', 'anything']),
120
                ],
121
                UNTMessageFooter::class => [
122
                    '19' => new UNTMessageFooter(['UNT', '19', '2']),
123
                ],
124
            ]),
125
        ], $this->transactionMessages($fileContent));
126
    }
127
128
    /** @test */
129
    public function previousUNHAreOverriddenIfTheyDoesntHaveUNT(): void
130
    {
131
        $fileContent = <<<EDI
132
UNA:+.? '
133
UNH+1+anything'
134
UNH+2+anything'
135
CNT+5:0.1:KGM'
136
UNT+10+2'
137
UNH+3+anything'
138
UNZ+2+3'
139
EDI;
140
        self::assertEquals([
141
            new TransactionMessage([
142
                UNHMessageHeader::class => [
143
                    '2' => new UNHMessageHeader(['UNH', '2', 'anything']),
144
                ],
145
                CNTControl::class => [
146
                    '5' => new CNTControl(['CNT', ['5', '0.1', 'KGM']]),
147
                ],
148
                UNTMessageFooter::class => [
149
                    '10' => new UNTMessageFooter(['UNT', '10', '2']),
150
                ],
151
            ]),
152
        ], $this->transactionMessages($fileContent));
153
    }
154
155
    /** @test */
156
    public function messageNotCreatedIfUNTDoesntHaveUNHOrViceVersa(): void
157
    {
158
        $fileContent = <<<EDI
159
UNA:+.? '
160
UNT+10+2'
161
UNH+3+anything'
162
UNZ+2+3'
163
EDI;
164
        self::assertEquals([], $this->transactionMessages($fileContent));
165
    }
166
167
    private function transactionMessages(string $fileContent): array
168
    {
169
        return TransactionMessage::groupSegmentsByMessage(
170
            ...SegmentList::factory()->fromRaw((new Parser($fileContent))->get())
171
        );
172
    }
173
}
174