2019-10-12 23:12:37 +00:00
|
|
|
package net.dankito.fints
|
|
|
|
|
2019-10-20 22:51:21 +00:00
|
|
|
import net.dankito.fints.banks.BankFinder
|
2019-10-12 23:12:37 +00:00
|
|
|
import net.dankito.fints.messages.datenelemente.abgeleiteteformate.Laenderkennzeichen
|
|
|
|
import net.dankito.fints.messages.datenelemente.implementierte.Dialogsprache
|
|
|
|
import net.dankito.fints.messages.datenelemente.implementierte.KundensystemStatus
|
|
|
|
import net.dankito.fints.messages.datenelemente.implementierte.KundensystemStatusWerte
|
|
|
|
import net.dankito.fints.model.*
|
2019-10-20 22:51:21 +00:00
|
|
|
import net.dankito.fints.model.mapper.BankDataMapper
|
2019-10-13 16:54:12 +00:00
|
|
|
import net.dankito.fints.response.client.FinTsClientResponse
|
2019-10-12 23:12:37 +00:00
|
|
|
import net.dankito.fints.util.Java8Base64Service
|
|
|
|
import org.assertj.core.api.Assertions.assertThat
|
|
|
|
import org.junit.Ignore
|
|
|
|
import org.junit.Test
|
2019-10-20 22:47:01 +00:00
|
|
|
import java.util.concurrent.atomic.AtomicBoolean
|
2019-10-12 23:12:37 +00:00
|
|
|
|
|
|
|
|
|
|
|
@Ignore // not an automatic test, supply your settings below
|
|
|
|
class FinTsClientTest {
|
|
|
|
|
2019-10-20 22:47:01 +00:00
|
|
|
private val didAskUserForTanProcedure = AtomicBoolean(false)
|
|
|
|
|
|
|
|
private val didAskUserToEnterTan = AtomicBoolean(false)
|
|
|
|
|
|
|
|
|
2019-10-15 16:23:03 +00:00
|
|
|
private val callback = object : FinTsClientCallback {
|
2019-10-13 16:54:12 +00:00
|
|
|
|
2019-10-15 16:23:03 +00:00
|
|
|
override fun askUserForTanProcedure(supportedTanProcedures: List<TanProcedure>): TanProcedure? {
|
2019-10-20 22:47:01 +00:00
|
|
|
didAskUserForTanProcedure.set(true)
|
|
|
|
|
2019-10-15 16:23:03 +00:00
|
|
|
// TODO: if entering TAN is required select your tan procedure here
|
|
|
|
return supportedTanProcedures.first()
|
|
|
|
}
|
|
|
|
|
2019-10-16 12:11:19 +00:00
|
|
|
override fun enterTan(tanChallenge: TanChallenge): String? {
|
2019-10-20 22:47:01 +00:00
|
|
|
didAskUserToEnterTan.set(true)
|
|
|
|
|
2019-10-16 12:11:19 +00:00
|
|
|
return null
|
|
|
|
}
|
|
|
|
|
2019-10-15 16:23:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private val underTest = object : FinTsClient(callback, Java8Base64Service()) {
|
|
|
|
|
|
|
|
fun testSynchronizeCustomerSystemId(bank: BankData, customer: CustomerData): FinTsClientResponse {
|
2019-10-13 16:54:12 +00:00
|
|
|
return synchronizeCustomerSystemId(bank, customer)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2019-10-12 23:12:37 +00:00
|
|
|
|
|
|
|
|
2019-10-20 22:56:44 +00:00
|
|
|
private val BankDataAnonymous = BankData("10070000", Laenderkennzeichen.Germany, "https://fints.deutsche-bank.de/", "DEUTDEBBXXX")
|
2019-10-12 23:12:37 +00:00
|
|
|
|
|
|
|
// TODO: add your settings here:
|
2019-10-20 22:51:21 +00:00
|
|
|
private val bankInfo = BankFinder().findBankByBankCode("<your bank code (BLZ) here>").first()
|
|
|
|
private val Bank = BankDataMapper().mapFromBankInfo(bankInfo)
|
|
|
|
private val Customer = CustomerData("<your customer id (Kontonummer) here>", "<your PIN here>")
|
2019-10-12 23:12:37 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun getAnonymousBankInfo() {
|
|
|
|
|
|
|
|
// when
|
2019-10-13 15:24:47 +00:00
|
|
|
val result = underTest.getAnonymousBankInfo(BankDataAnonymous)
|
2019-10-12 23:12:37 +00:00
|
|
|
|
|
|
|
// then
|
2019-10-13 17:44:16 +00:00
|
|
|
assertThat(result.isSuccessful).isTrue()
|
2019-10-15 21:36:59 +00:00
|
|
|
assertThat(BankDataAnonymous.supportedHbciVersions).isNotEmpty()
|
|
|
|
assertThat(BankDataAnonymous.supportedTanProcedures).isNotEmpty()
|
|
|
|
assertThat(BankDataAnonymous.supportedJobs).isNotEmpty()
|
|
|
|
assertThat(BankDataAnonymous.supportedLanguages).isNotEmpty()
|
|
|
|
assertThat(BankDataAnonymous.name).isNotEmpty()
|
2019-10-12 23:12:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-10-20 22:47:01 +00:00
|
|
|
@Test
|
2019-10-30 22:02:59 +00:00
|
|
|
fun addAccount() {
|
2019-10-20 22:47:01 +00:00
|
|
|
|
|
|
|
// when
|
2019-10-30 22:02:59 +00:00
|
|
|
val result = underTest.addAccount(Bank, Customer)
|
2019-10-20 22:47:01 +00:00
|
|
|
|
|
|
|
// then
|
|
|
|
assertThat(result.isSuccessful).isTrue()
|
|
|
|
|
|
|
|
assertThat(didAskUserForTanProcedure).isFalse()
|
|
|
|
|
|
|
|
assertThat(Bank.name).isNotEmpty()
|
|
|
|
assertThat(Bank.supportedJobs).isNotEmpty() // supported jobs are now known
|
|
|
|
assertThat(Bank.supportedTanProcedures).isNotEmpty() // supported tan procedures are now known
|
|
|
|
assertThat(Bank.supportedHbciVersions).isNotEmpty() // supported HBIC versions are now known
|
|
|
|
assertThat(Bank.supportedLanguages).isNotEmpty() // supported languages are now known
|
|
|
|
|
|
|
|
assertThat(Customer.name).isNotEmpty()
|
|
|
|
assertThat(Customer.iban).isNotNull()
|
|
|
|
assertThat(Customer.supportedTanProcedures).isNotEmpty()
|
|
|
|
assertThat(Customer.selectedLanguage).isNotEqualTo(Dialogsprache.Default) // language is set now
|
|
|
|
assertThat(Customer.customerSystemId).isNotEqualTo(KundensystemStatus.SynchronizingCustomerSystemId) // customer system id is now set
|
|
|
|
assertThat(Customer.customerSystemStatus).isEqualTo(KundensystemStatusWerte.Benoetigt) // customerSystemStatus is set now
|
|
|
|
assertThat(Customer.accounts).isNotEmpty() // accounts are now known
|
|
|
|
assertThat(Customer.accounts.first().allowedJobs).isNotEmpty() // allowed jobs are now known
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-10-12 23:12:37 +00:00
|
|
|
@Test
|
|
|
|
fun synchronizeCustomerSystemId() {
|
|
|
|
|
|
|
|
// when
|
2019-10-15 16:23:03 +00:00
|
|
|
val result = underTest.testSynchronizeCustomerSystemId(Bank, Customer)
|
2019-10-12 23:12:37 +00:00
|
|
|
|
|
|
|
// then
|
2019-10-13 17:44:16 +00:00
|
|
|
assertThat(result.isSuccessful).isTrue()
|
2019-10-12 23:12:37 +00:00
|
|
|
assertThat(Customer.customerSystemId).isNotEqualTo(KundensystemStatus.SynchronizingCustomerSystemId) // customer system id is now set
|
|
|
|
assertThat(Customer.selectedLanguage).isNotEqualTo(Dialogsprache.Default) // language is set now
|
|
|
|
assertThat(Customer.customerSystemStatus).isEqualTo(KundensystemStatusWerte.Benoetigt) // customerSystemStatus is set now
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun getTransactions() {
|
|
|
|
|
2019-10-13 18:12:04 +00:00
|
|
|
// when
|
|
|
|
|
2019-10-12 23:12:37 +00:00
|
|
|
// some banks support retrieving account transactions of last 90 days without TAN
|
2019-10-13 18:12:04 +00:00
|
|
|
val result = underTest.tryGetTransactionsOfLast90DaysWithoutTan(Bank, Customer)
|
2019-10-12 23:12:37 +00:00
|
|
|
|
|
|
|
|
|
|
|
// then
|
2019-10-13 17:44:16 +00:00
|
|
|
assertThat(result.isSuccessful).isTrue()
|
2019-10-13 16:08:42 +00:00
|
|
|
assertThat(result.bookedTransactions).isNotEmpty()
|
2019-10-12 23:12:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun testBankTransfer() {
|
|
|
|
|
2019-10-20 22:47:01 +00:00
|
|
|
// given
|
2019-10-30 22:02:59 +00:00
|
|
|
underTest.addAccount(Bank, Customer)
|
2019-10-20 22:47:01 +00:00
|
|
|
|
2019-10-20 22:51:21 +00:00
|
|
|
// now IBAN should be set
|
2019-10-20 22:47:01 +00:00
|
|
|
assertThat(Customer.iban).describedAs("Customer's IBAN should now be set").isNotNull()
|
|
|
|
|
|
|
|
// transfer 1 cent to yourself. Transferring money to oneself also doesn't require to enter a TAN according to PSD2
|
2019-10-20 22:56:44 +00:00
|
|
|
val BankTransferData = BankTransferData(Customer.name, Customer.iban!!, Bank.bic, 0.01.toBigDecimal(), "Give it to me baby")
|
2019-10-20 22:47:01 +00:00
|
|
|
|
|
|
|
|
2019-10-12 23:12:37 +00:00
|
|
|
// when
|
2019-10-13 15:24:47 +00:00
|
|
|
val result = underTest.doBankTransfer(BankTransferData, Bank, Customer)
|
2019-10-12 23:12:37 +00:00
|
|
|
|
|
|
|
// then
|
2019-10-13 17:44:16 +00:00
|
|
|
assertThat(result.isSuccessful).isTrue()
|
2019-10-12 23:12:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|