Implemented removing last empty data elements from output

This commit is contained in:
dankl 2019-10-26 00:02:07 +02:00 committed by dankito
parent 733a262628
commit 267a7db8d8
2 changed files with 80 additions and 1 deletions

View File

@ -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("")
}
}

View File

@ -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
}
}