Moved createBankWithAllFeatures() and createRandomMessage() to FinTsTestBase

This commit is contained in:
dankito 2024-08-22 18:38:32 +02:00
parent 88c64f1ff1
commit 237802b18d
2 changed files with 58 additions and 76 deletions

View File

@ -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)
}
}

View File

@ -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
}
}