From 21b3aa46c0383268d0b2a31a800a1843d5b258b1 Mon Sep 17 00:00:00 2001 From: Mikael Bjerga Date: Thu, 7 Nov 2024 15:01:52 +0100 Subject: [PATCH] Fjern mellomledd for ferdigstilling av sak og oppgave --- .../forespoerselbesvart/App.kt | 11 +-- .../ForespoerselBesvartFraSimbaRiver.kt | 63 -------------- .../ForespoerselBesvartMelding.kt | 18 ---- ...isRiver.kt => ForespoerselBesvartRiver.kt} | 32 ++++--- .../ForespoerselBesvartFraSimbaRiverTest.kt | 43 --------- .../ForespoerselBesvartFraSpleisRiverTest.kt | 45 ---------- .../ForespoerselBesvartRiverTest.kt | 87 +++++++++++++++++++ .../integrasjonstest/ForespoerselBesvartIT.kt | 47 +++------- .../integrasjonstest/InnsendingIT.kt | 23 ++--- .../integrasjonstest/utils/EndToEndTest.kt | 4 +- ...erdigstillForespoerselSakOgOppgaveRiver.kt | 23 +++-- ...gstillForespoerselSakOgOppgaveRiverTest.kt | 68 ++++++++------- 12 files changed, 185 insertions(+), 279 deletions(-) delete mode 100644 forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartFraSimbaRiver.kt delete mode 100644 forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartMelding.kt rename forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/{ForespoerselBesvartFraSpleisRiver.kt => ForespoerselBesvartRiver.kt} (77%) delete mode 100644 forespoersel-besvart/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartFraSimbaRiverTest.kt delete mode 100644 forespoersel-besvart/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartFraSpleisRiverTest.kt create mode 100644 forespoersel-besvart/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartRiverTest.kt diff --git a/forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/App.kt b/forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/App.kt index 1bd119e43..a0fca4f53 100644 --- a/forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/App.kt +++ b/forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/App.kt @@ -11,17 +11,14 @@ fun main() { RapidApplication .create(System.getenv()) - .createForespoerselBesvartRivers() + .createForespoerselBesvartRiver() .start() logger.info("Bye bye, baby, bye bye!") } -fun RapidsConnection.createForespoerselBesvartRivers(): RapidsConnection = +fun RapidsConnection.createForespoerselBesvartRiver(): RapidsConnection = also { - logger.info("Starter ${ForespoerselBesvartFraSimbaRiver::class.simpleName}...") - ForespoerselBesvartFraSimbaRiver().connect(this) - - logger.info("Starter ${ForespoerselBesvartFraSpleisRiver::class.simpleName}...") - ForespoerselBesvartFraSpleisRiver(this).connect(this) + logger.info("Starter ${ForespoerselBesvartRiver::class.simpleName}...") + ForespoerselBesvartRiver(this).connect(this) } diff --git a/forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartFraSimbaRiver.kt b/forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartFraSimbaRiver.kt deleted file mode 100644 index 4f0846040..000000000 --- a/forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartFraSimbaRiver.kt +++ /dev/null @@ -1,63 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.forespoerselbesvart - -import kotlinx.serialization.json.JsonElement -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.toPretty -import no.nav.helsearbeidsgiver.felles.metrics.Metrics -import no.nav.helsearbeidsgiver.felles.rapidsrivers.river.ObjectRiver -import no.nav.helsearbeidsgiver.felles.utils.Log -import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer -import no.nav.helsearbeidsgiver.utils.log.logger -import no.nav.helsearbeidsgiver.utils.log.sikkerLogger -import java.util.UUID - -data class BesvartSimbaMelding( - val eventName: EventName, - val transaksjonId: UUID, - val forespoerselId: UUID, -) - -class ForespoerselBesvartFraSimbaRiver : ObjectRiver() { - private val logger = logger() - private val sikkerLogger = sikkerLogger() - - override fun les(json: Map): BesvartSimbaMelding? = - if (setOf(Key.BEHOV, Key.DATA, Key.FAIL).any(json::containsKey)) { - null - } else { - BesvartSimbaMelding( - eventName = Key.EVENT_NAME.krev(EventName.INNTEKTSMELDING_MOTTATT, EventName.serializer(), json), - transaksjonId = Key.UUID.les(UuidSerializer, json), - forespoerselId = Key.FORESPOERSEL_ID.les(UuidSerializer, json), - ) - } - - override fun BesvartSimbaMelding.haandter(json: Map): Map { - Metrics.forespoerslerBesvartFraSimba.inc() - - return forespoerselBesvartMelding(transaksjonId, forespoerselId) - } - - override fun BesvartSimbaMelding.haandterFeil( - json: Map, - error: Throwable, - ): Map? { - "Klarte ikke umiddelbart markere forespørsel som besvart. Event fra helsebro skal løse dette.".also { - logger.error(it) - sikkerLogger.error("$it Aktuell melding:\n${json.toPretty()}") - } - - return null - } - - override fun BesvartSimbaMelding.loggfelt(): Map = - mapOf( - Log.klasse(this@ForespoerselBesvartFraSimbaRiver), - Log.event(eventName), - Log.transaksjonId(transaksjonId), - Log.forespoerselId(forespoerselId), - ) -} diff --git a/forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartMelding.kt b/forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartMelding.kt deleted file mode 100644 index b9c28490a..000000000 --- a/forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartMelding.kt +++ /dev/null @@ -1,18 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.forespoerselbesvart - -import kotlinx.serialization.json.JsonElement -import no.nav.helsearbeidsgiver.felles.EventName -import no.nav.helsearbeidsgiver.felles.Key -import no.nav.helsearbeidsgiver.felles.json.toJson -import no.nav.helsearbeidsgiver.utils.json.toJson -import java.util.UUID - -fun forespoerselBesvartMelding( - transaksjonId: UUID, - forespoerselId: UUID, -): Map = - mapOf( - Key.EVENT_NAME to EventName.FORESPOERSEL_BESVART.toJson(), - Key.UUID to transaksjonId.toJson(), - Key.FORESPOERSEL_ID to forespoerselId.toJson(), - ) diff --git a/forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartFraSpleisRiver.kt b/forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartRiver.kt similarity index 77% rename from forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartFraSpleisRiver.kt rename to forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartRiver.kt index 2f65c5afe..cc12ba863 100644 --- a/forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartFraSpleisRiver.kt +++ b/forespoersel-besvart/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartRiver.kt @@ -14,6 +14,7 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.pritopic.toPretty import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish import no.nav.helsearbeidsgiver.felles.rapidsrivers.river.PriObjectRiver import no.nav.helsearbeidsgiver.felles.utils.Log +import no.nav.helsearbeidsgiver.utils.collection.mapValuesNotNull import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer import no.nav.helsearbeidsgiver.utils.json.toJson import no.nav.helsearbeidsgiver.utils.json.toPretty @@ -22,7 +23,7 @@ import no.nav.helsearbeidsgiver.utils.log.logger import no.nav.helsearbeidsgiver.utils.log.sikkerLogger import java.util.UUID -data class BesvartSpleisMelding( +data class BesvartMelding( val notisType: Pri.NotisType, val transaksjonId: UUID, val forespoerselId: UUID, @@ -30,21 +31,21 @@ data class BesvartSpleisMelding( ) /** Tar imot notifikasjon om at en forespørsel om arbeidsgiveropplysninger er besvart. */ -class ForespoerselBesvartFraSpleisRiver( +class ForespoerselBesvartRiver( private val rapid: RapidsConnection, -) : PriObjectRiver() { +) : PriObjectRiver() { private val logger = logger() private val sikkerLogger = sikkerLogger() - override fun les(json: Map): BesvartSpleisMelding = - BesvartSpleisMelding( + override fun les(json: Map): BesvartMelding = + BesvartMelding( notisType = Pri.Key.NOTIS.krev(Pri.NotisType.FORESPOERSEL_BESVART, Pri.NotisType.serializer(), json), transaksjonId = UUID.randomUUID(), forespoerselId = Pri.Key.FORESPOERSEL_ID.les(UuidSerializer, json), spinnInntektsmeldingId = Pri.Key.SPINN_INNTEKTSMELDING_ID.lesOrNull(UuidSerializer, json), ) - override fun BesvartSpleisMelding.haandter(json: Map): Map { + override fun BesvartMelding.haandter(json: Map): Map { logger.info("Mottok melding på pri-topic om ${Pri.NotisType.FORESPOERSEL_BESVART}.") sikkerLogger.info("Mottok melding på pri-topic:\n${json.toPretty()}") @@ -70,10 +71,21 @@ class ForespoerselBesvartFraSpleisRiver( Metrics.forespoerslerBesvartFraSpleis.inc() - return forespoerselBesvartMelding(transaksjonId, forespoerselId) + return mapOf( + Key.EVENT_NAME to EventName.FORESPOERSEL_BESVART.toJson(), + Key.UUID to transaksjonId.toJson(), + // TODO slett etter overgangsfase + Key.FORESPOERSEL_ID to forespoerselId.toJson(), + Key.DATA to + mapOf( + Key.FORESPOERSEL_ID to forespoerselId.toJson(), + Key.SPINN_INNTEKTSMELDING_ID to spinnInntektsmeldingId?.toJson(), + ).mapValuesNotNull { it } + .toJson(), + ) } - override fun BesvartSpleisMelding.haandterFeil( + override fun BesvartMelding.haandterFeil( json: Map, error: Throwable, ): Map? { @@ -85,9 +97,9 @@ class ForespoerselBesvartFraSpleisRiver( return null } - override fun BesvartSpleisMelding.loggfelt(): Map = + override fun BesvartMelding.loggfelt(): Map = mapOf( - Log.klasse(this@ForespoerselBesvartFraSpleisRiver), + Log.klasse(this@ForespoerselBesvartRiver), Log.priNotis(notisType), Log.transaksjonId(transaksjonId), Log.forespoerselId(forespoerselId), diff --git a/forespoersel-besvart/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartFraSimbaRiverTest.kt b/forespoersel-besvart/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartFraSimbaRiverTest.kt deleted file mode 100644 index 8da7e6791..000000000 --- a/forespoersel-besvart/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartFraSimbaRiverTest.kt +++ /dev/null @@ -1,43 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.forespoerselbesvart - -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.maps.shouldContainExactly -import io.mockk.clearAllMocks -import no.nav.helsearbeidsgiver.felles.EventName -import no.nav.helsearbeidsgiver.felles.Key -import no.nav.helsearbeidsgiver.felles.json.toJson -import no.nav.helsearbeidsgiver.felles.json.toMap -import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.firstMessage -import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.sendJson -import no.nav.helsearbeidsgiver.utils.json.toJson -import java.util.UUID - -class ForespoerselBesvartFraSimbaRiverTest : - FunSpec({ - val testRapid = TestRapid() - - ForespoerselBesvartFraSimbaRiver().connect(testRapid) - - beforeEach { - testRapid.reset() - clearAllMocks() - } - - test("Ved mottatt inntektsmelding publiseres behov om å hente notifikasjon-ID-er") { - val transaksjonId = UUID.randomUUID() - val forespoerselId = UUID.randomUUID() - val forventetPublisert = forespoerselBesvartMelding(transaksjonId, forespoerselId) - - testRapid.sendJson( - Key.EVENT_NAME to EventName.INNTEKTSMELDING_MOTTATT.toJson(), - Key.UUID to transaksjonId.toJson(), - Key.FORESPOERSEL_ID to forespoerselId.toJson(), - ) - - testRapid.inspektør.size shouldBeExactly 1 - - testRapid.firstMessage().toMap() shouldContainExactly forventetPublisert - } - }) diff --git a/forespoersel-besvart/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartFraSpleisRiverTest.kt b/forespoersel-besvart/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartFraSpleisRiverTest.kt deleted file mode 100644 index 2de304a77..000000000 --- a/forespoersel-besvart/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartFraSpleisRiverTest.kt +++ /dev/null @@ -1,45 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.forespoerselbesvart - -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.maps.shouldContainExactly -import io.kotest.matchers.maps.shouldContainKey -import io.mockk.clearAllMocks -import no.nav.helsearbeidsgiver.felles.Key -import no.nav.helsearbeidsgiver.felles.json.toMap -import no.nav.helsearbeidsgiver.felles.rapidsrivers.pritopic.Pri -import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.firstMessage -import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.sendJson -import no.nav.helsearbeidsgiver.utils.json.toJson -import java.util.UUID - -class ForespoerselBesvartFraSpleisRiverTest : - FunSpec({ - val testRapid = TestRapid() - - ForespoerselBesvartFraSpleisRiver(testRapid).connect(testRapid) - - beforeEach { - testRapid.reset() - clearAllMocks() - } - - test("Ved notis om besvart forespørsel publiseres behov om å hente notifikasjon-ID-er") { - val forespoerselId = UUID.randomUUID() - val forventetPublisert = forespoerselBesvartMelding(UUID.randomUUID(), forespoerselId) - - testRapid.sendJson( - Pri.Key.NOTIS to Pri.NotisType.FORESPOERSEL_BESVART.toJson(Pri.NotisType.serializer()), - Pri.Key.FORESPOERSEL_ID to forespoerselId.toJson(), - ) - - testRapid.inspektør.size shouldBeExactly 1 - - val publisert = testRapid.firstMessage().toMap() - - publisert shouldContainKey Key.UUID - - publisert.minus(Key.UUID) shouldContainExactly forventetPublisert.minus(Key.UUID) - } - }) diff --git a/forespoersel-besvart/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartRiverTest.kt b/forespoersel-besvart/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartRiverTest.kt new file mode 100644 index 000000000..cee2c36dd --- /dev/null +++ b/forespoersel-besvart/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/forespoerselbesvart/ForespoerselBesvartRiverTest.kt @@ -0,0 +1,87 @@ +package no.nav.helsearbeidsgiver.inntektsmelding.forespoerselbesvart + +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.maps.shouldContainExactly +import io.kotest.matchers.maps.shouldContainKey +import io.mockk.clearAllMocks +import no.nav.helsearbeidsgiver.felles.EventName +import no.nav.helsearbeidsgiver.felles.Key +import no.nav.helsearbeidsgiver.felles.json.toJson +import no.nav.helsearbeidsgiver.felles.json.toMap +import no.nav.helsearbeidsgiver.felles.rapidsrivers.pritopic.Pri +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.utils.json.toJson +import java.util.UUID + +class ForespoerselBesvartRiverTest : + FunSpec({ + val testRapid = TestRapid() + + ForespoerselBesvartRiver(testRapid).connect(testRapid) + + beforeEach { + testRapid.reset() + clearAllMocks() + } + + test("Ved notis om besvart forespørsel publiseres behov om å hente notifikasjon-ID-er uten IM-ID fra Spinn") { + val forespoerselId = UUID.randomUUID() + val forventetPublisert = + mapOf( + Key.EVENT_NAME to EventName.FORESPOERSEL_BESVART.toJson(), + Key.UUID to UUID.randomUUID().toJson(), + Key.FORESPOERSEL_ID to forespoerselId.toJson(), + Key.DATA to + mapOf( + Key.FORESPOERSEL_ID to forespoerselId.toJson(), + ).toJson(), + ) + + testRapid.sendJson( + Pri.Key.NOTIS to Pri.NotisType.FORESPOERSEL_BESVART.toJson(Pri.NotisType.serializer()), + Pri.Key.FORESPOERSEL_ID to forespoerselId.toJson(), + ) + + testRapid.inspektør.size shouldBeExactly 1 + + val publisert = testRapid.firstMessage().toMap() + + publisert shouldContainKey Key.UUID + + publisert.minus(Key.UUID) shouldContainExactly forventetPublisert.minus(Key.UUID) + } + + test("Ved notis om besvart forespørsel publiseres behov om å hente notifikasjon-ID-er med IM-ID fra Spinn") { + val forespoerselId = UUID.randomUUID() + val spinnInntektsmeldingId = UUID.randomUUID() + val forventetPublisert = + mapOf( + Key.EVENT_NAME to EventName.FORESPOERSEL_BESVART.toJson(), + Key.UUID to UUID.randomUUID().toJson(), + Key.FORESPOERSEL_ID to forespoerselId.toJson(), + Key.DATA to + mapOf( + Key.FORESPOERSEL_ID to forespoerselId.toJson(), + Key.SPINN_INNTEKTSMELDING_ID to spinnInntektsmeldingId.toJson(), + ).toJson(), + ) + + testRapid.sendJson( + Pri.Key.NOTIS to Pri.NotisType.FORESPOERSEL_BESVART.toJson(Pri.NotisType.serializer()), + Pri.Key.FORESPOERSEL_ID to forespoerselId.toJson(), + Pri.Key.SPINN_INNTEKTSMELDING_ID to spinnInntektsmeldingId.toJson(), + ) + + testRapid.inspektør.size shouldBeExactly 2 + + val publisert = testRapid.message(1).toMap() + + publisert shouldContainKey Key.UUID + + publisert.minus(Key.UUID) shouldContainExactly forventetPublisert.minus(Key.UUID) + } + }) diff --git a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/ForespoerselBesvartIT.kt b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/ForespoerselBesvartIT.kt index 2d58f11ef..21e3435f0 100644 --- a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/ForespoerselBesvartIT.kt +++ b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/ForespoerselBesvartIT.kt @@ -7,7 +7,6 @@ import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key 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.pritopic.Pri import no.nav.helsearbeidsgiver.inntektsmelding.integrasjonstest.utils.EndToEndTest @@ -32,57 +31,31 @@ class ForespoerselBesvartIT : EndToEndTest() { Pri.Key.FORESPOERSEL_ID to Mock.forespoerselId.toJson(), Pri.Key.SPINN_INNTEKTSMELDING_ID to Mock.spinnInntektsmeldingId.toJson(), ) - - bekreftForventedeMeldinger(forventetTransaksjonId = null) - messages - .filter(EventName.EKSTERN_INNTEKTSMELDING_REQUESTED) - .filter(BehovType.HENT_EKSTERN_INNTEKTSMELDING) + .filter(EventName.FORESPOERSEL_BESVART) .firstAsMap() .also { - val data = it[Key.DATA].shouldNotBeNull().toMap() - Key.SPINN_INNTEKTSMELDING_ID.les(UuidSerializer, data) shouldBe Mock.spinnInntektsmeldingId - } - } - - @Test - fun `ved mottatt inntektsmelding så ferdigstilles sak og oppgave`() { - val transaksjonId: UUID = UUID.randomUUID() - - publish( - Key.EVENT_NAME to EventName.INNTEKTSMELDING_MOTTATT.toJson(), - Key.UUID to transaksjonId.toJson(), - Key.FORESPOERSEL_ID to Mock.forespoerselId.toJson(), - ) + it shouldContainKey Key.UUID - bekreftForventedeMeldinger(forventetTransaksjonId = transaksjonId) - } + Key.FORESPOERSEL_ID.les(UuidSerializer, it) shouldBe Mock.forespoerselId + } - private fun bekreftForventedeMeldinger(forventetTransaksjonId: UUID?) { messages - .filter(EventName.FORESPOERSEL_BESVART) + .filter(EventName.SAK_OG_OPPGAVE_FERDIGSTILT) .firstAsMap() .also { - if (forventetTransaksjonId == null) { - it shouldContainKey Key.UUID - } else { - Key.UUID.les(UuidSerializer, it) shouldBe forventetTransaksjonId - } + it shouldContainKey Key.UUID Key.FORESPOERSEL_ID.les(UuidSerializer, it) shouldBe Mock.forespoerselId } messages - .filter(EventName.SAK_OG_OPPGAVE_FERDIGSTILT) + .filter(EventName.EKSTERN_INNTEKTSMELDING_REQUESTED) + .filter(BehovType.HENT_EKSTERN_INNTEKTSMELDING) .firstAsMap() .also { - if (forventetTransaksjonId == null) { - it shouldContainKey Key.UUID - } else { - Key.UUID.les(UuidSerializer, it) shouldBe forventetTransaksjonId - } - - Key.FORESPOERSEL_ID.les(UuidSerializer, it) shouldBe Mock.forespoerselId + val data = it[Key.DATA].shouldNotBeNull().toMap() + Key.SPINN_INNTEKTSMELDING_ID.les(UuidSerializer, data) shouldBe Mock.spinnInntektsmeldingId } } 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 8ee92eed2..e6f90e0f4 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 @@ -116,7 +116,12 @@ class InnsendingIT : EndToEndTest() { it[Key.INNTEKTSMELDING].shouldNotBeNull() } - bekreftForventedeMeldingerForFerdigstilligAvOppgaveOgSak() + messages + .filter(EventName.SAK_OG_OPPGAVE_FERDIGSTILT) + .firstAsMap() + .also { + Key.FORESPOERSEL_ID.les(UuidSerializer, it) shouldBe Mock.forespoerselId + } bekreftMarkeringAvForespoerselSomBesvart() } @@ -191,22 +196,6 @@ class InnsendingIT : EndToEndTest() { messages.filter(EventName.INNTEKTSMELDING_DISTRIBUERT).all() shouldHaveSize 0 } - private fun bekreftForventedeMeldingerForFerdigstilligAvOppgaveOgSak() { - messages - .filter(EventName.FORESPOERSEL_BESVART) - .firstAsMap() - .also { - Key.FORESPOERSEL_ID.les(UuidSerializer, it) shouldBe Mock.forespoerselId - } - - messages - .filter(EventName.SAK_OG_OPPGAVE_FERDIGSTILT) - .firstAsMap() - .also { - Key.FORESPOERSEL_ID.les(UuidSerializer, it) shouldBe Mock.forespoerselId - } - } - private fun bekreftMarkeringAvForespoerselSomBesvart() { verify(exactly = 1) { priProducer.send( 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 8ce56164e..88d345c97 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 @@ -43,7 +43,7 @@ import no.nav.helsearbeidsgiver.inntektsmelding.db.SelvbestemtImRepo import no.nav.helsearbeidsgiver.inntektsmelding.db.createDbRivers import no.nav.helsearbeidsgiver.inntektsmelding.distribusjon.createDistribusjonRiver import no.nav.helsearbeidsgiver.inntektsmelding.feilbehandler.createFeilLytter -import no.nav.helsearbeidsgiver.inntektsmelding.forespoerselbesvart.createForespoerselBesvartRivers +import no.nav.helsearbeidsgiver.inntektsmelding.forespoerselbesvart.createForespoerselBesvartRiver import no.nav.helsearbeidsgiver.inntektsmelding.forespoerselforkastet.createForespoerselForkastetRiver import no.nav.helsearbeidsgiver.inntektsmelding.forespoerselinfotrygd.createForespoerselKastetTilInfotrygdRiver import no.nav.helsearbeidsgiver.inntektsmelding.forespoerselmarkerbesvart.createMarkerForespoerselBesvart @@ -230,7 +230,7 @@ abstract class EndToEndTest : ContainerTest() { createBrregRiver(brregClient, false) createDbRivers(imRepository, selvbestemtImRepo) createDistribusjonRiver(mockk(relaxed = true)) - createForespoerselBesvartRivers() + createForespoerselBesvartRiver() createForespoerselMottattRiver() createForespoerselForkastetRiver() createForespoerselKastetTilInfotrygdRiver() diff --git a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/FerdigstillForespoerselSakOgOppgaveRiver.kt b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/FerdigstillForespoerselSakOgOppgaveRiver.kt index 46dc0872f..e1a5d63a4 100644 --- a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/FerdigstillForespoerselSakOgOppgaveRiver.kt +++ b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/FerdigstillForespoerselSakOgOppgaveRiver.kt @@ -4,9 +4,10 @@ import kotlinx.serialization.json.JsonElement import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.ArbeidsgiverNotifikasjonKlient 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.rapidsrivers.model.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.river.ObjectRiver import no.nav.helsearbeidsgiver.felles.utils.Log @@ -33,14 +34,22 @@ class FerdigstillForespoerselSakOgOppgaveRiver( private val sikkerLogger = sikkerLogger() override fun les(json: Map): FerdigstillForespoerselSakMelding? = - if (setOf(Key.BEHOV, Key.DATA, Key.FAIL).any(json::containsKey)) { + if (setOf(Key.BEHOV, Key.FAIL).any(json::containsKey)) { null } else { - FerdigstillForespoerselSakMelding( - eventName = Key.EVENT_NAME.krev(EventName.FORESPOERSEL_BESVART, EventName.serializer(), json), - transaksjonId = Key.UUID.les(UuidSerializer, json), - forespoerselId = Key.FORESPOERSEL_ID.les(UuidSerializer, json), - ) + val data = json[Key.DATA]?.toMap().orEmpty() + val eventName = Key.EVENT_NAME.les(EventName.serializer(), json) + + // Støtter både inntektmelding mottatt av Simba og event fra Storebror + if (eventName !in setOf(EventName.INNTEKTSMELDING_MOTTATT, EventName.FORESPOERSEL_BESVART)) { + null + } else { + FerdigstillForespoerselSakMelding( + eventName = eventName, + transaksjonId = Key.UUID.les(UuidSerializer, json), + forespoerselId = Key.FORESPOERSEL_ID.lesOrNull(UuidSerializer, json) ?: Key.FORESPOERSEL_ID.les(UuidSerializer, data), + ) + } } override fun FerdigstillForespoerselSakMelding.haandter(json: Map): Map { diff --git a/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/FerdigstillForespoerselSakOgOppgaveRiverTest.kt b/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/FerdigstillForespoerselSakOgOppgaveRiverTest.kt index ecfb01910..29bde4758 100644 --- a/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/FerdigstillForespoerselSakOgOppgaveRiverTest.kt +++ b/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/river/FerdigstillForespoerselSakOgOppgaveRiverTest.kt @@ -41,36 +41,44 @@ class FerdigstillForespoerselSakOgOppgaveRiverTest : clearAllMocks() } - test("sak og oppgave ferdigstilles") { - val innkommendeMelding = innkommendeMelding() - - coEvery { - mockAgNotifikasjonKlient.nyStatusSakByGrupperingsid(any(), NotifikasjonTekst.MERKELAPP, any(), any(), any()) - } just Runs - - coEvery { - mockAgNotifikasjonKlient.oppgaveUtfoertByEksternIdV2(any(), NotifikasjonTekst.MERKELAPP, any()) - } just Runs - - testRapid.sendJson(innkommendeMelding.toMap()) - - testRapid.inspektør.size shouldBeExactly 1 - - testRapid.firstMessage().toMap() shouldContainExactly forventetUtgaaendeMelding(innkommendeMelding) - - coVerifySequence { - mockAgNotifikasjonKlient.nyStatusSakByGrupperingsid( - grupperingsid = innkommendeMelding.forespoerselId.toString(), - merkelapp = "Inntektsmelding sykepenger", - status = SaksStatus.FERDIG, - statusTekst = "Mottatt – Se kvittering eller korriger inntektsmelding", - nyLenke = "$mockLinkUrl/im-dialog/kvittering/${innkommendeMelding.forespoerselId}", - ) - mockAgNotifikasjonKlient.oppgaveUtfoertByEksternIdV2( - eksternId = innkommendeMelding.forespoerselId.toString(), - merkelapp = "Inntektsmelding sykepenger", - nyLenke = "$mockLinkUrl/im-dialog/kvittering/${innkommendeMelding.forespoerselId}", - ) + context("sak og oppgave ferdigstilles") { + withData( + nameFn = { "for event '$it'" }, + listOf( + EventName.INNTEKTSMELDING_MOTTATT, + EventName.FORESPOERSEL_BESVART, + ), + ) { eventName -> + val innkommendeMelding = innkommendeMelding().copy(eventName = eventName) + + coEvery { + mockAgNotifikasjonKlient.nyStatusSakByGrupperingsid(any(), NotifikasjonTekst.MERKELAPP, any(), any(), any()) + } just Runs + + coEvery { + mockAgNotifikasjonKlient.oppgaveUtfoertByEksternIdV2(any(), NotifikasjonTekst.MERKELAPP, any()) + } just Runs + + testRapid.sendJson(innkommendeMelding.toMap()) + + testRapid.inspektør.size shouldBeExactly 1 + + testRapid.firstMessage().toMap() shouldContainExactly forventetUtgaaendeMelding(innkommendeMelding) + + coVerifySequence { + mockAgNotifikasjonKlient.nyStatusSakByGrupperingsid( + grupperingsid = innkommendeMelding.forespoerselId.toString(), + merkelapp = "Inntektsmelding sykepenger", + status = SaksStatus.FERDIG, + statusTekst = "Mottatt – Se kvittering eller korriger inntektsmelding", + nyLenke = "$mockLinkUrl/im-dialog/kvittering/${innkommendeMelding.forespoerselId}", + ) + mockAgNotifikasjonKlient.oppgaveUtfoertByEksternIdV2( + eksternId = innkommendeMelding.forespoerselId.toString(), + merkelapp = "Inntektsmelding sykepenger", + nyLenke = "$mockLinkUrl/im-dialog/kvittering/${innkommendeMelding.forespoerselId}", + ) + } } }