Passed
Push — master ( 13ac76...f27e95 )
by Chema
12:22 queued 12s
created

TransactionResultTest::resultFactory()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

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