<?php

namespace Tests\Fhp\Integration\DKB;

use Fhp\Model\SEPAAccount;
use Tests\Fhp\FinTsTestCase;

class DKBIntegrationTestBase extends FinTsTestCase
{
    public const TEST_BANK_CODE = '12030000';
    public const TEST_TAN_MODE = '921';

    // Anonymous dialog to fetch BPD (HKVVB, then HKEND).
    public const ANONYMOUS_INIT_REQUEST = "HNHBK:1:3+000000000145+300+0+1'HKIDN:2:2+280:12030000+9999999999+0+0'HKVVB:3:3+0+0+0+123456789ABCDEF0123456789+1.0'HKTAN:4:6+4+HKIDN'HNHBS:5:1+1'";
    public const ANONYMOUS_INIT_RESPONSE = "HNHBK:1:3+000000011229+300+FAKEDIALOGIDabcdefghijklmnopqr+1+FAKEDIALOGIDabcdefghijklmnopqr:1'HIRMG:2:2+3060::Bitte beachten Sie die enthaltenen Warnungen/Hinweise.+0100::Dialog beendet.'HIRMS:3:2:4+3050::BPD nicht mehr aktuell, aktuelle Version enthalten.+0020::Informationen fehlerfrei entgegengenommen.'HIBPA:4:3:4+3+280:PRIVATE_+Deutsche Kreditbank Aktiengesellschaft+3+1+300'HIKOM:5:4:4+280:PRIVATE_+1+3:banking-dkb.s-fints-pt-dkb.de/fints30+2:banking.s-fints-pt-dkb.de::MIM:1'HISHV:6:3:4+N+DDV:1+PIN:1'HICSUS:7:1:4+1+1+1+INTC;CORT:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.003.03:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.001.03'HIPKBS:8:1:4+1+1+1+N'HIPKAS:9:1:4+1+1+1+N:N:N:N:N:N:N:N:N:N:N'HIPCRS:10:1:4+1+1+1'HIPWES:11:1:4+1+1+1'HIPWLS:12:1:4+1+1+1+N:J:J'HIPWBS:13:1:4+1+1+1+N:N'HIPWAS:14:1:4+1+1+1'HIIPZS:15:1:4+1+1+1+;:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.001.03'HIIPSS:16:1:4+1+1+1+10:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.001.03'DIWOKS:17:1:4+1+1+1+9999999,99:EUR'DIWDHS:18:1:4+1+1+1+J:N:730'DIBVES:19:1:4+1+1+1+E'DIPTZS:20:1:4+1+1+1+J'DIEEAS:21:1:4+1+1+1+DKPTZ:1:N'DIALES:22:1:4+1+1+1+V-EC-KARTE:V-S-CARD:V-WERTKARTE'DIALLS:23:1:4+1+1+1'DIALNS:24:1:4+1+1+1+V-EC-KARTE:V-S-CARD:V-WERTKARTE'DIANAS:25:1:4+1+1+1+1:15'DIANLS:26:1:4+1+1+1'DIBAZS:27:2:4+1+1+1+J:J'DIBKDS:28:3:4+1+1+1'DIBKDS:29:4:4+1+1+1'DIBKUS:30:3:4+1+1+1+J:N'DIBUMS:31:3:4+1+1+1+N'DIBVAS:32:1:4+1+1+1'DIBVBS:33:1:4+1+1+1'DIBVDS:34:1:4+1+1+1'DIBVKS:35:1:4+1+1+1+J:V-EC-KARTE:V-S-CARD:V-WERTKARTE'DIBVPS:36:1:4+1+1+1+8:20'DIBVRS:37:1:4+1+1+1+8:20::N:N'DIBVSS:38:1:4+1+1+1'DIBVSS:39:2:4+1+1+1'DIDFAS:40:1:4+1+1+1+N'DIDFBS:41:1:4+1+1+1'DIDFCS:42:1:4+1+1+1'DIDFDS:43:1:4+1+1+1'DIDFLS:44:1:4+1+1+1'DIDFUS:45:1:4+1+1+1+N'DIDFUS:46:2:4+1+1+1+N'DIDIHS:47:1:4+1+1+1'DIDFSS:48:2:4+1+1+1+N:1;DekaBank-Konzern;5;Swisscanto;7;JPMorgan Fleming;8;Lombard Odier;10;Franklin Templeton;11;Gartmore;12;Goldman Sachs;13;Black Rock Merrill;14;Threadneedle;15;UBS;16;Schroders:10_10:Aktienfonds Asien - Pazifik ohne Japan:10_20:Aktienfonds Branche:10_30:Aktienfonds Deutschland:10_40:Aktienfonds Emerging Markets:10_50:Aktienfonds Euroland:10_60:Aktienfonds Europa Lunder:10_70:Aktienfonds Europa:10_80:Aktienfonds Japan:10_90:Aktienfonds Lateinamerika:10_100:Aktienfonds Nordamerika:10_110:Aktienfonds Osteuropa:10_120:Aktienfonds Welt:10_400:Aktienfonds Afrika:10_410:Aktienfonds Mittlerer Osten:10_420:Aktienfonds Nordeuropa:20_130:Dachfonds Chance Plus:20_140:Dachfonds Chance:20_150:Dachfonds Ertrag Plus:20_160:Dachfonds Ertrag:20_170:Dachfonds Wachstum:20_180:Dachfonds laufzeitbegrenzt:30_430:Garantiefonds:40_200:Geldmarktfonds:40_210:Geldmarktnahe Fonds:50_220:Alternative Investmentfonds Hedgefonds:50_230:Alternative Investmentfonds Private Equity:50_240:Alternative Investmentfonds Rohstofffonds:60_250:Sonderkonzepte Absolute-/Total-Returnstrategiefonds:60_260:Sonderkonzepte Altersvorsorgefonds:60_270:Sonderkonzepte Institutionelle Fondskonzepte:60_280:Sonderkonzepte Steuerorientierte Fonds:70_30:Immobilienfonds Deutschland:70_70:Immobilienfonds Europa:70_120:Immobilienfonds Welt:80_50:Mischfonds Euroland:80_290:Mischfonds ausgewogen:80_300:Mischfonds dynamisch:80_310:Mischfonds flexibel:80_320:Mischfonds konservativ:90_330:Rentenfonds Inflationsindexierte Anleihen:90_340:Rentenfonds Laufzeitfonds:90_350:Rentenfonds MBS:90_360:Rentenfonds Nachranganleihen:90_370:Rentenfonds Staatsanleihen:90_380:Rentenfonds Unternehmensanleihen:90_390:Rentenfonds Wandelanleihen'DIDDIS:49:1:4+1+1+1+DKDOF;2:DKDFO;2'DIDFOS:50:2:4+1+1+1'DIDFPS:51:2:4+1+1+1'DIDPFS:52:2:4+1+1+1'DIDFES:53:2:4+1+1+1'DIDEFS:54:2:4+1+1+1'DIDOFS:55:2:4+1+1+1'DIFAFS:56:2:4+1+1+1+N:N'DIGBAS:57:1:4+1+1+1'DIGBSS:58:1:4+1+1+1+J'DIKSBS:59:1:4+3+1+1+J'DIKSPS:60:1:4+3+1+1+;:sepade.pain.001.001.02.xsd:sepade.pain.001.002.02.xsd:sepade.pain.001.002.03.xsd:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.003.03:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.001.03'DIPAES:61:1:4+1+1'DIPSAS:62:1:4+1+1'DIPSPS:63:1:4+1+1'DIQUOS:64:1:4+1+1+1'DIQUTS:65:1:4+1+1+1'DITLAS:66:1:4+1+1'DITLFS:67:1:4+1+1+N'DITLFS:68:2:4+1+1+N'DITSPS:69:1:4+1+1+N'DIVVDS:70:1:4+3+1+1'DIVVUS:71:1:4+3+1+1+N:J'DIWAPS:72:1:4+1+1+J:STOP;SLOS;LMTO;MAKT:J:J:GDAY;GTMO;GTHD:J:1:N:N:N:9999999,99:EUR'DIWAPS:73:4:4+1+1+1+J:STOP;STLI;LMTO;MAKT;OCOO;TRST:J:J:J:J:J:GDAY;GTMO;GTHD:J:1:N:N:N:9999999,99:EUR'DIWDGS:74:1:4+1+1+1+J:N:N'DIWGVS:75:1:4+1+1+1+J:730:N'DIWLVS:76:1:4+1+1+1+J:365:N'DINZPS:77:3:4+1+1+1+N:N:4:N:N:::N:J'DIFOPS:78:3:4+1+1+1+N:4:N:N:N::::MAKT:N:J'DIFPOS:79:3:4+1+1+1+N:4:N:N:::N:J'DIWOPS:80:5:4+1+1+1+0:N:4:N:N::::9999999,99:EUR:STOP;STLI;LMTO;MAKT;OCOO;TRST:BUYI;SELL;AUCT;CONT;ALNO;DIHA:GDAY;GTMO;GTHD;GTCA;IOCA;OPEN;CLOS;FIKI:N:J'DIWVBS:81:1:4+1+1+1+N:N'DIZDFS:82:2:4+1+1+1'DIZDLS:83:2:4+1+1+1'HIAUBS:84:5:4+1+1+1'HIBMES:85:1:4+1+1+1+2:28:2:28:1000:J:N'HIBSES:86:1:4+1+1+1+2:28:2:28'HICAZS:87:1:4+1+1+1+450:N:N:urn?:iso?:std?:iso?:20022?:tech?:xsd?:camt.052.001.02'HICCMS:88:1:4+1+1+1+1000:J:N'HICCSS:89:1:4+1+1+1'HICDBS:90:1:4+3+1+1+N'HICDES:91:1:4+3+1+1+4:0:9999:0102030612:01020304050607080910111213141516171819202122232425262728293099'HICDLS:92:1:4+3+1+1+0:9999:J:J'HICDNS:93:1:4+3+1+1+0:0:9999:J:J:J:J:J:N:J:J:J:0102030612:01020304050607080910111213141516171819202122232425262728293099'HICDUS:94:1:4+3+1+1+1:0:9999:1:N:N'HICMBS:95:1:4+1+1+1+N:J'HICMES:96:1:4+1+1+1+1:360:1000:J:N'HICMLS:97:1:4+1+1+1'HICSAS:98:1:4+1+1+1+1:360'HICSBS:99:1:4+1+1+1+N:J'HICSES:100:1:4+1+1+1+1:360'HICSLS:101:1:4+1+1+1+J'HICUBS:102:1:4+3+1+1+J'HICUMS:103:1:4+3+1+1+;:sepade.pain.001.001.02.xsd:sepade.pain.001.002.02.xsd:sepade.pain.001.002.03.xsd:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.003.03:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.001.03'HIDMCS:104:1:4+1+1+1+1000:J:N:2:28:2:28::urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.008.003.02'HIDMES:105:1:4+1+1+1+2:28:2:28:1000:J:N'HIDSBS:106:1:4+3+1+1+J:J:56'HIDSCS:107:1:4+1+1+1+2:28:2:28::urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.008.003.02'HIDSES:108:1:4+1+1+1+2:28:2:28'HIDSWS:109:1:4+1+1+1+N'HIEKAS:110:2:4+1+1+1+J:N:N:1'HIEKAS:111:3:4+1+1+1+J:N:N:1'HIEKPS:112:1:4+1+1+1+J:J:N'HIFGBS:113:2:4+3+1'HIFGBS:114:3:4+3+1'HIFRDS:115:1:4+1+1'HIFRDS:116:4:4+1+1+1+N:J:N:0:Kreditinstitut:1:DekaBank'HIKAZS:117:4:4+1+1+360:J'HIKAZS:118:5:4+1+1+360:J:N'HIKDMS:119:2:4+3+0+2048'HIKDMS:120:3:4+3+0+2048'HIKDMS:121:4:4+3+0+2048'HIKIFS:122:1:4+1+1'HIKIFS:123:4:4+1+1+1+J:J'HIKIFS:124:5:4+1+1+1+J:J'HIKIFS:125:6:4+1+1+1+J:J'HIMTAS:126:1:4+1+1+1+N'HIMTAS:127:2:4+1+1+1+N:J'HIMTFS:128:1:4+1+1+1'HIMTRS:129:1:4+1+1+1+N'HIMTRS:130:2:4+1+1+1+N:J'HINEAS:131:1:4+1+1+1:2:3:4'HINEZS:132:3:4+1+1+1+N:N:4:N:N:::N:J'HIWFOS:133:3:4+1+1+1+N:4:N:N:N::::MAKT:N:J'HIWPOS:134:5:4+1+1+1+0:N:4:N:N::::9999999,99:EUR:STOP;STLI;LMTO;MAKT;OCOO;TRST:BUYI;SELL;AUCT;CONT;ALNO;DIHA:GDAY;GTMO;GTHD;GTCA;IOCA;OPEN;CLOS;FIKI:N:J'HIWSDS:135:5:4+3+1+1+J:A;Inland DAX:B;Inland Sonstige:C;Ausland Europa:D;Ausland Sonstige'HIFPOS:136:3:4+1+1+1+N:4:N:N:::N:J'HIPAES:137:1:4+1+1+1'HIPPDS:138:1:4+1+1+1+1:Telekom:Xtra-Card:N:::15;30;50:2:Vodafone:CallYa:N:::15;25;50:3:E-Plus:Free and easy:N:::15;20;30:4:O2:Loop:N:::15;20;30:5:congstar:congstar:N:::15;30;50:6:blau:blau:N:::15;20;30:8:o.tel.o:o.tel.o:N:::9;19;29:9:SIM Guthaben:SIM Guthaben:N:::15;30;50'HISALS:139:3:4+1+1'HISALS:140:4:4+1+1'HISALS:141:5:4+1+1'HISPAS:142:1:4+1+1+1+J:N:N:sepade.pain.001.001.02.xsd:sepade.pain.001.002.02.xsd:sepade.pain.001.002.03.xsd:sepade.pain.008.002.02.xsd:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.003.03:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.008.003.02:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.001.03:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.008.001.02'HISPAS:143:2:4+1+1+1+J:N:N:N:sepade.pain.001.001.02.xsd:sepade.pain.001.002.02.xsd:sepade.pain.001.002.03.xsd:sepade.pain.008.002.02.xsd:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.003.03:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.008.003.02:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.001.03:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.008.001.02'HITABS:144:2:4+1+1+1'HITABS:145:3:4+1+1+1'HITABS:146:4:4+1+1+1'HITAUS:147:1:4+1+1+1+N:N:J'HITAZS:148:1:4+1+1+1'HITAZS:149:2:4+1+1+1'HITMLS:150:1:4+1+1+1'HITSYS:151:1:4+1+1+1+N:N'HIWDUS:152:4:4+3+1+999'HIWFPS:153:2:4+3+1+RENTEN:INVESTMENTFONDS:GENUSSSCHEINE:SPARBRIEFE:UNTERNEHMENSANLEIHEN:EMERGING MARKET ANLEIHEN:STRUKTURIERTE ANLEIHEN:ZERTIFIKATE:AKTIEN:OPTIONSSCHEINE:ALLE ANGEBOTE EIGENES INSTITUT:ALLE ANGEBOTE UEBERGEORD. INSTITUTE'HIWOAS:154:2:4+1+1+J:STOP;SLOS;LMTO;MAKT:J:J:GDAY;GTMO;GTHD:J:1:N:N:N:9999999,99:EUR'HIWOAS:155:4:4+1+1+1+J:STOP;STLI;LMTO;MAKT;OCOO;TRST:J:J:J:J:J:GDAY;GTMO;GTHD:J:1:N:N:N:9999999,99:EUR'HIWPDS:156:3:4+3+1+J'HIWPDS:157:5:4+1+1+J:N:N'HIWPKS:158:1:4+3+0'HIWPRS:159:1:4+3+1+J:J:N:N::Aktien:Festverzinsliche Wertpapiere:Fonds:Fremdwuhrungsanleihen:Genussscheine:Indexzertifikate:Optionsscheine:Wandel- und Optionsanleihen cum'HIWPSS:160:1:4+3+1+J'HIWSOS:161:4:4+3+1+1+J:J:90:1:2:3:4:5:6:7:8:9:10:11'HIWSOS:162:5:4+3+1+1+J:J:90:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17'HITANS:163:1:4+1+1+1+J:N:0:0:920:2:smsTAN:smsTAN:6:1:TAN-Nummer:3:1:J:J:900:2:iTAN:iTAN:6:1:TAN-Nummer:3:1:J:J'HITANS:164:3:4+1+1+1+J:N:0:910:2:HHD1.3.0:chipTAN manuell:6:1:TAN-Nummer:3:1:J:2:0:N:N:N:00:0:1:911:2:HHD1.3.2OPT:chipTAN optisch:6:1:TAN-Nummer:3:1:J:2:0:N:N:N:00:0:1:912:2:HHD1.3.2USB:chipTAN-USB:6:1:TAN-Nummer:3:1:J:2:0:N:N:N:00:0:1:913:2:Q1S:chipTAN-QR:6:1:TAN-Nummer:3:1:J:2:0:N:N:N:00:0:1:920:2:smsTAN:smsTAN:6:1:TAN-Nummer:3:1:J:2:0:N:N:N:00:2:5:921:2:TAN2go:TAN2go:6:1:TAN-Nummer:3:1:J:2:0:N:N:N:00:2:2:900:2:iTAN:iTAN:6:1:TAN-Nummer:3:1:J:2:0:N:N:N:00:0:0'HITANS:165:6:4+1+1+1+J:N:0:910:2:HHD1.3.0:::chipTAN manuell:6:1:TAN-Nummer:3:J:2:N:0:0:N:N:00:0:N:1:911:2:HHD1.3.2OPT:HHDOPT1:1.3.2:chipTAN optisch:6:1:TAN-Nummer:3:J:2:N:0:0:N:N:00:0:N:1:912:2:HHD1.3.2USB:HHDUSB1:1.3.2:chipTAN-USB:6:1:TAN-Nummer:3:J:2:N:0:0:N:N:00:0:N:1:913:2:Q1S:Secoder_UC:1.2.0:chipTAN-QR:6:1:TAN-Nummer:3:J:2:N:0:0:N:N:00:0:N:1:920:2:smsTAN:::smsTAN:6:1:TAN-Nummer:3:J:2:N:0:0:N:N:00:2:N:5:921:2:TAN2go:::TAN2go:6:1:TAN-Nummer:3:J:2:N:0:0:N:N:00:2:N:2:900:2:iTAN:::iTAN:6:1:TAN-Nummer:3:J:2:N:0:0:N:N:00:0:N:0'HIPINS:166:1:4+1+1+0+5:38:6:USERID:CUSTID:HKAUB:J:HKBME:J:HKBSE:J:HKCAZ:N:HKCCM:J:HKCCS:J:HKCDB:N:HKCDE:J:HKCDL:J:HKCDN:J:HKCDU:J:HKCMB:N:HKCME:J:HKCML:J:HKCSA:J:HKCSB:N:HKCSE:J:HKCSL:J:HKCSU:J:HKIPZ:J:HKIPS:N:HKPKB:N:HKPKA:J:HKPWE:J:HKPWL:N:HKPWB:N:HKPWA:J:HKCUB:N:HKCUM:J:HKDMC:J:HKDME:J:HKDSB:N:HKDSC:J:HKDSE:J:HKDSW:J:HKEKA:N:HKEKP:N:HKFGB:N:HKFRD:N:HKKAZ:N:HKKDM:J:HKKIF:N:HKMTA:J:HKMTF:N:HKMTR:J:HKNEA:N:HKNEZ:J:HKWFO:J:HKWPO:J:HKFPO:J:HKWSD:N:HKPAE:J:HKPPD:J:HKQTG:N:HKSAL:N:HKSPA:N:HKTAB:N:HKTAU:N:HKTAZ:N:HKTML:N:HKTSY:N:HKUTA:N:HKWDU:N:HKWFP:N:HKWOA:J:HKWPD:N:HKWPK:N:HKWPR:N:HKWPS:J:HKWSO:N:HKTAN:N:DKBKD:N:DKBKU:N:DKBUM:N:DKFDA:N:DKPAE:N:DKPSA:J:DKPSP:N:DKTLA:N:DKTLF:J:DKTSP:N:DKWAP:N:DKALE:J:DKALL:J:DKALN:J:DKANA:J:DKANL:J:DKBAZ:N:DKBVA:J:DKBVB:J:DKBVD:N:DKBVK:N:DKBVP:J:DKBVR:J:DKBVS:N:DKDFA:N:DKDFB:N:DKDFC:J:DKDFD:N:DKDFL:J:DKDFU:N:DKDIH:J:DKDFS:N:DKDDI:N:DKDFO:J:DKDFP:J:DKDPF:N:DKDFE:J:DKDEF:N:DKDOF:N:DKFAF:N:DKGBA:J:DKGBS:J:DKKAU:N:DKKKA:N:DKKKS:N:DKKKU:N:DKKSB:N:DKKSP:N:DKQUO:N:DKQUT:N:DKVVD:N:DKVVU:N:DKWDG:N:DKWGV:N:DKWLV:N:DKNZP:N:DKFOP:N:DKFPO:N:DKWOP:N:DKWVB:N:DKZDF:J:DKZDL:J:DKWOK:N:DKWDH:N:DKBVE:J:DKPTZ:N:DKEEA:N'HNHBS:167:1+1'";
    public const ANONYMOUS_END_REQUEST = "HNHBK:1:3+000000000113+300+FAKEDIALOGIDabcdefghijklmnopqr+2'HKEND:2:1+FAKEDIALOGIDabcdefghijklmnopqr'HNHBS:3:1+2'";
    public const ANONYMOUS_END_RESPONSE = "HNHBK:1:3+000000000171+300+FAKEDIALOGIDabcdefghijklmnopqr+2+FAKEDIALOGIDabcdefghijklmnopqr:2'HIRMG:2:2+0010::Nachricht entgegengenommen.+0100::Dialog beendet.'HNHBS:3:1+2'";

    // Separate dialog for synchronization (HKSYN), response does not contain BPD again.
    public const SYNC_REQUEST = "HNHBK:1:3+000000000387+300+0+1'HNVSK:998:3+PIN:1+998+1+1::0+1:20190102:030405+2:2:13:@8@00000000:5:1+280:12030000:test?@user:V:0:0+0'HNVSD:999:1+@224@HNSHK:2:4+PIN:1+999+9999999+1+1+1::0+1+1:20190102:030405+1:999:1+6:10:19+280:12030000:test?@user:S:0:0'HKIDN:3:2+280:12030000+test?@user+0+1'HKVVB:4:3+3+0+0+123456789ABCDEF0123456789+1.0'HKSYN:5:3+0'HNSHA:6:2+9999999++12345''HNHBS:7:1+1'";
    public const SYNC_RESPONSE = "HNHBK:1:3+000000000607+300+FAKEDIALOGIDabcdefghijklmnopqr+1+FAKEDIALOGIDabcdefghijklmnopqr:1'HNVSK:998:3+PIN:1+998+1+2::0+1:20191025:234010+2:2:13:@8@00000000:5:1+280:12030000:test?@user:V:0:0+0'HNVSD:999:1+@382@HNSHK:2:4+PIN:1+999+9999999+1+1+2::0+1+1:20191025:234010+1:999:1+6:10:19+280:12030000:test?@user:S:0:0'HIRMG:3:2+3060::Bitte beachten Sie die enthaltenen Warnungen/Hinweise.'HIRMS:4:2:5+0020::Auftrag ausgefuhrt.'HIRMS:5:2:4+3920::Zugelassene Zwei-Schritt-Verfahren fur den Benutzer.:921+0020::Der Auftrag wurde ausgefuhrt.'HISYN:6:4:5+FAKEKUNDENSYSTEMIDabcdefghij'HNSHA:7:2+9999999''HNHBS:8:1+1'";
    public const SYNC_END_REQUEST = "HNHBK:1:3+000000000415+300+FAKEDIALOGIDabcdefghijklmnopqr+2'HNVSK:998:3+PIN:1+998+1+1::FAKEKUNDENSYSTEMIDabcdefghij+1:20190102:030405+2:2:13:@8@00000000:5:1+280:12030000:test?@user:V:0:0+0'HNVSD:999:1+@196@HNSHK:2:4+PIN:1+999+9999999+1+1+1::FAKEKUNDENSYSTEMIDabcdefghij+1+1:20190102:030405+1:999:1+6:10:19+280:12030000:test?@user:S:0:0'HKEND:3:1+FAKEDIALOGIDabcdefghijklmnopqr'HNSHA:4:2+9999999++12345''HNHBS:5:1+2'";
    public const SYNC_END_RESPONSE = "HNHBK:1:3+000000000434+300+FAKEDIALOGIDabcdefghijklmnopqr+2+FAKEDIALOGIDabcdefghijklmnopqr:2'HNVSK:998:3+PIN:1+998+1+2::FAKEKUNDENSYSTEMIDabcdefghij+1+2:2:13:@8@00000000:5:1+280:12030000:test?@user:V:0:0+0'HNVSD:999:1+@198@HNSHK:2:4+PIN:1+999+7762845+1+1+2::FAKEKUNDENSYSTEMIDabcdefghij+1+1+1:999:1+6:10:19+280:12030000:test?@user:S:0:0'HIRMG:3:2+0010::Nachricht entgegengenommen.+0100::Dialog beendet.'HNSHA:4:2+7762845''HNHBS:5:1+2'";

    // Dialog initialization for main dialog (HKVVB). As this is the first time we use strong authentication, we get the UPD.
    // Also, using strong (=regular) authentication allows us to leave off the HNHBK/HNVSD wrapper here and let FinTsTestCase handle it.
    public const INIT_REQUEST = "HKIDN:3:2+280:12030000+test?@user+FAKEKUNDENSYSTEMIDabcdefghij+1'HKVVB:4:3+3+0+0+123456789ABCDEF0123456789+1.0'HKTAN:5:6+4+HKIDN+++++++++SomePhone1'";
    public const INIT_RESPONSE = "HIRMG:3:2+3060::Bitte beachten Sie die enthaltenen Warnungen/Hinweise.'HIRMS:4:2:4+3050::UPD nicht mehr aktuell, aktuelle Version enthalten.+3920::Zugelassene Zwei-Schritt-Verfahren fur den Benutzer.:921+0020::Der Auftrag wurde ausgefuhrt.'HIRMS:5:2:5+3076::Starke Kundenauthentifizierung nicht notwendig.'HIUPA:6:4:4+4567890123+0+0++PERSNR00101231234123'HIUPD:7:6:4+1234567890::280:ABCDEFGH+DExxABCDEFGH1234567890+4567890123+1+EUR+NAME1 TEST ABCDEFGHIJK++Sichteinlagen++HKSAK:1+HKISA:1+HKSSP:1+HKPAE:1+HKTAB:1+HKTAZ:1+HKTML:1+HKSPA:1+HKCAZ:1+HKCCM:1+HKCCS:1+HKCDB:1+HKCDE:1+HKCDL:1+HKCDN:1+HKCDU:1+HKCMB:1+HKCME:1+HKCML:1+HKCSA:1+HKCSB:1+HKCSE:1+HKCSL:1+HKDSB:1+HKDSW:1+HKEKA:1+DKPSA:1+DKPSP:1+HKTAN:1+DKANA:1+DKANL:1+DKBAZ:1+DKZDF:1+DKZDL:1+HKFRD:1+HKKAZ:1+HKKIF:1+HKSAL:1++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++{\"umsltzt\"?:\"2019-10-21-04.18.07.077461\"}'HIUPD:8:6:4+4930000001234567::280:ABCDEFGH++4567890123+50+EUR+NAME1 TEST ABCDEFGHIJK++VISA DKB Cash++HKSAK:1+HKISA:1+HKSSP:1+HKPAE:1+HKTAB:1+HKTAZ:1+HKTML:1+DKPSA:1+DKPSP:1+HKTAN:1+DKANA:1+DKANL:1+DKKAU:1+DKKKA:1+DKKKS:1+DKKKU:1+HKFRD:1'HITAN:9:6:5+4++noref+nochallenge+++SomePhone1'";

    // Dialog end for main dialog (HKEND).
    public const FINAL_END_REQUEST = "HKEND:3:1+FAKEDIALOGIDabcdefghijklmnopqr'";
    public const FINAL_END_RESPONSE = "HIRMG:3:2+0010::Nachricht entgegengenommen.+0100::Dialog beendet.'";

    /**
     * Executes dialog synchronization and initialization, so that BPD and UPD are filled.
     * @throws \Throwable
     */
    protected function initDialog()
    {
        // We already know the TAN mode (921 below), so it will only fetch the BPD (anonymously) to verify it.
        $this->expectMessage(static::ANONYMOUS_INIT_REQUEST, static::ANONYMOUS_INIT_RESPONSE);
        $this->expectMessage(static::ANONYMOUS_END_REQUEST, static::ANONYMOUS_END_RESPONSE);

        // Then when we initialize a dialog, it's going to request a Kundensystem-ID and UPD.
        $this->expectMessage(static::SYNC_REQUEST, static::SYNC_RESPONSE);
        $this->expectMessage(static::SYNC_END_REQUEST, static::SYNC_END_RESPONSE);
        // And finally it can initialize the main dialog.
        $this->expectMessage(static::INIT_REQUEST, static::INIT_RESPONSE);

        $this->fints->selectTanMode(intval(static::TEST_TAN_MODE), 'SomePhone1');
        $login = $this->fints->login();
        $login->ensureDone(); // No TAN required upon login.
        $this->assertAllMessagesSeen();
    }

    protected function getTestAccount(): SEPAAccount
    {
        $sepaAccount = new SEPAAccount();
        $sepaAccount->setIban('DExxABCDEFGH1234567890');
        $sepaAccount->setBic('BYLADEM1001');
        $sepaAccount->setAccountNumber('1234567890');
        $sepaAccount->setBlz('12030000');
        return $sepaAccount;
    }
}
