Implemented removing last empty data elements from output
This commit is contained in:
parent
733a262628
commit
267a7db8d8
|
@ -3,13 +3,36 @@ package net.dankito.fints.messages.datenelementgruppen
|
|||
import net.dankito.fints.messages.Existenzstatus
|
||||
import net.dankito.fints.messages.Separators
|
||||
import net.dankito.fints.messages.datenelemente.DatenelementBase
|
||||
import java.util.regex.Pattern
|
||||
|
||||
|
||||
abstract class Datenelementgruppe(val dataElements: List<DatenelementBase>, existenzstatus: Existenzstatus)
|
||||
: DatenelementBase(existenzstatus) {
|
||||
|
||||
companion object {
|
||||
val ReplaceEmptyDataElementsSeparatorsAtEndPattern =
|
||||
Pattern.compile("${Separators.DataElementsSeparator}*\$")
|
||||
}
|
||||
|
||||
|
||||
override fun format(): String {
|
||||
return dataElements.joinToString(Separators.DataElementsSeparator) { it.format() }
|
||||
val formattedDataElementGroup = dataElements.joinToString(Separators.DataElementsSeparator) { it.format() }
|
||||
|
||||
return cutEmptyDataElementGroupsAtEndOfSegment(formattedDataElementGroup)
|
||||
}
|
||||
|
||||
/**
|
||||
* Auslassen von Datenelementen durch Abschneiden
|
||||
* Ist für DE, die am Ende eines Segments stehen, kein Inhalt vorhanden, können sie ausgelassen werden.
|
||||
* In diesem Fall wird das Segmentende-Zeichen unmittelbar nach dem letzten mit Inhalt belegten DE angegeben. (...)
|
||||
*
|
||||
* Auslassen von Gruppendatenelementen
|
||||
* Es gelten analog die Ausführungen zur Auslassung von Datenelementen.
|
||||
*/
|
||||
protected open fun cutEmptyDataElementGroupsAtEndOfSegment(formattedDataElementGroup: String): String {
|
||||
val matcher = ReplaceEmptyDataElementsSeparatorsAtEndPattern.matcher(formattedDataElementGroup)
|
||||
|
||||
return matcher.replaceFirst("")
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
package net.dankito.fints.messages.datenelementgruppen
|
||||
|
||||
import net.dankito.fints.messages.Separators
|
||||
import net.dankito.fints.messages.datenelementgruppen.implementierte.signatur.BenutzerdefinierteSignatur
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
import org.junit.Test
|
||||
|
||||
|
||||
class DatenelementgruppeTest {
|
||||
|
||||
@Test
|
||||
fun format_LastDataElementIsSet_GetsWrittenToOutput() {
|
||||
|
||||
// given
|
||||
val pin = "12345"
|
||||
val tan = "654321"
|
||||
val dataElementGroup = BenutzerdefinierteSignatur(pin, tan)
|
||||
|
||||
// when
|
||||
val result = dataElementGroup.format()
|
||||
|
||||
// then
|
||||
assertThat(result).isEqualTo(pin + Separators.DataElementsSeparator + tan) // ":" does not get written to output
|
||||
}
|
||||
|
||||
@Test
|
||||
fun format_LastDataElementIsEmpty_EmptyLastDataElementDoesNotGetWrittenToOutput() {
|
||||
|
||||
// given
|
||||
val pin = "12345"
|
||||
val tan = null
|
||||
val dataElementGroup = BenutzerdefinierteSignatur(pin, tan)
|
||||
|
||||
// when
|
||||
val result = dataElementGroup.format()
|
||||
|
||||
// then
|
||||
assertThat(result).isEqualTo(pin) // ":" does not get written to output
|
||||
}
|
||||
|
||||
@Test
|
||||
fun format_AllDataElementsAreEmpty_NothingGetsWrittenToOutput() {
|
||||
|
||||
// given
|
||||
val pin = ""
|
||||
val tan = null
|
||||
val dataElementGroup = BenutzerdefinierteSignatur(pin, tan)
|
||||
|
||||
// when
|
||||
val result = dataElementGroup.format()
|
||||
|
||||
// then
|
||||
assertThat(result).isEmpty() // ":" does not get written to output
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue