From 237802b18dbbde1d750a5242f8ce36b6e0fb4d63 Mon Sep 17 00:00:00 2001 From: dankito Date: Thu, 22 Aug 2024 18:38:32 +0200 Subject: [PATCH] Moved createBankWithAllFeatures() and createRandomMessage() to FinTsTestBase --- .../dankito/banking/fints/FinTsTestBase.kt | 58 +++++++++++++- .../MultiThreadedMessageBuilderTest.kt | 76 +------------------ 2 files changed, 58 insertions(+), 76 deletions(-) diff --git a/fints4k/src/commonTest/kotlin/net/dankito/banking/fints/FinTsTestBase.kt b/fints4k/src/commonTest/kotlin/net/dankito/banking/fints/FinTsTestBase.kt index 2b0e81d0..29e87fbb 100644 --- a/fints4k/src/commonTest/kotlin/net/dankito/banking/fints/FinTsTestBase.kt +++ b/fints4k/src/commonTest/kotlin/net/dankito/banking/fints/FinTsTestBase.kt @@ -5,15 +5,16 @@ import net.dankito.banking.fints.callback.SimpleFinTsClientCallback import net.dankito.banking.fints.config.FinTsClientConfiguration import net.dankito.banking.fints.config.FinTsClientOptions import net.dankito.banking.fints.extensions.randomWithSeed +import net.dankito.banking.fints.messages.MessageBuilder +import net.dankito.banking.fints.messages.MessageBuilderResult import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Datum import net.dankito.banking.fints.messages.datenelemente.abgeleiteteformate.Laenderkennzeichen import net.dankito.banking.fints.messages.datenelemente.implementierte.Dialogsprache import net.dankito.banking.fints.messages.datenelemente.implementierte.signatur.Sicherheitsfunktion +import net.dankito.banking.fints.messages.datenelemente.implementierte.tan.* import net.dankito.banking.fints.messages.segmente.id.CustomerSegmentId import net.dankito.banking.fints.model.* -import net.dankito.banking.fints.response.segments.AccountType -import net.dankito.banking.fints.response.segments.ChangeTanMediaParameters -import net.dankito.banking.fints.response.segments.JobParameters +import net.dankito.banking.fints.response.segments.* abstract class FinTsTestBase { @@ -108,4 +109,55 @@ abstract class FinTsTestBase { return JobParameters("", 1, 1, 1, ":0:0") } + + protected fun createBankWithAllFeatures(): BankData { + val bank = createTestBank() + + val getTransactionsJob = RetrieveAccountTransactionsParameters(JobParameters(CustomerSegmentId.AccountTransactionsMt940.id, 1, 1, null, "HIKAZS:73:5"), 180, true, false) + val changeTanMediumJob = createAllowedJob(CustomerSegmentId.ChangeTanMedium, 3) + bank.supportedJobs = listOf( + getTransactionsJob, + createAllowedJob(CustomerSegmentId.TanMediaList, 5), changeTanMediumJob, + createAllowedJob(CustomerSegmentId.Balance, 7), + createAllowedJob(CustomerSegmentId.CreditCardTransactions, 2), + SepaAccountInfoParameters(createAllowedJob(CustomerSegmentId.SepaBankTransfer, 1), true, true, true, true, 35, listOf("pain.001.001.03")), + SepaAccountInfoParameters(createAllowedJob(CustomerSegmentId.SepaRealTimeTransfer, 1), true, true, true, true, 35, listOf("pain.001.001.03")), + ) + bank.pinInfo = PinInfo(getTransactionsJob, null, null, null, null, null, listOf( + JobTanConfiguration(CustomerSegmentId.Balance.id, true), + JobTanConfiguration(CustomerSegmentId.AccountTransactionsMt940.id, true), + JobTanConfiguration(CustomerSegmentId.CreditCardTransactions.id, true), + JobTanConfiguration(CustomerSegmentId.SepaBankTransfer.id, true), + JobTanConfiguration(CustomerSegmentId.SepaRealTimeTransfer.id, true) + )) + bank.changeTanMediumParameters = ChangeTanMediaParameters(changeTanMediumJob, false, false, false, false, false, listOf()) + + val checkingAccount = AccountData(CustomerId, null, BankCountryCode, BankCode, "ABCDDEBBXXX", CustomerId, AccountType.Girokonto, "EUR", "", null, null, bank.supportedJobs.map { it.jobName }, bank.supportedJobs) + bank.addAccount(checkingAccount) + + val creditCardAccountJobs = bank.supportedJobs.filterNot { it.jobName == CustomerSegmentId.AccountTransactionsMt940.id } + val creditCardAccount = AccountData(CustomerId + "_CreditCard", null, BankCountryCode, BankCode, "ABCDDEBBXXX", CustomerId, AccountType.Kreditkartenkonto, "EUR", "", null, null, creditCardAccountJobs.map { it.jobName }, creditCardAccountJobs) + bank.addAccount(creditCardAccount) + + return bank + } + + + protected fun createRandomMessage(index: Int, context: JobContext, messageBuilder: MessageBuilder = MessageBuilder(), bank: BankData = context.bank, account: AccountData = bank.accounts.first()): MessageBuilderResult = when (index % 14) { + 0 -> messageBuilder.createAnonymousDialogInitMessage(context) + 2 -> messageBuilder.createInitDialogMessage(context) + 3 -> messageBuilder.createInitDialogMessageWithoutStrongCustomerAuthentication(context, null) + 4 -> messageBuilder.createSynchronizeCustomerSystemIdMessage(context) + 5 -> messageBuilder.createGetTanMediaListMessage(context) + 6 -> messageBuilder.createChangeTanMediumMessage(context, TanGeneratorTanMedium(TanMediumKlasse.TanGenerator, TanMediumStatus.Aktiv, "", null, null, null, null, null), null, null) + 7 -> messageBuilder.createGetBalanceMessage(context, account) + 8 -> messageBuilder.createGetTransactionsMessage(context, GetAccountTransactionsParameter(bank, account, true)) + 9 -> messageBuilder.createGetTransactionsMessage(context, GetAccountTransactionsParameter(bank, bank.accounts[1], true)) + 10 -> messageBuilder.createBankTransferMessage(context, BankTransferData("", "", "", Money.Zero, null), account) + 11 -> messageBuilder.createBankTransferMessage(context, BankTransferData("", "", "", Money.Zero, null, true), account) + 12 -> messageBuilder.createSendEnteredTanMessage(context, "", TanResponse(TanProcess.TanProcess2, null, null, null, null, null, null, "HITAN:5:6:4+4++4937-10-13-02.30.03.700259+Sie möchten eine \"Umsatzabfrage\" freigeben?: Bitte bestätigen Sie den \"Startcode 80085335\" mit der Taste \"OK\".+@12@100880085335++Kartennummer ******0892")) + 13 -> messageBuilder.createDialogEndMessage(context) + else -> messageBuilder.createAnonymousDialogEndMessage(context) + } + } \ No newline at end of file diff --git a/fints4k/src/jvmTest/kotlin/net/dankito/banking/fints/messages/MultiThreadedMessageBuilderTest.kt b/fints4k/src/jvmTest/kotlin/net/dankito/banking/fints/messages/MultiThreadedMessageBuilderTest.kt index bb39fe9f..2f2fcb98 100644 --- a/fints4k/src/jvmTest/kotlin/net/dankito/banking/fints/messages/MultiThreadedMessageBuilderTest.kt +++ b/fints4k/src/jvmTest/kotlin/net/dankito/banking/fints/messages/MultiThreadedMessageBuilderTest.kt @@ -17,29 +17,7 @@ import kotlin.test.assertEquals class MultiThreadedMessageBuilderTest : FinTsTestBase() { - private val underTest = object : MessageBuilder(object : FinTsUtils() { - override fun formatDate(date: LocalDate): String { - return Date.toString() - } - - override fun formatTime(time: LocalTime): String { - return Time.toString() - } - }) { - - override fun createControlReference(): String { - return ControlReference - } - - } - - - private val bank = createTestBank() - - @AfterTest - fun tearDown() { - bank.supportedJobs = listOf() - } + private val underTest = MessageBuilder() @Test @@ -56,8 +34,8 @@ class MultiThreadedMessageBuilderTest : FinTsTestBase() { IntRange(0, 10_000).map { index -> coroutineScope.async { -// context.startNewDialog() - val result = createRandomMessage(index, context) + context.startNewDialog() + val result = createRandomMessage(index, context, underTest) val (segments, segmentNumbers) = extractSegmentNumbers(result) @@ -90,52 +68,4 @@ class MultiThreadedMessageBuilderTest : FinTsTestBase() { return Pair(segments, segmentNumbers) } - - private fun createRandomMessage(index: Int, context: JobContext, account: AccountData = bank.accounts.first()): MessageBuilderResult = when (index % 14) { - 0 -> underTest.createAnonymousDialogInitMessage(context) - 2 -> underTest.createInitDialogMessage(context) - 3 -> underTest.createInitDialogMessageWithoutStrongCustomerAuthentication(context, null) - 4 -> underTest.createSynchronizeCustomerSystemIdMessage(context) - 5 -> underTest.createGetTanMediaListMessage(context) - 6 -> underTest.createChangeTanMediumMessage(context, TanGeneratorTanMedium(TanMediumKlasse.TanGenerator, TanMediumStatus.Aktiv, "", null, null, null, null, null), null, null) - 7 -> underTest.createGetBalanceMessage(context, account) - 8 -> underTest.createGetTransactionsMessage(context, GetAccountTransactionsParameter(bank, account, true)) - 9 -> underTest.createGetTransactionsMessage(context, GetAccountTransactionsParameter(bank, bank.accounts[1], true)) - 10 -> underTest.createBankTransferMessage(context, BankTransferData("", "", "", Money.Zero, null), account) - 11 -> underTest.createBankTransferMessage(context, BankTransferData("", "", "", Money.Zero, null, true), account) - 12 -> underTest.createSendEnteredTanMessage(context, "", TanResponse(TanProcess.TanProcess2, null, null, null, null, null, null, "HITAN:5:6:4+4++4937-10-13-02.30.03.700259+Sie möchten eine \"Umsatzabfrage\" freigeben?: Bitte bestätigen Sie den \"Startcode 80085335\" mit der Taste \"OK\".+@12@100880085335++Kartennummer ******0892")) - 13 -> underTest.createDialogEndMessage(context) - else -> underTest.createAnonymousDialogEndMessage(context) - } - - - private fun createBankWithAllFeatures(): BankData { - val getTransactionsJob = RetrieveAccountTransactionsParameters(JobParameters(CustomerSegmentId.AccountTransactionsMt940.id, 1, 1, null, "HIKAZS:73:5"), 180, true, false) - val changeTanMediumJob = createAllowedJob(CustomerSegmentId.ChangeTanMedium, 3) - bank.supportedJobs = listOf( - getTransactionsJob, - createAllowedJob(CustomerSegmentId.TanMediaList, 5), changeTanMediumJob, - createAllowedJob(CustomerSegmentId.Balance, 7), - createAllowedJob(CustomerSegmentId.CreditCardTransactions, 2), - SepaAccountInfoParameters(createAllowedJob(CustomerSegmentId.SepaBankTransfer, 1), true, true, true, true, 35, listOf("pain.001.001.03")), - SepaAccountInfoParameters(createAllowedJob(CustomerSegmentId.SepaRealTimeTransfer, 1), true, true, true, true, 35, listOf("pain.001.001.03")), - ) - bank.pinInfo = PinInfo(getTransactionsJob, null, null, null, null, null, listOf( - JobTanConfiguration(CustomerSegmentId.Balance.id, true), - JobTanConfiguration(CustomerSegmentId.AccountTransactionsMt940.id, true), - JobTanConfiguration(CustomerSegmentId.CreditCardTransactions.id, true), - JobTanConfiguration(CustomerSegmentId.SepaBankTransfer.id, true), - JobTanConfiguration(CustomerSegmentId.SepaRealTimeTransfer.id, true) - )) - bank.changeTanMediumParameters = ChangeTanMediaParameters(changeTanMediumJob, false, false, false, false, false, listOf()) - - val checkingAccount = AccountData(CustomerId, null, BankCountryCode, BankCode, "ABCDDEBBXXX", CustomerId, AccountType.Girokonto, "EUR", "", null, null, bank.supportedJobs.map { it.jobName }, bank.supportedJobs) - bank.addAccount(checkingAccount) - - val creditCardAccountJobs = bank.supportedJobs.filterNot { it.jobName == CustomerSegmentId.AccountTransactionsMt940.id } - val creditCardAccount = AccountData(CustomerId + "_CreditCard", null, BankCountryCode, BankCode, "ABCDDEBBXXX", CustomerId, AccountType.Kreditkartenkonto, "EUR", "", null, null, creditCardAccountJobs.map { it.jobName }, creditCardAccountJobs) - bank.addAccount(creditCardAccount) - - return bank - } } \ No newline at end of file