Finanzmanager/tests/56_StartcodeErkennungTest.php
fds2610-bot 1cdb59b68b Fix #115: TAN-Anfrage – Startcode hervorheben
Nennt die Bank bei der TAN-Abfrage einen Startcode für den TAN-Generator,
geht er im Fließtext leicht unter. StartcodeErkennung erkennt ihn über
einen pro Bankverbindung konfigurierbaren Beispielsatz (Ziffernfolge =
Platzhalter für den Code) und zeigt den Fund fett, zentriert und in
eigener Zeile. BankFreitext löst dafür die bisherige Klartext-Aufbereitung
aus FinTsUeberweisung::vopHinweis() heraus, damit TAN-Anfrage und
VoP-Rückmeldung dieselbe HTML-zu-Klartext-Umwandlung nutzen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-04 20:21:56 +02:00

93 lines
3.5 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
declare(strict_types=1);
use Finanzmanager\Services\StartcodeErkennung;
/**
* Erkennung und Hervorhebung des Startcodes in der TAN-Anfrage.
*
* Issue #115: Manche Banken nennen bei der TAN-Abfrage mitten im Fließtext
* einen Startcode für den TAN-Generator – das Auge überliest ihn leicht.
* Geprüft wird hier die reine Texterkennung ohne Bankverbindung; die
* Anbindung an die TAN-Anfrage (FinTsAbruf, FinTsUeberweisung) lässt sich
* ohne lebendige FinTS-Session nicht isoliert testen.
*/
class StartcodeErkennungTest extends TestCase
{
protected string $testName = 'Test 56: Startcode-Erkennung in der TAN-Anfrage';
private const BEISPIEL = 'Stecke die Karte (eeeeee 5570) in den TAN-Generator.<br>'
. 'Drücke ggf. die SCAN-Taste und scanne den QR-Code mit der Kamera an deinem '
. 'TAN-Generator.<br>Überprüfe den Startcode 80045248 und bestätige mit der Taste OK.<br>'
. 'Bitte bestätige den Auftrag mit der TAN deines TAN-Generators.';
public function run(): void
{
$this->derStandardsatzErkenntDenStartcode();
$this->einEigenesMusterErkenntEinenAnderenStartcode();
$this->ohneTreffendesMusterBleibtDerTextUnveraendertAberSicher();
$this->ohneTextKommtNichtsZurueck();
$this->fremdesMarkupWirdNichtUebernommen();
}
private function derStandardsatzErkenntDenStartcode(): void
{
$html = StartcodeErkennung::hervorheben(self::BEISPIEL, null);
$this->assert(
str_contains($html, '<strong class="startcode">80045248</strong>'),
'Der Startcode aus dem Standardsatz steht fett ausgezeichnet da'
);
$this->assert(
str_contains($html, 'Überprüfe den Startcode <strong'),
'Der Satz davor bleibt als Fließtext erhalten'
);
$this->assert(
str_contains($html, 'und bestätige mit der Taste OK.'),
'Der Satz danach bleibt als Fließtext erhalten'
);
}
private function einEigenesMusterErkenntEinenAnderenStartcode(): void
{
$html = StartcodeErkennung::hervorheben(
'Bitte gib den Code 554433 in dein Gerät ein.',
'Bitte gib den Code 999999 in dein Gerät ein.'
);
$this->assert(
str_contains($html, '<strong class="startcode">554433</strong>'),
'Ein eigenes, pro Bank gespeichertes Muster erkennt dessen tatsächlichen Code'
);
}
private function ohneTreffendesMusterBleibtDerTextUnveraendertAberSicher(): void
{
$html = StartcodeErkennung::hervorheben(
self::BEISPIEL,
'Dieser Satz kommt in der Antwort der Bank nirgends vor 42.'
);
$this->assert(!str_contains($html, 'startcode'), 'Ohne Treffer gibt es keine Hervorhebung');
$this->assert(
str_contains($html, 'Überprüfe den Startcode 80045248 und bestätige'),
'Der Text bleibt trotzdem vollständig lesbar'
);
}
private function ohneTextKommtNichtsZurueck(): void
{
$this->assertEquals('', StartcodeErkennung::hervorheben('', null), 'Ohne Text bleibt es leer');
}
private function fremdesMarkupWirdNichtUebernommen(): void
{
$html = StartcodeErkennung::hervorheben(
'Überprüfe den Startcode <script>alert(1)</script>80045248 und bestätige mit der Taste OK.',
null
);
$this->assert(!str_contains($html, '<script>'), 'Fremdes Markup aus der Bankantwort wird nicht übernommen');
}
}