diff --git a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/App.kt b/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/App.kt index 211f6b10e0..9d16c062d2 100644 --- a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/App.kt +++ b/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/App.kt @@ -5,7 +5,6 @@ import no.nav.helse.rapids_rivers.RapidsConnection import no.nav.helsearbeidsgiver.felles.db.exposed.Database import no.nav.helsearbeidsgiver.felles.rapidsrivers.registerShutdownLifecycle import no.nav.helsearbeidsgiver.inntektsmelding.db.river.HentAapenImRiver -import no.nav.helsearbeidsgiver.inntektsmelding.db.river.HentOrgnrLoeser import no.nav.helsearbeidsgiver.inntektsmelding.db.river.HentPersistertLoeser import no.nav.helsearbeidsgiver.inntektsmelding.db.river.LagreAapenImRiver import no.nav.helsearbeidsgiver.inntektsmelding.db.river.LagreEksternInntektsmeldingLoeser @@ -64,9 +63,6 @@ fun RapidsConnection.createDbRivers( logger.info("Starter ${PersisterOppgaveLoeser::class.simpleName}...") PersisterOppgaveLoeser(this, forespoerselRepo) - logger.info("Starter ${HentOrgnrLoeser::class.simpleName}...") - HentOrgnrLoeser(this, forespoerselRepo) - logger.info("Starter ${NotifikasjonHentIdLoeser::class.simpleName}...") NotifikasjonHentIdLoeser(this, forespoerselRepo) diff --git a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/ForespoerselRepository.kt b/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/ForespoerselRepository.kt index 01cb4c3335..6b9be94a9f 100644 --- a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/ForespoerselRepository.kt +++ b/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/ForespoerselRepository.kt @@ -76,18 +76,6 @@ class ForespoerselRepository(private val db: Database) { } } - fun hentOrgnr(forespoerselId: UUID): String? { - val requestTimer = requestLatency.labels("hentOrgnr").startTimer() - return transaction(db) { - ForespoerselEntitet - .selectAll() - .where { ForespoerselEntitet.forespoerselId eq forespoerselId.toString() } - .firstOrNull(ForespoerselEntitet.orgnr) - }.also { - requestTimer.observeDuration() - } - } - fun lagreForespoersel(forespoerselId: String, organisasjonsnummer: String) { val requestTimer = requestLatency.labels("lagreForespoersel").startTimer() transaction(db) { diff --git a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/river/HentOrgnrLoeser.kt b/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/river/HentOrgnrLoeser.kt deleted file mode 100644 index a605d8f7da..0000000000 --- a/db/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/db/river/HentOrgnrLoeser.kt +++ /dev/null @@ -1,172 +0,0 @@ -package no.nav.helsearbeidsgiver.inntektsmelding.db.river - -import kotlinx.serialization.json.JsonElement -import no.nav.helse.rapids_rivers.JsonMessage -import no.nav.helse.rapids_rivers.MessageContext -import no.nav.helse.rapids_rivers.MessageProblems -import no.nav.helse.rapids_rivers.RapidsConnection -import no.nav.helse.rapids_rivers.River -import no.nav.helsearbeidsgiver.felles.BehovType -import no.nav.helsearbeidsgiver.felles.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.demandValues -import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail -import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail.Companion.publish -import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish -import no.nav.helsearbeidsgiver.felles.rapidsrivers.requireKeys -import no.nav.helsearbeidsgiver.felles.utils.Log -import no.nav.helsearbeidsgiver.inntektsmelding.db.ForespoerselRepository -import no.nav.helsearbeidsgiver.utils.json.parseJson -import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer -import no.nav.helsearbeidsgiver.utils.json.toJson -import no.nav.helsearbeidsgiver.utils.json.toPretty -import no.nav.helsearbeidsgiver.utils.log.MdcUtils -import no.nav.helsearbeidsgiver.utils.log.logger -import no.nav.helsearbeidsgiver.utils.log.sikkerLogger -import java.util.UUID - -class HentOrgnrLoeser( - rapid: RapidsConnection, - private val forespoerselRepo: ForespoerselRepository -) : River.PacketListener { - - private val logger = logger() - private val sikkerLogger = sikkerLogger() - - init { - River(rapid).apply { - validate { - it.demandKey(Key.EVENT_NAME.str) - it.demandValues( - Key.BEHOV to BehovType.HENT_IM_ORGNR.name - ) - it.requireKeys( - Key.UUID, - Key.FORESPOERSEL_ID - ) - } - }.register(this) - } - - override fun onPacket(packet: JsonMessage, context: MessageContext) { - val json = packet.toJson().parseJson() - - logger.info("Mottok melding med behov '${BehovType.HENT_IM_ORGNR}'.") - sikkerLogger.info("Mottok melding:\n${json.toPretty()}") - - MdcUtils.withLogFields( - Log.klasse(this), - Log.behov(BehovType.HENT_IM_ORGNR) - ) { - val melding = runCatching { - Melding.fra(json) - } - .onFailure { - sikkerLogger.error("Klarte ikke lese påkrevde felt fra innkommende melding. Publiserer ingen feil.", it) - } - .getOrNull() - - melding?.withLogFields { - runCatching { - hentOrgnr(it, context) - } - .onFailure { feil -> - context.publishFeil("Ukjent feil.", feil, it) - } - } - } - } - - private fun hentOrgnr(melding: Melding, context: MessageContext) { - runCatching { - forespoerselRepo.hentOrgnr(melding.forespoerselId) - } - .onSuccess { orgnr -> - if (orgnr != null) { - context.publishSuksess(orgnr, melding) - } else { - context.publishFeil("Fant ingen orgnr for forespørsel-ID '${melding.forespoerselId}'.", null, melding) - } - } - .onFailure { feil -> - context.publishFeil("Klarte ikke hente lagret orgnr for forespørsel-ID '${melding.forespoerselId}'.", feil, melding) - } - } - - private fun MessageContext.publishSuksess(orgnr: String, melding: Melding) { - "Fant orgnr.".also { - logger.info(it) - sikkerLogger.info("$it orgnr='$orgnr'") - } - - publish( - Key.EVENT_NAME to melding.event.toJson(), - Key.DATA to "".toJson(), - Key.UUID to melding.transaksjonId.toJson(), - Key.FORESPOERSEL_ID to melding.forespoerselId.toJson(), - Key.ORGNRUNDERENHET to orgnr.toJson() - ) - .also { - logger.info("Publiserte data for '${BehovType.HENT_IM_ORGNR}'.") - sikkerLogger.info("Publiserte data:\n${it.toPretty()}") - } - } - - private fun MessageContext.publishFeil(feilmelding: String, feil: Throwable?, melding: Melding) { - logger.error("$feilmelding Se sikker logg for mer info.") - sikkerLogger.error(feilmelding, feil) - - val fail = Fail( - feilmelding = feilmelding, - event = melding.event, - transaksjonId = melding.transaksjonId, - forespoerselId = melding.forespoerselId, - utloesendeMelding = melding.json - ) - - publish(fail) - .also { - logger.error("Publiserte feil for ${BehovType.HENT_IM_ORGNR}.") - sikkerLogger.error("Publiserte feil:\n${it.toPretty()}") - } - } - - override fun onError(problems: MessageProblems, context: MessageContext) { - "Innkommende melding har feil.".let { - logger.error("$it Se sikker logg for mer info.") - sikkerLogger.error("$it Detaljer:\n${problems.toExtendedReport()}") - } - } -} - -private data class Melding( - val event: EventName, - val transaksjonId: UUID, - val forespoerselId: UUID, - val json: JsonElement -) { - companion object { - fun fra(json: JsonElement): Melding = - json.toMap().let { - Melding( - event = Key.EVENT_NAME.les(EventName.serializer(), it), - transaksjonId = Key.UUID.les(UuidSerializer, it), - forespoerselId = Key.FORESPOERSEL_ID.les(UuidSerializer, it), - json = json - ) - } - } - - fun withLogFields(block: (Melding) -> Unit) { - MdcUtils.withLogFields( - Log.event(event), - Log.transaksjonId(transaksjonId), - Log.forespoerselId(forespoerselId) - ) { - block(this) - } - } -} diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/EventTypes.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/EventTypes.kt index 20a395d458..ec69395fdd 100644 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/EventTypes.kt +++ b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/EventTypes.kt @@ -31,7 +31,6 @@ enum class BehovType { OPPRETT_AAPEN_SAK, - HENT_IM_ORGNR, HENT_EKSTERN_INNTEKTSMELDING, LAGRE_EKSTERN_INNTEKTSMELDING, TRENGER_FORESPØRSEL diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/DataFields.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/DataFields.kt deleted file mode 100644 index 66cafe1df2..0000000000 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/DataFields.kt +++ /dev/null @@ -1,6 +0,0 @@ -package no.nav.helsearbeidsgiver.felles.rapidsrivers - -class DataFields { - val IN: List = mutableListOf() - val OUT: List = mutableListOf() -} diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/InputFelter.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/InputFelter.kt deleted file mode 100644 index 6a399dd4fc..0000000000 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/InputFelter.kt +++ /dev/null @@ -1,19 +0,0 @@ -package no.nav.helsearbeidsgiver.felles.rapidsrivers - -import jdk.jfr.Experimental - -@Experimental -class InputFelter { - lateinit var IN: List - lateinit var OUT: List - - fun IN(IN: List): InputFelter { - this.IN = IN - return this - } - - fun OUT(OUT: List): InputFelter { - this.OUT = OUT - return this - } -} diff --git a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TilgangskontrollIT.kt b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TilgangskontrollIT.kt index 1aac931b07..ec6afe555f 100644 --- a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TilgangskontrollIT.kt +++ b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TilgangskontrollIT.kt @@ -2,14 +2,20 @@ package no.nav.helsearbeidsgiver.inntektsmelding.integrasjonstest import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe +import io.mockk.clearAllMocks import io.mockk.coEvery +import io.mockk.every +import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.Tilgang -import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail +import no.nav.helsearbeidsgiver.felles.json.lesOrNull +import no.nav.helsearbeidsgiver.felles.test.mock.mockTrengerInntekt +import no.nav.helsearbeidsgiver.felles.utils.randomUuid import no.nav.helsearbeidsgiver.inntektsmelding.integrasjonstest.utils.EndToEndTest import no.nav.helsearbeidsgiver.utils.json.fromJson -import org.junit.jupiter.api.BeforeAll +import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer +import no.nav.helsearbeidsgiver.utils.test.mock.mockStatic import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.TestInstance @@ -18,14 +24,10 @@ import java.util.UUID @TestInstance(TestInstance.Lifecycle.PER_CLASS) class TilgangskontrollIT : EndToEndTest() { - @BeforeAll - fun beforeAll() { - forespoerselRepository.lagreForespoersel(Mock.forespoerselIdMedTilgang.toString(), Mock.ORGNR_MED_TILGANG) - forespoerselRepository.lagreForespoersel(Mock.forespoerselIdUtenTilgang.toString(), Mock.ORGNR_UTEN_TILGANG) - } - @BeforeEach fun beforeEach() { + clearAllMocks() + coEvery { altinnClient.harRettighetForOrganisasjon(Mock.INNLOGGET_FNR, Mock.ORGNR_MED_TILGANG) } returns true @@ -37,9 +39,32 @@ class TilgangskontrollIT : EndToEndTest() { @Test fun `forespoersel - skal få tilgang`() { - tilgangProducer.publishForespoerselId(Mock.forespoerselIdMedTilgang, Mock.INNLOGGET_FNR) + val transaksjonId: UUID = UUID.randomUUID() - Thread.sleep(6000) + mockForespoerselSvarFraHelsebro( + eventName = EventName.TILGANG_FORESPOERSEL_REQUESTED, + transaksjonId = transaksjonId, + forespoerselId = Mock.forespoerselId, + forespoersel = mockTrengerInntekt().copy( + orgnr = Mock.ORGNR_MED_TILGANG + ) + ) + + mockStatic(::randomUuid) { + every { randomUuid() } returns transaksjonId + + tilgangProducer.publishForespoerselId(Mock.forespoerselId, Mock.INNLOGGET_FNR) + + Thread.sleep(6000) + } + + messages.filter(EventName.TILGANG_FORESPOERSEL_REQUESTED) + .filter(BehovType.HENT_TRENGER_IM) + .firstAsMap() + .also { + Key.UUID.lesOrNull(UuidSerializer, it) shouldBe transaksjonId + Key.FORESPOERSEL_ID.lesOrNull(UuidSerializer, it) shouldBe Mock.forespoerselId + } val result = messages.filter(EventName.TILGANG_FORESPOERSEL_REQUESTED) .filter(Key.TILGANG) @@ -54,9 +79,24 @@ class TilgangskontrollIT : EndToEndTest() { @Test fun `forespoersel - skal bli nektet tilgang`() { - tilgangProducer.publishForespoerselId(Mock.forespoerselIdUtenTilgang, Mock.INNLOGGET_FNR) + val transaksjonId: UUID = UUID.randomUUID() - Thread.sleep(4000) + mockForespoerselSvarFraHelsebro( + eventName = EventName.TILGANG_FORESPOERSEL_REQUESTED, + transaksjonId = transaksjonId, + forespoerselId = Mock.forespoerselId, + forespoersel = mockTrengerInntekt().copy( + orgnr = Mock.ORGNR_UTEN_TILGANG + ) + ) + + mockStatic(::randomUuid) { + every { randomUuid() } returns transaksjonId + + tilgangProducer.publishForespoerselId(Mock.forespoerselId, Mock.INNLOGGET_FNR) + + Thread.sleep(4000) + } val result = messages.filter(EventName.TILGANG_FORESPOERSEL_REQUESTED) .filter(Key.TILGANG) @@ -69,22 +109,6 @@ class TilgangskontrollIT : EndToEndTest() { tilgang shouldBe Tilgang.IKKE_TILGANG } - @Test - fun `forespoersel - skal få melding om at forespørsel ikke finnes`() { - tilgangProducer.publishForespoerselId(Mock.forespoerselIdFinnesIkke, Mock.INNLOGGET_FNR) - - Thread.sleep(4000) - - val fail = messages.filter(EventName.TILGANG_FORESPOERSEL_REQUESTED) - .filterFeil() - .firstAsMap() - .get(Key.FAIL) - .shouldNotBeNull() - .fromJson(Fail.serializer()) - - fail.feilmelding shouldBe "Fant ingen orgnr for forespørsel-ID '${Mock.forespoerselIdFinnesIkke}'." - } - @Test fun `organisasjon - skal få tilgang`() { tilgangProducer.publishOrgnr(Mock.ORGNR_MED_TILGANG, Mock.INNLOGGET_FNR) @@ -125,8 +149,6 @@ class TilgangskontrollIT : EndToEndTest() { const val ORGNR_MED_TILGANG = "654654654" const val ORGNR_UTEN_TILGANG = "789789789" - val forespoerselIdMedTilgang: UUID = UUID.randomUUID() - val forespoerselIdUtenTilgang: UUID = UUID.randomUUID() - val forespoerselIdFinnesIkke: UUID = UUID.randomUUID() + val forespoerselId: UUID = UUID.randomUUID() } } diff --git a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TrengerIT.kt b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TrengerIT.kt index e16b9c1c2b..a2ef91c686 100644 --- a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TrengerIT.kt +++ b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/TrengerIT.kt @@ -2,18 +2,20 @@ package no.nav.helsearbeidsgiver.inntektsmelding.integrasjonstest import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe +import io.mockk.every import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.TrengerData -import no.nav.helsearbeidsgiver.felles.TrengerInntekt import no.nav.helsearbeidsgiver.felles.json.toJson import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey import no.nav.helsearbeidsgiver.felles.test.mock.mockTrengerInntekt +import no.nav.helsearbeidsgiver.felles.utils.randomUuid import no.nav.helsearbeidsgiver.inntektsmelding.integrasjonstest.utils.EndToEndTest import no.nav.helsearbeidsgiver.utils.json.fromJson import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer import no.nav.helsearbeidsgiver.utils.json.toJson +import no.nav.helsearbeidsgiver.utils.test.mock.mockStatic import org.junit.jupiter.api.Test import org.junit.jupiter.api.TestInstance import java.util.UUID @@ -23,41 +25,34 @@ class TrengerIT : EndToEndTest() { @Test fun `Test trengerIM meldingsflyt`() { - var transactionId: UUID + val transaksjonId: UUID = UUID.randomUUID() - publish( - Key.EVENT_NAME to EventName.TRENGER_REQUESTED.toJson(), - Key.CLIENT_ID to Mock.clientId.toJson(UuidSerializer), - Key.ARBEIDSGIVER_ID to "12345678910".toJson(), - Key.FORESPOERSEL_ID to Mock.forespoerselId.toJson(UuidSerializer) + mockForespoerselSvarFraHelsebro( + eventName = EventName.TRENGER_REQUESTED, + transaksjonId = transaksjonId, + forespoerselId = Mock.forespoerselId, + forespoersel = mockTrengerInntekt() ) - waitForMessages(10000) + mockStatic(::randomUuid) { + every { randomUuid() } returns transaksjonId - messages.filter(EventName.TRENGER_REQUESTED) - .filter(BehovType.HENT_TRENGER_IM) - .firstAsMap() - .let { - // Ble lagret i databasen - transactionId = it[Key.UUID].shouldNotBeNull().fromJson(UuidSerializer) - } - - publish( - Key.EVENT_NAME to EventName.TRENGER_REQUESTED.toJson(), - Key.DATA to "".toJson(), - Key.UUID to transactionId.toJson(), - Key.FORESPOERSEL_ID to Mock.forespoerselId.toJson(UuidSerializer), - Key.FORESPOERSEL_SVAR to mockTrengerInntekt().toJson(TrengerInntekt.serializer()) - ) + publish( + Key.EVENT_NAME to EventName.TRENGER_REQUESTED.toJson(), + Key.CLIENT_ID to Mock.clientId.toJson(UuidSerializer), + Key.ARBEIDSGIVER_ID to "12345678910".toJson(), + Key.FORESPOERSEL_ID to Mock.forespoerselId.toJson(UuidSerializer) + ) - waitForMessages(12000) + waitForMessages(10000) + } messages.filter(EventName.TRENGER_REQUESTED) .filter(BehovType.HENT_TRENGER_IM) .firstAsMap() .let { // Ble lagret i databasen - it[Key.UUID]?.fromJson(UuidSerializer) shouldBe transactionId + it[Key.UUID]?.fromJson(UuidSerializer) shouldBe transaksjonId } messages.filter(EventName.TRENGER_REQUESTED) @@ -65,7 +60,7 @@ class TrengerIT : EndToEndTest() { .firstAsMap() .let { // Ble lagret i databasen - it[Key.UUID]?.fromJson(UuidSerializer) shouldBe transactionId + it[Key.UUID]?.fromJson(UuidSerializer) shouldBe transaksjonId } messages.filter(EventName.TRENGER_REQUESTED) @@ -73,7 +68,7 @@ class TrengerIT : EndToEndTest() { .firstAsMap() .let { // Ble lagret i databasen - it[Key.UUID]?.fromJson(UuidSerializer) shouldBe transactionId + it[Key.UUID]?.fromJson(UuidSerializer) shouldBe transaksjonId } messages.filter(EventName.TRENGER_REQUESTED) @@ -81,7 +76,7 @@ class TrengerIT : EndToEndTest() { .firstAsMap() .let { // Ble lagret i databasen - it[Key.UUID]?.fromJson(UuidSerializer) shouldBe transactionId + it[Key.UUID]?.fromJson(UuidSerializer) shouldBe transaksjonId } val trengerData = redisStore.get(RedisKey.of(Mock.clientId))?.fromJson(TrengerData.serializer()) 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 c686b73eb0..cafda94a96 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 @@ -18,8 +18,11 @@ import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.ArbeidsgiverNotifikasjo import no.nav.helsearbeidsgiver.brreg.BrregClient import no.nav.helsearbeidsgiver.brreg.Virksomhet import no.nav.helsearbeidsgiver.dokarkiv.DokArkivClient +import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key +import no.nav.helsearbeidsgiver.felles.TrengerInntekt import no.nav.helsearbeidsgiver.felles.db.exposed.Database +import no.nav.helsearbeidsgiver.felles.json.toJson import no.nav.helsearbeidsgiver.felles.rapidsrivers.pritopic.Pri import no.nav.helsearbeidsgiver.felles.rapidsrivers.pritopic.PriProducer import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish @@ -54,7 +57,9 @@ import no.nav.helsearbeidsgiver.inntektsmelding.trengerservice.createTrengerServ import no.nav.helsearbeidsgiver.pdl.PdlClient import no.nav.helsearbeidsgiver.pdl.domene.FullPerson import no.nav.helsearbeidsgiver.pdl.domene.PersonNavn +import no.nav.helsearbeidsgiver.utils.json.fromJson import no.nav.helsearbeidsgiver.utils.json.parseJson +import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer import no.nav.helsearbeidsgiver.utils.json.toJson import no.nav.helsearbeidsgiver.utils.log.logger import no.nav.helsearbeidsgiver.utils.test.date.august @@ -65,6 +70,7 @@ import org.junit.jupiter.api.AfterAll import org.junit.jupiter.api.BeforeAll import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.TestInstance +import java.util.UUID import kotlin.concurrent.thread import kotlin.io.path.Path import kotlin.io.path.absolutePathString @@ -260,6 +266,32 @@ abstract class EndToEndTest : ContainerTest(), RapidsConnection.MessageListener } } + fun mockForespoerselSvarFraHelsebro( + eventName: EventName, + transaksjonId: UUID, + forespoerselId: UUID, + forespoersel: TrengerInntekt + ) { + every { + mockPriProducer.send( + *varargAny { (key, value) -> + key == Pri.Key.BEHOV && + runCatching { value.fromJson(Pri.BehovType.serializer()) }.getOrNull() == Pri.BehovType.TRENGER_FORESPØRSEL + } + ) + } answers { + publish( + Key.EVENT_NAME to eventName.toJson(), + Key.UUID to transaksjonId.toJson(), + Key.FORESPOERSEL_ID to forespoerselId.toJson(UuidSerializer), + Key.DATA to "".toJson(), + Key.FORESPOERSEL_SVAR to forespoersel.toJson(TrengerInntekt.serializer()) + ) + + Result.success(JsonObject(emptyMap())) + } + } + fun truncateDatabase() { transaction(inntektsmeldingDatabase.db) { exec("SELECT truncate_tables()") diff --git a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/MessagesTest.kt b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/MessagesTest.kt index 61b009adff..f4ab34af95 100644 --- a/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/MessagesTest.kt +++ b/integrasjonstest/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/integrasjonstest/utils/MessagesTest.kt @@ -50,7 +50,7 @@ class MessagesTest : FunSpec({ } test("finner ikke manglende melding for behov") { - Mock.meldingerMedBehov.filter(BehovType.HENT_IM_ORGNR) + Mock.meldingerMedBehov.filter(BehovType.HENT_EKSTERN_INNTEKTSMELDING) .all() .shouldBeEmpty() } diff --git a/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/TilgangForespoerselService.kt b/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/TilgangForespoerselService.kt index 6e65e728d0..124ef3bbc7 100644 --- a/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/TilgangForespoerselService.kt +++ b/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/TilgangForespoerselService.kt @@ -10,6 +10,7 @@ import no.nav.helsearbeidsgiver.felles.Feilmelding import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.Tilgang import no.nav.helsearbeidsgiver.felles.TilgangData +import no.nav.helsearbeidsgiver.felles.TrengerInntekt import no.nav.helsearbeidsgiver.felles.json.les import no.nav.helsearbeidsgiver.felles.json.lesOrNull import no.nav.helsearbeidsgiver.felles.json.toJson @@ -46,7 +47,7 @@ class TilgangForespoerselService( Key.FNR ) override val dataKeys = listOf( - Key.ORGNRUNDERENHET, + Key.FORESPOERSEL_SVAR, Key.TILGANG ) @@ -68,13 +69,13 @@ class TilgangForespoerselService( ) { rapid.publish( Key.EVENT_NAME to event.toJson(), - Key.BEHOV to BehovType.HENT_IM_ORGNR.toJson(), + Key.BEHOV to BehovType.HENT_TRENGER_IM.toJson(), Key.UUID to transaksjonId.toJson(), Key.FORESPOERSEL_ID to forespoerselId.toJson() ) .also { MdcUtils.withLogFields( - Log.behov(BehovType.HENT_IM_ORGNR) + Log.behov(BehovType.HENT_TRENGER_IM) ) { sikkerLogger.info("Publiserte melding:\n${it.toPretty()}.") } @@ -92,17 +93,17 @@ class TilgangForespoerselService( Log.transaksjonId(transaksjonId), Log.forespoerselId(forespoerselId) ) { - if (Key.ORGNRUNDERENHET in melding) { - val orgnr = Key.ORGNRUNDERENHET.les(String.serializer(), melding) - val fnr = Key.FNR.les(String.serializer(), melding) + if (Key.FORESPOERSEL_SVAR in melding) { + val forespoersel = Key.FORESPOERSEL_SVAR.les(TrengerInntekt.serializer(), melding) + val avsenderFnr = Key.FNR.les(String.serializer(), melding) rapid.publish( Key.EVENT_NAME to event.toJson(), Key.BEHOV to BehovType.TILGANGSKONTROLL.toJson(), Key.UUID to transaksjonId.toJson(), Key.FORESPOERSEL_ID to forespoerselId.toJson(), - Key.ORGNRUNDERENHET to orgnr.toJson(), - Key.FNR to fnr.toJson() + Key.ORGNRUNDERENHET to forespoersel.orgnr.toJson(), + Key.FNR to avsenderFnr.toJson() ) .also { MdcUtils.withLogFields( @@ -152,7 +153,7 @@ class TilgangForespoerselService( val utloesendeBehov = Key.BEHOV.lesOrNull(BehovType.serializer(), fail.utloesendeMelding.toMap()) val manglendeDatafelt = when (utloesendeBehov) { - BehovType.HENT_IM_ORGNR -> Key.ORGNRUNDERENHET + BehovType.HENT_TRENGER_IM -> Key.FORESPOERSEL_SVAR BehovType.TILGANGSKONTROLL -> Key.TILGANG else -> null }