Passed
Push — master ( 211c75...14cc29 )
by Adrien
02:22
created

MessageTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 84
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 53
dl 0
loc 84
rs 10
c 0
b 0
f 0
wmc 4
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Genkgo\TestCamt\Unit\Camt053\Decoder;
6
7
use Genkgo\Camt\Camt053;
8
use Genkgo\Camt\Camt053\Decoder\Message;
9
use Genkgo\Camt\Decoder as DecoderObject;
10
use Genkgo\Camt\DTO;
11
use PHPUnit\Framework;
12
use SimpleXMLElement;
13
14
class MessageTest extends Framework\TestCase
15
{
16
    /**
17
     * @var DecoderObject\Record&Framework\MockObject\MockObject
18
     */
19
    private $mockedRecordDecoder;
20
21
    private Message $decoder;
22
23
    protected function setUp(): void
24
    {
25
        $this->mockedRecordDecoder = $this->createMock(DecoderObject\Record::class);
26
        $this->decoder = new Message($this->mockedRecordDecoder, new DecoderObject\Date());
27
    }
28
29
    public function testItAddsGroupHeader(): void
30
    {
31
        $message = $this->createMock(DTO\Message::class);
32
33
        $message
34
            ->expects(self::once())
35
            ->method('setGroupHeader')
36
            ->with(self::isInstanceOf(DTO\GroupHeader::class));
37
38
        $this->decoder->addGroupHeader($message, $this->getXmlMessage());
39
    }
40
41
    public function testItAddsStatements(): void
42
    {
43
        $message = $this->createMock(DTO\Message::class);
44
45
        $this->mockedRecordDecoder
46
            ->expects(self::once())
47
            ->method('addBalances')
48
            ->with(
49
                self::isInstanceOf(Camt053\DTO\Statement::class),
50
                self::isInstanceOf(SimpleXMLElement::class)
51
            );
52
53
        $this->mockedRecordDecoder
54
            ->expects(self::once())
55
            ->method('addEntries')
56
            ->with(
57
                self::isInstanceOf(Camt053\DTO\Statement::class),
58
                self::isInstanceOf(SimpleXMLElement::class)
59
            );
60
61
        $message
62
            ->expects(self::once())
63
            ->method('setRecords')
64
            ->with(self::callback(static function (array $records): bool {
65
                self::assertContainsOnlyInstancesOf(Camt053\DTO\Statement::class, $records);
66
                self::assertCount(1, $records);
67
68
                return true;
69
            }));
70
71
        $this->decoder->addRecords($message, $this->getXmlMessage());
72
    }
73
74
    private function getXmlMessage(): SimpleXMLElement
75
    {
76
        $xmlContent = <<<XML
77
<content>
78
    <BkToCstmrStmt>
79
        <GrpHdr>
80
            <MsgId>CAMT053RIB000000000001</MsgId>
81
            <CreDtTm>2015-03-10T18:43:50+00:00</CreDtTm>
82
        </GrpHdr>
83
        <Stmt>
84
            <Id>253EURNL26VAYB8060476890</Id>
85
            <CreDtTm>2015-03-10T18:43:50+00:00</CreDtTm>
86
            <Acct>
87
                <Id>
88
                    <IBAN>NL26VAYB8060476890</IBAN>
89
                </Id>
90
            </Acct>
91
        </Stmt>
92
    </BkToCstmrStmt>
93
</content>
94
95
XML;
96
97
        return new SimpleXMLElement($xmlContent);
98
    }
99
}
100