From 49c48dfc8d03412fe565cbb7a1c58a329353bc05 Mon Sep 17 00:00:00 2001 From: Mikael Bjerga Date: Thu, 28 Nov 2024 13:13:53 +0100 Subject: [PATCH 1/5] Send Kafka-key til behov-rivers som aktiveres i parallell --- .../aareg/HentArbeidsforholdRiver.kt | 4 + .../aktiveorgnrservice/AktiveOrgnrService.kt | 6 ++ .../inntektsmelding/altinn/AltinnRiver.kt | 4 + .../BerikInntektsmeldingServiceTest.kt | 97 ++++++++----------- .../brreg/HentVirksomhetNavnRiver.kt | 4 + .../no/nav/helsearbeidsgiver/felles/Key.kt | 1 + .../felles/json/KotlinxUtils.kt | 3 + .../felles/rapidsrivers/KafkaKey.kt | 14 +++ .../inntekt/HentInntektRiver.kt | 4 + .../inntektsmelding/pdl/HentPersonerRiver.kt | 4 + .../LagreSelvbestemtImService.kt | 6 ++ .../trengerservice/HentForespoerselService.kt | 5 + 12 files changed, 97 insertions(+), 55 deletions(-) create mode 100644 felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/KafkaKey.kt diff --git a/aareg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/aareg/HentArbeidsforholdRiver.kt b/aareg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/aareg/HentArbeidsforholdRiver.kt index b475db46e0..841a9e1efb 100644 --- a/aareg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/aareg/HentArbeidsforholdRiver.kt +++ b/aareg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/aareg/HentArbeidsforholdRiver.kt @@ -8,9 +8,11 @@ import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.domene.Arbeidsforhold import no.nav.helsearbeidsgiver.felles.json.krev import no.nav.helsearbeidsgiver.felles.json.les +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.metrics.Metrics +import no.nav.helsearbeidsgiver.felles.rapidsrivers.KafkaKey import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.river.ObjectRiver import no.nav.helsearbeidsgiver.felles.utils.Log @@ -27,6 +29,7 @@ data class HentArbeidsforholdMelding( val behovType: BehovType, val transaksjonId: UUID, val data: Map, + val svarKafkaKey: KafkaKey?, val fnr: Fnr, ) @@ -47,6 +50,7 @@ class HentArbeidsforholdRiver( behovType = Key.BEHOV.krev(BehovType.HENT_ARBEIDSFORHOLD, BehovType.serializer(), json), transaksjonId = Key.KONTEKST_ID.les(UuidSerializer, json), data = data, + svarKafkaKey = Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), data), fnr = Key.FNR.les(Fnr.serializer(), data), ) } diff --git a/aktiveorgnrservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/aktiveorgnrservice/AktiveOrgnrService.kt b/aktiveorgnrservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/aktiveorgnrservice/AktiveOrgnrService.kt index c522394911..355653fb7e 100644 --- a/aktiveorgnrservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/aktiveorgnrservice/AktiveOrgnrService.kt +++ b/aktiveorgnrservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/aktiveorgnrservice/AktiveOrgnrService.kt @@ -14,6 +14,7 @@ import no.nav.helsearbeidsgiver.felles.domene.ResultJson import no.nav.helsearbeidsgiver.felles.json.les import no.nav.helsearbeidsgiver.felles.json.personMapSerializer import no.nav.helsearbeidsgiver.felles.json.toJson +import no.nav.helsearbeidsgiver.felles.rapidsrivers.KafkaKey import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore @@ -95,6 +96,8 @@ class AktiveOrgnrService( data: Map, steg0: Steg0, ) { + val svarKafkaKey = KafkaKey(steg0.sykmeldtFnr) + rapid.publish( key = steg0.sykmeldtFnr, Key.EVENT_NAME to eventName.toJson(), @@ -102,6 +105,7 @@ class AktiveOrgnrService( Key.KONTEKST_ID to steg0.transaksjonId.toJson(), Key.DATA to mapOf( + Key.SVAR_KAFKA_KEY to svarKafkaKey.toJson(), Key.ARBEIDSGIVER_FNR to steg0.avsenderFnr.toJson(), ).toJson(), ) @@ -113,6 +117,7 @@ class AktiveOrgnrService( Key.KONTEKST_ID to steg0.transaksjonId.toJson(), Key.DATA to mapOf( + Key.SVAR_KAFKA_KEY to svarKafkaKey.toJson(), Key.FNR to steg0.sykmeldtFnr.toJson(), ).toJson(), ) @@ -124,6 +129,7 @@ class AktiveOrgnrService( Key.KONTEKST_ID to steg0.transaksjonId.toJson(), Key.DATA to mapOf( + Key.SVAR_KAFKA_KEY to svarKafkaKey.toJson(), Key.FNR_LISTE to setOf( steg0.sykmeldtFnr, diff --git a/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnRiver.kt b/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnRiver.kt index 9f5b9ca340..a6b3564d7a 100644 --- a/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnRiver.kt +++ b/altinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/AltinnRiver.kt @@ -8,9 +8,11 @@ import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.json.krev import no.nav.helsearbeidsgiver.felles.json.les +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.metrics.Metrics +import no.nav.helsearbeidsgiver.felles.rapidsrivers.KafkaKey import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.river.ObjectRiver import no.nav.helsearbeidsgiver.felles.utils.Log @@ -27,6 +29,7 @@ data class Melding( val behovType: BehovType, val transaksjonId: UUID, val data: Map, + val svarKafkaKey: KafkaKey?, val fnr: Fnr, ) @@ -47,6 +50,7 @@ class AltinnRiver( behovType = Key.BEHOV.krev(BehovType.ARBEIDSGIVERE, BehovType.serializer(), json), transaksjonId = Key.KONTEKST_ID.les(UuidSerializer, json), data = data, + svarKafkaKey = Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), data), fnr = Key.ARBEIDSGIVER_FNR.les(Fnr.serializer(), data), ) } 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 index b6041e1f57..b687dd6dca 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 @@ -57,46 +57,42 @@ class BerikInntektsmeldingServiceTest : } test("nytt inntektsmeldingskjema berikes, lagres og sendes videre til journalføring") { - testRapid.sendJson(Mock.steg0(Mock.transaksjonId)) + val transaksjonId = UUID.randomUUID() + + testRapid.sendJson(Mock.steg0(transaksjonId)) // Melding med forventet behov og data sendt for å hente forespørsel testRapid.inspektør.size shouldBeExactly 1 testRapid.message(0).also { it.lesBehov() shouldBe BehovType.HENT_TRENGER_IM - Key.FORESPOERSEL_ID.lesOrNull( - serializer = UuidSerializer, - melding = it.lesData(), - ) shouldBe Mock.skjema.forespoerselId + val data = it.lesData() + Key.FORESPOERSEL_ID.lesOrNull(UuidSerializer, data) shouldBe Mock.skjema.forespoerselId } - testRapid.sendJson(Mock.steg1(Mock.transaksjonId)) + testRapid.sendJson(Mock.steg1(transaksjonId)) // Melding med forventet behov og data sendt for å hente virksomhetsnavn testRapid.inspektør.size shouldBeExactly 2 testRapid.message(1).also { it.lesBehov() shouldBe BehovType.HENT_VIRKSOMHET_NAVN - Key.ORGNR_UNDERENHETER.lesOrNull( - serializer = Orgnr.serializer().set(), - melding = it.lesData(), - ) shouldNotBe null + val data = it.lesData() + Key.ORGNR_UNDERENHETER.lesOrNull(Orgnr.serializer().set(), data) shouldNotBe null } - testRapid.sendJson(Mock.steg2(Mock.transaksjonId)) + testRapid.sendJson(Mock.steg2(transaksjonId)) // Melding med forventet behov og data sendt for å hente personnavn testRapid.inspektør.size shouldBeExactly 3 testRapid.message(2).also { it.lesBehov() shouldBe BehovType.HENT_PERSONER - Key.FNR_LISTE.lesOrNull( - serializer = Fnr.serializer().set(), - melding = it.lesData(), - ) shouldNotBe null + val data = it.lesData() + Key.FNR_LISTE.lesOrNull(Fnr.serializer().set(), data) shouldNotBe null } - testRapid.sendJson(Mock.steg3(Mock.transaksjonId)) + testRapid.sendJson(Mock.steg3(transaksjonId)) // Melding med forventet behov og data sendt for å lagre inntektsmelding testRapid.inspektør.size shouldBeExactly 4 @@ -109,7 +105,7 @@ class BerikInntektsmeldingServiceTest : Key.INNSENDING_ID.lesOrNull(Long.serializer(), data) shouldBe Mock.INNSENDING_ID } - testRapid.sendJson(Mock.steg4(Mock.transaksjonId)) + testRapid.sendJson(Mock.steg4(transaksjonId)) // Inntektsmelding sendt videre til journalføring med forventet data testRapid.inspektør.size shouldBeExactly 5 @@ -127,7 +123,7 @@ class BerikInntektsmeldingServiceTest : test("duplikat IM sendes _ikke_ videre til journalføring") { testRapid.sendJson( Mock - .steg4(Mock.transaksjonId) + .steg4(UUID.randomUUID()) .plusData(Key.ER_DUPLIKAT_IM to true.toJson(Boolean.serializer())), ) @@ -159,72 +155,63 @@ class BerikInntektsmeldingServiceTest : private object Mock { const val INNSENDING_ID = 1L - val transaksjonId: UUID = UUID.randomUUID() - val forespoersel = mockForespoersel() val skjema = mockSkjemaInntektsmelding() - val inntektsmelding = mockInntektsmeldingV1() - val avsender = + private val forespoersel = mockForespoersel() + + private val avsender = Person( fnr = Fnr.genererGyldig(), navn = "Skrue McDuck", ) - val sykmeldt = + private val sykmeldt = Person( fnr = Fnr(forespoersel.fnr), navn = "Dolly Duck", ) - val orgnrMedNavn = mapOf(Orgnr(forespoersel.orgnr) to "Lasses kasserollesjappe") + private val orgnrMedNavn = mapOf(Orgnr(forespoersel.orgnr) to "Lasses kasserollesjappe") - val personer = + private val personer = mapOf( avsender.fnr to avsender, sykmeldt.fnr to sykmeldt, ) - val steg0data = + fun steg0(transaksjonId: UUID): Map = mapOf( - Key.ARBEIDSGIVER_FNR to avsender.fnr.toJson(), - Key.SKJEMA_INNTEKTSMELDING to skjema.toJson(SkjemaInntektsmelding.serializer()), - Key.INNSENDING_ID to INNSENDING_ID.toJson(Long.serializer()), + Key.EVENT_NAME to EventName.INNTEKTSMELDING_SKJEMA_LAGRET.toJson(), + Key.KONTEKST_ID to transaksjonId.toJson(), + Key.DATA to + mapOf( + Key.ARBEIDSGIVER_FNR to avsender.fnr.toJson(), + Key.SKJEMA_INNTEKTSMELDING to skjema.toJson(SkjemaInntektsmelding.serializer()), + Key.INNSENDING_ID to INNSENDING_ID.toJson(Long.serializer()), + ).toJson(), ) - val steg1data = - mapOf( + fun steg1(transaksjonId: UUID): Map = + steg0(transaksjonId).plusData( Key.FORESPOERSEL_SVAR to forespoersel.toJson(Forespoersel.serializer()), ) - val steg2data = - mapOf( + fun steg2(transaksjonId: UUID): Map = + steg1(transaksjonId).plusData( Key.VIRKSOMHETER to orgnrMedNavn.toJson(orgMapSerializer), ) - val steg3data = - mapOf( + fun steg3(transaksjonId: UUID): Map = + steg2(transaksjonId).plusData( Key.PERSONER to personer.toJson(personMapSerializer), ) - val steg4data = - mapOf( - Key.ER_DUPLIKAT_IM to false.toJson(Boolean.serializer()), - Key.INNTEKTSMELDING to inntektsmelding.toJson(InntektsmeldingV1.serializer()), - Key.BESTEMMENDE_FRAVAERSDAG to 20.oktober.toJson(), - ) - - fun steg0(transaksjonId: UUID): Map = - mapOf( - Key.EVENT_NAME to EventName.INNTEKTSMELDING_SKJEMA_LAGRET.toJson(), - Key.KONTEKST_ID to transaksjonId.toJson(), - Key.DATA to steg0data.toJson(), + fun steg4(transaksjonId: UUID): Map = + steg3(transaksjonId).plusData( + mapOf( + Key.ER_DUPLIKAT_IM to false.toJson(Boolean.serializer()), + Key.INNTEKTSMELDING to mockInntektsmeldingV1().toJson(InntektsmeldingV1.serializer()), + Key.BESTEMMENDE_FRAVAERSDAG to 20.oktober.toJson(), + ), ) - - fun steg1(transaksjonId: UUID): Map = steg0(transaksjonId).plusData(steg1data) - - fun steg2(transaksjonId: UUID): Map = steg1(transaksjonId).plusData(steg2data) - - fun steg3(transaksjonId: UUID): Map = steg2(transaksjonId).plusData(steg3data) - - fun steg4(transaksjonId: UUID): Map = steg3(transaksjonId).plusData(steg4data) } diff --git a/brreg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/HentVirksomhetNavnRiver.kt b/brreg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/HentVirksomhetNavnRiver.kt index d176d0116d..9328974f37 100644 --- a/brreg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/HentVirksomhetNavnRiver.kt +++ b/brreg/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/HentVirksomhetNavnRiver.kt @@ -8,9 +8,11 @@ import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.json.krev import no.nav.helsearbeidsgiver.felles.json.les +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.metrics.Metrics +import no.nav.helsearbeidsgiver.felles.rapidsrivers.KafkaKey import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.river.ObjectRiver import no.nav.helsearbeidsgiver.felles.utils.Log @@ -27,6 +29,7 @@ data class HentVirksomhetMelding( val behovType: BehovType, val transaksjonId: UUID, val data: Map, + val svarKafkaKey: KafkaKey?, val orgnr: Set, ) @@ -48,6 +51,7 @@ class HentVirksomhetNavnRiver( behovType = Key.BEHOV.krev(BehovType.HENT_VIRKSOMHET_NAVN, BehovType.serializer(), json), transaksjonId = Key.KONTEKST_ID.les(UuidSerializer, json), data = data, + svarKafkaKey = Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), data), orgnr = Key.ORGNR_UNDERENHETER.les(Orgnr.serializer().set(), data), ) } diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/Key.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/Key.kt index d78cfe4a1f..293f23d1ac 100644 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/Key.kt +++ b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/Key.kt @@ -43,6 +43,7 @@ enum class Key : IKey { SKAL_HA_PAAMINNELSE, SKJEMA_INNTEKTSMELDING, SPINN_INNTEKTSMELDING_ID, + SVAR_KAFKA_KEY, SYKMELDT, TILGANG, VEDTAKSPERIODE_ID_LISTE, diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/json/KotlinxUtils.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/json/KotlinxUtils.kt index 7db3060d02..8a91fe4e0c 100644 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/json/KotlinxUtils.kt +++ b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/json/KotlinxUtils.kt @@ -11,6 +11,7 @@ import no.nav.helsearbeidsgiver.felles.IKey import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.domene.Person import no.nav.helsearbeidsgiver.felles.domene.ResultJson +import no.nav.helsearbeidsgiver.felles.rapidsrivers.KafkaKey import no.nav.helsearbeidsgiver.utils.json.fromJson import no.nav.helsearbeidsgiver.utils.json.fromJsonMapFiltered import no.nav.helsearbeidsgiver.utils.json.serializer.set @@ -35,6 +36,8 @@ fun EventName.toJson(): JsonElement = toJson(EventName.serializer()) fun BehovType.toJson(): JsonElement = toJson(BehovType.serializer()) +fun KafkaKey.toJson(): JsonElement = toJson(KafkaKey.serializer()) + fun Fnr.toJson(): JsonElement = toJson(Fnr.serializer()) fun Orgnr.toJson(): JsonElement = toJson(Orgnr.serializer()) diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/KafkaKey.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/KafkaKey.kt new file mode 100644 index 0000000000..d1ff6b5635 --- /dev/null +++ b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/KafkaKey.kt @@ -0,0 +1,14 @@ +package no.nav.helsearbeidsgiver.felles.rapidsrivers + +import kotlinx.serialization.Serializable +import no.nav.helsearbeidsgiver.utils.wrapper.Fnr +import java.util.UUID + +@Serializable +@JvmInline +value class KafkaKey private constructor( + internal val key: String, +) { + constructor(forespoerselId: UUID) : this(forespoerselId.toString()) + constructor(sykmeldtFnr: Fnr) : this(sykmeldtFnr.verdi) +} diff --git a/inntekt/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/HentInntektRiver.kt b/inntekt/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/HentInntektRiver.kt index 6f8f8a72dc..d716d4c903 100644 --- a/inntekt/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/HentInntektRiver.kt +++ b/inntekt/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/HentInntektRiver.kt @@ -8,9 +8,11 @@ import no.nav.helsearbeidsgiver.felles.domene.Inntekt import no.nav.helsearbeidsgiver.felles.domene.InntektPerMaaned import no.nav.helsearbeidsgiver.felles.json.krev import no.nav.helsearbeidsgiver.felles.json.les +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.metrics.Metrics +import no.nav.helsearbeidsgiver.felles.rapidsrivers.KafkaKey import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.river.ObjectRiver import no.nav.helsearbeidsgiver.felles.utils.Log @@ -32,6 +34,7 @@ data class Melding( val behovType: BehovType, val transaksjonId: UUID, val data: Map, + val svarKafkaKey: KafkaKey?, val orgnr: Orgnr, val fnr: Fnr, val inntektsdato: LocalDate, @@ -54,6 +57,7 @@ class HentInntektRiver( behovType = Key.BEHOV.krev(BehovType.HENT_INNTEKT, BehovType.serializer(), json), transaksjonId = Key.KONTEKST_ID.les(UuidSerializer, json), data = data, + svarKafkaKey = Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), data), orgnr = Key.ORGNR_UNDERENHET.les(Orgnr.serializer(), data), fnr = Key.FNR.les(Fnr.serializer(), data), inntektsdato = Key.INNTEKTSDATO.les(LocalDateSerializer, data), diff --git a/pdl/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/pdl/HentPersonerRiver.kt b/pdl/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/pdl/HentPersonerRiver.kt index df24d75d23..66a64617be 100644 --- a/pdl/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/pdl/HentPersonerRiver.kt +++ b/pdl/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/pdl/HentPersonerRiver.kt @@ -7,10 +7,12 @@ import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.domene.Person import no.nav.helsearbeidsgiver.felles.json.krev import no.nav.helsearbeidsgiver.felles.json.les +import no.nav.helsearbeidsgiver.felles.json.lesOrNull import no.nav.helsearbeidsgiver.felles.json.personMapSerializer import no.nav.helsearbeidsgiver.felles.json.toJson import no.nav.helsearbeidsgiver.felles.json.toMap import no.nav.helsearbeidsgiver.felles.metrics.Metrics +import no.nav.helsearbeidsgiver.felles.rapidsrivers.KafkaKey import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.river.ObjectRiver import no.nav.helsearbeidsgiver.felles.utils.Log @@ -30,6 +32,7 @@ data class Melding( val behovType: BehovType, val transaksjonId: UUID, val data: Map, + val svarKafkaKey: KafkaKey?, val fnrListe: Set, ) @@ -50,6 +53,7 @@ class HentPersonerRiver( behovType = Key.BEHOV.krev(BehovType.HENT_PERSONER, BehovType.serializer(), json), transaksjonId = Key.KONTEKST_ID.les(UuidSerializer, json), data = data, + svarKafkaKey = Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), data), fnrListe = Key.FNR_LISTE.les(Fnr.serializer().set(), data), ) } diff --git a/selvbestemt-lagre-im-service/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/selvbestemtlagreimservice/LagreSelvbestemtImService.kt b/selvbestemt-lagre-im-service/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/selvbestemtlagreimservice/LagreSelvbestemtImService.kt index eac19cd191..f008c89ff9 100644 --- a/selvbestemt-lagre-im-service/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/selvbestemtlagreimservice/LagreSelvbestemtImService.kt +++ b/selvbestemt-lagre-im-service/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/selvbestemtlagreimservice/LagreSelvbestemtImService.kt @@ -20,6 +20,7 @@ import no.nav.helsearbeidsgiver.felles.json.orgMapSerializer import no.nav.helsearbeidsgiver.felles.json.personMapSerializer import no.nav.helsearbeidsgiver.felles.json.toJson import no.nav.helsearbeidsgiver.felles.json.toMap +import no.nav.helsearbeidsgiver.felles.rapidsrivers.KafkaKey import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore @@ -125,6 +126,8 @@ class LagreSelvbestemtImService( data: Map, steg0: Steg0, ) { + val svarKafkaKey = KafkaKey(steg0.skjema.sykmeldtFnr) + kontrollerSkjema(steg0.skjema) rapid.publish( @@ -134,6 +137,7 @@ class LagreSelvbestemtImService( Key.KONTEKST_ID to steg0.transaksjonId.toJson(), Key.DATA to mapOf( + Key.SVAR_KAFKA_KEY to svarKafkaKey.toJson(), Key.SELVBESTEMT_ID to steg0.skjema.selvbestemtId?.toJson(), Key.ORGNR_UNDERENHETER to setOf(steg0.skjema.avsender.orgnr).toJson(Orgnr.serializer()), ).mapValuesNotNull { it } @@ -147,6 +151,7 @@ class LagreSelvbestemtImService( Key.KONTEKST_ID to steg0.transaksjonId.toJson(), Key.DATA to mapOf( + Key.SVAR_KAFKA_KEY to svarKafkaKey.toJson(), Key.SELVBESTEMT_ID to steg0.skjema.selvbestemtId?.toJson(), Key.FNR_LISTE to setOf( @@ -164,6 +169,7 @@ class LagreSelvbestemtImService( Key.KONTEKST_ID to steg0.transaksjonId.toJson(), Key.DATA to mapOf( + Key.SVAR_KAFKA_KEY to svarKafkaKey.toJson(), Key.SELVBESTEMT_ID to steg0.skjema.selvbestemtId?.toJson(), Key.FNR to steg0.skjema.sykmeldtFnr.verdi diff --git a/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/HentForespoerselService.kt b/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/HentForespoerselService.kt index 484aa5796c..026fb49d68 100644 --- a/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/HentForespoerselService.kt +++ b/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/HentForespoerselService.kt @@ -18,6 +18,7 @@ import no.nav.helsearbeidsgiver.felles.json.lesOrNull import no.nav.helsearbeidsgiver.felles.json.personMapSerializer import no.nav.helsearbeidsgiver.felles.json.toJson import no.nav.helsearbeidsgiver.felles.json.toMap +import no.nav.helsearbeidsgiver.felles.rapidsrivers.KafkaKey import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore @@ -125,6 +126,7 @@ class HentForespoerselService( steg0: Steg0, steg1: Steg1, ) { + val svarKafkaKey = KafkaKey(steg0.forespoerselId) val inntektsdato = steg1.forespoersel.forslagInntektsdato() rapid @@ -135,6 +137,7 @@ class HentForespoerselService( Key.KONTEKST_ID to steg0.transaksjonId.toJson(), Key.DATA to mapOf( + Key.SVAR_KAFKA_KEY to svarKafkaKey.toJson(), Key.FORESPOERSEL_ID to steg0.forespoerselId.toJson(), Key.ORGNR_UNDERENHETER to setOf(steg1.forespoersel.orgnr).toJson(String.serializer()), ).toJson(), @@ -148,6 +151,7 @@ class HentForespoerselService( Key.KONTEKST_ID to steg0.transaksjonId.toJson(), Key.DATA to mapOf( + Key.SVAR_KAFKA_KEY to svarKafkaKey.toJson(), Key.FORESPOERSEL_ID to steg0.forespoerselId.toJson(), Key.FNR_LISTE to setOf( @@ -165,6 +169,7 @@ class HentForespoerselService( Key.KONTEKST_ID to steg0.transaksjonId.toJson(), Key.DATA to mapOf( + Key.SVAR_KAFKA_KEY to svarKafkaKey.toJson(), Key.FORESPOERSEL_ID to steg0.forespoerselId.toJson(), Key.ORGNR_UNDERENHET to steg1.forespoersel.orgnr.toJson(), Key.FNR to steg1.forespoersel.fnr.toJson(), From c69dc5f282b4182afd5cd48dca9f764da344d2c2 Mon Sep 17 00:00:00 2001 From: Mikael Bjerga Date: Thu, 28 Nov 2024 14:27:30 +0100 Subject: [PATCH 2/5] Fiks signaturkonflikt i Java --- .../nav/helsearbeidsgiver/felles/rapidsrivers/KafkaKey.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/KafkaKey.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/KafkaKey.kt index d1ff6b5635..b1958b60d0 100644 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/KafkaKey.kt +++ b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/KafkaKey.kt @@ -9,6 +9,9 @@ import java.util.UUID value class KafkaKey private constructor( internal val key: String, ) { - constructor(forespoerselId: UUID) : this(forespoerselId.toString()) - constructor(sykmeldtFnr: Fnr) : this(sykmeldtFnr.verdi) + companion object { + operator fun invoke(forespoerselId: UUID): KafkaKey = KafkaKey(forespoerselId.toString()) + + operator fun invoke(sykmeldtFnr: Fnr): KafkaKey = KafkaKey(sykmeldtFnr.verdi) + } } From 1a748492c8ba8fae3bbe40481cc2185fee43e634 Mon Sep 17 00:00:00 2001 From: Mikael Bjerga Date: Thu, 28 Nov 2024 14:52:01 +0100 Subject: [PATCH 3/5] =?UTF-8?q?F=C3=A5=20med=20nytt=20meldingsfelt=20i=20t?= =?UTF-8?q?estene?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../inntektsmelding/inntekt/HentArbeidsforholdRiverTest.kt | 1 + .../no/nav/helsearbeidsgiver/inntektsmelding/altinn/Mock.kt | 1 + .../inntektsmelding/brreg/HentVirksomhetNavnRiverTest.kt | 1 + .../inntektsmelding/inntekt/HentInntektRiverTest.kt | 1 + .../inntektsmelding/pdl/HentPersonerRiverTest.kt | 1 + 5 files changed, 5 insertions(+) diff --git a/aareg/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/HentArbeidsforholdRiverTest.kt b/aareg/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/HentArbeidsforholdRiverTest.kt index b71db2d7ef..570c551cbf 100644 --- a/aareg/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/HentArbeidsforholdRiverTest.kt +++ b/aareg/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/HentArbeidsforholdRiverTest.kt @@ -133,6 +133,7 @@ private object Mock { mapOf( Key.FNR to fnr.toJson(Fnr.serializer()), ), + svarKafkaKey = null, fnr = fnr, ) } diff --git a/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/Mock.kt b/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/Mock.kt index 3fee2dde9a..6c513e7b33 100644 --- a/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/Mock.kt +++ b/altinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/altinn/Mock.kt @@ -25,6 +25,7 @@ object Mock { mapOf( Key.ARBEIDSGIVER_FNR to fnr.toJson(), ), + svarKafkaKey = null, fnr = fnr, ) } diff --git a/brreg/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/HentVirksomhetNavnRiverTest.kt b/brreg/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/HentVirksomhetNavnRiverTest.kt index 465bb21172..2c1d171ec2 100644 --- a/brreg/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/HentVirksomhetNavnRiverTest.kt +++ b/brreg/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brreg/HentVirksomhetNavnRiverTest.kt @@ -192,6 +192,7 @@ private object Mock { mapOf( Key.ORGNR_UNDERENHETER to orgnr.toJson(Orgnr.serializer()), ), + svarKafkaKey = null, orgnr = orgnr, ) diff --git a/inntekt/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/HentInntektRiverTest.kt b/inntekt/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/HentInntektRiverTest.kt index 1151a9bf64..33b5862e5e 100644 --- a/inntekt/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/HentInntektRiverTest.kt +++ b/inntekt/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntekt/HentInntektRiverTest.kt @@ -179,6 +179,7 @@ private object Mock { Key.FNR to fnr.toJson(), Key.INNTEKTSDATO to inntektsdato.toJson(), ), + svarKafkaKey = null, orgnr = orgnr, fnr = fnr, inntektsdato = inntektsdato, diff --git a/pdl/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/pdl/HentPersonerRiverTest.kt b/pdl/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/pdl/HentPersonerRiverTest.kt index 1e0a0223e1..912a078961 100644 --- a/pdl/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/pdl/HentPersonerRiverTest.kt +++ b/pdl/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/pdl/HentPersonerRiverTest.kt @@ -256,6 +256,7 @@ private object Mock { Key.FORESPOERSEL_ID to forespoerselId?.toJson(), Key.FNR_LISTE to fnrListe.toJson(Fnr.serializer()), ).mapValuesNotNull { it }, + svarKafkaKey = null, fnrListe = fnrListe, ) From ded264049caec562fe21167ec6091e36bf73f588 Mon Sep 17 00:00:00 2001 From: Mikael Bjerga Date: Thu, 28 Nov 2024 16:39:19 +0100 Subject: [PATCH 4/5] Oppdater integrasjonstest --- .../inntektsmelding/integrasjonstest/AktiveOrgnrServiceIT.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/AktiveOrgnrServiceIT.kt b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/AktiveOrgnrServiceIT.kt index 2164ba895c..03da986288 100644 --- a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/AktiveOrgnrServiceIT.kt +++ b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/AktiveOrgnrServiceIT.kt @@ -25,6 +25,7 @@ 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.json.toMap +import no.nav.helsearbeidsgiver.felles.rapidsrivers.KafkaKey import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisPrefix import no.nav.helsearbeidsgiver.inntektsmelding.aareg.tilArbeidsforhold @@ -222,6 +223,7 @@ class AktiveOrgnrServiceIT : EndToEndTest() { Key.KONTEKST_ID to transaksjonId.toJson(), Key.DATA to mapOf( + Key.SVAR_KAFKA_KEY to KafkaKey(Mock.fnr).toJson(), Key.FNR_LISTE to listOf( Mock.fnr, From fb2d7684b84ef521855b565184ee5e5e5bb22999 Mon Sep 17 00:00:00 2001 From: Mikael Bjerga Date: Fri, 29 Nov 2024 09:22:44 +0100 Subject: [PATCH 5/5] Sjekk at svarkey blir sendt i tester --- .../AktiveOrgnrServiceTest.kt | 21 ++- .../LagreSelvbestemtImServiceTest.kt | 32 +++- .../HentForespoerselServiceTest.kt | 165 ++++++++++++++++++ ...slerForVedtaksperiodeIdListeServiceTest.kt | 10 +- 4 files changed, 213 insertions(+), 15 deletions(-) create mode 100644 trengerservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/HentForespoerselServiceTest.kt diff --git a/aktiveorgnrservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/aktiveorgnrservice/AktiveOrgnrServiceTest.kt b/aktiveorgnrservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/aktiveorgnrservice/AktiveOrgnrServiceTest.kt index 64a06cd41c..85c4804f51 100644 --- a/aktiveorgnrservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/aktiveorgnrservice/AktiveOrgnrServiceTest.kt +++ b/aktiveorgnrservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/aktiveorgnrservice/AktiveOrgnrServiceTest.kt @@ -19,12 +19,15 @@ import no.nav.helsearbeidsgiver.felles.domene.Arbeidsgiver import no.nav.helsearbeidsgiver.felles.domene.PeriodeNullable import no.nav.helsearbeidsgiver.felles.domene.Person import no.nav.helsearbeidsgiver.felles.domene.ResultJson +import no.nav.helsearbeidsgiver.felles.json.lesOrNull import no.nav.helsearbeidsgiver.felles.json.personMapSerializer import no.nav.helsearbeidsgiver.felles.json.toJson +import no.nav.helsearbeidsgiver.felles.rapidsrivers.KafkaKey import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisPrefix import no.nav.helsearbeidsgiver.felles.rapidsrivers.service.ServiceRiverStateful import no.nav.helsearbeidsgiver.felles.test.json.lesBehov +import no.nav.helsearbeidsgiver.felles.test.json.lesData import no.nav.helsearbeidsgiver.felles.test.json.plusData import no.nav.helsearbeidsgiver.felles.test.mock.MockRedis import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.message @@ -63,9 +66,18 @@ class AktiveOrgnrServiceTest : ) testRapid.inspektør.size shouldBeExactly 3 - testRapid.message(0).lesBehov() shouldBe BehovType.ARBEIDSGIVERE - testRapid.message(1).lesBehov() shouldBe BehovType.HENT_ARBEIDSFORHOLD - testRapid.message(2).lesBehov() shouldBe BehovType.HENT_PERSONER + testRapid.message(0).also { + it.lesBehov() shouldBe BehovType.ARBEIDSGIVERE + Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), it.lesData()) shouldBe KafkaKey(Mock.sykmeldtFnr) + } + testRapid.message(1).also { + it.lesBehov() shouldBe BehovType.HENT_ARBEIDSFORHOLD + Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), it.lesData()) shouldBe KafkaKey(Mock.sykmeldtFnr) + } + testRapid.message(2).also { + it.lesBehov() shouldBe BehovType.HENT_PERSONER + Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), it.lesData()) shouldBe KafkaKey(Mock.sykmeldtFnr) + } testRapid.sendJson( Mock.steg1Data(transaksjonId, orgnr), @@ -190,11 +202,12 @@ class AktiveOrgnrServiceTest : }) private object Mock { + val sykmeldtFnr = Fnr.genererGyldig() + private const val SYKMELDT_NAVN = "Ole Idole" private const val AVSENDER_NAVN = "Ole Jacob Evenrud" private const val ORG_NAVN = "Mexican Standup A/S" - private val sykmeldtFnr = Fnr.genererGyldig() private val avsenderFnr = Fnr.genererGyldig() private val personer = diff --git a/selvbestemt-lagre-im-service/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/selvbestemtlagreimservice/LagreSelvbestemtImServiceTest.kt b/selvbestemt-lagre-im-service/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/selvbestemtlagreimservice/LagreSelvbestemtImServiceTest.kt index 71efd4ebd2..6fc9988376 100644 --- a/selvbestemt-lagre-im-service/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/selvbestemtlagreimservice/LagreSelvbestemtImServiceTest.kt +++ b/selvbestemt-lagre-im-service/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/selvbestemtlagreimservice/LagreSelvbestemtImServiceTest.kt @@ -39,10 +39,12 @@ import no.nav.helsearbeidsgiver.felles.json.lesOrNull import no.nav.helsearbeidsgiver.felles.json.personMapSerializer import no.nav.helsearbeidsgiver.felles.json.toJson import no.nav.helsearbeidsgiver.felles.json.toMap +import no.nav.helsearbeidsgiver.felles.rapidsrivers.KafkaKey import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisPrefix import no.nav.helsearbeidsgiver.felles.rapidsrivers.service.ServiceRiverStateful import no.nav.helsearbeidsgiver.felles.test.json.lesBehov +import no.nav.helsearbeidsgiver.felles.test.json.lesData import no.nav.helsearbeidsgiver.felles.test.json.minusData import no.nav.helsearbeidsgiver.felles.test.json.plusData import no.nav.helsearbeidsgiver.felles.test.mock.MockRedis @@ -95,9 +97,18 @@ class LagreSelvbestemtImServiceTest : ) testRapid.inspektør.size shouldBeExactly 3 - testRapid.message(0).lesBehov() shouldBe BehovType.HENT_VIRKSOMHET_NAVN - testRapid.message(1).lesBehov() shouldBe BehovType.HENT_PERSONER - testRapid.message(2).lesBehov() shouldBe BehovType.HENT_ARBEIDSFORHOLD + testRapid.message(0).also { + it.lesBehov() shouldBe BehovType.HENT_VIRKSOMHET_NAVN + Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), it.lesData()) shouldBe KafkaKey(Mock.skjema.sykmeldtFnr) + } + testRapid.message(1).also { + it.lesBehov() shouldBe BehovType.HENT_PERSONER + Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), it.lesData()) shouldBe KafkaKey(Mock.skjema.sykmeldtFnr) + } + testRapid.message(2).also { + it.lesBehov() shouldBe BehovType.HENT_ARBEIDSFORHOLD + Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), it.lesData()) shouldBe KafkaKey(Mock.skjema.sykmeldtFnr) + } mockStatic(OffsetDateTime::class) { every { OffsetDateTime.now() } returns nyInntektsmelding.mottatt @@ -151,9 +162,18 @@ class LagreSelvbestemtImServiceTest : ) testRapid.inspektør.size shouldBeExactly 3 - testRapid.message(0).lesBehov() shouldBe BehovType.HENT_VIRKSOMHET_NAVN - testRapid.message(1).lesBehov() shouldBe BehovType.HENT_PERSONER - testRapid.message(2).lesBehov() shouldBe BehovType.HENT_ARBEIDSFORHOLD + testRapid.message(0).also { + it.lesBehov() shouldBe BehovType.HENT_VIRKSOMHET_NAVN + Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), it.lesData()) shouldBe KafkaKey(Mock.skjema.sykmeldtFnr) + } + testRapid.message(1).also { + it.lesBehov() shouldBe BehovType.HENT_PERSONER + Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), it.lesData()) shouldBe KafkaKey(Mock.skjema.sykmeldtFnr) + } + testRapid.message(2).also { + it.lesBehov() shouldBe BehovType.HENT_ARBEIDSFORHOLD + Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), it.lesData()) shouldBe KafkaKey(Mock.skjema.sykmeldtFnr) + } mockStatic(OffsetDateTime::class) { every { OffsetDateTime.now() } returns endretInntektsmelding.mottatt diff --git a/trengerservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/HentForespoerselServiceTest.kt b/trengerservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/HentForespoerselServiceTest.kt new file mode 100644 index 0000000000..58ce9e3d6c --- /dev/null +++ b/trengerservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/HentForespoerselServiceTest.kt @@ -0,0 +1,165 @@ +package no.nav.helsearbeidsgiver.inntektsmelding.trengerservice + +import com.github.navikt.tbd_libs.rapids_and_rivers.test_support.TestRapid +import io.kotest.core.spec.style.FunSpec +import io.kotest.matchers.ints.shouldBeExactly +import io.kotest.matchers.nulls.shouldNotBeNull +import io.kotest.matchers.shouldBe +import io.mockk.clearAllMocks +import io.mockk.verify +import kotlinx.serialization.json.JsonElement +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.HentForespoerselResultat +import no.nav.helsearbeidsgiver.felles.domene.Inntekt +import no.nav.helsearbeidsgiver.felles.domene.InntektPerMaaned +import no.nav.helsearbeidsgiver.felles.domene.Person +import no.nav.helsearbeidsgiver.felles.domene.ResultJson +import no.nav.helsearbeidsgiver.felles.json.lesOrNull +import no.nav.helsearbeidsgiver.felles.json.personMapSerializer +import no.nav.helsearbeidsgiver.felles.json.toJson +import no.nav.helsearbeidsgiver.felles.rapidsrivers.KafkaKey +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisPrefix +import no.nav.helsearbeidsgiver.felles.rapidsrivers.service.ServiceRiverStateful +import no.nav.helsearbeidsgiver.felles.test.json.lesBehov +import no.nav.helsearbeidsgiver.felles.test.json.lesData +import no.nav.helsearbeidsgiver.felles.test.mock.MockRedis +import no.nav.helsearbeidsgiver.felles.test.mock.mockForespoersel +import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.message +import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.sendJson +import no.nav.helsearbeidsgiver.utils.json.toJson +import no.nav.helsearbeidsgiver.utils.test.date.juli +import no.nav.helsearbeidsgiver.utils.test.date.juni +import no.nav.helsearbeidsgiver.utils.test.date.mai +import no.nav.helsearbeidsgiver.utils.test.wrapper.genererGyldig +import no.nav.helsearbeidsgiver.utils.wrapper.Fnr +import java.util.UUID + +class HentForespoerselServiceTest : + FunSpec({ + + val testRapid = TestRapid() + val mockRedis = MockRedis(RedisPrefix.HentForespoersel) + + ServiceRiverStateful( + HentForespoerselService(testRapid, mockRedis.store), + ).connect(testRapid) + + beforeEach { + testRapid.reset() + clearAllMocks() + mockRedis.setup() + } + + test("henter forespørsel og annen data til preutfylling av skjema") { + val transaksjonId = UUID.randomUUID() + + testRapid.sendJson(Mock.steg0(transaksjonId)) + + testRapid.inspektør.size shouldBeExactly 1 + testRapid.message(0).lesBehov() shouldBe BehovType.HENT_TRENGER_IM + + testRapid.sendJson(Mock.steg1(transaksjonId)) + + testRapid.inspektør.size shouldBeExactly 4 + testRapid.message(1).also { + it.lesBehov() shouldBe BehovType.HENT_VIRKSOMHET_NAVN + Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), it.lesData()) shouldBe KafkaKey(Mock.forespoerselId) + } + testRapid.message(2).also { + it.lesBehov() shouldBe BehovType.HENT_PERSONER + Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), it.lesData()) shouldBe KafkaKey(Mock.forespoerselId) + } + testRapid.message(3).also { + it.lesBehov() shouldBe BehovType.HENT_INNTEKT + Key.SVAR_KAFKA_KEY.lesOrNull(KafkaKey.serializer(), it.lesData()) shouldBe KafkaKey(Mock.forespoerselId) + } + + testRapid.sendJson(Mock.steg2(transaksjonId)) + + testRapid.inspektør.size shouldBeExactly 4 + + verify { + mockRedis.store.lesAlleFeil(transaksjonId) + mockRedis.store.skrivResultat( + transaksjonId, + ResultJson( + success = Mock.resultat.toJson(HentForespoerselResultat.serializer()), + ), + ) + } + } + }) + +private object Mock { + val forespoerselId: UUID = UUID.randomUUID() + private val sykmeldt = + Person( + fnr = Fnr.genererGyldig(), + navn = "Lange Mann", + ) + private val avsender = + Person( + fnr = Fnr.genererGyldig(), + navn = "Kaptein Sabeltann", + ) + val resultat = + HentForespoerselResultat( + sykmeldtNavn = sykmeldt.navn, + avsenderNavn = avsender.navn, + orgNavn = "Den Sorte Dame", + inntekt = + Inntekt( + maanedOversikt = + listOf( + InntektPerMaaned(mai(2024), 36000.0), + InntektPerMaaned(juni(2024), 37000.0), + InntektPerMaaned(juli(2024), 38000.0), + ), + ), + forespoersel = + mockForespoersel().copy( + fnr = sykmeldt.fnr.verdi, + ), + feil = emptyMap(), + ) + + fun steg0(transaksjonId: UUID): Map = + mapOf( + Key.EVENT_NAME to EventName.TRENGER_REQUESTED.toJson(), + Key.KONTEKST_ID to transaksjonId.toJson(), + Key.DATA to + mapOf( + Key.FORESPOERSEL_ID to forespoerselId.toJson(), + Key.ARBEIDSGIVER_FNR to avsender.fnr.toJson(), + ).toJson(), + ) + + fun steg1(transaksjonId: UUID): Map = + mapOf( + Key.EVENT_NAME to EventName.TRENGER_REQUESTED.toJson(), + Key.KONTEKST_ID to transaksjonId.toJson(), + Key.DATA to + mapOf( + Key.FORESPOERSEL_SVAR to resultat.forespoersel.toJson(Forespoersel.serializer()), + ).toJson(), + ) + + fun steg2(transaksjonId: UUID): Map = + mapOf( + Key.EVENT_NAME to EventName.TRENGER_REQUESTED.toJson(), + Key.KONTEKST_ID to transaksjonId.toJson(), + Key.DATA to + mapOf( + Key.VIRKSOMHETER to mapOf(resultat.forespoersel.orgnr to resultat.orgNavn).toJson(), + Key.PERSONER to + mapOf( + sykmeldt.fnr to sykmeldt, + avsender.fnr to avsender, + ).toJson(personMapSerializer), + Key.INNTEKT to resultat.inntekt.shouldNotBeNull().toJson(Inntekt.serializer()), + ).toJson(), + ) +} 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 2984b52619..b6f7e5a08c 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 @@ -24,7 +24,7 @@ import no.nav.helsearbeidsgiver.felles.test.mock.mockForespoersel import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.firstMessage import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.message import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.sendJson -import no.nav.helsearbeidsgiver.inntektsmelding.trengerservice.Mock.forespoersler +import no.nav.helsearbeidsgiver.inntektsmelding.trengerservice.MockHent.forespoersler import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer import no.nav.helsearbeidsgiver.utils.json.toJson import java.util.UUID @@ -47,12 +47,12 @@ class HentForespoerslerForVedtaksperiodeIdListeServiceTest : test("forespørsler hentes og svar sendes ut på redis") { val transaksjonId = UUID.randomUUID() - testRapid.sendJson(Mock.steg0(transaksjonId)) + testRapid.sendJson(MockHent.steg0(transaksjonId)) testRapid.inspektør.size shouldBeExactly 1 testRapid.message(0).lesBehov() shouldBe BehovType.HENT_FORESPOERSLER_FOR_VEDTAKSPERIODE_ID_LISTE - testRapid.sendJson(Mock.steg1(transaksjonId)) + testRapid.sendJson(MockHent.steg1(transaksjonId)) testRapid.inspektør.size shouldBeExactly 1 @@ -70,7 +70,7 @@ class HentForespoerslerForVedtaksperiodeIdListeServiceTest : val transaksjonId = UUID.randomUUID() val feilmelding = "Teknisk feil, prøv igjen senere." - testRapid.sendJson(Mock.steg0(transaksjonId)) + testRapid.sendJson(MockHent.steg0(transaksjonId)) testRapid.sendJson( Fail( @@ -99,7 +99,7 @@ class HentForespoerslerForVedtaksperiodeIdListeServiceTest : } }) -private object Mock { +private object MockHent { val vedtaksperiodeId1: UUID = UUID.randomUUID() val vedtaksperiodeId2: UUID = UUID.randomUUID() val forespoerselId1: UUID = UUID.randomUUID()