From 6d1fd42db6c33ac5cec281449c25f842aa8fe374 Mon Sep 17 00:00:00 2001 From: Mikael Bjerga <6940327+bjerga@users.noreply.github.com> Date: Fri, 26 Apr 2024 08:46:50 +0200 Subject: [PATCH] Bruk type wrappers fra utils-pakken (#491) * Bruk type wrappers fra utils-pakken * Fiks integrasjonstest * Fiks nok en integrasjonstest --- .../inntektsmelding/api/auth/AuthUtils.kt | 9 +- .../api/innsending/InnsendingValidate.kt | 3 - .../validation/BehandlingsdagerConstraint.kt | 10 -- .../validation/IdentitetsnummerConstraint.kt | 6 +- .../api/validation/IsValidBehandlingsdager.kt | 36 ----- .../OrganisasjonsnummerConstraint.kt | 6 +- .../api/validation/Validators.kt | 105 -------------- api/src/main/resources/messages_no.properties | 1 - .../api/utils/MockAuthToken.kt | 4 +- .../IsValidBehandlingsdagerKtTest.kt | 62 --------- .../helsearbeidsgiver/felles/TypeWrappers.kt | 33 ----- .../felles/TypeWrappersTest.kt | 129 ------------------ gradle.properties | 2 +- .../inntektsmelding/inntekt/InntektLoeser.kt | 9 +- .../inntekt/InntektLoeserTest.kt | 9 +- .../integrasjonstest/InnsendingIT.kt | 10 +- .../integrasjonstest/TrengerIT.kt | 4 +- .../integrasjonstest/mock/MockData.kt | 7 +- .../integrasjonstest/utils/EndToEndTest.kt | 41 +++--- 19 files changed, 68 insertions(+), 418 deletions(-) delete mode 100644 api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/BehandlingsdagerConstraint.kt delete mode 100644 api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/IsValidBehandlingsdager.kt delete mode 100644 api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/Validators.kt delete mode 100644 api/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/IsValidBehandlingsdagerKtTest.kt delete mode 100644 felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/TypeWrappers.kt delete mode 100644 felles/src/test/kotlin/no/nav/helsearbeidsgiver/felles/TypeWrappersTest.kt diff --git a/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/auth/AuthUtils.kt b/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/auth/AuthUtils.kt index a142b4963..1a23bd89f 100644 --- a/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/auth/AuthUtils.kt +++ b/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/auth/AuthUtils.kt @@ -2,6 +2,7 @@ package no.nav.helsearbeidsgiver.inntektsmelding.api.auth import io.ktor.server.request.ApplicationRequest import io.ktor.server.request.authorization +import no.nav.helsearbeidsgiver.utils.wrapper.Fnr import no.nav.security.token.support.core.jwt.JwtToken fun ApplicationRequest.lesFnrFraAuthToken(): String { @@ -10,7 +11,13 @@ fun ApplicationRequest.lesFnrFraAuthToken(): String { val pid = JwtToken(authToken).jwtTokenClaims.get("pid")?.toString() - return pid ?: JwtToken(authToken).subject + val fnr = pid ?: JwtToken(authToken).subject + + if (!Fnr.erGyldig(fnr)) { + throw IllegalAccessException("Fnr i autorisasjonsheader er ugyldig.") + } + + return fnr } class ManglerAltinnRettigheterException : Exception() diff --git a/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/innsending/InnsendingValidate.kt b/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/innsending/InnsendingValidate.kt index 66d2cd860..c6635deb5 100644 --- a/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/innsending/InnsendingValidate.kt +++ b/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/innsending/InnsendingValidate.kt @@ -10,7 +10,6 @@ import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Periode import no.nav.helsearbeidsgiver.inntektsmelding.api.validation.isIdentitetsnummer import no.nav.helsearbeidsgiver.inntektsmelding.api.validation.isOrganisasjonsnummer import no.nav.helsearbeidsgiver.inntektsmelding.api.validation.isTelefonnummer -import no.nav.helsearbeidsgiver.inntektsmelding.api.validation.isValidBehandlingsdager import org.valiktor.functions.isGreaterThan import org.valiktor.functions.isGreaterThanOrEqualTo import org.valiktor.functions.isLessThan @@ -56,8 +55,6 @@ fun Innsending.validate() { if (innsendt.fullLønnIArbeidsgiverPerioden?.utbetalerFullLønn == true) { validate(Innsending::arbeidsgiverperioder).isNotEmpty() } - // Fraværsperiode - validate(Innsending::behandlingsdager).isValidBehandlingsdager() // Velg behandlingsdager // Egenmelding validate(Innsending::egenmeldingsperioder).validateForEach { validate(Periode::fom).isNotNull() diff --git a/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/BehandlingsdagerConstraint.kt b/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/BehandlingsdagerConstraint.kt deleted file mode 100644 index ae4771399..000000000 --- a/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/BehandlingsdagerConstraint.kt +++ /dev/null @@ -1,10 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.api.validation - -import org.valiktor.Validator -import java.time.LocalDate - -object BehandlingsdagerConstraint : CustomConstraint - -fun Validator.Property?>.isValidBehandlingsdager() { - this.validate(BehandlingsdagerConstraint) { isValidBehandlingsdager(it?.toList() ?: emptyList()) } -} diff --git a/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/IdentitetsnummerConstraint.kt b/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/IdentitetsnummerConstraint.kt index 7d683417d..3fabc2bba 100644 --- a/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/IdentitetsnummerConstraint.kt +++ b/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/IdentitetsnummerConstraint.kt @@ -1,7 +1,11 @@ package no.nav.helsearbeidsgiver.inntektsmelding.api.validation +import no.nav.helsearbeidsgiver.utils.wrapper.Fnr import org.valiktor.Validator object IdentitetsnummerConstraint : CustomConstraint fun Validator.Property.isIdentitetsnummer() = - this.validate(IdentitetsnummerConstraint) { FoedselsNrValidator.isValid(it) } + this.validate(IdentitetsnummerConstraint) { + require(it != null) + Fnr.erGyldig(it) + } diff --git a/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/IsValidBehandlingsdager.kt b/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/IsValidBehandlingsdager.kt deleted file mode 100644 index 74a734c29..000000000 --- a/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/IsValidBehandlingsdager.kt +++ /dev/null @@ -1,36 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.api.validation - -import java.time.LocalDate -import java.time.temporal.WeekFields - -/** - * Angi de 12 dager som den ansatte vært borte fra jobbet for behandling. - * Det kan kun være en behandlingsdag per uke. - * I tillegg kan det ikke være mer enn 15 dager mellom to behandlinger. - **/ -fun isValidBehandlingsdager(behandlingsdager: List): Boolean { - if (behandlingsdager.isEmpty() || behandlingsdager.size == 1) { - return true - } - if (behandlingsdager.size > 12) { - return false - } - val dager = behandlingsdager.sorted() - for (i in 1 until dager.size) { - val forrige = dager[i - 1] - val forrigePlus15 = forrige.plusDays(15) - val neste = dager[i] - if (neste.isAfter(forrigePlus15)) { - return false - } - if (neste == forrige) { - return false - } - val forrigeUke = forrige.get(WeekFields.ISO.weekOfYear()) - val nesteUke = neste.get(WeekFields.ISO.weekOfYear()) - if (forrigeUke == nesteUke) { - return false - } - } - return true -} diff --git a/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/OrganisasjonsnummerConstraint.kt b/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/OrganisasjonsnummerConstraint.kt index 143b42dcb..d064fa91f 100644 --- a/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/OrganisasjonsnummerConstraint.kt +++ b/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/OrganisasjonsnummerConstraint.kt @@ -1,7 +1,11 @@ package no.nav.helsearbeidsgiver.inntektsmelding.api.validation +import no.nav.helsearbeidsgiver.utils.wrapper.Orgnr import org.valiktor.Validator object OrganisasjonsnummerConstraint : CustomConstraint fun Validator.Property.isOrganisasjonsnummer() = - this.validate(OrganisasjonsnummerConstraint) { OrganisasjonsnummerValidator.isValid(it) } + this.validate(OrganisasjonsnummerConstraint) { + require(it != null) + Orgnr.erGyldig(it) + } diff --git a/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/Validators.kt b/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/Validators.kt deleted file mode 100644 index c5238f038..000000000 --- a/api/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/Validators.kt +++ /dev/null @@ -1,105 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.api.validation - -import no.nav.helsearbeidsgiver.inntektsmelding.api.validation.FoedselsNrValidator.Companion.tabeller.kontrollsiffer1 -import no.nav.helsearbeidsgiver.inntektsmelding.api.validation.FoedselsNrValidator.Companion.tabeller.kontrollsiffer2 -import no.nav.helsearbeidsgiver.inntektsmelding.api.validation.OrganisasjonsnummerValidator.Companion.tabeller.weights - -class FoedselsNrValidator(input: String?) { - private val asString: String - - init { - require(input != null) - asString = input - require("""\d{11}""".toRegex().matches(asString)) { "Ikke et gyldig fødselsnummer: $asString" } - require(gyldigeKontrollsiffer) { "Kontrollsiffer mÃ¥ være gyldige" } - } - - private val gyldigeKontrollsiffer: Boolean - get() { - val ks1 = asString[9].toString().toInt() - val ks2 = asString[10].toString().toInt() - - val c1 = checksum(kontrollsiffer1, asString) - if (c1 == 10 || c1 != ks1) { - return false - } - - val c2 = checksum(kontrollsiffer2, asString) - - return c2 == ks2 && c2 != 10 - } - - companion object { - object tabeller { - val kontrollsiffer1: List = listOf(3, 7, 6, 1, 8, 9, 4, 5, 2) - val kontrollsiffer2: List = listOf(5, 4, 3, 2, 7, 6, 5, 4, 3, 2) - } - - fun isValid(asString: String?): Boolean { - return try { - FoedselsNrValidator(asString) - true - } catch (t: Throwable) { - false - } - } - - fun checksum(liste: List, str: String): Int { - var sum = 0 - for ((i, m) in liste.withIndex()) { - sum += m * str[i].toString().toInt() - } - - val res = 11 - (sum % 11) - return if (res == 11) 0 else res - } - } -} - -/** - * Sjekker at strengen er et gydlig org nummer ifølge: - * https://www.brreg.no/om-oss/oppgavene-vare/alle-registrene-vare/om-enhetsregisteret/organisasjonsnummeret/ - */ -class OrganisasjonsnummerValidator(input: String?) { - private val asString: String - - init { - require(input != null) - asString = input - require("""\d{9}""".toRegex().matches(asString)) { "Ikke et gyldig organisasjonsnummer: $asString" } - require(gyldigKontrollsiffer) { "Kontrollsiffer mÃ¥ være gyldige" } - } - - private val gyldigKontrollsiffer: Boolean - get() { - val kontrollsiffer = asString[8].toString().toInt() - val kalulertKontrollsiffer = checksum(weights, asString) - - return kalulertKontrollsiffer == kontrollsiffer && kalulertKontrollsiffer != 10 - } - - companion object { - object tabeller { - val weights: List = listOf(3, 2, 7, 6, 5, 4, 3, 2) - } - - fun isValid(asString: String?): Boolean { - return try { - OrganisasjonsnummerValidator(asString) - true - } catch (t: Throwable) { - false - } - } - - fun checksum(kontrollsifferVekter: List, orgNr: String): Int { - var produktsum = 0 - for ((i, m) in kontrollsifferVekter.withIndex()) { - produktsum += m * orgNr[i].toString().toInt() - } - - val res = 11 - (produktsum % 11) - return if (res == 11) 0 else res - } - } -} diff --git a/api/src/main/resources/messages_no.properties b/api/src/main/resources/messages_no.properties index 45ad61a3e..a9c25f9ad 100644 --- a/api/src/main/resources/messages_no.properties +++ b/api/src/main/resources/messages_no.properties @@ -1,7 +1,6 @@ # suppress inspection "UnusedProperty" for whole file no.nav.helsearbeidsgiver.inntektsmelding.api.validation.IdentitetsnummerConstraint.message=Ugyldig fødsels- eller D-nummer no.nav.helsearbeidsgiver.inntektsmelding.api.validation.OrganisasjonsnummerConstraint.message=Ugyldig virksomhetsnummer -no.nav.helsearbeidsgiver.inntektsmelding.api.validation.BehandlingsdagerConstraint.message=Tom kan ikke være før fom org.valiktor.constraints.NotEmpty.message=Må fylles ut org.valiktor.constraints.Less.message=Må være mindre enn {value} org.valiktor.constraints.Greater.message=Må være større enn {value} diff --git a/api/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/utils/MockAuthToken.kt b/api/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/utils/MockAuthToken.kt index c308ad9b9..027506462 100644 --- a/api/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/utils/MockAuthToken.kt +++ b/api/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/utils/MockAuthToken.kt @@ -1,6 +1,8 @@ package no.nav.helsearbeidsgiver.inntektsmelding.api.utils import no.nav.helsearbeidsgiver.inntektsmelding.api.Auth +import no.nav.helsearbeidsgiver.utils.test.wrapper.genererGyldig +import no.nav.helsearbeidsgiver.utils.wrapper.Fnr import no.nav.security.mock.oauth2.MockOAuth2Server import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach @@ -9,7 +11,7 @@ abstract class MockAuthToken { private val mockOAuth2Server = MockOAuth2Server() private val port = 6666 - val mockPid = "12345678901" + val mockPid = Fnr.genererGyldig().verdi fun mockAuthToken(): String = mockOAuth2Server.issueToken( diff --git a/api/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/IsValidBehandlingsdagerKtTest.kt b/api/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/IsValidBehandlingsdagerKtTest.kt deleted file mode 100644 index 662c0e83d..000000000 --- a/api/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/api/validation/IsValidBehandlingsdagerKtTest.kt +++ /dev/null @@ -1,62 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.api.validation - -import org.junit.jupiter.api.Assertions.assertFalse -import org.junit.jupiter.api.Assertions.assertTrue -import org.junit.jupiter.api.Test -import java.time.LocalDate - -class IsValidBehandlingsdagerKtTest { - - private val now: LocalDate = LocalDate.of(2023, 3, 27) - private val SUNDAY: LocalDate = LocalDate.of(2023, 3, 26) - - @Test - fun `skal godta uten dato`() { - assertTrue(isValidBehandlingsdager(emptyList())) - } - - @Test - fun `skal godta en dato`() { - assertTrue(isValidBehandlingsdager(listOf(now))) - } - - @Test - fun `skal ikke godta flere enn 12 dager`() { - assertFalse( - isValidBehandlingsdager( - listOf( - now, - now.plusDays(1), now.plusDays(2), now.plusDays(3), - now.plusDays(4), now.plusDays(5), now.plusDays(6), - now.plusDays(7), now.plusDays(8), now.plusDays(9), - now.plusDays(10), now.plusDays(11), now.plusDays(12) - ) - ) - ) - } - - @Test - fun `skal ikke godta flere samme uke`() { - assertFalse(isValidBehandlingsdager(listOf(now, now.plusDays(1))), "Skal feile dagen etterpÃ¥") - } - - @Test - fun `skal godta datoer pÃ¥ søndag og førstkommende mandag`() { - assertTrue(isValidBehandlingsdager(listOf(SUNDAY, SUNDAY.plusDays(1))), "Skal godta søndag og mandag etterpÃ¥") - } - - @Test - fun `skal godta neste uke`() { - assertTrue(isValidBehandlingsdager(listOf(now, now.plusDays(7))), "Skal godta uken etterpÃ¥") - } - - @Test - fun `skal godta opphold pÃ¥ inntil 15 dager`() { - assertTrue(isValidBehandlingsdager(listOf(now, now.plusDays(15))), "Skal godta inntil 15 dager") - } - - @Test - fun `skal ikke godta opphold pÃ¥ mer enn 16 dager`() { - assertFalse(isValidBehandlingsdager(listOf(now, now.plusDays(16))), "Skal ikke godta 16 dager eller mer") - } -} diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/TypeWrappers.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/TypeWrappers.kt deleted file mode 100644 index b2f9a2f33..000000000 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/TypeWrappers.kt +++ /dev/null @@ -1,33 +0,0 @@ -package no.nav.helsearbeidsgiver.felles - -import kotlinx.serialization.Serializable - -private val orgnrRgx = Regex("\\d{9}") - -private val fnrRgx = Regex( - "(?:[04][1-9]|[1256]\\d|[37][01])" + // to første siffer er gyldig dag (+40 for D-nummer) - "(?:[048][1-9]|[159][012])" + // to neste siffer er gyldig mÃ¥ned, med støtte for testpersoner (+40 for NAV, +80 for TestNorge) - "\\d{7}" // resten er tall (siste del kan forbedres) -) - -@Serializable -@JvmInline -value class Orgnr(val verdi: String) { - init { - require(verdi.matches(orgnrRgx)) - } - - override fun toString(): String = - verdi -} - -@Serializable -@JvmInline -value class Fnr(val verdi: String) { - init { - require(verdi.matches(fnrRgx)) - } - - override fun toString(): String = - verdi -} diff --git a/felles/src/test/kotlin/no/nav/helsearbeidsgiver/felles/TypeWrappersTest.kt b/felles/src/test/kotlin/no/nav/helsearbeidsgiver/felles/TypeWrappersTest.kt deleted file mode 100644 index af2eed7fa..000000000 --- a/felles/src/test/kotlin/no/nav/helsearbeidsgiver/felles/TypeWrappersTest.kt +++ /dev/null @@ -1,129 +0,0 @@ -package no.nav.helsearbeidsgiver.felles - -import io.kotest.assertions.throwables.shouldNotThrowAny -import io.kotest.assertions.throwables.shouldThrowExactly -import io.kotest.core.spec.style.FunSpec -import io.kotest.datatest.withData -import io.kotest.matchers.shouldBe - -class TypeWrappersTest : FunSpec({ - - context("Orgnr") { - context("gyldig") { - withData( - listOf( - "161231654", - "908498460", - "135103210", - "684603132", - "167484979", - "796033020" - ) - ) { - shouldNotThrowAny { - Orgnr(it) - } - } - } - - context("ugyldig") { - withData( - listOf( - "123", // for kort - "0123456789", // for langt - "12x456789", // med bokstav - "1234 6789" // med mellomrom - ) - ) { - shouldThrowExactly { - Orgnr(it) - } - } - - test("tom streng") { - shouldThrowExactly { - Orgnr("") - } - } - } - - test("toString gir wrappet verdi") { - Orgnr("123456789").let { - it.toString() shouldBe it.verdi - } - } - } - - context("Fnr") { - context("gyldig") { - withData( - listOf( - // Sjekker ikke kontrollsiffer - "01010012345", - "19092212345", - "29104512345", - "31129912345", - "25056712345", - "11085812345", - "41066612345", // D-nummer - "45066612345", // D-nummer - "50066612345", // D-nummer - "57066612345", // D-nummer - "60066612345", // D-nummer - "69066612345", // D-nummer - "70066612345", // D-nummer - "71066612345", // D-nummer - "01490012345", // Testperson fra NAV - "01500012345", // Testperson fra NAV - "01890012345", // Testperson fra TestNorge - "01900012345" // Testperson fra TestNorge - ) - ) { - shouldNotThrowAny { - Fnr(it) - } - } - } - - context("ugyldig") { - withData( - listOf( - "00010012345", // dag 0, andre siffer feil - "32010012345", // dag 32, andre siffer feil - "40010012345", // dag 40, andre siffer feil (D-nummer) - "72010012345", // dag 72, andre siffer feil (D-nummer) - "80010012345", // dag 80, første siffer feil - "01000012345", // mÃ¥ned 0, fjerde siffer feil - "01130012345", // mÃ¥ned 13, fjerde siffer feil - "01200012345", // mÃ¥ned 20, tredje siffer feil - "01390012345", // mÃ¥ned 39, tredje og fjerde siffer feil - "01400012345", // mÃ¥ned 40, fjerde siffer feil (testperson) - "01530012345", // mÃ¥ned 53, fjerde siffer feil (testperson) - "01790012345", // mÃ¥ned 79, tredje og fjerde siffer feil - "01800012345", // mÃ¥ned 80, fjerde siffer feil (testperson) - "01930012345", // mÃ¥ned 93, fjerde siffer feil (testperson) - "0101001234", // for kort - "010100123456", // for langt - "010100x2345", // med bokstav - "010100 1234" // med mellomrom - ) - ) { - shouldThrowExactly { - Fnr(it) - } - } - - test("tom streng") { - shouldThrowExactly { - Fnr("") - } - } - } - - test("toString gir wrappet verdi") { - Fnr("24120612345").let { - it.toString() shouldBe it.verdi - } - } - } -}) diff --git a/gradle.properties b/gradle.properties index a3e6c2b23..d682c78b3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ lettuceVersion=6.3.2.RELEASE mockkVersion=1.13.10 rapidsAndRiversVersion=2024031618181710609531.a0dbb2b2b2b6 tokenProviderVersion=0.4.0 -utilsVersion=0.8.0 +utilsVersion=0.9.0 # Client dependency versions aaregClientVersion=0.6.0 diff --git a/inntekt/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/InntektLoeser.kt b/inntekt/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/InntektLoeser.kt index 3162028f2..24741be64 100644 --- a/inntekt/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/InntektLoeser.kt +++ b/inntekt/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/InntektLoeser.kt @@ -2,15 +2,12 @@ package no.nav.helsearbeidsgiver.inntektsmelding.inntekt import io.prometheus.client.Summary import kotlinx.coroutines.runBlocking -import kotlinx.serialization.builtins.serializer import no.nav.helse.rapids_rivers.RapidsConnection import no.nav.helse.rapids_rivers.River import no.nav.helsearbeidsgiver.felles.BehovType -import no.nav.helsearbeidsgiver.felles.Fnr import no.nav.helsearbeidsgiver.felles.Inntekt import no.nav.helsearbeidsgiver.felles.InntektPerMaaned import no.nav.helsearbeidsgiver.felles.Key -import no.nav.helsearbeidsgiver.felles.Orgnr import no.nav.helsearbeidsgiver.felles.json.les import no.nav.helsearbeidsgiver.felles.json.toMap import no.nav.helsearbeidsgiver.felles.rapidsrivers.Loeser @@ -29,6 +26,8 @@ import no.nav.helsearbeidsgiver.utils.json.toJson import no.nav.helsearbeidsgiver.utils.log.MdcUtils import no.nav.helsearbeidsgiver.utils.log.logger import no.nav.helsearbeidsgiver.utils.log.sikkerLogger +import no.nav.helsearbeidsgiver.utils.wrapper.Fnr +import no.nav.helsearbeidsgiver.utils.wrapper.Orgnr import java.time.LocalDate import java.time.YearMonth import java.util.UUID @@ -82,8 +81,8 @@ class InntektLoeser( val json = behov.jsonMessage.toJson().parseJson().toMap() val transaksjonId = Key.UUID.les(UuidSerializer, json) - val fnr = Key.FNR.les(String.serializer(), json).let(::Fnr) - val orgnr = Key.ORGNRUNDERENHET.les(String.serializer(), json).let(::Orgnr) + val fnr = Key.FNR.les(Fnr.serializer(), json) + val orgnr = Key.ORGNRUNDERENHET.les(Orgnr.serializer(), json) val skjaeringstidspunkt = Key.SKJAERINGSTIDSPUNKT.les(LocalDateSerializer, json) val requestTimer = requestLatency.startTimer() diff --git a/inntekt/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/InntektLoeserTest.kt b/inntekt/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/InntektLoeserTest.kt index 314464bda..ba2e740d6 100644 --- a/inntekt/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/InntektLoeserTest.kt +++ b/inntekt/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/InntektLoeserTest.kt @@ -14,11 +14,9 @@ import kotlinx.serialization.json.JsonElement import no.nav.helse.rapids_rivers.testsupport.TestRapid import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName -import no.nav.helsearbeidsgiver.felles.Fnr import no.nav.helsearbeidsgiver.felles.Inntekt import no.nav.helsearbeidsgiver.felles.InntektPerMaaned import no.nav.helsearbeidsgiver.felles.Key -import no.nav.helsearbeidsgiver.felles.Orgnr import no.nav.helsearbeidsgiver.felles.json.toJson import no.nav.helsearbeidsgiver.felles.json.toMap import no.nav.helsearbeidsgiver.felles.test.json.readFail @@ -32,6 +30,9 @@ import no.nav.helsearbeidsgiver.utils.test.date.april import no.nav.helsearbeidsgiver.utils.test.date.februar import no.nav.helsearbeidsgiver.utils.test.date.januar import no.nav.helsearbeidsgiver.utils.test.date.mars +import no.nav.helsearbeidsgiver.utils.test.wrapper.genererGyldig +import no.nav.helsearbeidsgiver.utils.wrapper.Fnr +import no.nav.helsearbeidsgiver.utils.wrapper.Orgnr import java.time.YearMonth import java.util.UUID @@ -246,8 +247,8 @@ class InntektLoeserTest : FunSpec({ private object Mock { val uuid: UUID = UUID.randomUUID() - val orgnr = Orgnr("123456785") - val fnr = Fnr("10107400000") + val orgnr = Orgnr.genererGyldig() + val fnr = Fnr.genererGyldig() val skjaeringstidspunkt = 14.april } diff --git a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/InnsendingIT.kt b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/InnsendingIT.kt index f506b1a6b..1da117485 100644 --- a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/InnsendingIT.kt +++ b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/InnsendingIT.kt @@ -24,7 +24,9 @@ import no.nav.helsearbeidsgiver.inntektsmelding.helsebro.domene.ForespoerselSvar import no.nav.helsearbeidsgiver.inntektsmelding.innsending.mapInntektsmelding import no.nav.helsearbeidsgiver.inntektsmelding.integrasjonstest.mock.mockInnsending import no.nav.helsearbeidsgiver.inntektsmelding.integrasjonstest.utils.EndToEndTest +import no.nav.helsearbeidsgiver.inntektsmelding.integrasjonstest.utils.bjarneBetjent import no.nav.helsearbeidsgiver.inntektsmelding.integrasjonstest.utils.fromJsonToString +import no.nav.helsearbeidsgiver.inntektsmelding.integrasjonstest.utils.maxMekker import no.nav.helsearbeidsgiver.utils.json.fromJson import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer import no.nav.helsearbeidsgiver.utils.json.toJson @@ -165,8 +167,8 @@ class InnsendingIT : EndToEndTest() { Key.CLIENT_ID to UUID.randomUUID().toJson(), Key.FORESPOERSEL_ID to Mock.forespoerselId.toJson(), Key.ORGNRUNDERENHET to Mock.skjema.orgnrUnderenhet.toJson(), - Key.IDENTITETSNUMMER to "fnr-bjarne".toJson(), - Key.ARBEIDSGIVER_ID to "fnr-max".toJson(), + Key.IDENTITETSNUMMER to bjarneBetjent.ident!!.toJson(), + Key.ARBEIDSGIVER_ID to maxMekker.ident!!.toJson(), Key.SKJEMA_INNTEKTSMELDING to Mock.skjema.toJson(Innsending.serializer()) ) } @@ -246,9 +248,9 @@ class InnsendingIT : EndToEndTest() { val innsendtInntektsmelding = mapInntektsmelding( forespoersel = forespoersel, skjema = skjema, - fulltnavnArbeidstaker = "Bjarne Betjent", + fulltnavnArbeidstaker = bjarneBetjent.navn.fulltNavn(), virksomhetNavn = "Bedrift A/S", - innsenderNavn = "Max Mekker" + innsenderNavn = maxMekker.navn.fulltNavn() ) val forespoerselSvar = ForespoerselSvar.Suksess( diff --git a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TrengerIT.kt b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TrengerIT.kt index 586972ce1..56fbdb419 100644 --- a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TrengerIT.kt +++ b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TrengerIT.kt @@ -16,6 +16,8 @@ import no.nav.helsearbeidsgiver.utils.json.fromJson import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer import no.nav.helsearbeidsgiver.utils.json.toJson import no.nav.helsearbeidsgiver.utils.test.mock.mockStatic +import no.nav.helsearbeidsgiver.utils.test.wrapper.genererGyldig +import no.nav.helsearbeidsgiver.utils.wrapper.Fnr import org.junit.jupiter.api.Test import org.junit.jupiter.api.TestInstance import java.util.UUID @@ -40,7 +42,7 @@ class TrengerIT : EndToEndTest() { publish( Key.EVENT_NAME to EventName.TRENGER_REQUESTED.toJson(), Key.CLIENT_ID to Mock.clientId.toJson(UuidSerializer), - Key.ARBEIDSGIVER_ID to "12345678910".toJson(), + Key.ARBEIDSGIVER_ID to Fnr.genererGyldig().toJson(Fnr.serializer()), Key.FORESPOERSEL_ID to Mock.forespoerselId.toJson(UuidSerializer) ) } diff --git a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/mock/MockData.kt b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/mock/MockData.kt index a7a19b448..5ca23ad4c 100644 --- a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/mock/MockData.kt +++ b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/mock/MockData.kt @@ -14,6 +14,9 @@ import no.nav.helsearbeidsgiver.felles.ForespoerselType import no.nav.helsearbeidsgiver.felles.test.mock.mockForespurtData import no.nav.helsearbeidsgiver.inntektsmelding.helsebro.domene.ForespoerselSvar import no.nav.helsearbeidsgiver.utils.test.date.januar +import no.nav.helsearbeidsgiver.utils.test.wrapper.genererGyldig +import no.nav.helsearbeidsgiver.utils.wrapper.Fnr +import no.nav.helsearbeidsgiver.utils.wrapper.Orgnr import java.time.LocalDate import java.util.UUID @@ -58,11 +61,11 @@ fun mockInnsending(): Innsending = ) fun mockForespoerselSvarSuksess(): ForespoerselSvar.Suksess { - val orgnr = "767434313" + val orgnr = Orgnr.genererGyldig().verdi return ForespoerselSvar.Suksess( type = ForespoerselType.KOMPLETT, orgnr = orgnr, - fnr = "24120012345", + fnr = Fnr.genererGyldig().verdi, vedtaksperiodeId = UUID.randomUUID(), egenmeldingsperioder = listOf(1.januar til 1.januar), sykmeldingsperioder = listOf(2.januar til 16.januar), diff --git a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt index 185f82367..f3ab75469 100644 --- a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt +++ b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/EndToEndTest.kt @@ -58,6 +58,8 @@ import no.nav.helsearbeidsgiver.utils.json.parseJson import no.nav.helsearbeidsgiver.utils.json.toJson import no.nav.helsearbeidsgiver.utils.test.date.august import no.nav.helsearbeidsgiver.utils.test.date.mai +import no.nav.helsearbeidsgiver.utils.test.wrapper.genererGyldig +import no.nav.helsearbeidsgiver.utils.wrapper.Fnr import org.intellij.lang.annotations.Language import org.jetbrains.exposed.sql.transactions.transaction import org.junit.jupiter.api.AfterAll @@ -70,6 +72,25 @@ import kotlin.io.path.absolutePathString private const val NOTIFIKASJON_LINK = "notifikasjonLink" +val bjarneBetjent = FullPerson( + navn = PersonNavn( + fornavn = "Bjarne", + mellomnavn = null, + etternavn = "Betjent" + ), + foedselsdato = 28.mai, + ident = Fnr.genererGyldig().verdi +) +val maxMekker = FullPerson( + navn = PersonNavn( + fornavn = "Max", + mellomnavn = null, + etternavn = "Mekker" + ), + foedselsdato = 6.august, + ident = Fnr.genererGyldig().verdi +) + @TestInstance(TestInstance.Lifecycle.PER_CLASS) abstract class EndToEndTest : ContainerTest() { @@ -114,24 +135,8 @@ abstract class EndToEndTest : ContainerTest() { clearAllMocks() coEvery { pdlKlient.personBolk(any()) } returns listOf( - FullPerson( - navn = PersonNavn( - fornavn = "Bjarne", - mellomnavn = null, - etternavn = "Betjent" - ), - foedselsdato = 28.mai, - ident = "fnr-bjarne" - ), - FullPerson( - navn = PersonNavn( - fornavn = "Max", - mellomnavn = null, - etternavn = "Mekker" - ), - foedselsdato = 6.august, - ident = "fnr-max" - ) + bjarneBetjent, + maxMekker ) coEvery { brregClient.hentVirksomhetNavn(any()) } returns "Bedrift A/S" coEvery { brregClient.hentVirksomheter(any()) } answers {