Skip to content

Commit 6914c81

Browse files
authored
Merge pull request #519 from Philipp91/find-rm
Add Message::findRueckmeldungscodesForReferenceSegment()
2 parents b30ee2b + 54e0f01 commit 6914c81

File tree

4 files changed

+88
-0
lines changed

4 files changed

+88
-0
lines changed

lib/Fhp/Protocol/Message.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,23 @@ public function findRueckmeldungen(int $code): array
217217
return $rueckmeldungen;
218218
}
219219

220+
/**
221+
* @param int $requestSegmentNumber Only consider Rueckmeldungen that pertain to this request segment.
222+
* @return int[] The codes of all the Rueckmeldung instances matching the request segment.
223+
*/
224+
public function findRueckmeldungscodesForReferenceSegment(int $requestSegmentNumber): array
225+
{
226+
$codes = [];
227+
foreach ($this->plainSegments as $segment) {
228+
if ($segment instanceof RueckmeldungContainer && $segment->segmentkopf->bezugselement === $requestSegmentNumber) {
229+
foreach ($segment->getAllRueckmeldungen() as $rueckmeldung) {
230+
$codes[] = $rueckmeldung->rueckmeldungscode;
231+
}
232+
}
233+
}
234+
return $codes;
235+
}
236+
220237
/**
221238
* @return string The HBCI/FinTS wire format for this message, ISO-8859-1 encoded.
222239
*/

lib/Fhp/Segment/HIRMS/FindRueckmeldungTrait.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,10 @@ public function findRueckmeldungen(int $code): array
2929
return $rueckmeldung->rueckmeldungscode === $code;
3030
}));
3131
}
32+
33+
/** @return Rueckmeldung[] */
34+
public function getAllRueckmeldungen(): array
35+
{
36+
return $this->rueckmeldung;
37+
}
3238
}

lib/Fhp/Segment/HIRMS/RueckmeldungContainer.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,7 @@ public function findRueckmeldung(int $code): ?Rueckmeldung;
1515

1616
/** @return Rueckmeldung[] */
1717
public function findRueckmeldungen(int $code): array;
18+
19+
/** @return Rueckmeldung[] */
20+
public function getAllRueckmeldungen(): array;
1821
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
3+
namespace Fhp\Segment;
4+
5+
use Fhp\Protocol\Message;
6+
use Fhp\Protocol\MessageBuilder;
7+
use Fhp\Segment\HIRMG\HIRMGv2;
8+
use Fhp\Segment\HIRMS\HIRMSv2;
9+
use Fhp\Syntax\Parser;
10+
use PHPUnit\Framework\TestCase;
11+
12+
class FindRueckmeldungTraitTest extends TestCase
13+
{
14+
private const TEST_RESPONSE = "HIRMG:2:2:+3060::Teilweise liegen Warnungen/Hinweise vor.'HIRMS:3:2:3+0020::Angemeldet.+3076::Keine starke Authentifizierung erforderlich.+0901::PIN gultig.'HIRMS:4:2:4+0020::Informationen fehlerfrei entgegengenommen.+3920::Zugelassene Ein- und Zwei-Schritt-Verfahren fur den Benutzer:900'HIRMS:5:2:6+0020::Die Synchronisierung der Kundensystem-ID war erfolgreich.'";
15+
16+
private Message $testMessage;
17+
18+
protected function setUp(): void
19+
{
20+
// We can't use Message::parse() because that also tries to unwrap the message.
21+
$this->testMessage = Message::createPlainMessage(
22+
MessageBuilder::create()
23+
->add(Parser::parseSegments(self::TEST_RESPONSE))
24+
);
25+
}
26+
27+
public function testFindRueckmeldungFound()
28+
{
29+
$this->assertEquals('Angemeldet.', $this->testMessage->findRueckmeldung(20)->rueckmeldungstext);
30+
$this->assertEquals([900], $this->testMessage->findRueckmeldung(3920)->rueckmeldungsparameter);
31+
}
32+
33+
public function testFindRueckmeldungNotFound()
34+
{
35+
$this->assertNull($this->testMessage->findRueckmeldung(42));
36+
}
37+
38+
public function testFindRueckmeldungen()
39+
{
40+
$this->assertCount(3, $this->testMessage->findRueckmeldungen(20));
41+
$this->assertCount(1, $this->testMessage->findRueckmeldungen(3920));
42+
$this->assertCount(0, $this->testMessage->findRueckmeldungen(42));
43+
}
44+
45+
public function testGetAllRueckmeldungen()
46+
{
47+
/** @var HIRMGv2 $hirmg */
48+
$hirmg = $this->testMessage->findSegmentByNumber(2);
49+
$this->assertCount(1, $hirmg->getAllRueckmeldungen());
50+
51+
/** @var HIRMSv2 $hirms */
52+
$hirms = $this->testMessage->findSegmentByNumber(3);
53+
$this->assertCount(3, $hirms->getAllRueckmeldungen());
54+
}
55+
56+
public function testFindRueckmeldungscodesForReferenceSegment()
57+
{
58+
$this->assertEquals([20, 3076, 901], $this->testMessage->findRueckmeldungscodesForReferenceSegment(3));
59+
$this->assertEquals([20, 3920], $this->testMessage->findRueckmeldungscodesForReferenceSegment(4));
60+
$this->assertEquals([20], $this->testMessage->findRueckmeldungscodesForReferenceSegment(6));
61+
}
62+
}

0 commit comments

Comments
 (0)