Implemented multi part query so that search terms can be separated by white space, e. g. 'Berliner Sparkasse'

This commit is contained in:
dankl 2020-01-19 15:00:41 +01:00 committed by dankito
parent 2df51c37ae
commit 00e2a7fa92
2 changed files with 48 additions and 7 deletions

View File

@ -29,14 +29,29 @@ open class BankFinder {
} }
val queryLowerCase = query.toLowerCase() val queryLowerCase = query.toLowerCase()
val queryPartsLowerCase = queryLowerCase.split(" ")
return getBankList().filter { return getBankList().filter { bankInfo ->
it.name.toLowerCase().contains(queryLowerCase) checkIfAllQueryPartsMatchBank(queryPartsLowerCase, bankInfo)
|| it.bankCode.startsWith(query)
|| it.city.toLowerCase().contains(queryLowerCase)
} }
} }
protected open fun checkIfAllQueryPartsMatchBank(queryPartsLowerCase: List<String>, bankInfo: BankInfo): Boolean {
for (queryPartLowerCase in queryPartsLowerCase) {
if (checkIfQueryMatchesBank(bankInfo, queryPartLowerCase) == false) {
return false
}
}
return true
}
protected open fun checkIfQueryMatchesBank(bankInfo: BankInfo, queryLowerCase: String): Boolean {
return bankInfo.name.toLowerCase().contains(queryLowerCase)
|| bankInfo.bankCode.startsWith(queryLowerCase)
|| bankInfo.city.toLowerCase().contains(queryLowerCase)
}
open fun getBankList(): List<BankInfo> { open fun getBankList(): List<BankInfo> {
bankListField?.let { bankListField?.let {

View File

@ -19,8 +19,9 @@ class BankFinderTest {
assertThat(result[0].name).isEqualTo("Bundesbank") assertThat(result[0].name).isEqualTo("Bundesbank")
} }
@Test @Test
fun findBankByNameBankCodeOrCity_starnberg() { fun findBankByNameBankCodeOrCity_Starnberg_MultipleResults() {
// when // when
val result = underTest.findBankByNameBankCodeOrCity("starnberg") val result = underTest.findBankByNameBankCodeOrCity("starnberg")
@ -30,14 +31,39 @@ class BankFinderTest {
} }
@Test @Test
fun findBankByNameBankCodeOrCity_mizUh() { fun findBankByNameBankCodeOrCity_mizUh_SingleResult() {
// when // when
val result = underTest.findBankByNameBankCodeOrCity("mizUh") val result = underTest.findBankByNameBankCodeOrCity("mizUh")
// then // then
assertThat(result).hasSize(1) assertThat(result).hasSize(1)
assertThat(result[0].name).isEqualTo("Mizuho Bank Filiale Düsseldorf")
assertThat(result.first().name).isEqualTo("Mizuho Bank Filiale Düsseldorf")
}
@Test
fun findBankByNameBankCodeOrCity_MultiPartsQuery_BerlinSparkas() {
// when
val result = underTest.findBankByNameBankCodeOrCity("Berlin Sparkas")
// then
assertThat(result).hasSize(3)
assertThat(result.first().name).isEqualTo("Landesbank Berlin - Berliner Sparkasse")
}
@Test
fun findBankByNameBankCodeOrCity_MultiPartsQuery_SparkasBerlin() {
// when
val result = underTest.findBankByNameBankCodeOrCity("Sparkas Berlin")
// then
assertThat(result).hasSize(3)
assertThat(result.first().name).isEqualTo("Landesbank Berlin - Berliner Sparkasse")
} }
} }