From 0e5d03173d92514dfcfd25f956428d8b5a6cf9ed Mon Sep 17 00:00:00 2001 From: robertkittilsen Date: Wed, 25 Sep 2024 15:39:06 +0200 Subject: [PATCH] =?UTF-8?q?Implementert=20tilgjengeliggjort=20og=20fristUt?= =?UTF-8?q?loept=20i=20Bekreftelse=20for=20InternTilstand.=20Endret=20Tils?= =?UTF-8?q?tand=20til=20en=20sealed=20class=20med=20data=20objects,=20gjor?= =?UTF-8?q?t=20n=C3=B8dvendig=20endringer=20KontrolerFrister.kt,=20Registe?= =?UTF-8?q?rInstillinger.kt=20og=20tester.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BekreftelseMeldingTopology.kt | 2 +- .../BekreftelsePunctuator.kt | 145 ++++---- .../bekreftelsetjeneste/KontrolerFrister.kt | 8 +- .../tilstand/InternTilstand.kt | 34 +- .../tilstand/InternTilstandSerde.kt | 1 - .../tilstand/RegisterInstillinger.kt | 5 +- .../ApplicationTestContext.kt | 2 +- .../BekreftelsePunctuatorTest.kt | 332 ++++++++++++++++-- .../IngenAndreTarAnsvarTest.kt | 10 +- .../BekreftelseHendelseSerde.kt | 1 + 10 files changed, 428 insertions(+), 112 deletions(-) diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelseMeldingTopology.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelseMeldingTopology.kt index 731bb953..4baa9332 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelseMeldingTopology.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelseMeldingTopology.kt @@ -40,7 +40,7 @@ fun StreamsBuilder.processBekreftelseMeldingTopic() { bekreftelse == null -> { meldingsLogger.warn("Melding {} har ingen matchene bekreftelse", record.value().id) } - bekreftelse.tilstand == VenterSvar || bekreftelse.tilstand == KlarForUtfylling -> { + bekreftelse.tilstand is VenterSvar || bekreftelse.tilstand is KlarForUtfylling -> { val (hendelser, oppdatertBekreftelse) = behandleGyldigSvar(gjeldeneTilstand.periode.arbeidsoekerId, record, bekreftelse) val oppdatertBekreftelser = gjeldeneTilstand.bekreftelser .filterNot { t -> t.bekreftelseId == oppdatertBekreftelse.bekreftelseId } + oppdatertBekreftelse diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelsePunctuator.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelsePunctuator.kt index 276868ba..4b1829a0 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelsePunctuator.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelsePunctuator.kt @@ -11,7 +11,7 @@ import no.nav.paw.bekreftelsetjeneste.tilstand.InternTilstand import no.nav.paw.bekreftelsetjeneste.tilstand.Tilstand import no.nav.paw.bekreftelsetjeneste.tilstand.gjenstaendeGracePeriode import no.nav.paw.bekreftelsetjeneste.tilstand.initBekreftelsePeriode -import no.nav.paw.bekreftelsetjeneste.tilstand.initNyBekreftelsePeriode +import no.nav.paw.bekreftelsetjeneste.tilstand.initNewBekreftelse import org.apache.kafka.streams.KeyValue import org.apache.kafka.streams.processor.api.ProcessorContext import org.apache.kafka.streams.processor.api.Record @@ -44,27 +44,26 @@ private fun processBekreftelser( val existingBekreftelse = currentState.bekreftelser.firstOrNull() val (tilstand, hendelse) = if (existingBekreftelse == null) { - currentState.handleNoExistingBekreftelse() to null + currentState.createInitialBekreftelse() to null } else { - currentState.handleExistingBekreftelser(timestamp) + currentState.checkAndCreateNewBekreftelse(timestamp) } - val (updatedTilstand, additionalHendelser) = tilstand.handleUpdateBekreftelser(timestamp) + val (updatedTilstand, additionalHendelse) = tilstand.handleUpdateBekreftelser(timestamp) - return updatedTilstand to (listOfNotNull(hendelse) + additionalHendelser) + return updatedTilstand to listOfNotNull(hendelse, additionalHendelse) } -private fun InternTilstand.handleNoExistingBekreftelse(): InternTilstand = +private fun InternTilstand.createInitialBekreftelse(): InternTilstand = copy(bekreftelser = listOf(initBekreftelsePeriode(periode))) - -private fun InternTilstand.handleExistingBekreftelser( +private fun InternTilstand.checkAndCreateNewBekreftelse( timestamp: Instant ): Pair { val nonEmptyBekreftelser = bekreftelser.toNonEmptyListOrNull() ?: return this to null - return if (nonEmptyBekreftelser.skalLageNyBekreftelseTilgjengelig(timestamp)) { - val newBekreftelse = bekreftelser.initNyBekreftelsePeriode() + return if (nonEmptyBekreftelser.shouldCreateNewBekreftelse(timestamp)) { + val newBekreftelse = bekreftelser.initNewBekreftelse(tilgjengeliggjort = timestamp) copy(bekreftelser = nonEmptyBekreftelser + newBekreftelse) to createNewBekreftelseTilgjengelig(newBekreftelse) } else { this to null @@ -73,70 +72,80 @@ private fun InternTilstand.handleExistingBekreftelser( private fun InternTilstand.handleUpdateBekreftelser( timestamp: Instant, -): Pair> = - bekreftelser.map { bekreftelse -> - when { - bekreftelse.tilstand == Tilstand.IkkeKlarForUtfylling && bekreftelse.erKlarForUtfylling(timestamp) -> { - val updatedBekreftelse = bekreftelse.copy(tilstand = Tilstand.KlarForUtfylling) - val hendelse = BekreftelseTilgjengelig( - hendelseId = UUID.randomUUID(), - periodeId = periode.periodeId, - arbeidssoekerId = periode.arbeidsoekerId, - bekreftelseId = bekreftelse.bekreftelseId, - gjelderFra = bekreftelse.gjelderFra, - gjelderTil = bekreftelse.gjelderTil, - hendelseTidspunkt = Instant.now() - ) - updatedBekreftelse to hendelse - } +): Pair { + val updatedBekreftelser = bekreftelser.map { bekreftelse -> + generateSequence(bekreftelse to null as BekreftelseHendelse?) { (currentBekreftelse, _) -> + getProcessedBekreftelseTilstandAndHendelse(currentBekreftelse, timestamp).takeIf { it.second != null } + }.last().first + } - bekreftelse.tilstand == Tilstand.KlarForUtfylling && bekreftelse.harFristUtloept(timestamp) -> { - val updatedBekreftelse = bekreftelse.copy(tilstand = Tilstand.VenterSvar) - val hendelse = LeveringsfristUtloept( - hendelseId = UUID.randomUUID(), - periodeId = periode.periodeId, - arbeidssoekerId = periode.arbeidsoekerId, - bekreftelseId = bekreftelse.bekreftelseId, - hendelseTidspunkt = Instant.now(), - leveringsfrist = bekreftelse.gjelderTil - ) - updatedBekreftelse to hendelse - } + val hendelse: BekreftelseHendelse? = bekreftelser.flatMap { bekreftelse -> + generateSequence(bekreftelse to null as BekreftelseHendelse?) { (currentBekreftelse, _) -> + getProcessedBekreftelseTilstandAndHendelse(currentBekreftelse, timestamp).takeIf { it.second != null } + }.mapNotNull { it.second } + }.lastOrNull() - bekreftelse.tilstand == Tilstand.VenterSvar && bekreftelse.erSisteVarselOmGjenstaaendeGraceTid(timestamp) -> { - val updatedBekreftelse = bekreftelse.copy(sisteVarselOmGjenstaaendeGraceTid = timestamp) - val hendelse = RegisterGracePeriodeGjendstaaendeTid( - hendelseId = UUID.randomUUID(), - periodeId = periode.periodeId, - arbeidssoekerId = periode.arbeidsoekerId, - bekreftelseId = bekreftelse.bekreftelseId, - gjenstaandeTid = gjenstaendeGracePeriode(timestamp, bekreftelse.gjelderTil), - hendelseTidspunkt = Instant.now() - ) - updatedBekreftelse to hendelse - } + return copy(bekreftelser = updatedBekreftelser) to hendelse +} - bekreftelse.tilstand == Tilstand.VenterSvar && bekreftelse.harGracePeriodeUtloept(timestamp) -> { - val updatedBekreftelse = bekreftelse.copy(tilstand = Tilstand.GracePeriodeUtlopt) - val hendelse = RegisterGracePeriodeUtloept( - hendelseId = UUID.randomUUID(), - periodeId = periode.periodeId, - arbeidssoekerId = periode.arbeidsoekerId, - bekreftelseId = bekreftelse.bekreftelseId, - hendelseTidspunkt = Instant.now() - ) - updatedBekreftelse to hendelse - } +private fun InternTilstand.getProcessedBekreftelseTilstandAndHendelse( + bekreftelse: Bekreftelse, + timestamp: Instant +): Pair { + return when { + bekreftelse.tilstand is Tilstand.IkkeKlarForUtfylling && bekreftelse.erKlarForUtfylling(timestamp) -> { + val updatedBekreftelse = bekreftelse.copy(tilstand = Tilstand.KlarForUtfylling, tilgjengeliggjort = timestamp) + val hendelse = BekreftelseTilgjengelig( + hendelseId = UUID.randomUUID(), + periodeId = periode.periodeId, + arbeidssoekerId = periode.arbeidsoekerId, + bekreftelseId = bekreftelse.bekreftelseId, + gjelderFra = bekreftelse.gjelderFra, + gjelderTil = bekreftelse.gjelderTil, + hendelseTidspunkt = Instant.now()) + updatedBekreftelse to hendelse + } - else -> { - bekreftelse to null - } + bekreftelse.tilstand is Tilstand.KlarForUtfylling && bekreftelse.harFristUtloept(timestamp) -> { + val updatedBekreftelse = bekreftelse.copy(tilstand = Tilstand.VenterSvar, fristUtloept = timestamp) + val hendelse = LeveringsfristUtloept( + hendelseId = UUID.randomUUID(), + periodeId = periode.periodeId, + arbeidssoekerId = periode.arbeidsoekerId, + bekreftelseId = bekreftelse.bekreftelseId, + hendelseTidspunkt = Instant.now(), + leveringsfrist = bekreftelse.gjelderTil) + updatedBekreftelse to hendelse + } + + bekreftelse.tilstand == Tilstand.VenterSvar && bekreftelse.erSisteVarselOmGjenstaaendeGraceTid(timestamp) -> { + val updatedBekreftelse = bekreftelse.copy(sisteVarselOmGjenstaaendeGraceTid = timestamp) + val hendelse = RegisterGracePeriodeGjendstaaendeTid( + hendelseId = UUID.randomUUID(), + periodeId = periode.periodeId, + arbeidssoekerId = periode.arbeidsoekerId, + bekreftelseId = bekreftelse.bekreftelseId, + gjenstaandeTid = bekreftelse.gjenstaendeGracePeriode(timestamp), + hendelseTidspunkt = Instant.now()) + updatedBekreftelse to hendelse + } + + bekreftelse.tilstand == Tilstand.VenterSvar && bekreftelse.harGracePeriodeUtloept(timestamp) -> { + val updatedBekreftelse = bekreftelse.copy(tilstand = Tilstand.GracePeriodeUtloept) + val hendelse = RegisterGracePeriodeUtloept( + hendelseId = UUID.randomUUID(), + periodeId = periode.periodeId, + arbeidssoekerId = periode.arbeidsoekerId, + bekreftelseId = bekreftelse.bekreftelseId, + hendelseTidspunkt = Instant.now()) + updatedBekreftelse to hendelse + } + + else -> { + bekreftelse to null } - }.let { - val updatedBekreftelser = it.map { it.first } - val hendelser = it.mapNotNull { it.second } - copy(bekreftelser = updatedBekreftelser) to hendelser } +} private fun InternTilstand.createNewBekreftelseTilgjengelig(newBekreftelse: Bekreftelse) = BekreftelseTilgjengelig( diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/KontrolerFrister.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/KontrolerFrister.kt index c71ba131..b4bf72d1 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/KontrolerFrister.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/KontrolerFrister.kt @@ -9,17 +9,17 @@ fun Bekreftelse.erKlarForUtfylling(now: Instant): Boolean = now.isAfter(gjelderTil.minus(BekreftelseConfig.bekreftelseTilgjengeligOffset)) fun Bekreftelse.harFristUtloept(now: Instant): Boolean = - now.isAfter(gjelderTil) + now.isAfter(tilgjengeliggjort?.plus(BekreftelseConfig.bekreftelseTilgjengeligOffset) ?: gjelderTil) fun Bekreftelse.erSisteVarselOmGjenstaaendeGraceTid(now: Instant): Boolean = - sisteVarselOmGjenstaaendeGraceTid == null && now.isAfter(gjelderTil.plus( + sisteVarselOmGjenstaaendeGraceTid == null && now.isAfter(fristUtloept?.plus(BekreftelseConfig.varselFoerGracePeriodeUtloept) ?: gjelderTil.plus( BekreftelseConfig.varselFoerGracePeriodeUtloept )) fun Bekreftelse.harGracePeriodeUtloept(now: Instant): Boolean = - now.isAfter(gjelderTil.plus(BekreftelseConfig.gracePeriode)) + now.isAfter(fristUtloept?.plus(BekreftelseConfig.gracePeriode) ?: gjelderTil.plus(BekreftelseConfig.gracePeriode)) -fun NonEmptyList.skalLageNyBekreftelseTilgjengelig(now: Instant): Boolean = +fun NonEmptyList.shouldCreateNewBekreftelse(now: Instant): Boolean = maxBy { it.gjelderTil } .let { now.isAfter(it.gjelderTil.plus(BekreftelseConfig.bekreftelseInterval.minus(BekreftelseConfig.bekreftelseTilgjengeligOffset))) diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/InternTilstand.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/InternTilstand.kt index 3dd51c71..e9daeac2 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/InternTilstand.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/InternTilstand.kt @@ -1,5 +1,7 @@ package no.nav.paw.bekreftelsetjeneste.tilstand +import com.fasterxml.jackson.annotation.JsonSubTypes +import com.fasterxml.jackson.annotation.JsonTypeInfo import no.nav.paw.arbeidssokerregisteret.api.v1.Periode import java.time.Instant import java.util.* @@ -13,18 +15,32 @@ data class InternTilstand( @JvmRecord data class Bekreftelse( val tilstand: Tilstand, + val tilgjengeliggjort: Instant?, + val fristUtloept: Instant?, val sisteVarselOmGjenstaaendeGraceTid: Instant?, val bekreftelseId: UUID, val gjelderFra: Instant, val gjelderTil: Instant ) -enum class Tilstand { - IkkeKlarForUtfylling, - KlarForUtfylling, - VenterSvar, - GracePeriodeUtlopt, - Levert +@JsonTypeInfo( + use = JsonTypeInfo.Id.NAME, + include = JsonTypeInfo.As.PROPERTY, + property = "type" +) +@JsonSubTypes( + JsonSubTypes.Type(value = Tilstand.IkkeKlarForUtfylling::class, name = "IkkeKlarForUtfylling"), + JsonSubTypes.Type(value = Tilstand.KlarForUtfylling::class, name = "KlarForUtfylling"), + JsonSubTypes.Type(value = Tilstand.VenterSvar::class, name = "VenterSvar"), + JsonSubTypes.Type(value = Tilstand.GracePeriodeUtloept::class, name = "GracePeriodeUtloept"), + JsonSubTypes.Type(value = Tilstand.Levert::class, name = "Levert") +) +sealed class Tilstand { + data object IkkeKlarForUtfylling : Tilstand() + data object KlarForUtfylling : Tilstand() + data object VenterSvar : Tilstand() + data object GracePeriodeUtloept : Tilstand() + data object Levert : Tilstand() } @JvmRecord @@ -62,16 +78,20 @@ fun initBekreftelsePeriode( ): Bekreftelse = Bekreftelse( tilstand = Tilstand.IkkeKlarForUtfylling, + tilgjengeliggjort = null, + fristUtloept = null, sisteVarselOmGjenstaaendeGraceTid = null, bekreftelseId = UUID.randomUUID(), gjelderFra = periode.startet, gjelderTil = fristForNesteBekreftelse(periode.startet, BekreftelseConfig.bekreftelseInterval) ) -fun List.initNyBekreftelsePeriode( +fun List.initNewBekreftelse( + tilgjengeliggjort: Instant, ): Bekreftelse = maxBy { it.gjelderTil }.copy( tilstand = Tilstand.KlarForUtfylling, + tilgjengeliggjort = tilgjengeliggjort, sisteVarselOmGjenstaaendeGraceTid = null, bekreftelseId = UUID.randomUUID(), gjelderFra = maxBy { it.gjelderTil }.gjelderTil, diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/InternTilstandSerde.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/InternTilstandSerde.kt index 5e7e75b7..e1a88478 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/InternTilstandSerde.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/InternTilstandSerde.kt @@ -32,4 +32,3 @@ object InternTilstandDeserializer : Deserializer { private val internTilstandObjectMapper = ObjectMapper() .registerKotlinModule() .registerModules(JavaTimeModule()) - diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/RegisterInstillinger.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/RegisterInstillinger.kt index 578d8c32..6b29bd04 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/RegisterInstillinger.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/RegisterInstillinger.kt @@ -9,6 +9,7 @@ import java.time.temporal.TemporalAdjuster import java.time.temporal.TemporalAdjusters // Felles verdier for bekreftelse. +// TODO: Endre intervaller til dev-verdier data object BekreftelseConfig { val bekreftelseInterval:Duration = Duration.ofDays(14) val gracePeriode: Duration = Duration.ofDays(7) @@ -20,9 +21,9 @@ fun fristForNesteBekreftelse(forrige: Instant, interval: Duration): Instant { return forrige.plus(interval) } -fun gjenstaendeGracePeriode(timestamp: Instant, gjelderTil: Instant): Duration { +fun Bekreftelse.gjenstaendeGracePeriode(timestamp: Instant): Duration { val gracePeriode = BekreftelseConfig.gracePeriode - val utvidetGjelderTil = gjelderTil.plus(gracePeriode) + val utvidetGjelderTil = fristUtloept?.plus(gracePeriode) ?: gjelderTil.plus(gracePeriode) return if (timestamp.isAfter(utvidetGjelderTil)) { Duration.ZERO diff --git a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/ApplicationTestContext.kt b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/ApplicationTestContext.kt index c8551185..d0ba7470 100644 --- a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/ApplicationTestContext.kt +++ b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/ApplicationTestContext.kt @@ -80,7 +80,7 @@ class ApplicationTestContext(initialWallClockTime: Instant = Instant.now()) { bekreftelseSerde.serializer() ) - val hendelseLoggTopic = testDriver.createOutputTopic( + val hendelseLoggTopicOut = testDriver.createOutputTopic( applicationConfiguration.bekreftelseHendelseloggTopic, Serdes.Long().deserializer(), hendelseLoggSerde.deserializer() diff --git a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelsePunctuatorTest.kt b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelsePunctuatorTest.kt index be4918ef..ae92c9e0 100644 --- a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelsePunctuatorTest.kt +++ b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelsePunctuatorTest.kt @@ -3,10 +3,15 @@ package no.nav.paw.bekreftelsetjeneste import io.kotest.core.spec.style.FreeSpec import io.kotest.matchers.shouldBe import io.kotest.matchers.types.shouldBeInstanceOf +import no.nav.paw.bekreftelse.internehendelser.BaOmAaAvsluttePeriode +import no.nav.paw.bekreftelse.internehendelser.BekreftelseMeldingMottatt import no.nav.paw.bekreftelse.internehendelser.BekreftelseTilgjengelig import no.nav.paw.bekreftelse.internehendelser.LeveringsfristUtloept import no.nav.paw.bekreftelse.internehendelser.RegisterGracePeriodeGjendstaaendeTid import no.nav.paw.bekreftelse.internehendelser.RegisterGracePeriodeUtloept +import no.nav.paw.bekreftelse.melding.v1.vo.BrukerType +import no.nav.paw.bekreftelse.melding.v1.vo.Metadata +import no.nav.paw.bekreftelse.melding.v1.vo.Svar import no.nav.paw.bekreftelsetjeneste.tilstand.Bekreftelse import no.nav.paw.bekreftelsetjeneste.tilstand.BekreftelseConfig import no.nav.paw.bekreftelsetjeneste.tilstand.InternTilstand @@ -18,7 +23,7 @@ import java.time.Instant class BekreftelsePunctuatorTest : FreeSpec({ - val startTime = Instant.ofEpochMilli(1704185347) // 01-01-2024 - 08:49:07 + val startTime = Instant.ofEpochMilli(1704185347000) // 01-01-2024 - 08:49:07 val identitetsnummer = "12345678901" "BekreftelsePunctuator sender riktig hendelser i rekkefølge" - { @@ -27,7 +32,7 @@ class BekreftelsePunctuatorTest : FreeSpec({ periodeTopic.pipeInput(kafkaKeyResponse.key, periode) "Når perioden opprettes skal det opprettes en intern tilstand med en bekreftelse" { testDriver.advanceWallClockTime(Duration.ofSeconds(5)) - hendelseLoggTopic.isEmpty shouldBe true + hendelseLoggTopicOut.isEmpty shouldBe true val stateStore: StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName) val currentState = stateStore.get(periode.id) currentState shouldBe InternTilstand( @@ -42,6 +47,8 @@ class BekreftelsePunctuatorTest : FreeSpec({ bekreftelser = listOf( Bekreftelse( tilstand = Tilstand.IkkeKlarForUtfylling, + tilgjengeliggjort = null, + fristUtloept = null, sisteVarselOmGjenstaaendeGraceTid = null, bekreftelseId = currentState.bekreftelser.first().bekreftelseId, gjelderFra = periode.startet.tidspunkt, @@ -53,15 +60,14 @@ class BekreftelsePunctuatorTest : FreeSpec({ } "Etter 11 dager skal det ha blitt sendt en BekreftelseTilgjengelig hendelse" { testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseInterval.minus(BekreftelseConfig.bekreftelseTilgjengeligOffset)) - testDriver.advanceWallClockTime(Duration.ofSeconds(5)) val stateStore:StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName) stateStore.all().use { it.forEach { logger.info("key: ${it.key}, value: ${it.value}") } } - hendelseLoggTopic.isEmpty shouldBe false - val hendelser = hendelseLoggTopic.readKeyValuesToList() + hendelseLoggTopicOut.isEmpty shouldBe false + val hendelser = hendelseLoggTopicOut.readKeyValuesToList() logger.info("hendelser: $hendelser") hendelser.size shouldBe 1 val kv = hendelser.last() @@ -69,16 +75,15 @@ class BekreftelsePunctuatorTest : FreeSpec({ kv.value.shouldBeInstanceOf() } "Etter 14 dager skal det ha blitt sendt en LeveringsFristUtloept hendelse" { - testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseTilgjengeligOffset) - testDriver.advanceWallClockTime(Duration.ofSeconds(5)) + testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseTilgjengeligOffset.plusSeconds(5)) val stateStore:StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName) stateStore.all().use { it.forEach { logger.info("key: ${it.key}, value: ${it.value}") } } - hendelseLoggTopic.isEmpty shouldBe false - val hendelser = hendelseLoggTopic.readKeyValuesToList() + hendelseLoggTopicOut.isEmpty shouldBe false + val hendelser = hendelseLoggTopicOut.readKeyValuesToList() logger.info("hendelser: $hendelser") hendelser.size shouldBe 1 val hendelseLast = hendelser.last() @@ -86,16 +91,15 @@ class BekreftelsePunctuatorTest : FreeSpec({ hendelseLast.value.shouldBeInstanceOf() } "Etter 17,5 dager uten svar skal det ha blitt sendt en RegisterGracePeriodeGjenstaaendeTid hendelse" { - testDriver.advanceWallClockTime(BekreftelseConfig.varselFoerGracePeriodeUtloept) - testDriver.advanceWallClockTime(Duration.ofSeconds(5)) + testDriver.advanceWallClockTime(BekreftelseConfig.varselFoerGracePeriodeUtloept.plusSeconds(5)) val stateStore:StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName) stateStore.all().use { it.forEach { logger.info("key: ${it.key}, value: ${it.value}") } } - hendelseLoggTopic.isEmpty shouldBe false - val hendelser = hendelseLoggTopic.readKeyValuesToList() + hendelseLoggTopicOut.isEmpty shouldBe false + val hendelser = hendelseLoggTopicOut.readKeyValuesToList() logger.info("hendelser: $hendelser") hendelser.size shouldBe 1 val kv = hendelser.last() @@ -103,16 +107,15 @@ class BekreftelsePunctuatorTest : FreeSpec({ kv.value.shouldBeInstanceOf() } "Etter 21 dager uten svar skal det ha blitt sendt en RegisterGracePeriodeUtloept hendelse" { - testDriver.advanceWallClockTime(BekreftelseConfig.varselFoerGracePeriodeUtloept) - testDriver.advanceWallClockTime(Duration.ofSeconds(5)) + testDriver.advanceWallClockTime(BekreftelseConfig.varselFoerGracePeriodeUtloept.plusSeconds(5)) val stateStore:StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName) stateStore.all().use { it.forEach { logger.info("key: ${it.key}, value: ${it.value}") } } - hendelseLoggTopic.isEmpty shouldBe false - val hendelser = hendelseLoggTopic.readKeyValuesToList() + hendelseLoggTopicOut.isEmpty shouldBe false + val hendelser = hendelseLoggTopicOut.readKeyValuesToList() logger.info("hendelser: $hendelser") hendelser.size shouldBe 1 val kv = hendelser.last() @@ -126,15 +129,14 @@ class BekreftelsePunctuatorTest : FreeSpec({ startTime.plus(BekreftelseConfig.bekreftelseInterval).plus(BekreftelseConfig.bekreftelseInterval.minus(BekreftelseConfig.bekreftelseTilgjengeligOffset)) ) ) - testDriver.advanceWallClockTime(Duration.ofSeconds(5)) val stateStore:StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName) stateStore.all().use { it.forEach { logger.info("key: ${it.key}, value: ${it.value}") } } - hendelseLoggTopic.isEmpty shouldBe false - val hendelser = hendelseLoggTopic.readKeyValuesToList() + hendelseLoggTopicOut.isEmpty shouldBe false + val hendelser = hendelseLoggTopicOut.readKeyValuesToList() logger.info("hendelser: $hendelser") hendelser.size shouldBe 1 val kv = hendelser.last() @@ -143,13 +145,297 @@ class BekreftelsePunctuatorTest : FreeSpec({ } } } - // TODO: Lag individuelle tester for hver hendelse, for BekreftelseMeldingMottatt og BaOmAaAvsluttePeriode - /*"BekreftelsePunctuator håndterer BekreftelseMeldingMotatt og BaOmAaAvsluttePeriode hendelser" - { + "BekreftelsePunctuator håndterer BekreftelseMeldingMotatt hendelse" { with(ApplicationTestContext(initialWallClockTime = startTime)){ val (periode, kafkaKeyResponse) = periode(identitetsnummer = identitetsnummer, startet = startTime) + periodeTopic.pipeInput(kafkaKeyResponse.key, periode) + testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseInterval.minus(BekreftelseConfig.bekreftelseTilgjengeligOffset).plusSeconds(5)) + val stateStore:StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName) + val currentState = stateStore.get(periode.id) + bekreftelseTopic.pipeInput(kafkaKeyResponse.key, + no.nav.paw.bekreftelse.melding.v1.Bekreftelse( + periode.id, + "paw", + currentState.bekreftelser.first().bekreftelseId, + Svar( + Metadata( + Instant.now(), + no.nav.paw.bekreftelse.melding.v1.vo.Bruker( + BrukerType.SLUTTBRUKER, + "12345678901" + ), + "test", + "test" + ), + periode.startet.tidspunkt, + fristForNesteBekreftelse(periode.startet.tidspunkt, BekreftelseConfig.bekreftelseInterval), + true, + true + ) + ) + ) + testDriver.advanceWallClockTime(Duration.ofSeconds(5)) + testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseTilgjengeligOffset.plus(BekreftelseConfig.gracePeriode)) + val hendelseLoggOutput = hendelseLoggTopicOut.readKeyValuesToList() + logger.info("hendelseOutput: $hendelseLoggOutput") + stateStore.all().use { + it.forEach { + logger.info("key: ${it.key}, value: ${it.value}") + } + } + hendelseLoggOutput.size shouldBe 2 + hendelseLoggOutput.filter { it.value is BekreftelseTilgjengelig }.size shouldBe 1 + hendelseLoggOutput.filter { it.value is BekreftelseMeldingMottatt }.size shouldBe 1 + } + } + "BekreftelsePunctuator håndterer BaOmAaAvslutePeriode hendelse" { + with(ApplicationTestContext(initialWallClockTime = startTime)) { + val (periode, kafkaKeyResponse) = periode(identitetsnummer = identitetsnummer, startet = startTime) + + periodeTopic.pipeInput(kafkaKeyResponse.key, periode) + testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseInterval.minus(BekreftelseConfig.bekreftelseTilgjengeligOffset).plusSeconds(5)) + val stateStore: StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName) + val currentState = stateStore.get(periode.id) + bekreftelseTopic.pipeInput( + kafkaKeyResponse.key, + no.nav.paw.bekreftelse.melding.v1.Bekreftelse( + periode.id, + "paw", + currentState.bekreftelser.first().bekreftelseId, + Svar( + Metadata( + Instant.now(), + no.nav.paw.bekreftelse.melding.v1.vo.Bruker( + BrukerType.SLUTTBRUKER, + "12345678901" + ), + "test", + "test" + ), + periode.startet.tidspunkt, + fristForNesteBekreftelse(periode.startet.tidspunkt, BekreftelseConfig.bekreftelseInterval), + true, + false + ) + ) + ) + testDriver.advanceWallClockTime(Duration.ofSeconds(5)) + testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseTilgjengeligOffset.plus(BekreftelseConfig.gracePeriode)) + val hendelseLoggOutput = hendelseLoggTopicOut.readKeyValuesToList() + logger.info("hendelseOutput: $hendelseLoggOutput") + stateStore.all().use { + it.forEach { + logger.info("key: ${it.key}, value: ${it.value}") + } + } + hendelseLoggOutput.size shouldBe 3 + + hendelseLoggOutput.filter { it.value is BekreftelseTilgjengelig }.size shouldBe 1 + hendelseLoggOutput.filter { it.value is BekreftelseMeldingMottatt }.size shouldBe 1 + hendelseLoggOutput.filter { it.value is BaOmAaAvsluttePeriode }.size shouldBe 1 + } + } + "BekreftelsePunctuator setter riktig tilstand og sender riktig hendelse for: " - { + "IkkeKlarForUtfylling" { + with(ApplicationTestContext(initialWallClockTime = startTime)) { + val (periode, kafkaKeyResponse) = periode(identitetsnummer = identitetsnummer, startet = startTime) + periodeTopic.pipeInput(kafkaKeyResponse.key, periode) + testDriver.advanceWallClockTime(Duration.ofSeconds(5)) + val stateStore: StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName) + val currentState = stateStore.get(periode.id) + currentState shouldBe InternTilstand( + periode = PeriodeInfo( + periodeId = periode.id, + identitetsnummer = periode.identitetsnummer, + arbeidsoekerId = kafkaKeyResponse.id, + recordKey = kafkaKeyResponse.key, + startet = periode.startet.tidspunkt, + avsluttet = periode.avsluttet?.tidspunkt + ), + bekreftelser = listOf( + Bekreftelse( + tilstand = Tilstand.IkkeKlarForUtfylling, + tilgjengeliggjort = null, + fristUtloept = null, + sisteVarselOmGjenstaaendeGraceTid = null, + bekreftelseId = currentState.bekreftelser.first().bekreftelseId, + gjelderFra = periode.startet.tidspunkt, + gjelderTil = fristForNesteBekreftelse(periode.startet.tidspunkt, BekreftelseConfig.bekreftelseInterval) + ) + ) + ) + hendelseLoggTopicOut.isEmpty shouldBe true + } + } + "KlarForUtfylling og BekreftelseTilgjengelig" { + with(ApplicationTestContext(initialWallClockTime = startTime)) { + val (periode, kafkaKeyResponse) = periode(identitetsnummer = identitetsnummer, startet = startTime) + periodeTopic.pipeInput(kafkaKeyResponse.key, periode) + testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseInterval.minus(BekreftelseConfig.bekreftelseTilgjengeligOffset).plusSeconds(5)) + val stateStore: StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName) + val currentState = stateStore.get(periode.id) + currentState shouldBe InternTilstand( + periode = PeriodeInfo( + periodeId = periode.id, + identitetsnummer = periode.identitetsnummer, + arbeidsoekerId = kafkaKeyResponse.id, + recordKey = kafkaKeyResponse.key, + startet = periode.startet.tidspunkt, + avsluttet = periode.avsluttet?.tidspunkt + ), + bekreftelser = listOf( + Bekreftelse( + tilstand = Tilstand.KlarForUtfylling, + tilgjengeliggjort = startTime.plus(BekreftelseConfig.bekreftelseInterval).minus(BekreftelseConfig.bekreftelseTilgjengeligOffset).plusSeconds(5), + fristUtloept = null, + sisteVarselOmGjenstaaendeGraceTid = null, + bekreftelseId = currentState.bekreftelser.first().bekreftelseId, + gjelderFra = periode.startet.tidspunkt, + gjelderTil = fristForNesteBekreftelse(periode.startet.tidspunkt, BekreftelseConfig.bekreftelseInterval) + ) + ) + ) + hendelseLoggTopicOut.isEmpty shouldBe false + val hendelser = hendelseLoggTopicOut.readKeyValuesToList() + hendelser.size shouldBe 1 + val kv = hendelser.last() + kv.key shouldBe kafkaKeyResponse.key + kv.value.shouldBeInstanceOf() + } + } + "VenterSvar og LeveringsfristUtloept" { + with(ApplicationTestContext(initialWallClockTime = startTime)) { + val (periode, kafkaKeyResponse) = periode(identitetsnummer = identitetsnummer, startet = startTime) + periodeTopic.pipeInput(kafkaKeyResponse.key, periode) + // Spoler frem til BekreftelseTilgjengelig + testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseInterval.minus(BekreftelseConfig.bekreftelseTilgjengeligOffset).plusSeconds(5)) + // Spoler frem til LeveringsfristUtloept + testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseTilgjengeligOffset.plusSeconds(5)) + val stateStore: StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName) + stateStore.all().use { + it.forEach { + logger.info("key: ${it.key}, value: ${it.value}") + } + } + val currentState = stateStore.get(periode.id) + currentState shouldBe InternTilstand( + periode = PeriodeInfo( + periodeId = periode.id, + identitetsnummer = periode.identitetsnummer, + arbeidsoekerId = kafkaKeyResponse.id, + recordKey = kafkaKeyResponse.key, + startet = periode.startet.tidspunkt, + avsluttet = periode.avsluttet?.tidspunkt + ), + bekreftelser = listOf( + Bekreftelse( + tilstand = Tilstand.VenterSvar, + tilgjengeliggjort = startTime.plus(BekreftelseConfig.bekreftelseInterval).minus(BekreftelseConfig.bekreftelseTilgjengeligOffset).plusSeconds(5), + fristUtloept = startTime.plus(BekreftelseConfig.bekreftelseInterval).plusSeconds(10), + sisteVarselOmGjenstaaendeGraceTid = null, + bekreftelseId = currentState.bekreftelser.first().bekreftelseId, + gjelderFra = periode.startet.tidspunkt, + gjelderTil = fristForNesteBekreftelse(periode.startet.tidspunkt, BekreftelseConfig.bekreftelseInterval) + ) + ) + ) + hendelseLoggTopicOut.isEmpty shouldBe false + val hendelser = hendelseLoggTopicOut.readKeyValuesToList() + logger.info("hendelser: $hendelser") + hendelser.size shouldBe 2 + val kv = hendelser.last() + kv.key shouldBe kafkaKeyResponse.key + kv.value.shouldBeInstanceOf() + } + } + "VenterSvar og RegisterGracePeriodeGjenstaaende" { + with(ApplicationTestContext(initialWallClockTime = startTime)) { + val (periode, kafkaKeyResponse) = periode(identitetsnummer = identitetsnummer, startet = startTime) + periodeTopic.pipeInput(kafkaKeyResponse.key, periode) + // Spoler frem til BekreftelseTilgjengelig + testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseInterval.minus(BekreftelseConfig.bekreftelseTilgjengeligOffset).plusSeconds(5)) + // Spoler frem til LeveringsfristUtloept + testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseTilgjengeligOffset.plusSeconds(5)) + // Spoler frem til RegisterGracePeriodeGjenstaaende + testDriver.advanceWallClockTime(BekreftelseConfig.varselFoerGracePeriodeUtloept.plusSeconds(5)) + val stateStore: StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName) + val currentState = stateStore.get(periode.id) + currentState shouldBe InternTilstand( + periode = PeriodeInfo( + periodeId = periode.id, + identitetsnummer = periode.identitetsnummer, + arbeidsoekerId = kafkaKeyResponse.id, + recordKey = kafkaKeyResponse.key, + startet = periode.startet.tidspunkt, + avsluttet = periode.avsluttet?.tidspunkt + ), + bekreftelser = listOf( + Bekreftelse( + tilstand = Tilstand.VenterSvar, + tilgjengeliggjort = startTime.plus(BekreftelseConfig.bekreftelseInterval).minus(BekreftelseConfig.bekreftelseTilgjengeligOffset).plusSeconds(5), + fristUtloept = startTime.plus(BekreftelseConfig.bekreftelseInterval).plusSeconds(10), + sisteVarselOmGjenstaaendeGraceTid = startTime.plus(BekreftelseConfig.bekreftelseInterval).plus(BekreftelseConfig.varselFoerGracePeriodeUtloept).plusSeconds(15), + bekreftelseId = currentState.bekreftelser.first().bekreftelseId, + gjelderFra = periode.startet.tidspunkt, + gjelderTil = fristForNesteBekreftelse(periode.startet.tidspunkt, BekreftelseConfig.bekreftelseInterval) + ) + ) + ) + hendelseLoggTopicOut.isEmpty shouldBe false + val hendelser = hendelseLoggTopicOut.readKeyValuesToList() + logger.info("hendelser: $hendelser") + hendelser.size shouldBe 3 + val kv = hendelser.last() + kv.key shouldBe kafkaKeyResponse.key + kv.value.shouldBeInstanceOf() + } + } + "GracePeriodeUtloept og RegisterGracePeriodeUtloept" { + with(ApplicationTestContext(initialWallClockTime = startTime)) { + val (periode, kafkaKeyResponse) = periode(identitetsnummer = identitetsnummer, startet = startTime) + periodeTopic.pipeInput(kafkaKeyResponse.key, periode) + // Spoler frem til BekreftelseTilgjengelig + testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseInterval.minus(BekreftelseConfig.bekreftelseTilgjengeligOffset).plusSeconds(5)) + // Spoler frem til LeveringsfristUtloept + testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseTilgjengeligOffset.plusSeconds(5)) + // Spoler frem til RegisterGracePeriodeGjenstaaendeTid + testDriver.advanceWallClockTime(BekreftelseConfig.varselFoerGracePeriodeUtloept.plusSeconds(5)) + // Spoler frem til RegisterGracePeriodeUtloept + testDriver.advanceWallClockTime(BekreftelseConfig.varselFoerGracePeriodeUtloept.plusSeconds(5)) + val stateStore: StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName) + val currentState = stateStore.get(periode.id) + currentState shouldBe InternTilstand( + periode = PeriodeInfo( + periodeId = periode.id, + identitetsnummer = periode.identitetsnummer, + arbeidsoekerId = kafkaKeyResponse.id, + recordKey = kafkaKeyResponse.key, + startet = periode.startet.tidspunkt, + avsluttet = periode.avsluttet?.tidspunkt + ), + bekreftelser = listOf( + Bekreftelse( + tilstand = Tilstand.GracePeriodeUtloept, + tilgjengeliggjort = startTime.plus(BekreftelseConfig.bekreftelseInterval).minus(BekreftelseConfig.bekreftelseTilgjengeligOffset).plusSeconds(5), + fristUtloept = startTime.plus(BekreftelseConfig.bekreftelseInterval).plusSeconds(10), + sisteVarselOmGjenstaaendeGraceTid = startTime.plus(BekreftelseConfig.bekreftelseInterval).plus(BekreftelseConfig.varselFoerGracePeriodeUtloept).plusSeconds(15), + bekreftelseId = currentState.bekreftelser.first().bekreftelseId, + gjelderFra = periode.startet.tidspunkt, + gjelderTil = fristForNesteBekreftelse(periode.startet.tidspunkt, BekreftelseConfig.bekreftelseInterval) + ) + ) + ) + hendelseLoggTopicOut.isEmpty shouldBe false + val hendelser = hendelseLoggTopicOut.readKeyValuesToList() + logger.info("hendelser: $hendelser") + hendelser.size shouldBe 4 + val kv = hendelser.last() + kv.key shouldBe kafkaKeyResponse.key + kv.value.shouldBeInstanceOf() + } } - }*/ + } }) diff --git a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/IngenAndreTarAnsvarTest.kt b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/IngenAndreTarAnsvarTest.kt index 9d753df0..cf3798c7 100644 --- a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/IngenAndreTarAnsvarTest.kt +++ b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/IngenAndreTarAnsvarTest.kt @@ -22,12 +22,12 @@ class IngenAndreTarAnsvarTest: FreeSpec({ val (periode, kafkaKeyResponse) = periode(identitetsnummer = "12345678901") periodeTopic.pipeInput(kafkaKeyResponse.key, periode) "Nå perioden opprettes skal det ikke skje noe" { - hendelseLoggTopic.isEmpty shouldBe true + hendelseLoggTopicOut.isEmpty shouldBe true } "Etter 13 dager skal en rapportering være tilgjengelig" { testDriver.advanceWallClockTime(Duration.ofDays(13)) - hendelseLoggTopic.isEmpty shouldBe false - val kv = hendelseLoggTopic.readKeyValue() + hendelseLoggTopicOut.isEmpty shouldBe false + val kv = hendelseLoggTopicOut.readKeyValue() kv.key shouldBe kafkaKeyResponse.key with(kv.value.shouldBeInstanceOf()) { periodeId shouldBe periode.id @@ -37,8 +37,8 @@ class IngenAndreTarAnsvarTest: FreeSpec({ } "Når rapporteringen ikke blir besvart innen fristen sendes det ut en melding" { testDriver.advanceWallClockTime(Duration.ofDays(4)) - hendelseLoggTopic.isEmpty shouldBe false - val kv = hendelseLoggTopic.readKeyValue() + hendelseLoggTopicOut.isEmpty shouldBe false + val kv = hendelseLoggTopicOut.readKeyValue() kv.key shouldBe kafkaKeyResponse.key with(kv.value.shouldBeInstanceOf()) { periodeId shouldBe periode.id diff --git a/domain/bekreftelse-interne-hendelser/src/main/kotlin/no/nav/paw/bekreftelse/internehendelser/BekreftelseHendelseSerde.kt b/domain/bekreftelse-interne-hendelser/src/main/kotlin/no/nav/paw/bekreftelse/internehendelser/BekreftelseHendelseSerde.kt index f282a29e..14dfff6f 100644 --- a/domain/bekreftelse-interne-hendelser/src/main/kotlin/no/nav/paw/bekreftelse/internehendelser/BekreftelseHendelseSerde.kt +++ b/domain/bekreftelse-interne-hendelser/src/main/kotlin/no/nav/paw/bekreftelse/internehendelser/BekreftelseHendelseSerde.kt @@ -39,6 +39,7 @@ object BekreftelseHendelseDeserializer: Deserializer { meldingMottattHendelseType -> objectMapper.readValue(node.traverse()) periodeAvsluttetHendelsesType -> objectMapper.readValue(node.traverse()) registerGracePeriodeGjenstaaendeTid -> objectMapper.readValue(node.traverse()) + beOmAaAvsluttePeriodeHendelsesType -> objectMapper.readValue(node.traverse()) else -> throw IllegalArgumentException("Ukjent hendelseType: $hendelseType") } }