Skip to content

Commit

Permalink
Bytt retry-logikk til å handle om events
Browse files Browse the repository at this point in the history
  • Loading branch information
bjerga committed Nov 6, 2024
1 parent 5f02b45 commit 3d9b1b4
Show file tree
Hide file tree
Showing 9 changed files with 239 additions and 374 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,7 @@ class LagreJournalpostIdRiver(
private val sikkerLogger = sikkerLogger()

override fun les(json: Map<Key, JsonElement>): LagreJournalpostIdMelding? =
// TODO legg til Key.BEHOV etter overgangsfase
if (setOf(Key.DATA, Key.FAIL).any(json::containsKey)) {
if (setOf(Key.BEHOV, Key.DATA, Key.FAIL).any(json::containsKey)) {
null
} else {
LagreJournalpostIdMelding(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonNull
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Inntektsmelding
import no.nav.helsearbeidsgiver.felles.BehovType
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.json.toJson
Expand Down Expand Up @@ -203,7 +204,7 @@ class LagreJournalpostIdRiverTest :
context("ignorerer melding") {
withData(
mapOf(
// "melding med ukjent behov" to Pair(Key.BEHOV, BehovType.LAGRE_IM_SKJEMA.toJson()),
"melding med ukjent behov" to Pair(Key.BEHOV, BehovType.LAGRE_IM_SKJEMA.toJson()),
"melding med data" to Pair(Key.DATA, "".toJson()),
"melding med fail" to Pair(Key.FAIL, Mock.fail.toJson(Fail.serializer())),
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.json.JsonElement
import no.nav.helsearbeidsgiver.domene.inntektsmelding.Utils.convert
import no.nav.helsearbeidsgiver.domene.inntektsmelding.v1.Inntektsmelding
import no.nav.helsearbeidsgiver.felles.BehovType
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.json.krev
Expand Down Expand Up @@ -45,12 +44,8 @@ class DistribusjonRiver(
private val logger = logger()
private val sikkerLogger = sikkerLogger()

override fun les(json: Map<Key, JsonElement>): Melding? {
val behovType = Key.BEHOV.lesOrNull(BehovType.serializer(), json)
return if (
setOf(Key.DATA, Key.FAIL).any(json::containsKey) ||
(behovType != null && behovType != BehovType.DISTRIBUER_IM)
) {
override fun les(json: Map<Key, JsonElement>): Melding? =
if (setOf(Key.BEHOV, Key.DATA, Key.FAIL).any(json::containsKey)) {
null
} else {
Melding(
Expand All @@ -61,7 +56,6 @@ class DistribusjonRiver(
journalpostId = Key.JOURNALPOST_ID.les(String.serializer(), json),
)
}
}

override fun Melding.haandter(json: Map<Key, JsonElement>): Map<Key, JsonElement> {
"Forsøker å distribuere IM med journalpost-ID '$journalpostId'.".also {
Expand Down Expand Up @@ -95,11 +89,7 @@ class DistribusjonRiver(
event = eventName,
transaksjonId = transaksjonId,
forespoerselId = null,
utloesendeMelding =
json
.plus(
Key.BEHOV to BehovType.DISTRIBUER_IM.toJson(),
).toJson(),
utloesendeMelding = json.toJson(),
)

logger.error(fail.feilmelding)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,110 +47,88 @@ class DistribusjonRiverTest :
clearAllMocks()
}

context("distribuerer inntektsmelding på kafka topic") {
withData(
mapOf(
"for vanlig melding" to null,
"for retry-melding" to BehovType.DISTRIBUER_IM,
),
) { innkommendeBehov ->
test("distribuerer inntektsmelding på kafka topic") {
every { mockKafkaProducer.send(any()) } returns CompletableFuture()

every { mockKafkaProducer.send(any()) } returns CompletableFuture()
val innkommendeMelding = Mock.innkommendeMelding()

val innkommendeMelding = Mock.innkommendeMelding()
testRapid.sendJson(innkommendeMelding.toMap())

testRapid.sendJson(
innkommendeMelding
.toMap()
.plus(Key.BEHOV to innkommendeBehov?.toJson())
.mapValuesNotNull { it },
testRapid.inspektør.size shouldBeExactly 1

testRapid.firstMessage().toMap() shouldContainExactly
mapOf(
Key.EVENT_NAME to EventName.INNTEKTSMELDING_DISTRIBUERT.toJson(),
Key.UUID to innkommendeMelding.transaksjonId.toJson(),
Key.JOURNALPOST_ID to innkommendeMelding.journalpostId.toJson(),
Key.INNTEKTSMELDING to innkommendeMelding.inntektsmelding.toJson(Inntektsmelding.serializer()),
Key.BESTEMMENDE_FRAVAERSDAG to innkommendeMelding.bestemmendeFravaersdag?.toJson(),
).mapValuesNotNull { it }

val forventetRecord =
ProducerRecord<String, String>(
TOPIC_HELSEARBEIDSGIVER_INNTEKTSMELDING_EKSTERN,
JournalfoertInntektsmelding(
journalpostId = innkommendeMelding.journalpostId,
inntektsmeldingV1 = innkommendeMelding.inntektsmelding,
bestemmendeFravaersdag = innkommendeMelding.bestemmendeFravaersdag,
inntektsmelding = innkommendeMelding.inntektsmelding.convert().copy(bestemmendeFraværsdag = Mock.bestemmendeFravaersdag),
selvbestemt = false,
).toJsonStr(JournalfoertInntektsmelding.serializer()),
)

testRapid.inspektør.size shouldBeExactly 1

testRapid.firstMessage().toMap() shouldContainExactly
mapOf(
Key.EVENT_NAME to EventName.INNTEKTSMELDING_DISTRIBUERT.toJson(),
Key.UUID to innkommendeMelding.transaksjonId.toJson(),
Key.JOURNALPOST_ID to innkommendeMelding.journalpostId.toJson(),
Key.INNTEKTSMELDING to innkommendeMelding.inntektsmelding.toJson(Inntektsmelding.serializer()),
Key.BESTEMMENDE_FRAVAERSDAG to innkommendeMelding.bestemmendeFravaersdag?.toJson(),
).mapValuesNotNull { it }

val forventetRecord =
ProducerRecord<String, String>(
TOPIC_HELSEARBEIDSGIVER_INNTEKTSMELDING_EKSTERN,
JournalfoertInntektsmelding(
journalpostId = innkommendeMelding.journalpostId,
inntektsmeldingV1 = innkommendeMelding.inntektsmelding,
bestemmendeFravaersdag = innkommendeMelding.bestemmendeFravaersdag,
inntektsmelding = innkommendeMelding.inntektsmelding.convert().copy(bestemmendeFraværsdag = Mock.bestemmendeFravaersdag),
selvbestemt = false,
).toJsonStr(JournalfoertInntektsmelding.serializer()),
)

verifySequence {
mockKafkaProducer.send(forventetRecord)
}
verifySequence {
mockKafkaProducer.send(forventetRecord)
}
}

context("distribuerer selvbestemt inntektsmelding på kafka topic") {
withData(
mapOf(
"for vanlig melding" to null,
"for retry-melding" to BehovType.DISTRIBUER_IM,
),
) { innkommendeBehov ->
test("distribuerer selvbestemt inntektsmelding på kafka topic") {
every { mockKafkaProducer.send(any()) } returns CompletableFuture()

every { mockKafkaProducer.send(any()) } returns CompletableFuture()
val selvbestemtInntektsmelding =
mockInntektsmeldingV1().copy(
type =
Inntektsmelding.Type.Selvbestemt(
id = UUID.randomUUID(),
),
)

val selvbestemtInntektsmelding =
mockInntektsmeldingV1().copy(
type =
Inntektsmelding.Type.Selvbestemt(
id = UUID.randomUUID(),
),
)
val innkommendeMelding = Mock.innkommendeMelding()

val innkommendeMelding = Mock.innkommendeMelding()
testRapid.sendJson(
innkommendeMelding
.toMap()
.minus(Key.BESTEMMENDE_FRAVAERSDAG)
.plus(Key.INNTEKTSMELDING to selvbestemtInntektsmelding.toJson(Inntektsmelding.serializer())),
)

testRapid.sendJson(
innkommendeMelding
.toMap()
.minus(Key.BESTEMMENDE_FRAVAERSDAG)
.plus(Key.INNTEKTSMELDING to selvbestemtInntektsmelding.toJson(Inntektsmelding.serializer()))
.plus(Key.BEHOV to innkommendeBehov?.toJson())
.mapValuesNotNull { it },
testRapid.inspektør.size shouldBeExactly 1

testRapid.firstMessage().toMap() shouldContainExactly
mapOf(
Key.EVENT_NAME to EventName.INNTEKTSMELDING_DISTRIBUERT.toJson(),
Key.UUID to innkommendeMelding.transaksjonId.toJson(),
Key.JOURNALPOST_ID to innkommendeMelding.journalpostId.toJson(),
Key.INNTEKTSMELDING to selvbestemtInntektsmelding.toJson(Inntektsmelding.serializer()),
)

testRapid.inspektør.size shouldBeExactly 1

testRapid.firstMessage().toMap() shouldContainExactly
mapOf(
Key.EVENT_NAME to EventName.INNTEKTSMELDING_DISTRIBUERT.toJson(),
Key.UUID to innkommendeMelding.transaksjonId.toJson(),
Key.JOURNALPOST_ID to innkommendeMelding.journalpostId.toJson(),
Key.INNTEKTSMELDING to selvbestemtInntektsmelding.toJson(Inntektsmelding.serializer()),
)

val forventetRecord =
ProducerRecord<String, String>(
TOPIC_HELSEARBEIDSGIVER_INNTEKTSMELDING_EKSTERN,
JournalfoertInntektsmelding(
journalpostId = innkommendeMelding.journalpostId,
inntektsmeldingV1 = selvbestemtInntektsmelding,
bestemmendeFravaersdag = null,
inntektsmelding = selvbestemtInntektsmelding.convert(),
selvbestemt = true,
).toJsonStr(JournalfoertInntektsmelding.serializer()),
)

verifySequence {
mockKafkaProducer.send(forventetRecord)
}
val forventetRecord =
ProducerRecord<String, String>(
TOPIC_HELSEARBEIDSGIVER_INNTEKTSMELDING_EKSTERN,
JournalfoertInntektsmelding(
journalpostId = innkommendeMelding.journalpostId,
inntektsmeldingV1 = selvbestemtInntektsmelding,
bestemmendeFravaersdag = null,
inntektsmelding = selvbestemtInntektsmelding.convert(),
selvbestemt = true,
).toJsonStr(JournalfoertInntektsmelding.serializer()),
)

verifySequence {
mockKafkaProducer.send(forventetRecord)
}
}

test("håndterer når producer feiler") {
every { mockKafkaProducer.send(any()) } throws RuntimeException("feil og feil, fru blom")

Expand All @@ -164,11 +142,7 @@ class DistribusjonRiverTest :
event = innkommendeMelding.eventName,
transaksjonId = innkommendeMelding.transaksjonId,
forespoerselId = null,
utloesendeMelding =
innkommendeJsonMap
.plus(
Key.BEHOV to BehovType.DISTRIBUER_IM.toJson(),
).toJson(),
utloesendeMelding = innkommendeJsonMap.toJson(),
)

testRapid.sendJson(innkommendeJsonMap)
Expand Down
Loading

0 comments on commit 3d9b1b4

Please sign in to comment.