Fixed that most parameters of account info (HIUPD) are optional and therefore may not set
This commit is contained in:
parent
c20bf13c5c
commit
94ccfd2e09
|
@ -158,14 +158,14 @@ open class ResponseParser @JvmOverloads constructor(
|
||||||
val bankCountryCode = parseInt(accountDetails[2])
|
val bankCountryCode = parseInt(accountDetails[2])
|
||||||
val bankCode = parseString(accountDetails[3])
|
val bankCode = parseString(accountDetails[3])
|
||||||
|
|
||||||
val iban = parseStringToNullIfEmpty(dataElementGroups[2])
|
val iban = parseStringToNullIfEmpty(dataElementGroups[2]) // optional
|
||||||
val customerId = parseString(dataElementGroups[3])
|
val customerId = parseString(dataElementGroups[3])
|
||||||
val accountType = parseCodeEnum(dataElementGroups[4], AccountTypeCode.values()).type
|
val accountType = parseNullableCodeEnum(dataElementGroups[4], AccountTypeCode.values())?.type
|
||||||
val currency = parseString(dataElementGroups[5])
|
val currency = parseStringToNullIfEmpty(dataElementGroups[5])
|
||||||
val accountHolderName1 = parseString(dataElementGroups[6])
|
val accountHolderName1 = parseString(dataElementGroups[6])
|
||||||
val accountHolderName2 = parseStringToNullIfEmpty(dataElementGroups[7])
|
val accountHolderName2 = if (dataElementGroups.size > 7) parseStringToNullIfEmpty(dataElementGroups[7]) else null
|
||||||
val productName = parseStringToNullIfEmpty(dataElementGroups[8])
|
val productName = if (dataElementGroups.size > 8) parseStringToNullIfEmpty(dataElementGroups[8]) else null
|
||||||
val limit = parseStringToNullIfEmpty(dataElementGroups[9]) // TODO: parse limit
|
val limit = if (dataElementGroups.size > 9) parseStringToNullIfEmpty(dataElementGroups[9]) else null // TODO: parse limit
|
||||||
|
|
||||||
// TODO: parse allowed jobs
|
// TODO: parse allowed jobs
|
||||||
// TODO: parse extension
|
// TODO: parse extension
|
||||||
|
@ -362,6 +362,14 @@ open class ResponseParser @JvmOverloads constructor(
|
||||||
return allValues.first { it.code == code }
|
return allValues.first { it.code == code }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected open fun <T : ICodeEnum> parseNullableCodeEnum(code: String, allValues: Array<T>): T? {
|
||||||
|
try {
|
||||||
|
return parseCodeEnum(code, allValues)
|
||||||
|
} catch (ignored: Exception) { }
|
||||||
|
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected open fun getDataElements(dataElementGroup: String): List<String> {
|
protected open fun getDataElements(dataElementGroup: String): List<String> {
|
||||||
return splitIntoPartsAndUnmask(dataElementGroup, Separators.DataElementsSeparator)
|
return splitIntoPartsAndUnmask(dataElementGroup, Separators.DataElementsSeparator)
|
||||||
|
|
|
@ -8,8 +8,8 @@ open class AccountInfo(
|
||||||
val bankCode: String,
|
val bankCode: String,
|
||||||
val iban: String?,
|
val iban: String?,
|
||||||
val customerId: String,
|
val customerId: String,
|
||||||
val accountType: AccountType,
|
val accountType: AccountType?,
|
||||||
val currency: String, // TODO: may parse to a value object
|
val currency: String?, // TODO: may parse to a value object
|
||||||
val accountHolderName1: String,
|
val accountHolderName1: String,
|
||||||
val accountHolderName2: String?,
|
val accountHolderName2: String?,
|
||||||
val productName: String?,
|
val productName: String?,
|
||||||
|
|
|
@ -214,6 +214,33 @@ class ResponseParserTest : FinTsTestBase() {
|
||||||
?: run { Assert.fail("No segment of type AccountInfo found in ${result.receivedSegments}") }
|
?: run { Assert.fail("No segment of type AccountInfo found in ${result.receivedSegments}") }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun parseAccountInfo_OptionalFieldsNotSet() {
|
||||||
|
|
||||||
|
// when
|
||||||
|
val result = underTest.parse("HIUPD:74:6:3+9999999999::280:10070000++9999999999+++anonym")
|
||||||
|
|
||||||
|
// then
|
||||||
|
assertSuccessfullyParsedSegment(result, InstituteSegmentId.AccountInfo, 74, 6, 3)
|
||||||
|
|
||||||
|
result.getFirstSegmentById<AccountInfo>(InstituteSegmentId.AccountInfo)?.let { segment ->
|
||||||
|
assertThat(segment.accountNumber).isEqualTo("9999999999")
|
||||||
|
assertThat(segment.subAccountAttribute).isNull()
|
||||||
|
assertThat(segment.bankCountryCode).isEqualTo(280)
|
||||||
|
assertThat(segment.bankCode).isEqualTo("10070000")
|
||||||
|
assertThat(segment.iban).isNull()
|
||||||
|
assertThat(segment.customerId).isEqualTo("9999999999")
|
||||||
|
assertThat(segment.accountType).isNull()
|
||||||
|
assertThat(segment.currency).isNull()
|
||||||
|
assertThat(segment.accountHolderName1).isEqualTo("anonym")
|
||||||
|
assertThat(segment.accountHolderName2).isNull()
|
||||||
|
assertThat(segment.productName).isNull()
|
||||||
|
assertThat(segment.accountLimit).isNull()
|
||||||
|
assertThat(segment.extension).isNull()
|
||||||
|
}
|
||||||
|
?: run { Assert.fail("No segment of type AccountInfo found in ${result.receivedSegments}") }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun parseTanInfo() {
|
fun parseTanInfo() {
|
||||||
|
|
Loading…
Reference in New Issue