Skip to content

Commit

Permalink
Fehlermeldung bei Vorzeichenfehler verbessert
Browse files Browse the repository at this point in the history
  • Loading branch information
Oli B committed Sep 5, 2024
1 parent aa759dd commit d620a30
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
15 changes: 11 additions & 4 deletions lib/src/main/java/gdv/xport/satz/Satz.java
Original file line number Diff line number Diff line change
Expand Up @@ -618,10 +618,7 @@ private BetragMitVorzeichen getBetragMitVorzeichen(final Bezeichner bezeichner)
// Das Vorzeichenfeld darf leer sein (s. Issue #95), in diesem Fall ersetzen wir es vor
// der Instanziierung von BetragMitVorzeichen durch ein "+", damit die weitere numerische Verarbeitung funktioniert.
Feld vorzeichen = getVorzeichenOf(bezeichner);
String vorzeichenInhalt = vorzeichen.getInhalt();
if (StringUtils.isBlank(vorzeichenInhalt)) {
vorzeichenInhalt = "+";
}
String vorzeichenInhalt = getValidatedVorzeichenInhalt(vorzeichen);
BetragMitVorzeichen bmv = new BetragMitVorzeichen(
Bezeichner.of(bezeichner.getName() + " mit Vorzeichen"),
betrag.getAnzahlBytes() + 1, ByteAdresse.of(betrag.getByteAdresse())
Expand All @@ -630,6 +627,16 @@ private BetragMitVorzeichen getBetragMitVorzeichen(final Bezeichner bezeichner)
return bmv;
}

private static String getValidatedVorzeichenInhalt(Feld vorzeichen) {
String vorzeichenInhalt = vorzeichen.getInhalt();
if (StringUtils.isBlank(vorzeichenInhalt)) {
return "+";
} else if (!vorzeichenInhalt.equals("+") && !vorzeichenInhalt.equals("-")) {
throw new ValidationException("falsches Vorzeichen in " + vorzeichen);
}
return vorzeichenInhalt;
}

private Feld getVorzeichenOf(final Bezeichner bezeichner) {
for (int n = 1; n <= getNumberOfTeildatensaetze(); n++) {
Teildatensatz tds = getTeildatensatz(n);
Expand Down
4 changes: 4 additions & 0 deletions lib/src/test/java/gdv/xport/satz/SatzTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import patterntesting.runtime.junit.CollectionTester;
import patterntesting.runtime.junit.ObjectTester;

import javax.validation.ValidationException;
import java.io.*;
import java.math.BigDecimal;
import java.util.Collection;
Expand Down Expand Up @@ -223,6 +224,9 @@ public void testGetBetragMitLeeremVorzeichen() {
// Leeres Vorzeichen, aber nicht leerer Betrag -> erlaubt
BetragMitVorzeichen kosten = satz.getFeld(Bezeichner.SCHADENBEARBEITUNGSKOSTEN_IN_WAEHRUNGSEINHEITEN, BetragMitVorzeichen.class);
assertEquals(BigDecimal.valueOf(12.34), kosten.toBigDecimal());
// falsches Vorzeichen -> ValidationException
satz.getTeildatensatz(1).setFeld(ByteAdresse.of(167), "x");
assertThrows(ValidationException.class, () -> satz.getFeld(Bezeichner.SCHADENBEARBEITUNGSKOSTEN_IN_WAEHRUNGSEINHEITEN, BetragMitVorzeichen.class));
}

/**
Expand Down

0 comments on commit d620a30

Please sign in to comment.