Implemented BankFinder

This commit is contained in:
dankl 2019-10-12 21:13:01 +02:00 committed by dankito
parent 564e7cef7d
commit 8fd0df7c18
3 changed files with 105 additions and 0 deletions

View File

@ -0,0 +1,61 @@
package net.dankito.fints.banks
import net.dankito.fints.model.BankInfo
import net.dankito.utils.serialization.JacksonJsonSerializer
import org.slf4j.LoggerFactory
open class BankFinder {
companion object {
private val log = LoggerFactory.getLogger(BankFinder::class.java)
}
protected var bankListField: List<BankInfo>? = null
open fun findBankByBankCode(query: String): List<BankInfo> {
return getBankList().filter { it.bankCode.startsWith(query) }
}
open fun findBankByNameBankCodeOrCity(query: String): List<BankInfo> {
val queryLowerCase = query.toLowerCase()
return getBankList().filter {
it.name.toLowerCase().contains(queryLowerCase)
|| it.bankCode.startsWith(query)
|| it.city.contains(queryLowerCase)
}
}
open fun getBankList(): List<BankInfo> {
bankListField?.let {
return it
}
val bankList = loadBankList()
this.bankListField = bankList
return bankList
}
protected open fun loadBankList(): List<BankInfo> {
try {
val inputStream = BankFinder::class.java.classLoader.getResourceAsStream("BankList.json")
val bankListString = inputStream.bufferedReader().readText()
JacksonJsonSerializer().deserializeList(bankListString, BankInfo::class.java)?.let {
return it
}
} catch (e: Exception) {
log.error("Could not load bank list", e)
}
return listOf()
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,43 @@
package net.dankito.fints.banks
import org.assertj.core.api.Assertions.assertThat
import org.junit.Test
class BankFinderTest {
private val underTest = BankFinder()
@Test
fun findBankByBankCode_10000000() {
// when
val result = underTest.findBankByBankCode("10000000")
// then
assertThat(result).hasSize(1)
assertThat(result[0].name).isEqualTo("Bundesbank")
}
@Test
fun findBankByNameBankCodeOrCity_starnberg() {
// when
val result = underTest.findBankByNameBankCodeOrCity("starnberg")
// then
assertThat(result).hasSize(66)
}
@Test
fun findBankByNameBankCodeOrCity_mizUh() {
// when
val result = underTest.findBankByNameBankCodeOrCity("mizUh")
// then
assertThat(result).hasSize(1)
assertThat(result[0].name).isEqualTo("Mizuho Bank Filiale Düsseldorf")
}
}