diff --git a/berik-inntektsmelding-service/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.berikinntektsmeldingservice/ForespoerselUtils.kt b/berik-inntektsmelding-service/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.berikinntektsmeldingservice/ForespoerselUtils.kt deleted file mode 100644 index 530759f53..000000000 --- a/berik-inntektsmelding-service/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.berikinntektsmeldingservice/ForespoerselUtils.kt +++ /dev/null @@ -1,48 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.berikinntektsmeldingservice - -import no.nav.helsearbeidsgiver.felles.domene.Forespoersel -import no.nav.helsearbeidsgiver.felles.domene.ForespurtData -import no.nav.helsearbeidsgiver.felles.domene.ForslagInntekt -import no.nav.helsearbeidsgiver.felles.domene.ForslagRefusjon - -fun Forespoersel.utenPaakrevdAGP(): Forespoersel = - copy( - forespurtData = - forespurtData.copy( - arbeidsgiverperiode = - ForespurtData.Arbeidsgiverperiode( - paakrevd = false, - ), - ), - ) - -fun Forespoersel.utenPaakrevdInntekt(): Forespoersel = - copy( - forespurtData = - forespurtData.copy( - inntekt = - ForespurtData.Inntekt( - paakrevd = false, - forslag = - ForslagInntekt.Fastsatt( - fastsattInntekt = 8795.0, - ), - ), - ), - ) - -fun Forespoersel.utenPaakrevdRefusjon(): Forespoersel = - copy( - forespurtData = - forespurtData.copy( - refusjon = - ForespurtData.Refusjon( - paakrevd = false, - forslag = - ForslagRefusjon( - perioder = emptyList(), - opphoersdato = null, - ), - ), - ), - ) diff --git a/berik-inntektsmelding-service/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.berikinntektsmeldingservice/BerikInntektsmeldingServiceTest.kt b/berik-inntektsmelding-service/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/berikinntektsmeldingservice/BerikInntektsmeldingServiceTest.kt similarity index 97% rename from berik-inntektsmelding-service/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.berikinntektsmeldingservice/BerikInntektsmeldingServiceTest.kt rename to berik-inntektsmelding-service/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/berikinntektsmeldingservice/BerikInntektsmeldingServiceTest.kt index 77c623560..cf3a1c79d 100644 --- a/berik-inntektsmelding-service/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.berikinntektsmeldingservice/BerikInntektsmeldingServiceTest.kt +++ b/berik-inntektsmelding-service/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/berikinntektsmeldingservice/BerikInntektsmeldingServiceTest.kt @@ -39,7 +39,6 @@ import no.nav.helsearbeidsgiver.utils.test.wrapper.genererGyldig import no.nav.helsearbeidsgiver.utils.wrapper.Fnr import no.nav.helsearbeidsgiver.utils.wrapper.Orgnr import java.util.UUID -import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Inntektsmelding as InntektsmeldingV1 class BerikInntektsmeldingServiceTest : FunSpec({ @@ -113,7 +112,7 @@ class BerikInntektsmeldingServiceTest : val data = it.lesData() Key.FORESPOERSEL_ID.lesOrNull(UuidSerializer, data) shouldBe Mock.skjema.forespoerselId - Key.INNTEKTSMELDING.lesOrNull(InntektsmeldingV1.serializer(), data) shouldNotBe null + Key.INNTEKTSMELDING.lesOrNull(Inntektsmelding.serializer(), data) shouldNotBe null Key.BESTEMMENDE_FRAVAERSDAG.lesOrNull(LocalDateSerializer, data) shouldNotBe null Key.INNSENDING_ID.lesOrNull(Long.serializer(), data) shouldBe Mock.INNSENDING_ID } @@ -201,7 +200,7 @@ private object Mock { steg3(transaksjonId).plusData( mapOf( Key.ER_DUPLIKAT_IM to false.toJson(Boolean.serializer()), - Key.INNTEKTSMELDING to mockInntektsmeldingV1().toJson(InntektsmeldingV1.serializer()), + Key.INNTEKTSMELDING to mockInntektsmeldingV1().toJson(Inntektsmelding.serializer()), Key.BESTEMMENDE_FRAVAERSDAG to 20.oktober.toJson(), ), ) diff --git a/berik-inntektsmelding-service/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.berikinntektsmeldingservice/MapInntektsmeldingKtTest.kt b/berik-inntektsmelding-service/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/berikinntektsmeldingservice/MapInntektsmeldingKtTest.kt similarity index 98% rename from berik-inntektsmelding-service/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.berikinntektsmeldingservice/MapInntektsmeldingKtTest.kt rename to berik-inntektsmelding-service/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/berikinntektsmeldingservice/MapInntektsmeldingKtTest.kt index 457cf48d7..b0892d9da 100644 --- a/berik-inntektsmelding-service/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.berikinntektsmeldingservice/MapInntektsmeldingKtTest.kt +++ b/berik-inntektsmelding-service/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/berikinntektsmeldingservice/MapInntektsmeldingKtTest.kt @@ -15,6 +15,9 @@ import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Sykmeldt import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.til import no.nav.helsearbeidsgiver.felles.test.mock.mockForespoersel import no.nav.helsearbeidsgiver.felles.test.mock.mockSkjemaInntektsmelding +import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdAGP +import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdInntekt +import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdRefusjon import no.nav.helsearbeidsgiver.utils.test.date.august import no.nav.helsearbeidsgiver.utils.test.date.desember import no.nav.helsearbeidsgiver.utils.test.date.juli diff --git a/berik-inntektsmelding-service/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.berikinntektsmeldingservice/UtledBestemmendeFravaersdagKtTest.kt b/berik-inntektsmelding-service/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/berikinntektsmeldingservice/UtledBestemmendeFravaersdagKtTest.kt similarity index 97% rename from berik-inntektsmelding-service/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.berikinntektsmeldingservice/UtledBestemmendeFravaersdagKtTest.kt rename to berik-inntektsmelding-service/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/berikinntektsmeldingservice/UtledBestemmendeFravaersdagKtTest.kt index fb194fca7..c793ff8a3 100644 --- a/berik-inntektsmelding-service/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.berikinntektsmeldingservice/UtledBestemmendeFravaersdagKtTest.kt +++ b/berik-inntektsmelding-service/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/berikinntektsmeldingservice/UtledBestemmendeFravaersdagKtTest.kt @@ -6,6 +6,8 @@ import io.kotest.matchers.shouldNotBe import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.til import no.nav.helsearbeidsgiver.felles.test.mock.mockForespoersel import no.nav.helsearbeidsgiver.felles.test.mock.mockInntektsmeldingV1 +import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdAGP +import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdInntekt import no.nav.helsearbeidsgiver.utils.test.date.august import no.nav.helsearbeidsgiver.utils.test.date.januar import no.nav.helsearbeidsgiver.utils.test.date.juni diff --git a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/InntektsmeldingUtils.kt b/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/InntektsmeldingUtils.kt index d3edce92c..0e5f1cbb7 100644 --- a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/InntektsmeldingUtils.kt +++ b/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/InntektsmeldingUtils.kt @@ -2,6 +2,7 @@ package no.nav.helsearbeidsgiver.inntektsmelding.db import no.nav.helsearbeidsgiver.domene.inntektsmelding.deprecated.Inntektsmelding import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsmelding +import no.nav.helsearbeidsgiver.felles.domene.Forespoersel fun Inntektsmelding.erDuplikatAv(other: Inntektsmelding): Boolean = this == @@ -13,8 +14,30 @@ fun Inntektsmelding.erDuplikatAv(other: Inntektsmelding): Boolean = telefonnummer = telefonnummer, ) -fun SkjemaInntektsmelding.erDuplikatAv(other: SkjemaInntektsmelding): Boolean = +// Så lenge frontend sender felter som ikke kreves av Spleis så må vi filtrere ut disse for å sammenligne skjema +fun SkjemaInntektsmelding.erDuplikatAv( + other: SkjemaInntektsmelding, + forespoersel: Forespoersel, +): Boolean = this == other.copy( avsenderTlf = avsenderTlf, + agp = + if (forespoersel.forespurtData.arbeidsgiverperiode.paakrevd) { + other.agp + } else { + agp + }, + inntekt = + if (forespoersel.forespurtData.inntekt.paakrevd) { + other.inntekt + } else { + inntekt + }, + refusjon = + if (forespoersel.forespurtData.refusjon.paakrevd) { + other.refusjon + } else { + refusjon + }, ) diff --git a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/river/LagreImSkjemaRiver.kt b/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/river/LagreImSkjemaRiver.kt index cf91d18f0..fa3b2fb9a 100644 --- a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/river/LagreImSkjemaRiver.kt +++ b/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/river/LagreImSkjemaRiver.kt @@ -6,6 +6,7 @@ import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsm import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key +import no.nav.helsearbeidsgiver.felles.domene.Forespoersel import no.nav.helsearbeidsgiver.felles.json.krev import no.nav.helsearbeidsgiver.felles.json.les import no.nav.helsearbeidsgiver.felles.json.toJson @@ -28,7 +29,8 @@ data class LagreImSkjemaMelding( val behovType: BehovType, val transaksjonId: UUID, val data: Map, - val inntektsmeldingSkjema: SkjemaInntektsmelding, + val forespoersel: Forespoersel, + val skjema: SkjemaInntektsmelding, ) class LagreImSkjemaRiver( @@ -47,21 +49,22 @@ class LagreImSkjemaRiver( behovType = Key.BEHOV.krev(BehovType.LAGRE_IM_SKJEMA, BehovType.serializer(), json), transaksjonId = Key.KONTEKST_ID.les(UuidSerializer, json), data = data, - inntektsmeldingSkjema = Key.SKJEMA_INNTEKTSMELDING.les(SkjemaInntektsmelding.serializer(), data), + forespoersel = Key.FORESPOERSEL_SVAR.les(Forespoersel.serializer(), data), + skjema = Key.SKJEMA_INNTEKTSMELDING.les(SkjemaInntektsmelding.serializer(), data), ) } override fun LagreImSkjemaMelding.haandter(json: Map): Map { - val sisteImSkjema = repository.hentNyesteInntektsmeldingSkjema(inntektsmeldingSkjema.forespoerselId) + val sisteImSkjema = repository.hentNyesteInntektsmeldingSkjema(skjema.forespoerselId) - val erDuplikat = sisteImSkjema?.erDuplikatAv(inntektsmeldingSkjema) ?: false + val erDuplikat = sisteImSkjema?.erDuplikatAv(skjema, forespoersel) ?: false val innsendingId = if (erDuplikat) { sikkerLogger.warn("Fant duplikat av inntektsmeldingskjema.") INNSENDING_ID_VED_DUPLIKAT } else { - repository.lagreInntektsmeldingSkjema(inntektsmeldingSkjema).also { + repository.lagreInntektsmeldingSkjema(skjema).also { sikkerLogger.info("Lagret inntektsmeldingskjema.") } } @@ -102,6 +105,6 @@ class LagreImSkjemaRiver( Log.event(eventName), Log.behov(behovType), Log.transaksjonId(transaksjonId), - Log.forespoerselId(inntektsmeldingSkjema.forespoerselId), + Log.forespoerselId(skjema.forespoerselId), ) } diff --git a/db/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/InntektsmeldingUtilsKtTest.kt b/db/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/InntektsmeldingUtilsKtTest.kt new file mode 100644 index 000000000..afacec5dc --- /dev/null +++ b/db/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/InntektsmeldingUtilsKtTest.kt @@ -0,0 +1,127 @@ +package no.nav.helsearbeidsgiver.inntektsmelding.db + +import io.kotest.core.spec.style.FunSpec +import io.kotest.matchers.booleans.shouldBeFalse +import io.kotest.matchers.booleans.shouldBeTrue +import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Arbeidsgiverperiode +import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Bonus +import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Inntekt +import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Refusjon +import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.til +import no.nav.helsearbeidsgiver.felles.test.mock.mockForespoersel +import no.nav.helsearbeidsgiver.felles.test.mock.mockSkjemaInntektsmelding +import no.nav.helsearbeidsgiver.felles.test.mock.randomDigitString +import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdAGP +import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdInntekt +import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdRefusjon +import no.nav.helsearbeidsgiver.utils.test.date.desember +import no.nav.helsearbeidsgiver.utils.test.date.november + +class InntektsmeldingUtilsKtTest : + FunSpec({ + context("erDuplikatAv") { + context("_ikke_ duplikater") { + test("ulike skjema er _ikke_ duplikater") { + val gammel = mockSkjemaInntektsmelding() + val ny = mockSkjemaInntektsmelding() + val forespoersel = mockForespoersel() + + ny.erDuplikatAv(gammel, forespoersel).shouldBeFalse() + } + + test("skjema med ulik agp er _ikke_ duplikater") { + val gammel = mockSkjemaInntektsmelding() + val ny = gammel.copy(agp = nyAgp) + val forespoersel = mockForespoersel() + + ny.erDuplikatAv(gammel, forespoersel).shouldBeFalse() + } + + test("skjema med ulik inntekt er _ikke_ duplikater") { + val gammel = mockSkjemaInntektsmelding() + val ny = gammel.copy(inntekt = nyInntekt) + val forespoersel = mockForespoersel() + + ny.erDuplikatAv(gammel, forespoersel).shouldBeFalse() + } + + test("skjema med ulik refusjon er _ikke_ duplikater") { + val gammel = mockSkjemaInntektsmelding() + val ny = gammel.copy(refusjon = nyRefusjon) + val forespoersel = mockForespoersel() + + ny.erDuplikatAv(gammel, forespoersel).shouldBeFalse() + } + } + + context("duplikater") { + test("helt like skjema er duplikater") { + val gammel = mockSkjemaInntektsmelding() + val ny = gammel.copy() + val forespoersel = mockForespoersel() + + ny.erDuplikatAv(gammel, forespoersel).shouldBeTrue() + } + + test("skjema med ulike avsender-tlf er duplikater") { + val gammel = mockSkjemaInntektsmelding() + val ny = gammel.copy(avsenderTlf = randomDigitString(8)) + val forespoersel = mockForespoersel() + + ny.erDuplikatAv(gammel, forespoersel).shouldBeTrue() + } + + test("skjema med ulik agp når lik agp ikke er påkrevd er duplikater") { + val gammel = mockSkjemaInntektsmelding() + val ny = gammel.copy(agp = nyAgp) + val forespoersel = mockForespoersel().utenPaakrevdAGP() + + ny.erDuplikatAv(gammel, forespoersel).shouldBeTrue() + } + + test("skjema med ulik inntekt når inntekt ikke er påkrevd er duplikater") { + val gammel = mockSkjemaInntektsmelding() + val ny = gammel.copy(inntekt = nyInntekt) + val forespoersel = mockForespoersel().utenPaakrevdInntekt() + + ny.erDuplikatAv(gammel, forespoersel).shouldBeTrue() + } + + test("skjema med ulik refusjon når refusjon ikke er påkrevd er duplikater") { + val gammel = mockSkjemaInntektsmelding() + val ny = gammel.copy(refusjon = nyRefusjon) + val forespoersel = mockForespoersel().utenPaakrevdRefusjon() + + ny.erDuplikatAv(gammel, forespoersel).shouldBeTrue() + } + } + } + }) + +private val nyAgp = + Arbeidsgiverperiode( + perioder = + listOf( + 14.desember til 29.desember, + ), + egenmeldinger = + listOf( + 14.desember til 16.desember, + ), + redusertLoennIAgp = null, + ) + +private val nyInntekt = + Inntekt( + beloep = 7707.7, + inntektsdato = 30.november, + naturalytelser = emptyList(), + endringAarsak = Bonus, + ) + +private val nyRefusjon = + Refusjon( + beloepPerMaaned = 4021.1, + endringer = emptyList(), + sluttdato = 31.desember, + ) diff --git a/db/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/river/LagreImSkjemaRiverTest.kt b/db/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/river/LagreImSkjemaRiverTest.kt index 3927a5d8b..3334fb5ea 100644 --- a/db/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/river/LagreImSkjemaRiverTest.kt +++ b/db/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/river/LagreImSkjemaRiverTest.kt @@ -18,10 +18,12 @@ import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.til import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key +import no.nav.helsearbeidsgiver.felles.domene.Forespoersel import no.nav.helsearbeidsgiver.felles.json.toJson import no.nav.helsearbeidsgiver.felles.json.toMap import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail import no.nav.helsearbeidsgiver.felles.test.mock.mockFail +import no.nav.helsearbeidsgiver.felles.test.mock.mockForespoersel import no.nav.helsearbeidsgiver.felles.test.mock.mockSkjemaInntektsmelding import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.firstMessage import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.sendJson @@ -70,7 +72,7 @@ class LagreImSkjemaRiverTest : val nyttInntektsmeldingSkjema = mockSkjemaInntektsmelding() - val innkommendeMelding = innkommendeMelding(nyttInntektsmeldingSkjema) + val innkommendeMelding = innkommendeMelding(skjema = nyttInntektsmeldingSkjema) testRapid.sendJson(innkommendeMelding.toMap()) @@ -82,14 +84,15 @@ class LagreImSkjemaRiverTest : Key.KONTEKST_ID to innkommendeMelding.transaksjonId.toJson(), Key.DATA to mapOf( - Key.SKJEMA_INNTEKTSMELDING to innkommendeMelding.inntektsmeldingSkjema.toJson(SkjemaInntektsmelding.serializer()), + Key.FORESPOERSEL_SVAR to innkommendeMelding.forespoersel.toJson(Forespoersel.serializer()), + Key.SKJEMA_INNTEKTSMELDING to innkommendeMelding.skjema.toJson(SkjemaInntektsmelding.serializer()), Key.ER_DUPLIKAT_IM to false.toJson(Boolean.serializer()), Key.INNSENDING_ID to innsendingId.toJson(Long.serializer()), ).toJson(), ) verifySequence { - mockInntektsmeldingRepo.hentNyesteInntektsmeldingSkjema(innkommendeMelding.inntektsmeldingSkjema.forespoerselId) + mockInntektsmeldingRepo.hentNyesteInntektsmeldingSkjema(innkommendeMelding.skjema.forespoerselId) mockInntektsmeldingRepo.lagreInntektsmeldingSkjema(nyttInntektsmeldingSkjema) } } @@ -102,7 +105,7 @@ class LagreImSkjemaRiverTest : every { mockInntektsmeldingRepo.hentNyesteInntektsmeldingSkjema(any()) } returns inntektsmeldingSkjema every { mockInntektsmeldingRepo.lagreInntektsmeldingSkjema(any()) } returns innsendingId - val innkommendeMelding = innkommendeMelding(inntektsmeldingSkjema) + val innkommendeMelding = innkommendeMelding(skjema = inntektsmeldingSkjema) testRapid.sendJson(innkommendeMelding.toMap()) @@ -114,14 +117,15 @@ class LagreImSkjemaRiverTest : Key.KONTEKST_ID to innkommendeMelding.transaksjonId.toJson(), Key.DATA to mapOf( - Key.SKJEMA_INNTEKTSMELDING to innkommendeMelding.inntektsmeldingSkjema.toJson(SkjemaInntektsmelding.serializer()), + Key.FORESPOERSEL_SVAR to innkommendeMelding.forespoersel.toJson(Forespoersel.serializer()), + Key.SKJEMA_INNTEKTSMELDING to innkommendeMelding.skjema.toJson(SkjemaInntektsmelding.serializer()), Key.ER_DUPLIKAT_IM to true.toJson(Boolean.serializer()), Key.INNSENDING_ID to innsendingIdVedDuplikat.toJson(Long.serializer()), ).toJson(), ) verifySequence { - mockInntektsmeldingRepo.hentNyesteInntektsmeldingSkjema(innkommendeMelding.inntektsmeldingSkjema.forespoerselId) + mockInntektsmeldingRepo.hentNyesteInntektsmeldingSkjema(innkommendeMelding.skjema.forespoerselId) } verify(exactly = 0) { mockInntektsmeldingRepo.lagreInntektsmeldingSkjema(inntektsmeldingSkjema) @@ -181,16 +185,21 @@ class LagreImSkjemaRiverTest : } }) -private fun innkommendeMelding(inntektsmeldingSkjema: SkjemaInntektsmelding = mockSkjemaInntektsmelding()): LagreImSkjemaMelding = +private fun innkommendeMelding( + forespoersel: Forespoersel = mockForespoersel(), + skjema: SkjemaInntektsmelding = mockSkjemaInntektsmelding(), +): LagreImSkjemaMelding = LagreImSkjemaMelding( eventName = EventName.INSENDING_STARTED, behovType = BehovType.LAGRE_IM_SKJEMA, transaksjonId = UUID.randomUUID(), data = mapOf( - Key.SKJEMA_INNTEKTSMELDING to inntektsmeldingSkjema.toJson(SkjemaInntektsmelding.serializer()), + Key.FORESPOERSEL_SVAR to forespoersel.toJson(Forespoersel.serializer()), + Key.SKJEMA_INNTEKTSMELDING to skjema.toJson(SkjemaInntektsmelding.serializer()), ), - inntektsmeldingSkjema = inntektsmeldingSkjema, + forespoersel = forespoersel, + skjema = skjema, ) private fun LagreImSkjemaMelding.toMap(): Map = diff --git a/felles/src/test/kotlin/no/nav/helsearbeidsgiver/felles/ForespoerselTest.kt b/felles/src/test/kotlin/no/nav/helsearbeidsgiver/felles/ForespoerselTest.kt index 3baf3c6d4..398a3b5d6 100644 --- a/felles/src/test/kotlin/no/nav/helsearbeidsgiver/felles/ForespoerselTest.kt +++ b/felles/src/test/kotlin/no/nav/helsearbeidsgiver/felles/ForespoerselTest.kt @@ -5,9 +5,8 @@ import io.kotest.matchers.nulls.shouldBeNull import io.kotest.matchers.shouldBe import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.til import no.nav.helsearbeidsgiver.felles.domene.Forespoersel -import no.nav.helsearbeidsgiver.felles.domene.ForespurtData import no.nav.helsearbeidsgiver.felles.test.mock.mockForespoersel -import no.nav.helsearbeidsgiver.felles.test.mock.mockForespurtData +import no.nav.helsearbeidsgiver.felles.test.mock.utenPaakrevdAGP import no.nav.helsearbeidsgiver.utils.test.date.april import no.nav.helsearbeidsgiver.utils.test.date.august import no.nav.helsearbeidsgiver.utils.test.date.desember @@ -104,19 +103,13 @@ class ForespoerselTest : test("ignorer egenmeldinger ved beregning av bestemmende fraværsdag dersom agp ikke er påkrevd") { val forespoersel = - mockForespoersel().copy( - orgnr = "555898023", - sykmeldingsperioder = listOf(7.mars til 31.mars), - egenmeldingsperioder = listOf(5.mars til 6.mars), - bestemmendeFravaersdager = mapOf("444707112" to 14.april), - forespurtData = - mockForespurtData().copy( - arbeidsgiverperiode = - ForespurtData.Arbeidsgiverperiode( - paakrevd = false, - ), - ), - ) + mockForespoersel() + .copy( + orgnr = "555898023", + sykmeldingsperioder = listOf(7.mars til 31.mars), + egenmeldingsperioder = listOf(5.mars til 6.mars), + bestemmendeFravaersdager = mapOf("444707112" to 14.april), + ).utenPaakrevdAGP() forespoersel.forslagBestemmendeFravaersdag() shouldBe 7.mars } @@ -242,19 +235,13 @@ class ForespoerselTest : test("ignorer egenmeldinger ved beregning av bestemmende fraværsdag dersom agp ikke er påkrevd") { val forespoersel = - mockForespoersel().copy( - orgnr = "333848343", - sykmeldingsperioder = listOf(8.august til 28.august), - egenmeldingsperioder = listOf(2.august til 7.august), - bestemmendeFravaersdager = emptyMap(), - forespurtData = - mockForespurtData().copy( - arbeidsgiverperiode = - ForespurtData.Arbeidsgiverperiode( - paakrevd = false, - ), - ), - ) + mockForespoersel() + .copy( + orgnr = "333848343", + sykmeldingsperioder = listOf(8.august til 28.august), + egenmeldingsperioder = listOf(2.august til 7.august), + bestemmendeFravaersdager = emptyMap(), + ).utenPaakrevdAGP() forespoersel.forslagInntektsdato() shouldBe 8.august } diff --git a/felles/src/testFixtures/kotlin/no/nav/helsearbeidsgiver/felles/test/mock/MockForespoersel.kt b/felles/src/testFixtures/kotlin/no/nav/helsearbeidsgiver/felles/test/mock/MockForespoersel.kt index 2eb6fce31..dff9e1ed4 100644 --- a/felles/src/testFixtures/kotlin/no/nav/helsearbeidsgiver/felles/test/mock/MockForespoersel.kt +++ b/felles/src/testFixtures/kotlin/no/nav/helsearbeidsgiver/felles/test/mock/MockForespoersel.kt @@ -138,3 +138,45 @@ fun mockForespurtDataMedFastsattInntekt(): ForespurtData = ), ), ) + +fun Forespoersel.utenPaakrevdAGP(): Forespoersel = + copy( + forespurtData = + forespurtData.copy( + arbeidsgiverperiode = + ForespurtData.Arbeidsgiverperiode( + paakrevd = false, + ), + ), + ) + +fun Forespoersel.utenPaakrevdInntekt(): Forespoersel = + copy( + forespurtData = + forespurtData.copy( + inntekt = + ForespurtData.Inntekt( + paakrevd = false, + forslag = + ForslagInntekt.Fastsatt( + fastsattInntekt = 8795.0, + ), + ), + ), + ) + +fun Forespoersel.utenPaakrevdRefusjon(): Forespoersel = + copy( + forespurtData = + forespurtData.copy( + refusjon = + ForespurtData.Refusjon( + paakrevd = false, + forslag = + ForslagRefusjon( + perioder = emptyList(), + opphoersdato = null, + ), + ), + ), + ) diff --git a/felles/src/testFixtures/kotlin/no/nav/helsearbeidsgiver/felles/test/mock/MockInntektsmelding.kt b/felles/src/testFixtures/kotlin/no/nav/helsearbeidsgiver/felles/test/mock/MockInntektsmelding.kt index ca9d2a179..f58acf1ed 100644 --- a/felles/src/testFixtures/kotlin/no/nav/helsearbeidsgiver/felles/test/mock/MockInntektsmelding.kt +++ b/felles/src/testFixtures/kotlin/no/nav/helsearbeidsgiver/felles/test/mock/MockInntektsmelding.kt @@ -90,7 +90,7 @@ fun mockInntektsmeldingV1(): InntektsmeldingV1 = orgnr = Orgnr.genererGyldig(), orgNavn = "Skumle bakverk A/S", navn = "Nifs Krumkake", - tlf = "44553399", + tlf = randomDigitString(8), ), sykmeldingsperioder = listOf( diff --git a/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/InnsendingService.kt b/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/InnsendingService.kt index 145710e2a..6e17b0eff 100644 --- a/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/InnsendingService.kt +++ b/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/InnsendingService.kt @@ -7,13 +7,14 @@ import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsm import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key +import no.nav.helsearbeidsgiver.felles.domene.Forespoersel import no.nav.helsearbeidsgiver.felles.domene.ResultJson import no.nav.helsearbeidsgiver.felles.json.les import no.nav.helsearbeidsgiver.felles.json.toJson import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore -import no.nav.helsearbeidsgiver.felles.rapidsrivers.service.ServiceMed1Steg +import no.nav.helsearbeidsgiver.felles.rapidsrivers.service.ServiceMed2Steg import no.nav.helsearbeidsgiver.felles.utils.Log import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer import no.nav.helsearbeidsgiver.utils.json.toJson @@ -25,12 +26,16 @@ import no.nav.helsearbeidsgiver.utils.wrapper.Fnr import java.util.UUID data class Steg0( - val transaksjonId: UUID, + val kontekstId: UUID, val avsenderFnr: Fnr, val skjema: SkjemaInntektsmelding, ) data class Steg1( + val forespoersel: Forespoersel, +) + +data class Steg2( val erDuplikat: Boolean, val innsendingId: Long, ) @@ -38,7 +43,7 @@ data class Steg1( class InnsendingService( private val rapid: RapidsConnection, private val redisStore: RedisStore, -) : ServiceMed1Steg() { +) : ServiceMed2Steg() { override val logger = logger() override val sikkerLogger = sikkerLogger() @@ -46,13 +51,18 @@ class InnsendingService( override fun lesSteg0(melding: Map): Steg0 = Steg0( - transaksjonId = Key.KONTEKST_ID.les(UuidSerializer, melding), + kontekstId = Key.KONTEKST_ID.les(UuidSerializer, melding), avsenderFnr = Key.ARBEIDSGIVER_FNR.les(Fnr.serializer(), melding), skjema = Key.SKJEMA_INNTEKTSMELDING.les(SkjemaInntektsmelding.serializer(), melding), ) override fun lesSteg1(melding: Map): Steg1 = Steg1( + forespoersel = Key.FORESPOERSEL_SVAR.les(Forespoersel.serializer(), melding), + ) + + override fun lesSteg2(melding: Map): Steg2 = + Steg2( erDuplikat = Key.ER_DUPLIKAT_IM.les(Boolean.serializer(), melding), innsendingId = Key.INNSENDING_ID.les(Long.serializer(), melding), ) @@ -60,39 +70,61 @@ class InnsendingService( override fun utfoerSteg0( data: Map, steg0: Steg0, + ) { + rapid + .publish( + key = steg0.skjema.forespoerselId, + Key.EVENT_NAME to eventName.toJson(), + Key.BEHOV to BehovType.HENT_TRENGER_IM.toJson(), + Key.KONTEKST_ID to steg0.kontekstId.toJson(), + Key.DATA to + data + .plus(Key.FORESPOERSEL_ID to steg0.skjema.forespoerselId.toJson()) + .toJson(), + ).also { loggBehovPublisert(BehovType.HENT_TRENGER_IM, it) } + } + + override fun utfoerSteg1( + data: Map, + steg0: Steg0, + steg1: Steg1, ) { rapid .publish( key = steg0.skjema.forespoerselId, Key.EVENT_NAME to eventName.toJson(), Key.BEHOV to BehovType.LAGRE_IM_SKJEMA.toJson(), - Key.KONTEKST_ID to steg0.transaksjonId.toJson(), + Key.KONTEKST_ID to steg0.kontekstId.toJson(), Key.DATA to data.toJson(), ).also { loggBehovPublisert(BehovType.LAGRE_IM_SKJEMA, it) } } - override fun utfoerSteg1( + override fun utfoerSteg2( data: Map, steg0: Steg0, steg1: Steg1, + steg2: Steg2, ) { val resultJson = ResultJson( success = steg0.skjema.forespoerselId.toJson(), ) - redisStore.skrivResultat(steg0.transaksjonId, resultJson) + redisStore.skrivResultat(steg0.kontekstId, resultJson) - if (!steg1.erDuplikat) { + if (!steg2.erDuplikat) { val publisert = rapid.publish( key = steg0.skjema.forespoerselId, Key.EVENT_NAME to EventName.INNTEKTSMELDING_SKJEMA_LAGRET.toJson(), - Key.KONTEKST_ID to steg0.transaksjonId.toJson(), + Key.KONTEKST_ID to steg0.kontekstId.toJson(), Key.DATA to - data - .plus(Key.INNSENDING_ID to steg1.innsendingId.toJson(Long.serializer())) - .toJson(), + mapOf( + Key.ARBEIDSGIVER_FNR to steg0.avsenderFnr.toJson(), + Key.SKJEMA_INNTEKTSMELDING to steg0.skjema.toJson(SkjemaInntektsmelding.serializer()), + Key.FORESPOERSEL_SVAR to steg1.forespoersel.toJson(Forespoersel.serializer()), + Key.INNSENDING_ID to steg2.innsendingId.toJson(Long.serializer()), + ).toJson(), ) MdcUtils.withLogFields( @@ -104,11 +136,20 @@ class InnsendingService( } } + override fun onError( + melding: Map, + fail: Fail, + ) { + val resultJson = ResultJson(failure = fail.feilmelding.toJson()) + + redisStore.skrivResultat(fail.kontekstId, resultJson) + } + override fun Steg0.loggfelt(): Map = mapOf( Log.klasse(this@InnsendingService), Log.event(eventName), - Log.transaksjonId(transaksjonId), + Log.transaksjonId(kontekstId), Log.forespoerselId(skjema.forespoerselId), ) @@ -125,13 +166,4 @@ class InnsendingService( } } } - - override fun onError( - melding: Map, - fail: Fail, - ) { - val resultJson = ResultJson(failure = fail.feilmelding.toJson()) - - redisStore.skrivResultat(fail.kontekstId, resultJson) - } } diff --git a/innsending/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.innsending/InnsendingServiceTest.kt b/innsending/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.innsending/InnsendingServiceTest.kt index d8b1b74c6..1ed1eae6d 100644 --- a/innsending/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.innsending/InnsendingServiceTest.kt +++ b/innsending/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.innsending/InnsendingServiceTest.kt @@ -5,6 +5,7 @@ import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.ints.shouldBeExactly import io.kotest.matchers.shouldBe import io.mockk.clearAllMocks +import io.mockk.mockk import io.mockk.verify import kotlinx.serialization.builtins.serializer import kotlinx.serialization.json.JsonElement @@ -19,11 +20,10 @@ import no.nav.helsearbeidsgiver.felles.domene.ResultJson import no.nav.helsearbeidsgiver.felles.json.lesOrNull import no.nav.helsearbeidsgiver.felles.json.toJson import no.nav.helsearbeidsgiver.felles.json.toMap -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisPrefix +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.service.ServiceRiverStateless import no.nav.helsearbeidsgiver.felles.test.json.lesBehov import no.nav.helsearbeidsgiver.felles.test.json.plusData -import no.nav.helsearbeidsgiver.felles.test.mock.MockRedis import no.nav.helsearbeidsgiver.felles.test.mock.mockFail import no.nav.helsearbeidsgiver.felles.test.mock.mockSkjemaInntektsmelding import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.message @@ -39,16 +39,15 @@ class InnsendingServiceTest : FunSpec({ val testRapid = TestRapid() - val mockRedis = MockRedis(RedisPrefix.Innsending) + val mockRedisStore = mockk(relaxed = true) ServiceRiverStateless( - InnsendingService(testRapid, mockRedis.store), + InnsendingService(testRapid, mockRedisStore), ).connect(testRapid) beforeEach { testRapid.reset() clearAllMocks() - mockRedis.setup() } test("nytt inntektsmeldingskjema lagres og sendes videre til beriking") { @@ -97,7 +96,7 @@ class InnsendingServiceTest : } verify { - mockRedis.store.skrivResultat( + mockRedisStore.skrivResultat( transaksjonId, ResultJson( success = nyttSkjema.forespoerselId.toJson(), @@ -123,7 +122,7 @@ class InnsendingServiceTest : testRapid.inspektør.size shouldBeExactly 1 verify { - mockRedis.store.skrivResultat( + mockRedisStore.skrivResultat( transaksjonId, ResultJson( success = Mock.skjema.forespoerselId.toJson(), @@ -147,7 +146,7 @@ class InnsendingServiceTest : testRapid.inspektør.size shouldBeExactly 1 verify { - mockRedis.store.skrivResultat( + mockRedisStore.skrivResultat( fail.kontekstId, ResultJson( failure = fail.feilmelding.toJson(), diff --git a/inntektservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektServiceTest.kt b/inntektservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektServiceTest.kt index af865bd61..787cf4cbe 100644 --- a/inntektservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektServiceTest.kt +++ b/inntektservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektServiceTest.kt @@ -4,14 +4,14 @@ import com.github.navikt.tbd_libs.rapids_and_rivers.test_support.TestRapid import io.kotest.assertions.throwables.shouldNotThrowAny import io.kotest.matchers.result.shouldBeSuccess import io.mockk.clearAllMocks +import io.mockk.mockk import io.mockk.spyk import io.mockk.verify import kotlinx.serialization.builtins.serializer import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisPrefix +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.service.ServiceRiverStateless -import no.nav.helsearbeidsgiver.felles.test.mock.MockRedis import no.nav.helsearbeidsgiver.felles.test.mock.mockFail import no.nav.helsearbeidsgiver.utils.json.fromJson import org.junit.jupiter.api.BeforeEach @@ -19,11 +19,11 @@ import org.junit.jupiter.api.Test class InntektServiceTest { private val testRapid = TestRapid() - private val mockRedis = MockRedis(RedisPrefix.Inntekt) + private val mockRedisStore = mockk(relaxed = true) private val service = spyk( - InntektService(testRapid, mockRedis.store), + InntektService(testRapid, mockRedisStore), ) init { @@ -34,7 +34,6 @@ class InntektServiceTest { fun setup() { testRapid.reset() clearAllMocks() - mockRedis.setup() } @Test @@ -51,7 +50,7 @@ class InntektServiceTest { } verify { - mockRedis.store.skrivResultat( + mockRedisStore.skrivResultat( fail.kontekstId, withArg { runCatching { diff --git a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/BerikInntektsmeldingServiceIT.kt b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/BerikInntektsmeldingServiceIT.kt index 40db728d3..bb247e94e 100644 --- a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/BerikInntektsmeldingServiceIT.kt +++ b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/BerikInntektsmeldingServiceIT.kt @@ -7,6 +7,7 @@ import io.mockk.coEvery import kotlinx.serialization.builtins.serializer import kotlinx.serialization.json.JsonElement import no.nav.helsearbeidsgiver.dokarkiv.domene.OpprettOgFerdigstillResponse +import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Inntektsmelding import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsmelding import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.til import no.nav.helsearbeidsgiver.felles.BehovType @@ -41,7 +42,6 @@ import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.TestInstance import java.util.UUID -import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Inntektsmelding as InntektsmeldingV1 @TestInstance(TestInstance.Lifecycle.PER_CLASS) class BerikInntektsmeldingServiceIT : EndToEndTest() { @@ -156,7 +156,7 @@ class BerikInntektsmeldingServiceIT : EndToEndTest() { data[Key.INNTEKTSMELDING] .shouldNotBeNull() - .fromJson(InntektsmeldingV1.serializer()) + .fromJson(Inntektsmelding.serializer()) data[Key.BESTEMMENDE_FRAVAERSDAG] .shouldNotBeNull() @@ -292,7 +292,7 @@ class BerikInntektsmeldingServiceIT : EndToEndTest() { data[Key.INNTEKTSMELDING] .shouldNotBeNull() - .fromJson(InntektsmeldingV1.serializer()) + .fromJson(Inntektsmelding.serializer()) data[Key.BESTEMMENDE_FRAVAERSDAG] .shouldNotBeNull() 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 dd501ecce..c13df278c 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 @@ -46,7 +46,7 @@ class InnsendingIT : EndToEndTest() { } @Test - fun `skal ta imot forespørsel ny inntektsmelding, deretter opprette sak og oppgave`() { + fun `skal ta imot forespørsel ny inntektsmelding, deretter ferdigstille sak og oppgave`() { mockForespoerselSvarFraHelsebro( forespoerselId = Mock.forespoerselId, forespoerselSvar = Mock.forespoerselSvar, @@ -67,7 +67,7 @@ class InnsendingIT : EndToEndTest() { Key.KONTEKST_ID to UUID.randomUUID().toJson(), Key.DATA to mapOf( - Key.ARBEIDSGIVER_FNR to Mock.forespoersel.fnr.toJson(), + Key.ARBEIDSGIVER_FNR to Fnr.genererGyldig().toJson(), Key.SKJEMA_INNTEKTSMELDING to Mock.skjema.toJson(SkjemaInntektsmelding.serializer()), ).toJson(), ) @@ -127,51 +127,21 @@ class InnsendingIT : EndToEndTest() { } @Test - fun `skal ikke lagre duplikat inntektsmelding`() { + fun `skal ikke lagre duplikat inntektsmeldingskjema`() { imRepository.lagreInntektsmeldingSkjema(Mock.skjema) - publish( - Key.EVENT_NAME to EventName.INSENDING_STARTED.toJson(), - Key.KONTEKST_ID to UUID.randomUUID().toJson(), - Key.DATA to - mapOf( - Key.FORESPOERSEL_ID to Mock.forespoerselId.toJson(), - Key.ARBEIDSGIVER_FNR to Mock.forespoersel.fnr.toJson(), - Key.SKJEMA_INNTEKTSMELDING to Mock.skjema.toJson(SkjemaInntektsmelding.serializer()), - ).toJson(), + mockForespoerselSvarFraHelsebro( + forespoerselId = Mock.forespoerselId, + forespoerselSvar = Mock.forespoerselSvar, ) - messages - .filter(EventName.INSENDING_STARTED) - .filter(Key.ER_DUPLIKAT_IM) - .firstAsMap() - .also { - val data = it[Key.DATA].shouldNotBeNull().toMap() - data[Key.ER_DUPLIKAT_IM].shouldNotBeNull().fromJson(Boolean.serializer()).shouldBeTrue() - } - - messages.filter(EventName.INNTEKTSMELDING_SKJEMA_LAGRET).all() shouldHaveSize 0 - - messages.filter(EventName.INNTEKTSMELDING_MOTTATT).all() shouldHaveSize 0 - - messages.filter(EventName.INNTEKTSMELDING_JOURNALFOERT).all() shouldHaveSize 0 - - messages.filter(EventName.INNTEKTSMELDING_JOURNALPOST_ID_LAGRET).all() shouldHaveSize 0 - - messages.filter(EventName.INNTEKTSMELDING_DISTRIBUERT).all() shouldHaveSize 0 - } - - @Test - fun `skal ikke lagre duplikat inntektsmeldingskjema`() { - imRepository.lagreInntektsmeldingSkjema(Mock.skjema) - publish( Key.EVENT_NAME to EventName.INSENDING_STARTED.toJson(), Key.KONTEKST_ID to UUID.randomUUID().toJson(), Key.DATA to mapOf( Key.FORESPOERSEL_ID to Mock.forespoerselId.toJson(), - Key.ARBEIDSGIVER_FNR to Mock.forespoersel.fnr.toJson(), + Key.ARBEIDSGIVER_FNR to Fnr.genererGyldig().toJson(), Key.SKJEMA_INNTEKTSMELDING to Mock.skjema.toJson(SkjemaInntektsmelding.serializer()), ).toJson(), ) diff --git a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/InnsendingServiceIT.kt b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/InnsendingServiceIT.kt index 5ea7e06b5..f828a3fe6 100644 --- a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/InnsendingServiceIT.kt +++ b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/InnsendingServiceIT.kt @@ -11,6 +11,7 @@ import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.skjema.SkjemaInntektsm import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.til import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key +import no.nav.helsearbeidsgiver.felles.domene.Forespoersel import no.nav.helsearbeidsgiver.felles.domene.ForespoerselFraBro import no.nav.helsearbeidsgiver.felles.domene.ResultJson import no.nav.helsearbeidsgiver.felles.json.lesOrNull @@ -84,6 +85,17 @@ class InnsendingServiceIT : EndToEndTest() { ).toJson(), ) + // Forespørsel hentet + messages + .filter(EventName.INSENDING_STARTED) + .filter(Key.FORESPOERSEL_SVAR) + .firstAsMap() + .verifiserTransaksjonId(transaksjonId) + .also { + val data = it[Key.DATA].shouldNotBeNull().toMap() + data[Key.FORESPOERSEL_SVAR]?.fromJson(Forespoersel.serializer()) shouldBe Mock.forespoerselSvar.toForespoersel() + } + // Inntektsmelding lagret messages .filter(EventName.INSENDING_STARTED) diff --git a/tilgangservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/TilgangForespoerselServiceTest.kt b/tilgangservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/TilgangForespoerselServiceTest.kt index fe2fe027c..322277679 100644 --- a/tilgangservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/TilgangForespoerselServiceTest.kt +++ b/tilgangservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/TilgangForespoerselServiceTest.kt @@ -3,15 +3,14 @@ package no.nav.helsearbeidsgiver.inntektsmelding.inntektservice import com.github.navikt.tbd_libs.rapids_and_rivers.test_support.TestRapid import io.kotest.assertions.throwables.shouldNotThrowAny import io.mockk.clearAllMocks +import io.mockk.mockk import io.mockk.verify import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Tekst import no.nav.helsearbeidsgiver.felles.domene.ResultJson -import no.nav.helsearbeidsgiver.felles.json.toJson -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisPrefix +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.service.ServiceRiverStateless -import no.nav.helsearbeidsgiver.felles.test.mock.MockRedis import no.nav.helsearbeidsgiver.felles.test.mock.mockFail import no.nav.helsearbeidsgiver.inntektsmelding.tilgangservice.TilgangForespoerselService import no.nav.helsearbeidsgiver.utils.json.toJson @@ -20,9 +19,9 @@ import org.junit.jupiter.api.Test class TilgangForespoerselServiceTest { private val testRapid = TestRapid() - private val mockRedis = MockRedis(RedisPrefix.TilgangForespoersel) + private val mockRedisStore = mockk(relaxed = true) - private val service = TilgangForespoerselService(testRapid, mockRedis.store) + private val service = TilgangForespoerselService(testRapid, mockRedisStore) init { ServiceRiverStateless(service).connect(testRapid) @@ -32,7 +31,6 @@ class TilgangForespoerselServiceTest { fun setup() { testRapid.reset() clearAllMocks() - mockRedis.setup() } @Test @@ -54,7 +52,7 @@ class TilgangForespoerselServiceTest { ) verify { - mockRedis.store.skrivResultat(fail.kontekstId, expectedResult) + mockRedisStore.skrivResultat(fail.kontekstId, expectedResult) } } } diff --git a/trengerservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/HentForespoerslerForVedtaksperiodeIdListeServiceTest.kt b/trengerservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/HentForespoerslerForVedtaksperiodeIdListeServiceTest.kt index 9fbccfa57..b5b655d44 100644 --- a/trengerservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/HentForespoerslerForVedtaksperiodeIdListeServiceTest.kt +++ b/trengerservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/HentForespoerslerForVedtaksperiodeIdListeServiceTest.kt @@ -5,6 +5,7 @@ import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.ints.shouldBeExactly import io.kotest.matchers.shouldBe import io.mockk.clearAllMocks +import io.mockk.mockk import io.mockk.verify import kotlinx.serialization.builtins.MapSerializer import kotlinx.serialization.json.JsonElement @@ -14,10 +15,9 @@ import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.domene.Forespoersel import no.nav.helsearbeidsgiver.felles.domene.ResultJson import no.nav.helsearbeidsgiver.felles.json.toJson -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisPrefix +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.service.ServiceRiverStateless import no.nav.helsearbeidsgiver.felles.test.json.lesBehov -import no.nav.helsearbeidsgiver.felles.test.mock.MockRedis import no.nav.helsearbeidsgiver.felles.test.mock.mockFail import no.nav.helsearbeidsgiver.felles.test.mock.mockForespoersel import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.firstMessage @@ -31,16 +31,15 @@ import java.util.UUID class HentForespoerslerForVedtaksperiodeIdListeServiceTest : FunSpec({ val testRapid = TestRapid() - val mockRedis = MockRedis(RedisPrefix.HentForespoerslerForVedtaksperiodeIdListe) + val mockRedisStore = mockk(relaxed = true) ServiceRiverStateless( - HentForespoerslerForVedtaksperiodeIdListeService(testRapid, mockRedis.store), + HentForespoerslerForVedtaksperiodeIdListeService(testRapid, mockRedisStore), ).connect(testRapid) beforeEach { testRapid.reset() clearAllMocks() - mockRedis.setup() } test("forespørsler hentes og svar sendes ut på redis") { @@ -56,7 +55,7 @@ class HentForespoerslerForVedtaksperiodeIdListeServiceTest : testRapid.inspektør.size shouldBeExactly 1 verify { - mockRedis.store.skrivResultat( + mockRedisStore.skrivResultat( transaksjonId, ResultJson( success = forespoersler.toJson(MapSerializer(UuidSerializer, Forespoersel.serializer())), @@ -81,7 +80,7 @@ class HentForespoerslerForVedtaksperiodeIdListeServiceTest : testRapid.firstMessage().lesBehov() shouldBe BehovType.HENT_FORESPOERSLER_FOR_VEDTAKSPERIODE_ID_LISTE verify { - mockRedis.store.skrivResultat( + mockRedisStore.skrivResultat( fail.kontekstId, ResultJson(failure = fail.feilmelding.toJson()), )