Skip to content

Commit

Permalink
Fjern client-ID fra service river (#551)
Browse files Browse the repository at this point in the history
  • Loading branch information
bjerga authored Jun 7, 2024
1 parent e0d685e commit 16665bd
Show file tree
Hide file tree
Showing 16 changed files with 158 additions and 345 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.json.toJson
import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish
import no.nav.helsearbeidsgiver.felles.utils.Log
import no.nav.helsearbeidsgiver.felles.utils.randomUuid
import no.nav.helsearbeidsgiver.inntektsmelding.api.logger
import no.nav.helsearbeidsgiver.inntektsmelding.api.sikkerLogger
import no.nav.helsearbeidsgiver.utils.json.toJson
Expand All @@ -24,16 +23,16 @@ class InntektSelvbestemtProducer(
}

fun publish(request: InntektSelvbestemtRequest): UUID {
val clientId = randomUuid()
val transaksjonId = UUID.randomUUID()

MdcUtils.withLogFields(
Log.klasse(this),
Log.event(EventName.INNTEKT_SELVBESTEMT_REQUESTED),
Log.clientId(clientId)
Log.transaksjonId(transaksjonId)
) {
rapid.publish(
Key.EVENT_NAME to EventName.INNTEKT_SELVBESTEMT_REQUESTED.toJson(),
Key.CLIENT_ID to clientId.toJson(),
Key.UUID to transaksjonId.toJson(),
Key.FNR to request.sykmeldtFnr.toJson(Fnr.serializer()),
Key.ORGNRUNDERENHET to request.orgnr.toJson(Orgnr.serializer()),
Key.SKJAERINGSTIDSPUNKT to request.inntektsdato.toJson()
Expand All @@ -46,6 +45,6 @@ class InntektSelvbestemtProducer(
}
}

return clientId
return transaksjonId
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ fun Route.inntektSelvbestemtRoute(
}

try {
val clientId = inntektSelvbestemtProducer.publish(request)
val transaksjonId = inntektSelvbestemtProducer.publish(request)

val resultatJson = redisPoller.hent(clientId).fromJson(ResultJson.serializer())
val resultatJson = redisPoller.hent(transaksjonId).fromJson(ResultJson.serializer())
sikkerLogger.info("Fikk inntektsresultat for selvbestemt inntektsmelding:\n$resultatJson")

val resultat = resultatJson.success?.fromJson(Inntekt.serializer())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,19 @@ class TrengerProducer(
}

fun publish(request: HentForespoerselRequest, arbeidsgiverFnr: String): UUID {
val clientId = UUID.randomUUID()
val transaksjonId = UUID.randomUUID()

rapid.publish(
Key.EVENT_NAME to EventName.TRENGER_REQUESTED.toJson(EventName.serializer()),
Key.CLIENT_ID to clientId.toString().toJson(),
Key.UUID to transaksjonId.toString().toJson(),
Key.FORESPOERSEL_ID to request.uuid.toJson(),
Key.ARBEIDSGIVER_ID to arbeidsgiverFnr.toJson()
)
.also {
logger.info("Publiserte trenger behov med clientId=$clientId")
sikkerLogger.info("Publiserte trenger behov med clientId=$clientId json=${it.toPretty()}")
logger.info("Publiserte trenger behov med transaksjonId=$transaksjonId")
sikkerLogger.info("Publiserte trenger behov med transaksjonId=$transaksjonId json=${it.toPretty()}")
}

return clientId
return transaksjonId
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,9 @@ fun Route.trengerRoute(

val arbeidsgiverFnr = call.request.lesFnrFraAuthToken()

val clientId = trengerProducer.publish(request, arbeidsgiverFnr)
val transaksjonId = trengerProducer.publish(request, arbeidsgiverFnr)

val resultatJson = redisPoller.hent(clientId).fromJson(ResultJson.serializer())
val resultatJson = redisPoller.hent(transaksjonId).fromJson(ResultJson.serializer())

sikkerLogger.info("Hentet forespørsel: $resultatJson")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,42 +3,33 @@ package no.nav.helsearbeidsgiver.inntektsmelding.api.inntektselvbestemt
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.ints.shouldBeExactly
import io.kotest.matchers.maps.shouldContainExactly
import io.mockk.every
import no.nav.helse.rapids_rivers.testsupport.TestRapid
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.utils.randomUuid
import no.nav.helsearbeidsgiver.utils.json.toJson
import no.nav.helsearbeidsgiver.utils.test.date.april
import no.nav.helsearbeidsgiver.utils.test.mock.mockStatic
import no.nav.helsearbeidsgiver.utils.test.wrapper.genererGyldig
import no.nav.helsearbeidsgiver.utils.wrapper.Fnr
import no.nav.helsearbeidsgiver.utils.wrapper.Orgnr
import java.util.UUID

class InntektSelvbestemtProducerTest : FunSpec({
val testRapid = TestRapid()
val producer = InntektSelvbestemtProducer(testRapid)

test("publiserer melding på forventet format") {
val clientId = UUID.randomUUID()
val sykmeldtFnr = Fnr.genererGyldig()
val orgnr = Orgnr.genererGyldig()
val inntektsdato = 12.april

mockStatic(::randomUuid) {
every { randomUuid() } returns clientId

producer.publish(InntektSelvbestemtRequest(sykmeldtFnr, orgnr, inntektsdato))
}
val transaksjonId = producer.publish(InntektSelvbestemtRequest(sykmeldtFnr, orgnr, inntektsdato))

testRapid.inspektør.size shouldBeExactly 1
testRapid.firstMessage().toMap() shouldContainExactly mapOf(
Key.EVENT_NAME to EventName.INNTEKT_SELVBESTEMT_REQUESTED.toJson(),
Key.CLIENT_ID to clientId.toJson(),
Key.UUID to transaksjonId.toJson(),
Key.FNR to sykmeldtFnr.toJson(Fnr.serializer()),
Key.ORGNRUNDERENHET to orgnr.toJson(Orgnr.serializer()),
Key.SKJAERINGSTIDSPUNKT to inntektsdato.toJson()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ class InntektSelvbestemtRouteKtTest : ApiTest() {

@Test
fun `gi OK med inntekt`() = testApi {
val mockClientId = UUID.randomUUID()
val mockTransaksjonId = UUID.randomUUID()
val expectedInntekt = Mock.inntekt

mockTilgang(Tilgang.HAR_TILGANG)

coEvery { mockRedisPoller.hent(mockClientId) } returns Mock.successResult(expectedInntekt)
coEvery { mockRedisPoller.hent(mockTransaksjonId) } returns Mock.successResult(expectedInntekt)

val response = mockConstructor(InntektSelvbestemtProducer::class) {
every { anyConstructed<InntektSelvbestemtProducer>().publish(any()) } returns mockClientId
every { anyConstructed<InntektSelvbestemtProducer>().publish(any()) } returns mockTransaksjonId

post(PATH, Mock.request, InntektSelvbestemtRequest.serializer())
}
Expand All @@ -74,15 +74,15 @@ class InntektSelvbestemtRouteKtTest : ApiTest() {

@Test
fun `feilresultat gir 500-feil`() = testApi {
val mockClientId = UUID.randomUUID()
val mockTransaksjonId = UUID.randomUUID()
val expectedFeilmelding = "Du får vente til freddan'!"

mockTilgang(Tilgang.HAR_TILGANG)

coEvery { mockRedisPoller.hent(mockClientId) } returns Mock.failureResult(expectedFeilmelding)
coEvery { mockRedisPoller.hent(mockTransaksjonId) } returns Mock.failureResult(expectedFeilmelding)

val response = mockConstructor(InntektSelvbestemtProducer::class) {
every { anyConstructed<InntektSelvbestemtProducer>().publish(any()) } returns mockClientId
every { anyConstructed<InntektSelvbestemtProducer>().publish(any()) } returns mockTransaksjonId

post(PATH, Mock.request, InntektSelvbestemtRequest.serializer())
}
Expand All @@ -95,15 +95,15 @@ class InntektSelvbestemtRouteKtTest : ApiTest() {

@Test
fun `timeout mot redis gir 500-feil`() = testApi {
val mockClientId = UUID.randomUUID()
val mockTransaksjonId = UUID.randomUUID()
val expectedFeilJson = RedisTimeoutResponse().toJsonStr(RedisTimeoutResponse.serializer())

mockTilgang(Tilgang.HAR_TILGANG)

coEvery { mockRedisPoller.hent(mockClientId) } throws RedisPollerTimeoutException(UUID.randomUUID())
coEvery { mockRedisPoller.hent(mockTransaksjonId) } throws RedisPollerTimeoutException(UUID.randomUUID())

val response = mockConstructor(InntektSelvbestemtProducer::class) {
every { anyConstructed<InntektSelvbestemtProducer>().publish(any()) } returns mockClientId
every { anyConstructed<InntektSelvbestemtProducer>().publish(any()) } returns mockTransaksjonId

post(PATH, Mock.request, InntektSelvbestemtRequest.serializer())
}
Expand All @@ -116,15 +116,15 @@ class InntektSelvbestemtRouteKtTest : ApiTest() {

@Test
fun `ukjent feil mot redis gir 500-feil`() = testApi {
val mockClientId = UUID.randomUUID()
val mockTransaksjonId = UUID.randomUUID()
val expectedFeilJson = "Error 500: java.lang.IllegalStateException".toJsonStr(String.serializer())

mockTilgang(Tilgang.HAR_TILGANG)

coEvery { mockRedisPoller.hent(mockClientId) } throws IllegalStateException()
coEvery { mockRedisPoller.hent(mockTransaksjonId) } throws IllegalStateException()

val response = mockConstructor(InntektSelvbestemtProducer::class) {
every { anyConstructed<InntektSelvbestemtProducer>().publish(any()) } returns mockClientId
every { anyConstructed<InntektSelvbestemtProducer>().publish(any()) } returns mockTransaksjonId

post(PATH, Mock.request, InntektSelvbestemtRequest.serializer())
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package no.nav.helsearbeidsgiver.inntektsmelding.api.trenger

import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.ints.shouldBeExactly
import io.kotest.matchers.maps.shouldContainExactly
import no.nav.helse.rapids_rivers.testsupport.TestRapid
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.utils.json.toJson
import no.nav.helsearbeidsgiver.utils.test.wrapper.genererGyldig
import no.nav.helsearbeidsgiver.utils.wrapper.Fnr
import java.util.UUID

class TrengerProducerTest : FunSpec({
val testRapid = TestRapid()
val producer = TrengerProducer(testRapid)

test("publiserer melding på forventet format") {
val forespoerselId = UUID.randomUUID()
val avsenderFnr = Fnr.genererGyldig().verdi

val transaksjonId = producer.publish(HentForespoerselRequest(forespoerselId), avsenderFnr)

testRapid.inspektør.size shouldBeExactly 1
testRapid.firstMessage().toMap() shouldContainExactly mapOf(
Key.EVENT_NAME to EventName.TRENGER_REQUESTED.toJson(),
Key.UUID to transaksjonId.toJson(),
Key.FORESPOERSEL_ID to forespoerselId.toJson(),
Key.ARBEIDSGIVER_ID to avsenderFnr.toJson()
)
}
})
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import no.nav.helsearbeidsgiver.felles.Tilgang
import no.nav.helsearbeidsgiver.felles.TilgangResultat
import no.nav.helsearbeidsgiver.felles.test.mock.mockForespurtData
import no.nav.helsearbeidsgiver.felles.test.mock.mockForespurtDataMedForrigeInntekt
import no.nav.helsearbeidsgiver.felles.utils.randomUuid
import no.nav.helsearbeidsgiver.inntektsmelding.api.RedisPollerTimeoutException
import no.nav.helsearbeidsgiver.inntektsmelding.api.Routes
import no.nav.helsearbeidsgiver.inntektsmelding.api.tilgang.TilgangProducer
Expand Down Expand Up @@ -58,15 +57,15 @@ class TrengerRouteKtTest : ApiTest() {

@Test
fun `skal returnere resultat og status CREATED når trenger virker`() = testApi {
val mockClientId = UUID.randomUUID()
val mockTransaksjonId = UUID.randomUUID()
val expectedJson = Mock.responseJson()

mockTilgang(Tilgang.HAR_TILGANG)

coEvery { mockRedisPoller.hent(mockClientId) } returns Mock.resultatOkJson
coEvery { mockRedisPoller.hent(mockTransaksjonId) } returns Mock.resultatOkJson

val response = mockConstructor(TrengerProducer::class) {
every { anyConstructed<TrengerProducer>().publish(any(), any()) } returns mockClientId
every { anyConstructed<TrengerProducer>().publish(any(), any()) } returns mockTransaksjonId

post(PATH, Mock.request, HentForespoerselRequest.serializer())
}
Expand All @@ -79,15 +78,15 @@ class TrengerRouteKtTest : ApiTest() {

@Test
fun `skal returnere resultat og status CREATED når trenger virker med forespørsel bare inntekt`() = testApi {
val mockClientId = UUID.randomUUID()
val mockTransaksjonId = UUID.randomUUID()
val expectedJson = Mock.responseBareInntektJson()

mockTilgang(Tilgang.HAR_TILGANG)

coEvery { mockRedisPoller.hent(mockClientId) } returns Mock.resultatOkMedForrigeInntektJson
coEvery { mockRedisPoller.hent(mockTransaksjonId) } returns Mock.resultatOkMedForrigeInntektJson

val response = mockConstructor(TrengerProducer::class) {
every { anyConstructed<TrengerProducer>().publish(any(), any()) } returns mockClientId
every { anyConstructed<TrengerProducer>().publish(any(), any()) } returns mockTransaksjonId

post(PATH, Mock.request, HentForespoerselRequest.serializer())
}
Expand All @@ -100,14 +99,14 @@ class TrengerRouteKtTest : ApiTest() {

@Test
fun `skal returnere Internal server error hvis Redis timer ut`() = testApi {
val mockClientId = UUID.randomUUID()
val mockTransaksjonId = UUID.randomUUID()

mockTilgang(Tilgang.HAR_TILGANG)

coEvery { mockRedisPoller.hent(mockClientId) } throws RedisPollerTimeoutException(UUID.randomUUID())
coEvery { mockRedisPoller.hent(mockTransaksjonId) } throws RedisPollerTimeoutException(UUID.randomUUID())

val response = mockConstructor(TrengerProducer::class) {
every { anyConstructed<TrengerProducer>().publish(any(), any()) } returns mockClientId
every { anyConstructed<TrengerProducer>().publish(any(), any()) } returns mockTransaksjonId

post(PATH, Mock.request, HentForespoerselRequest.serializer())
}
Expand Down Expand Up @@ -180,7 +179,7 @@ private object Mock {
bestemmendeFravaersdager = mapOf("123" to 25.april),
forespurtData = mockForespurtData(),
erBesvart = false,
vedtaksperiodeId = randomUuid()
vedtaksperiodeId = UUID.randomUUID()
)

private val inntekt = Inntekt(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ sealed class ServiceMelding

data class StartMelding(
val eventName: EventName,
val clientId: UUID?,
val transaksjonId: UUID,
val startDataMap: Map<Key, JsonElement>
) : ServiceMelding()
Expand Down
Loading

0 comments on commit 16665bd

Please sign in to comment.