From c556aa74ae440265f0ba848c4da0329d469babcc Mon Sep 17 00:00:00 2001 From: oyvemb <107673448+oyvemb@users.noreply.github.com> Date: Thu, 20 Oct 2022 20:11:41 +0200 Subject: [PATCH] =?UTF-8?q?uuid=20for=20institusjon=20i=20s=C3=B8knaden=20?= =?UTF-8?q?(#320)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * uuid for institusjon i søknaden * Legger kursholder med uuid i eget objekt * rename felt --- ...pl\303\246ringspengerYtelseValidator.java" | 17 +++++- .../ytelse/olp/v1/kurs/Kurs.java" | 13 ++--- .../ytelse/olp/v1/kurs/Kursholder.java" | 42 +++++++++++++++ .../no/nav/k9/s\303\270knad/TestUtils.java" | 2 +- ...03\246ringspengerYtelseValidatorTest.java" | 53 +++++++++++++++++++ 5 files changed, 119 insertions(+), 8 deletions(-) create mode 100644 "soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/kurs/Kursholder.java" create mode 100644 "soknad/src/test/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/Oppl\303\246ringspengerYtelseValidatorTest.java" diff --git "a/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/Oppl\303\246ringspengerYtelseValidator.java" "b/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/Oppl\303\246ringspengerYtelseValidator.java" index c2649990..5d06048a 100644 --- "a/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/Oppl\303\246ringspengerYtelseValidator.java" +++ "b/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/Oppl\303\246ringspengerYtelseValidator.java" @@ -9,6 +9,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.UUID; import java.util.stream.Collectors; import no.nav.fpsak.tidsserie.LocalDateTimeline; @@ -19,6 +20,7 @@ import no.nav.k9.søknad.ytelse.Ytelse; import no.nav.k9.søknad.ytelse.YtelseValidator; import no.nav.k9.søknad.ytelse.olp.v1.kurs.KursPeriodeMedReisetid; +import no.nav.k9.søknad.ytelse.olp.v1.kurs.Kursholder; class OpplæringspengerYtelseValidator extends YtelseValidator { @@ -96,7 +98,9 @@ List validerOgLeggTilFeilene(Opplæringspenger olp, validerAtYtelsePeriodenErKomplettMedSøknad(søknadsperiodeTidslinje, olp.getUttak().getPerioder(), "uttak", feilene); - validerReisetidMotKursperioden(olp.getKurs().getKursperioder(), "kurs", feilene); + validerKursholderOgInstitusjonUuid(olp.getKurs().getKursholder(), "kurs.kursholder", feilene); + + validerReisetidMotKursperioden(olp.getKurs().getKursperioder(), "kurs.kursperioder", feilene); return feilene; } @@ -129,6 +133,17 @@ private List validerAtYtelsePerioderErInnenforIntervalForEndring(LocalDate .collect(Collectors.toCollection(ArrayList::new))); } + private void validerKursholderOgInstitusjonUuid(Kursholder kursholder, String felt, List feil) { + String holder = kursholder.getHolder(); + UUID institusjonUuid = kursholder.getInstitusjonUuid(); + + if (holder == null && institusjonUuid == null) { + feil.add(lagFeil(felt, "ugyldigHolderEllerInstitusjonUuid", "Enten holder eller institusjonUuid må være satt.")); + } else if (holder != null && institusjonUuid != null) { + feil.add(lagFeil(felt, "ugyldigHolderEllerInstitusjonUuid", "Kan ikke ha både holder og institusjonUuid satt samtidig.")); + } + } + private void validerReisetidMotKursperioden(List kursperioder, String felt, List feil) { for (KursPeriodeMedReisetid kursPeriode : kursperioder) { if (kursPeriode != null) { diff --git "a/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/kurs/Kurs.java" "b/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/kurs/Kurs.java" index 6f000596..74eb8b38 100644 --- "a/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/kurs/Kurs.java" +++ "b/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/kurs/Kurs.java" @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.UUID; import javax.validation.Valid; import javax.validation.constraints.NotNull; @@ -15,10 +16,10 @@ @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) public class Kurs { - @JsonProperty(value = "holder", required = true) + @JsonProperty(value = "kursholder", required = true) @NotNull @Valid - private String holder; + private Kursholder kursholder; @JsonProperty(value = "formål", required = true) @NotNull @@ -34,14 +35,14 @@ public class Kurs { public Kurs() { } - public Kurs(String kursholder, String formålMedKurset, List kursperioder) { - this.holder = kursholder; + public Kurs(Kursholder kursholder, String formålMedKurset, List kursperioder) { + this.kursholder = kursholder; this.formål = formålMedKurset; this.kursperioder = kursperioder; } - public String getHolder() { - return holder; + public Kursholder getKursholder() { + return kursholder; } public String getFormål() { diff --git "a/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/kurs/Kursholder.java" "b/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/kurs/Kursholder.java" new file mode 100644 index 00000000..7e73190e --- /dev/null +++ "b/soknad/src/main/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/kurs/Kursholder.java" @@ -0,0 +1,42 @@ +package no.nav.k9.søknad.ytelse.olp.v1.kurs; + +import java.util.UUID; + +import javax.validation.Valid; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE) +public class Kursholder { + + @JsonProperty(value = "holder", required = true) + @Valid + @Size(max = 100) + @Pattern(regexp = "^[\\p{Pd}\\p{Graph}\\p{Space}\\p{Sc}\\p{L}\\p{M}\\p{N}§]*$", message = "[${validatedValue}] matcher ikke tillatt pattern [{regexp}]") + private String holder; + + @JsonProperty(value = "institusjonsidentifikator", required = true) + @Valid + private UUID institusjonUuid; + + public Kursholder() { + } + + public Kursholder(String holder, UUID institusjonUuid) { + this.holder = holder; + this.institusjonUuid = institusjonUuid; + } + + public String getHolder() { + return holder; + } + + public UUID getInstitusjonUuid() { + return institusjonUuid; + } +} diff --git "a/soknad/src/test/java/no/nav/k9/s\303\270knad/TestUtils.java" "b/soknad/src/test/java/no/nav/k9/s\303\270knad/TestUtils.java" index 3620f7fb..813d075f 100644 --- "a/soknad/src/test/java/no/nav/k9/s\303\270knad/TestUtils.java" +++ "b/soknad/src/test/java/no/nav/k9/s\303\270knad/TestUtils.java" @@ -71,7 +71,7 @@ public static void feilInneholder(List feil, String felt, String feilkode, .stream() .filter(f -> f.getFeilkode().equals(feilkode) && f.getFelt().equals(felt) && f.getFeilmelding().equals(feilmelding)) .collect(Collectors.toList())) - .withFailMessage("Finner ikke fetl og feilkode: " + felt + ", " + feilkode + ", " + feilmelding) + .withFailMessage("Finner ikke felt og feilkode: " + felt + ", " + feilkode + ", " + feilmelding) .isNotEmpty(); } diff --git "a/soknad/src/test/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/Oppl\303\246ringspengerYtelseValidatorTest.java" "b/soknad/src/test/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/Oppl\303\246ringspengerYtelseValidatorTest.java" new file mode 100644 index 00000000..594c0737 --- /dev/null +++ "b/soknad/src/test/java/no/nav/k9/s\303\270knad/ytelse/olp/v1/Oppl\303\246ringspengerYtelseValidatorTest.java" @@ -0,0 +1,53 @@ +package no.nav.k9.søknad.ytelse.olp.v1; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.time.LocalDate; +import java.util.List; +import java.util.UUID; + +import org.junit.jupiter.api.Test; + +import no.nav.k9.søknad.TestUtils; +import no.nav.k9.søknad.felles.Feil; +import no.nav.k9.søknad.felles.type.Periode; +import no.nav.k9.søknad.ytelse.olp.v1.kurs.Kurs; +import no.nav.k9.søknad.ytelse.olp.v1.kurs.KursPeriodeMedReisetid; +import no.nav.k9.søknad.ytelse.olp.v1.kurs.Kursholder; +import no.nav.k9.søknad.ytelse.psb.YtelseEksempel; + +class OpplæringspengerYtelseValidatorTest { + + private final OpplæringspengerYtelseValidator ytelseValidator = new OpplæringspengerYtelseValidator(); + + private Opplæringspenger lagYtelse(String holder, UUID institusjonUuid) { + Periode søknadsperiode = new Periode(LocalDate.now(), LocalDate.now().plusWeeks(1)); + KursPeriodeMedReisetid kursPeriode = new KursPeriodeMedReisetid(søknadsperiode, søknadsperiode.getFraOgMed(), søknadsperiode.getTilOgMed()); + Kurs kurs = new Kurs(new Kursholder(holder, institusjonUuid), "?", List.of(kursPeriode)); + return new Opplæringspenger().medBarn(YtelseEksempel.lagBarn()).medSøknadsperiode(List.of(søknadsperiode)).medUttak(YtelseEksempel.lagUttak(søknadsperiode)).medKurs(kurs); + } + + @Test + void skalValidereOk() { + Opplæringspenger olpYtelse = lagYtelse(null, UUID.randomUUID()); + + List feil = ytelseValidator.valider(olpYtelse); + assertThat(feil).isEmpty(); + } + + @Test + void skalGiFeilHvisBådeHolderOgUuidErNull() { + Opplæringspenger olpYtelse = lagYtelse(null, null); + + List feil = ytelseValidator.valider(olpYtelse); + TestUtils.feilInneholder(feil, "ytelse.kurs.kursholder", "ugyldigHolderEllerInstitusjonUuid", "Enten holder eller institusjonUuid må være satt."); + } + + @Test + void skalGiFeilHvisBådeHolderOgUuidErSatt() { + Opplæringspenger olpYtelse = lagYtelse("Franz Holder", UUID.randomUUID()); + + List feil = ytelseValidator.valider(olpYtelse); + TestUtils.feilInneholder(feil, "ytelse.kurs.kursholder", "ugyldigHolderEllerInstitusjonUuid", "Kan ikke ha både holder og institusjonUuid satt samtidig."); + } +}