From 8c8a5c260c120aaef9bb71f87006f53337b61336 Mon Sep 17 00:00:00 2001 From: robertkittilsen Date: Tue, 29 Oct 2024 13:40:47 +0100 Subject: [PATCH] =?UTF-8?q?Omd=C3=B8pt=20tilstander=20til=20henholdsvis=20?= =?UTF-8?q?BekreftelseTilstand=20og=20PaaVegneAvTilstand,=20skrevet=20om?= =?UTF-8?q?=20fra=20ansvar=20til=20bekreftelsePaaVegneAv=20gjennomg=C3=A5e?= =?UTF-8?q?nde,=20oppdatert=20tester=20til=20=C3=A5=20reflektere=20navnend?= =?UTF-8?q?ringene.=20Fikset=20feilende=20tester=20i=20IngenStarterBekreft?= =?UTF-8?q?elsePaaVegneAvTest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/bekreftelse-tjeneste/README.md | 29 ++++----- ...Av.kt => HaandterBekreftelsePaaVegneAv.kt} | 52 ++++++++-------- .../paavegneav/PaaVegneAvTilstand.kt | 18 +++--- .../tilstand/Bekreftelse.kt | 10 ++-- .../tilstand/BekreftelseTilstand.kt | 60 ++++++++++++------- .../tilstand/BekreftelseTilstandStatus.kt | 29 +++++++++ .../tilstand/BekreftelseTilstandsLogg.kt | 12 ++-- .../tilstand/InternTilstand.kt | 43 ------------- .../tilstand/InternTilstandSerde.kt | 16 ++--- .../topology/BekreftelsePaaVegneAvStroem.kt | 22 +++---- .../topology/BekreftelsePunctuator.kt | 24 ++++---- .../topology/BekreftelseStream.kt | 12 ++-- .../topology/HaandterBekreftelseMottatt.kt | 8 +-- .../topology/PeriodeStream.kt | 12 ++-- .../bekreftelsetjeneste/topology/Topology.kt | 4 +- .../BekreftelseStreamTest.kt | 12 ++-- .../bekreftelsetjeneste/PeriodeStreamTest.kt | 12 ++-- .../nav/paw/bekreftelsetjeneste/TestUtils.kt | 4 +- ...VegneAvGenereresDetIkkeNyeBekreftelser.kt} | 24 ++++---- ...Registeret.kt => NaarPaaVegneAvStoppes.kt} | 20 +++++-- ...ePaaVegneAvMenDetSendesAldriInnNoeTest.kt} | 24 ++++---- ...aaVegneAv1DagFoerGraceperiodenUtloeper.kt} | 30 +++++----- ... IngenStarterBekreftelsePaaVegneAvTest.kt} | 20 ++++--- 23 files changed, 252 insertions(+), 245 deletions(-) rename apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/{handterBekreftelsePaaVegneAv.kt => HaandterBekreftelsePaaVegneAv.kt} (58%) create mode 100644 apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/BekreftelseTilstandStatus.kt delete mode 100644 apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/InternTilstand.kt rename apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/bekreftelsegenerering/{NaarAndreHarAnsvarGenereresDetIkkeNyBekreftelser.kt => NaarAndreStarterBekreftelsePaaVegneAvGenereresDetIkkeNyeBekreftelser.kt} (75%) rename apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/bekreftelsegenerering/{NaarAnsvaretGaarTilbakeTilRegisteret.kt => NaarPaaVegneAvStoppes.kt} (84%) rename apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/{AndreTarAnsvarMenDetSendesAldriInnNoeTest.kt => AndreStarterBekreftelsePaaVegneAvMenDetSendesAldriInnNoeTest.kt} (68%) rename apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/{DagpengerTarAnsvar1DagFoerGraceperiodenUtloeper.kt => DagpengerStarterBekreftelsePaaVegneAv1DagFoerGraceperiodenUtloeper.kt} (70%) rename apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/{IngenAndreTarAnsvarTest.kt => IngenStarterBekreftelsePaaVegneAvTest.kt} (73%) diff --git a/apps/bekreftelse-tjeneste/README.md b/apps/bekreftelse-tjeneste/README.md index 9b9dcd3b..0d50a261 100644 --- a/apps/bekreftelse-tjeneste/README.md +++ b/apps/bekreftelse-tjeneste/README.md @@ -13,27 +13,22 @@ sequenceDiagram ```mermaid sequenceDiagram Registeret->>PeriodeTopic: Periode startet - Dagpenger-->>AnsvarsTopic: Dagpenger startet - AnsvarsTopic-->>MeldepliktTjeneste: Dagpenger tar over - MeldepliktTjeneste-->>EndringerTopic: + Dagpenger-->>BekreftelsePaaVegneAvTopic: Dagpenger startet + BekreftelsePaaVegneAvTopic-->>BekreftelseTjeneste: Dagpenger tar over ``` -```mermaid -graph LR - periodeTopic((PeriodeTopic)) -- Startet --> Ansvar[Ansvar] -``` ``` periode topic: startet: lagre initiell tilstand avsluttet: send ok(avsluttet) :slett tilstand - ansvar topic: - tar ansvar: lagre info om ansvar - :sett tidspunkt for siste melding til record ts for ansvars endring - avslutter ansvar: slett info om ansvar + bekreftelse paaVegneAv topic: + starter paaVegneAv: lagre paaVegneAv info + :sett tidspunkt for siste melding til record ts for paaVegneAv endring + stopper paaVegneAv: slett paaVegneAv info - melding topic: + bekreftelse melding topic: mottatt: lagre tidspunkt for siste melding :send OK(mottatt) dersom ikke ønsker å fortsette: @@ -41,17 +36,17 @@ graph LR hver x time: - for alle perioder ingen har ansvar for: + for alle perioder ingen har bekreftelse paaVegneAv for: dersom tid siden siste melding (eller periode start) > Y dager: send melding om frist nærmer seg dersom tid siden siste melding (eller periode start) > Z dager: send melding om frist utløpt dersom tid siden siste melding (eller periode start) > Z+Grace dager: send melding om graceperiode utløpt - for alle perioder andre har ansvar for: + for alle perioder andre sender bekreftelse paaVegneAv for: dersom tid siden siste melding (eller periode start) > Z+G+1dag dager: send melding om graceperiode utløpt - :slett ansvar, vi overtar + :stopp paaVegneAv, vi overtar ``` Modul: endringer til frontend @@ -59,7 +54,7 @@ Modul: endringer til frontend meldings topic: - OK(mottatt) -> sett oppgave fullført - OK(avsluttet) -> slett oppgave kansellert - - OK(ansvar) -> sett oppgave fullført + - OK(paaVegneAv) -> sett oppgave fullført - frist nærmer seg -> opprett oppgave - frist utløpt -> opprett oppgave - graceperiode utløpt -> ingenting @@ -71,5 +66,5 @@ Modul: endringer til eventlogg - VilAvsluttePerioden -> send avslutt hendelse til eventlogg ``` -* OK (grunn: RapportMottatt, AnsvarFlyttet, PeriodeAvsluttet) +* OK (grunn: BekreftelseMottatt, PaaVegneAv Start, PeriodeAvsluttet) * \ No newline at end of file diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/handterBekreftelsePaaVegneAv.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/HaandterBekreftelsePaaVegneAv.kt similarity index 58% rename from apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/handterBekreftelsePaaVegneAv.kt rename to apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/HaandterBekreftelsePaaVegneAv.kt index e3ab1abe..54112b10 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/handterBekreftelsePaaVegneAv.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/HaandterBekreftelsePaaVegneAv.kt @@ -15,22 +15,22 @@ value class WallClock(val value: Instant) fun haandterBekreftelsePaaVegneAvEndret( wallclock: WallClock, - tilstand: InternTilstand?, + bekreftelseTilstand: BekreftelseTilstand?, paaVegneAvTilstand: PaaVegneAvTilstand?, - paaVegneAv: PaaVegneAv + paaVegneAvHendelse: PaaVegneAv ): List { - return when (val handling = paaVegneAv.handling) { + return when (val handling = paaVegneAvHendelse.handling) { is Start -> startPaaVegneAv( wallclock = wallclock, - tilstand = tilstand, + bekreftelseTilstand = bekreftelseTilstand, paaVegneAvTilstand = paaVegneAvTilstand, - paaVegneAv = paaVegneAv, + paaVegneAvHendelse = paaVegneAvHendelse, handling = handling ) is Stopp -> stoppPaaVegneAv( paaVegneAvTilstand = paaVegneAvTilstand, - paaVegneAv = paaVegneAv + paaVegneAvHendelse = paaVegneAvHendelse ) else -> emptyList() @@ -39,12 +39,12 @@ fun haandterBekreftelsePaaVegneAvEndret( fun stoppPaaVegneAv( paaVegneAvTilstand: PaaVegneAvTilstand?, - paaVegneAv: PaaVegneAv + paaVegneAvHendelse: PaaVegneAv ): List { - val oppdatertPaaVegneAv = paaVegneAvTilstand - Loesning.from(paaVegneAv.bekreftelsesloesning) + val oppdatertPaaVegneAv = paaVegneAvTilstand - Loesning.from(paaVegneAvHendelse.bekreftelsesloesning) val paaVegneAvHandling = when { - paaVegneAvTilstand != null && oppdatertPaaVegneAv == null -> SlettBekreftelsePaaVegneAv(paaVegneAv.periodeId) - paaVegneAvTilstand != null && oppdatertPaaVegneAv != null -> SkrivBekreftelsePaaVegneAv(paaVegneAv.periodeId, oppdatertPaaVegneAv) + paaVegneAvTilstand != null && oppdatertPaaVegneAv == null -> SlettPaaVegneAvTilstand(paaVegneAvHendelse.periodeId) + paaVegneAvTilstand != null && oppdatertPaaVegneAv != null -> SkrivPaaVegneAvTilstand(paaVegneAvHendelse.periodeId, oppdatertPaaVegneAv) else -> null } return listOfNotNull(paaVegneAvHandling) @@ -52,27 +52,27 @@ fun stoppPaaVegneAv( fun startPaaVegneAv( wallclock: WallClock, - tilstand: InternTilstand?, + bekreftelseTilstand: BekreftelseTilstand?, paaVegneAvTilstand: PaaVegneAvTilstand?, - paaVegneAv: PaaVegneAv, + paaVegneAvHendelse: PaaVegneAv, handling: Start ): List { - val oppdatertInternPaaVegneAv = - (paaVegneAvTilstand ?: bekreftelsePaaVegneAvTilstand(paaVegneAv.periodeId)) + + val oppdatertPaaVegneAvTilstand = + (paaVegneAvTilstand ?: opprettPaaVegneAvTilstand(paaVegneAvHendelse.periodeId)) + InternPaaVegneAv( - loesning = Loesning.from(paaVegneAv.bekreftelsesloesning), + loesning = Loesning.from(paaVegneAvHendelse.bekreftelsesloesning), intervall = Duration.ofMillis(handling.intervalMS), gracePeriode = Duration.ofMillis(handling.graceMS) ) - val hendelse = tilstand?.let { + val hendelse = bekreftelseTilstand?.let { BekreftelsePaaVegneAvStartet( hendelseId = UUID.randomUUID(), - periodeId = paaVegneAv.periodeId, - arbeidssoekerId = tilstand.periode.arbeidsoekerId, + periodeId = paaVegneAvHendelse.periodeId, + arbeidssoekerId = bekreftelseTilstand.periode.arbeidsoekerId, hendelseTidspunkt = wallclock.value, ) } - val oppdaterInternTilstand = tilstand?.let { + val oppdaterBekreftelseTilstand = bekreftelseTilstand?.let { val oppdaterteBekreftelser = it.bekreftelser .map { bekreftelse -> when (bekreftelse.sisteTilstand()) { @@ -85,19 +85,19 @@ fun startPaaVegneAv( } it.copy(bekreftelser = oppdaterteBekreftelser) } - ?.takeIf { oppdatertTilstand -> oppdatertTilstand != tilstand } - ?.let { oppdatertTilstand -> SkrivInternTilstand(oppdatertTilstand.periode.periodeId, oppdatertTilstand) } + ?.takeIf { oppdatertBekreftelseTilstand -> oppdatertBekreftelseTilstand != bekreftelseTilstand } + ?.let { oppdatertBekreftelseTilstand -> SkrivBekreftelseTilstand(oppdatertBekreftelseTilstand.periode.periodeId, oppdatertBekreftelseTilstand) } return listOfNotNull( - if (paaVegneAvTilstand != oppdatertInternPaaVegneAv) SkrivBekreftelsePaaVegneAv(paaVegneAv.periodeId, oppdatertInternPaaVegneAv) else null, - oppdaterInternTilstand, + if (paaVegneAvTilstand != oppdatertPaaVegneAvTilstand) SkrivPaaVegneAvTilstand(paaVegneAvHendelse.periodeId, oppdatertPaaVegneAvTilstand) else null, + oppdaterBekreftelseTilstand, hendelse?.let(::SendHendelse) ) } sealed interface Handling -data class SlettBekreftelsePaaVegneAv(val id: UUID) : Handling -data class SkrivBekreftelsePaaVegneAv(val id: UUID, val value: PaaVegneAvTilstand) : Handling -data class SkrivInternTilstand(val id: UUID, val value: InternTilstand) : Handling +data class SlettPaaVegneAvTilstand(val id: UUID) : Handling +data class SkrivPaaVegneAvTilstand(val id: UUID, val value: PaaVegneAvTilstand) : Handling +data class SkrivBekreftelseTilstand(val id: UUID, val value: BekreftelseTilstand) : Handling data class SendHendelse(val hendelse: BekreftelseHendelse) : Handling diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/PaaVegneAvTilstand.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/PaaVegneAvTilstand.kt index fd07b1cd..677644d3 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/PaaVegneAvTilstand.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/PaaVegneAvTilstand.kt @@ -6,7 +6,7 @@ import java.util.* data class PaaVegneAvTilstand( val periodeId: UUID, - val internPaaVegneAvList: List + val paaVegneAvList: List ) data class InternPaaVegneAv( @@ -34,21 +34,21 @@ enum class Loesning { } } -fun bekreftelsePaaVegneAvTilstand( +fun opprettPaaVegneAvTilstand( periodeId: UUID, - internPaaVegneAv: InternPaaVegneAv? = null + paaVegneAv: InternPaaVegneAv? = null ): PaaVegneAvTilstand = PaaVegneAvTilstand( periodeId = periodeId, - internPaaVegneAvList = listOfNotNull(internPaaVegneAv) + paaVegneAvList = listOfNotNull(paaVegneAv) ) -operator fun PaaVegneAvTilstand.plus(internPaaVegneAv: InternPaaVegneAv): PaaVegneAvTilstand = - copy(internPaaVegneAvList = internPaaVegneAvList - .filterNot { it.loesning == internPaaVegneAv.loesning} + internPaaVegneAv +operator fun PaaVegneAvTilstand.plus(paaVegneAv: InternPaaVegneAv): PaaVegneAvTilstand = + copy(paaVegneAvList = paaVegneAvList + .filterNot { it.loesning == paaVegneAv.loesning} + paaVegneAv ) operator fun PaaVegneAvTilstand?.minus(loesning: Loesning): PaaVegneAvTilstand? = - this?.internPaaVegneAvList + this?.paaVegneAvList ?.filterNot { it.loesning == loesning } ?.takeIf(List::isNotEmpty) - ?.let { copy(internPaaVegneAvList = it) } + ?.let { copy(paaVegneAvList = it) } diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/Bekreftelse.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/Bekreftelse.kt index 4b7c800b..52dd1d1a 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/Bekreftelse.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/Bekreftelse.kt @@ -13,14 +13,14 @@ data class Bekreftelse( val gjelderTil: Instant ) -inline fun Bekreftelse.tilstand(): T? = tilstandsLogg.get() +inline fun Bekreftelse.tilstand(): T? = tilstandsLogg.get() -inline fun Bekreftelse.has(): Boolean = tilstand() != null +inline fun Bekreftelse.has(): Boolean = tilstand() != null -fun Bekreftelse.sisteTilstand(): BekreftelseTilstand = tilstandsLogg.siste +fun Bekreftelse.sisteTilstand(): BekreftelseTilstandStatus = tilstandsLogg.siste -operator fun Bekreftelse.plus(bekreftelseTilstand: BekreftelseTilstand): Bekreftelse = - copy(tilstandsLogg = tilstandsLogg + bekreftelseTilstand) +operator fun Bekreftelse.plus(bekreftelseTilstandStatus: BekreftelseTilstandStatus): Bekreftelse = + copy(tilstandsLogg = tilstandsLogg + bekreftelseTilstandStatus) fun opprettFoersteBekreftelse( tidligsteStartTidspunktForBekreftelse: Instant, diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/BekreftelseTilstand.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/BekreftelseTilstand.kt index 531c89c4..8846504b 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/BekreftelseTilstand.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/BekreftelseTilstand.kt @@ -1,29 +1,43 @@ package no.nav.paw.bekreftelsetjeneste.tilstand -import com.fasterxml.jackson.annotation.JsonSubTypes -import com.fasterxml.jackson.annotation.JsonTypeInfo -import java.time.Instant +import no.nav.paw.arbeidssokerregisteret.api.v1.Periode -@JsonTypeInfo( - use = JsonTypeInfo.Id.NAME, - include = JsonTypeInfo.As.PROPERTY, - property = "type" -) -@JsonSubTypes( - JsonSubTypes.Type(value = IkkeKlarForUtfylling::class, name = "IkkeKlarForUtfylling"), - JsonSubTypes.Type(value = KlarForUtfylling::class, name = "KlarForUtfylling"), - JsonSubTypes.Type(value = VenterSvar::class, name = "VenterSvar"), - JsonSubTypes.Type(value = GracePeriodeUtloept::class, name = "GracePeriodeUtloept"), - JsonSubTypes.Type(value = Levert::class, name = "Levert") +const val MAKS_ANTALL_HISTRISKE_BEKREFTELSER = 20 + +@JvmRecord +data class BekreftelseTilstand( + val periode: PeriodeInfo, + val bekreftelser: List ) -sealed interface BekreftelseTilstand { - val timestamp: Instant + +fun opprettBekreftelseTilstand( + id: Long, + key: Long, + periode: Periode, +): BekreftelseTilstand = + BekreftelseTilstand( + periode = PeriodeInfo( + periodeId = periode.id, + identitetsnummer = periode.identitetsnummer, + arbeidsoekerId = id, + recordKey = key, + startet = periode.startet.tidspunkt, + avsluttet = periode.avsluttet?.tidspunkt + ), + bekreftelser = emptyList() + ) + +fun BekreftelseTilstand.oppdaterBekreftelse(ny: Bekreftelse): BekreftelseTilstand { + val nyBekreftelser = bekreftelser.map { + if (it.bekreftelseId == ny.bekreftelseId) ny else it + } + return copy(bekreftelser = nyBekreftelser) +} + +fun BekreftelseTilstand.leggTilNyEllerOppdaterBekreftelse(ny: Bekreftelse): BekreftelseTilstand { + val nyBekreftelser = bekreftelser + .filter { it.bekreftelseId != ny.bekreftelseId } + .plus(ny) + return copy(bekreftelser = nyBekreftelser) } -data class GracePeriodeUtloept(override val timestamp: Instant) : BekreftelseTilstand -data class GracePeriodeVarselet(override val timestamp: Instant) : BekreftelseTilstand -data class IkkeKlarForUtfylling(override val timestamp: Instant) : BekreftelseTilstand -data class KlarForUtfylling(override val timestamp: Instant) : BekreftelseTilstand -data class Levert(override val timestamp: Instant) : BekreftelseTilstand -data class VenterSvar(override val timestamp: Instant) : BekreftelseTilstand -data class InternBekreftelsePaaVegneAvStartet(override val timestamp: Instant) : BekreftelseTilstand \ No newline at end of file diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/BekreftelseTilstandStatus.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/BekreftelseTilstandStatus.kt new file mode 100644 index 00000000..ef33e12b --- /dev/null +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/BekreftelseTilstandStatus.kt @@ -0,0 +1,29 @@ +package no.nav.paw.bekreftelsetjeneste.tilstand + +import com.fasterxml.jackson.annotation.JsonSubTypes +import com.fasterxml.jackson.annotation.JsonTypeInfo +import java.time.Instant + +@JsonTypeInfo( + use = JsonTypeInfo.Id.NAME, + include = JsonTypeInfo.As.PROPERTY, + property = "type" +) +@JsonSubTypes( + JsonSubTypes.Type(value = IkkeKlarForUtfylling::class, name = "IkkeKlarForUtfylling"), + JsonSubTypes.Type(value = KlarForUtfylling::class, name = "KlarForUtfylling"), + JsonSubTypes.Type(value = VenterSvar::class, name = "VenterSvar"), + JsonSubTypes.Type(value = GracePeriodeUtloept::class, name = "GracePeriodeUtloept"), + JsonSubTypes.Type(value = Levert::class, name = "Levert"), +) +sealed interface BekreftelseTilstandStatus { + val timestamp: Instant +} + +data class GracePeriodeUtloept(override val timestamp: Instant) : BekreftelseTilstandStatus +data class GracePeriodeVarselet(override val timestamp: Instant) : BekreftelseTilstandStatus +data class IkkeKlarForUtfylling(override val timestamp: Instant) : BekreftelseTilstandStatus +data class KlarForUtfylling(override val timestamp: Instant) : BekreftelseTilstandStatus +data class Levert(override val timestamp: Instant) : BekreftelseTilstandStatus +data class VenterSvar(override val timestamp: Instant) : BekreftelseTilstandStatus +data class InternBekreftelsePaaVegneAvStartet(override val timestamp: Instant) : BekreftelseTilstandStatus \ No newline at end of file diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/BekreftelseTilstandsLogg.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/BekreftelseTilstandsLogg.kt index 69338829..5e9d12b0 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/BekreftelseTilstandsLogg.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/BekreftelseTilstandsLogg.kt @@ -6,13 +6,13 @@ import org.slf4j.LoggerFactory @JvmRecord data class BekreftelseTilstandsLogg( - val siste: BekreftelseTilstand, - val tidligere: List + val siste: BekreftelseTilstandStatus, + val tidligere: List ) private val bekreftelseTilstandsLoggProblemerLogger = LoggerFactory.getLogger(BekreftelseTilstandsLogg::class.java) -operator fun BekreftelseTilstandsLogg.plus(bekreftelseTilstand: BekreftelseTilstand): BekreftelseTilstandsLogg = - (tidligere + siste + bekreftelseTilstand) +operator fun BekreftelseTilstandsLogg.plus(bekreftelseTilstandStatus: BekreftelseTilstandStatus): BekreftelseTilstandsLogg = + (tidligere + siste + bekreftelseTilstandStatus) .groupBy { it::class } .values .map { gruppe -> @@ -28,7 +28,7 @@ operator fun BekreftelseTilstandsLogg.plus(bekreftelseTilstand: BekreftelseTilst BekreftelseTilstandsLogg(siste, tidligere) } -inline fun BekreftelseTilstandsLogg.get(): T? = +inline fun BekreftelseTilstandsLogg.get(): T? = tidligere.filterIsInstance().firstOrNull() ?: siste as? T -fun BekreftelseTilstandsLogg.asList(): NonEmptyList = nonEmptyListOf(siste) + tidligere +fun BekreftelseTilstandsLogg.asList(): NonEmptyList = nonEmptyListOf(siste) + tidligere 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 deleted file mode 100644 index 793e0c39..00000000 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/tilstand/InternTilstand.kt +++ /dev/null @@ -1,43 +0,0 @@ -package no.nav.paw.bekreftelsetjeneste.tilstand - -import no.nav.paw.arbeidssokerregisteret.api.v1.Periode - -const val MAKS_ANTALL_HISTRISKE_BEKREFTELSER = 20 - -@JvmRecord -data class InternTilstand( - val periode: PeriodeInfo, - val bekreftelser: List -) - -fun initTilstand( - id: Long, - key: Long, - periode: Periode, -): InternTilstand = - InternTilstand( - periode = PeriodeInfo( - periodeId = periode.id, - identitetsnummer = periode.identitetsnummer, - arbeidsoekerId = id, - recordKey = key, - startet = periode.startet.tidspunkt, - avsluttet = periode.avsluttet?.tidspunkt - ), - bekreftelser = emptyList() - ) - -fun InternTilstand.oppdaterBekreftelse(ny: Bekreftelse): InternTilstand { - val nyBekreftelser = bekreftelser.map { - if (it.bekreftelseId == ny.bekreftelseId) ny else it - } - return copy(bekreftelser = nyBekreftelser) -} - -fun InternTilstand.leggTilNyEllerOppdaterBekreftelse(ny: Bekreftelse): InternTilstand { - val nyBekreftelser = bekreftelser - .filter { it.bekreftelseId != ny.bekreftelseId } - .plus(ny) - return copy(bekreftelser = nyBekreftelser) -} - 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 e1a88478..95142212 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 @@ -7,25 +7,25 @@ import org.apache.kafka.common.serialization.Deserializer import org.apache.kafka.common.serialization.Serde import org.apache.kafka.common.serialization.Serializer -class InternTilstandSerde : Serde { - override fun serializer(): Serializer { +class InternTilstandSerde : Serde { + override fun serializer(): Serializer { return InternTilstandSerializer } - override fun deserializer(): Deserializer { + override fun deserializer(): Deserializer { return InternTilstandDeserializer } } -object InternTilstandSerializer : Serializer { - override fun serialize(topic: String?, data: InternTilstand?): ByteArray { +object InternTilstandSerializer : Serializer { + override fun serialize(topic: String?, data: BekreftelseTilstand?): ByteArray { return internTilstandObjectMapper.writeValueAsBytes(data) } } -object InternTilstandDeserializer : Deserializer { - override fun deserialize(topic: String?, data: ByteArray?): InternTilstand { - return internTilstandObjectMapper.readValue(data, InternTilstand::class.java) +object InternTilstandDeserializer : Deserializer { + override fun deserialize(topic: String?, data: ByteArray?): BekreftelseTilstand { + return internTilstandObjectMapper.readValue(data, BekreftelseTilstand::class.java) } } diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/BekreftelsePaaVegneAvStroem.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/BekreftelsePaaVegneAvStroem.kt index 10900be9..db9fee23 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/BekreftelsePaaVegneAvStroem.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/BekreftelsePaaVegneAvStroem.kt @@ -10,7 +10,7 @@ import no.nav.paw.bekreftelse.paavegneav.v1.vo.Start import no.nav.paw.bekreftelse.paavegneav.v1.vo.Stopp import no.nav.paw.bekreftelsetjeneste.paavegneav.* import no.nav.paw.bekreftelsetjeneste.config.KafkaTopologyConfig -import no.nav.paw.bekreftelsetjeneste.tilstand.InternTilstand +import no.nav.paw.bekreftelsetjeneste.tilstand.BekreftelseTilstand import no.nav.paw.config.kafka.streams.mapNonNull import org.apache.kafka.common.serialization.Serdes import org.apache.kafka.streams.StreamsBuilder @@ -31,22 +31,22 @@ fun StreamsBuilder.byggBekreftelsePaaVegneAvStroem( kafkaTopologyConfig.bekreftelsePaaVegneAvStateStoreName, kafkaTopologyConfig.internStateStoreName ) { message -> - val internStateStore = - getStateStore>(kafkaTopologyConfig.internStateStoreName) + val bekreftelseTilstandStateStore = + getStateStore>(kafkaTopologyConfig.internStateStoreName) val paaVegneAvTilstandStateStore = getStateStore>(kafkaTopologyConfig.bekreftelsePaaVegneAvStateStoreName) - val internTilstand = internStateStore[message.periodeId] - val bekreftelsePaaVegneAv = paaVegneAvTilstandStateStore[message.periodeId] + val bekreftelseTilstand = bekreftelseTilstandStateStore[message.periodeId] + val paaVegneAvTilstand = paaVegneAvTilstandStateStore[message.periodeId] haandterBekreftelsePaaVegneAvEndret( wallclock = WallClock(Instant.now()), - tilstand = internTilstand, - paaVegneAvTilstand = bekreftelsePaaVegneAv, - paaVegneAv = message + bekreftelseTilstand = bekreftelseTilstand, + paaVegneAvTilstand = paaVegneAvTilstand, + paaVegneAvHendelse = message ).map { handling -> when (handling) { is SendHendelse -> handling.hendelse - is SkrivBekreftelsePaaVegneAv -> paaVegneAvTilstandStateStore.put(handling.id, handling.value) - is SlettBekreftelsePaaVegneAv -> paaVegneAvTilstandStateStore.delete(handling.id) - is SkrivInternTilstand -> internStateStore.put(handling.id, handling.value) + is SkrivPaaVegneAvTilstand -> paaVegneAvTilstandStateStore.put(handling.id, handling.value) + is SlettPaaVegneAvTilstand -> paaVegneAvTilstandStateStore.delete(handling.id) + is SkrivBekreftelseTilstand -> bekreftelseTilstandStateStore.put(handling.id, handling.value) } }.filterIsInstance() } diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/BekreftelsePunctuator.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/BekreftelsePunctuator.kt index 587504b8..a02a2237 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/BekreftelsePunctuator.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/BekreftelsePunctuator.kt @@ -45,10 +45,10 @@ fun bekreftelsePunctuator( } } -fun Sequence>.prosessererBekreftelser( +fun Sequence>.prosessererBekreftelser( bekreftelseKonfigurasjon: BekreftelseKonfigurasjon, wallClock: WallClock -): Sequence>> = +): Sequence>> = filter { (internTilstand, paaVegneAvTilstand) -> (paaVegneAvTilstand == null) .also { result -> @@ -69,9 +69,9 @@ fun Sequence>.prosessererBekreftelser( fun processBekreftelser( bekreftelseKonfigurasjon: BekreftelseKonfigurasjon, - currentState: InternTilstand, + currentState: BekreftelseTilstand, currentTime: Instant, -): Pair> { +): Pair> { val existingBekreftelse = currentState.bekreftelser.firstOrNull() val (tilstand, hendelse) = if (existingBekreftelse == null) { @@ -88,20 +88,20 @@ fun processBekreftelser( return updatedTilstand to listOfNotNull(hendelse, additionalHendelse) } -private fun InternTilstand.createInitialBekreftelse( +private fun BekreftelseTilstand.createInitialBekreftelse( tidligsteStartTidspunktForBekreftelse: Instant, interval: Duration -): InternTilstand = +): BekreftelseTilstand = copy(bekreftelser = listOf(opprettFoersteBekreftelse( tidligsteStartTidspunktForBekreftelse = tidligsteStartTidspunktForBekreftelse, periode = periode, interval = interval ))) -private fun InternTilstand.checkAndCreateNewBekreftelse( +private fun BekreftelseTilstand.checkAndCreateNewBekreftelse( timestamp: Instant, bekreftelseKonfigurasjon: BekreftelseKonfigurasjon, -): Pair { +): Pair { val nonEmptyBekreftelser = bekreftelser.toNonEmptyListOrNull() ?: return this to null return if (nonEmptyBekreftelser.shouldCreateNewBekreftelse( @@ -120,10 +120,10 @@ private fun InternTilstand.checkAndCreateNewBekreftelse( } } -private fun InternTilstand.handleUpdateBekreftelser( +private fun BekreftelseTilstand.handleUpdateBekreftelser( timestamp: Instant, bekreftelseKonfigurasjon: BekreftelseKonfigurasjon, -): Pair { +): Pair { val updatedBekreftelser = bekreftelser.map { bekreftelse -> generateSequence(bekreftelse to null as BekreftelseHendelse?) { (currentBekreftelse, _) -> getProcessedBekreftelseTilstandAndHendelse( @@ -147,7 +147,7 @@ private fun InternTilstand.handleUpdateBekreftelser( return copy(bekreftelser = updatedBekreftelser) to hendelse } -private fun InternTilstand.getProcessedBekreftelseTilstandAndHendelse( +private fun BekreftelseTilstand.getProcessedBekreftelseTilstandAndHendelse( bekreftelse: Bekreftelse, timestamp: Instant, bekreftelseKonfigurasjon: BekreftelseKonfigurasjon, @@ -214,7 +214,7 @@ private fun InternTilstand.getProcessedBekreftelseTilstandAndHendelse( } } -private fun InternTilstand.createNewBekreftelseTilgjengelig(newBekreftelse: Bekreftelse) = +private fun BekreftelseTilstand.createNewBekreftelseTilgjengelig(newBekreftelse: Bekreftelse) = BekreftelseTilgjengelig( hendelseId = UUID.randomUUID(), periodeId = periode.periodeId, diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/BekreftelseStream.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/BekreftelseStream.kt index 99f74d7f..3532db0b 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/BekreftelseStream.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/BekreftelseStream.kt @@ -41,7 +41,7 @@ fun StreamsBuilder.buildBekreftelseStream(applicationConfig: ApplicationConfig) val internTilstandStateStore = getStateStore(internStateStoreName) val paaVegneAvTilstandStateStore = getStateStore(bekreftelsePaaVegneAvStateStoreName) - val gjeldendeTilstand: InternTilstand? = retrieveState(internTilstandStateStore, record) + val gjeldendeTilstand: BekreftelseTilstand? = retrieveState(internTilstandStateStore, record) val paaVegneAvTilstand = paaVegneAvTilstandStateStore[record.value().periodeId] val melding = record.value() @@ -69,7 +69,7 @@ fun StreamsBuilder.buildBekreftelseStream(applicationConfig: ApplicationConfig) fun retrieveState( internTilstandStateStore: InternTilstandStateStore, record: Record -): InternTilstand? { +): BekreftelseTilstand? { val periodeId = record.value().periodeId val state = internTilstandStateStore[periodeId] @@ -83,8 +83,8 @@ fun retrieveState( ) fun processPawNamespace( hendelse: no.nav.paw.bekreftelse.melding.v1.Bekreftelse, - gjeldeneTilstand: InternTilstand -): Pair> { + gjeldeneTilstand: BekreftelseTilstand +): Pair> { val bekreftelse = gjeldeneTilstand.findBekreftelse(hendelse.id) if (bekreftelse == null) { @@ -114,14 +114,14 @@ fun processPawNamespace( } } -fun InternTilstand.findBekreftelse(id: UUID): Bekreftelse? = bekreftelser.find { it.bekreftelseId == id } +fun BekreftelseTilstand.findBekreftelse(id: UUID): Bekreftelse? = bekreftelser.find { it.bekreftelseId == id } @WithSpan( value = "behandleGyldigSvar", kind = SpanKind.INTERNAL ) fun behandleGyldigSvar( - gjeldeneTilstand: InternTilstand, + gjeldeneTilstand: BekreftelseTilstand, record: no.nav.paw.bekreftelse.melding.v1.Bekreftelse, bekreftelse: Bekreftelse ): Pair, Bekreftelse> { diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/HaandterBekreftelseMottatt.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/HaandterBekreftelseMottatt.kt index 0ed5a725..935a4cf6 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/HaandterBekreftelseMottatt.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/HaandterBekreftelseMottatt.kt @@ -14,14 +14,14 @@ val maksAntallBekreftelserEtterStatus = mapOf( ) fun haandterBekreftelseMottatt( - gjeldendeTilstand: InternTilstand, + gjeldendeTilstand: BekreftelseTilstand, paaVegneAvTilstand: PaaVegneAvTilstand?, melding: no.nav.paw.bekreftelse.melding.v1.Bekreftelse -): Pair> { +): Pair> { val (tilstand, hendelser) = if (melding.bekreftelsesloesning == Bekreftelsesloesning.ARBEIDSSOEKERREGISTERET) { processPawNamespace(melding, gjeldendeTilstand) } else { - val paaVegneAvList = paaVegneAvTilstand?.internPaaVegneAvList ?: emptyList() + val paaVegneAvList = paaVegneAvTilstand?.paaVegneAvList ?: emptyList() if (paaVegneAvList.any { it.loesning == Loesning.from(melding.bekreftelsesloesning) }) { gjeldendeTilstand.leggTilNyEllerOppdaterBekreftelse( Bekreftelse( @@ -41,7 +41,7 @@ fun haandterBekreftelseMottatt( ) to hendelser } -fun Collection.filterByStatusAndCount(maxSizeConfig: Map, Int>): List = +fun Collection.filterByStatusAndCount(maxSizeConfig: Map, Int>): List = groupBy { it.sisteTilstand()::class } .mapValues { (_, values) -> values.sortedBy { it.gjelderTil }.reversed() } .mapValues { (status, values) -> values.take(maxSizeConfig[status] ?: Integer.MAX_VALUE) } diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/PeriodeStream.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/PeriodeStream.kt index 2f293c99..43ca58f0 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/PeriodeStream.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/PeriodeStream.kt @@ -5,8 +5,8 @@ import no.nav.paw.bekreftelse.internehendelser.BekreftelseHendelse import no.nav.paw.bekreftelse.internehendelser.BekreftelseHendelseSerde import no.nav.paw.bekreftelse.internehendelser.PeriodeAvsluttet import no.nav.paw.bekreftelsetjeneste.config.ApplicationConfig -import no.nav.paw.bekreftelsetjeneste.tilstand.InternTilstand -import no.nav.paw.bekreftelsetjeneste.tilstand.initTilstand +import no.nav.paw.bekreftelsetjeneste.tilstand.BekreftelseTilstand +import no.nav.paw.bekreftelsetjeneste.tilstand.opprettBekreftelseTilstand import no.nav.paw.config.kafka.streams.genericProcess import no.nav.paw.config.kafka.streams.mapWithContext import no.nav.paw.kafkakeygenerator.client.KafkaKeysClient @@ -27,7 +27,7 @@ fun StreamsBuilder.buildPeriodeStream( "lagreEllerSlettPeriode", internStateStoreName ) { periode -> - val keyValueStore: KeyValueStore = + val keyValueStore: KeyValueStore = getStateStore(internStateStoreName) val currentState = keyValueStore[periode.id] val (arbeidsoekerId, kafkaKey) = currentState?.let { it.periode.arbeidsoekerId to it.periode.recordKey } @@ -36,7 +36,7 @@ fun StreamsBuilder.buildPeriodeStream( currentState == null && periode.avsluttet() -> Action.DoNothing periode.avsluttet() -> Action.DeleteStateAndEmit(arbeidsoekerId, periode) currentState == null -> Action.UpdateState( - initTilstand( + opprettBekreftelseTilstand( id = arbeidsoekerId, key = kafkaKey, periode = periode @@ -51,7 +51,7 @@ fun StreamsBuilder.buildPeriodeStream( punctuation = null, stateStoreNames = arrayOf(internStateStoreName) ) { record -> - val keyValueStore: KeyValueStore = + val keyValueStore: KeyValueStore = getStateStore(internStateStoreName) when (val action = record.value()) { is Action.DeleteStateAndEmit -> { @@ -80,5 +80,5 @@ fun Periode.avsluttet(): Boolean = avsluttet != null sealed interface Action { data object DoNothing : Action data class DeleteStateAndEmit(val arbeidsoekerId: Long, val periode: Periode) : Action - data class UpdateState(val state: InternTilstand) : Action + data class UpdateState(val state: BekreftelseTilstand) : Action } diff --git a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/Topology.kt b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/Topology.kt index a67965a3..708b30a7 100644 --- a/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/Topology.kt +++ b/apps/bekreftelse-tjeneste/src/main/kotlin/no/nav/paw/bekreftelsetjeneste/topology/Topology.kt @@ -3,7 +3,7 @@ package no.nav.paw.bekreftelsetjeneste.topology import kotlinx.coroutines.runBlocking import no.nav.paw.bekreftelsetjeneste.paavegneav.PaaVegneAvTilstand import no.nav.paw.bekreftelsetjeneste.context.ApplicationContext -import no.nav.paw.bekreftelsetjeneste.tilstand.InternTilstand +import no.nav.paw.bekreftelsetjeneste.tilstand.BekreftelseTilstand import no.nav.paw.kafkakeygenerator.client.KafkaKeysClient import no.nav.paw.kafkakeygenerator.client.KafkaKeysResponse import org.apache.kafka.streams.StreamsBuilder @@ -11,7 +11,7 @@ import org.apache.kafka.streams.Topology import org.apache.kafka.streams.state.KeyValueStore import java.util.* -typealias InternTilstandStateStore = KeyValueStore +typealias InternTilstandStateStore = KeyValueStore typealias PaaVegneAvTilstandStateStore = KeyValueStore fun StreamsBuilder.buildTopology( diff --git a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelseStreamTest.kt b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelseStreamTest.kt index b296ff36..bb580a4e 100644 --- a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelseStreamTest.kt +++ b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/BekreftelseStreamTest.kt @@ -36,7 +36,7 @@ class BekreftelseStreamTest : FreeSpec({ bekreftelseTopic.pipeInput(1234L, bekreftelseMelding) val stateStore = - testDriver.getKeyValueStore(applicationConfig.kafkaTopology.internStateStoreName) + testDriver.getKeyValueStore(applicationConfig.kafkaTopology.internStateStoreName) stateStore.all().asSequence().count() shouldBe 0 bekreftelseHendelseloggTopicOut.isEmpty shouldBe true @@ -78,7 +78,7 @@ class BekreftelseStreamTest : FreeSpec({ bekreftelseTopic.pipeInput(key, bekreftelseMelding) val stateStore = - testDriver.getKeyValueStore(applicationConfig.kafkaTopology.internStateStoreName) + testDriver.getKeyValueStore(applicationConfig.kafkaTopology.internStateStoreName) val internTilstand = stateStore[periode.id] internTilstand should { @@ -97,7 +97,7 @@ class BekreftelseStreamTest : FreeSpec({ bekreftelse.gjelderTil shouldBe bekreftelseMelding.svar.gjelderTil bekreftelse.tilstandsLogg .asList() - .sortedBy(BekreftelseTilstand::timestamp) + .sortedBy(BekreftelseTilstandStatus::timestamp) .map { it::class } .shouldContainExactly( IkkeKlarForUtfylling::class, @@ -143,7 +143,7 @@ class BekreftelseStreamTest : FreeSpec({ bekreftelseTopic.pipeInput(key, bekreftelseMelding) val stateStore = - testDriver.getKeyValueStore(applicationConfig.kafkaTopology.internStateStoreName) + testDriver.getKeyValueStore(applicationConfig.kafkaTopology.internStateStoreName) val internTilstand = stateStore[periode.id] internTilstand should { @@ -208,7 +208,7 @@ class BekreftelseStreamTest : FreeSpec({ bekreftelseTopic.pipeInput(key, bekreftelseMelding) val stateStore = - testDriver.getKeyValueStore(applicationConfig.kafkaTopology.internStateStoreName) + testDriver.getKeyValueStore(applicationConfig.kafkaTopology.internStateStoreName) val internTilstand = stateStore[periode.id] internTilstand should { @@ -227,7 +227,7 @@ class BekreftelseStreamTest : FreeSpec({ bekreftelse.bekreftelseId shouldBe bekreftelseMelding.id bekreftelse.tilstandsLogg .asList() - .sortedBy(BekreftelseTilstand::timestamp) + .sortedBy(BekreftelseTilstandStatus::timestamp) .map { it::class } .shouldContainExactly( IkkeKlarForUtfylling::class, diff --git a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/PeriodeStreamTest.kt b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/PeriodeStreamTest.kt index 065e1932..ab49c2ec 100644 --- a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/PeriodeStreamTest.kt +++ b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/PeriodeStreamTest.kt @@ -7,8 +7,8 @@ import no.nav.paw.arbeidssoekerregisteret.testdata.kafkaKeyContext import no.nav.paw.arbeidssoekerregisteret.testdata.mainavro.metadata import no.nav.paw.arbeidssoekerregisteret.testdata.mainavro.periode import no.nav.paw.bekreftelse.internehendelser.PeriodeAvsluttet -import no.nav.paw.bekreftelsetjeneste.tilstand.InternTilstand -import no.nav.paw.bekreftelsetjeneste.tilstand.initTilstand +import no.nav.paw.bekreftelsetjeneste.tilstand.BekreftelseTilstand +import no.nav.paw.bekreftelsetjeneste.tilstand.opprettBekreftelseTilstand import no.nav.paw.bekreftelsetjeneste.topology.InternTilstandStateStore import java.time.Instant @@ -38,8 +38,8 @@ class PeriodeStreamTest : FreeSpec({ val internTilstandStateStore: InternTilstandStateStore = testDriver.getKeyValueStore(applicationConfig.kafkaTopology.internStateStoreName) val currentState = internTilstandStateStore.get(periode.id) - currentState.shouldBeInstanceOf() - currentState shouldBe initTilstand(id, key, periode) + currentState.shouldBeInstanceOf() + currentState shouldBe opprettBekreftelseTilstand(id, key, periode) } } } @@ -51,7 +51,7 @@ class PeriodeStreamTest : FreeSpec({ periodeTopic.pipeInput(key, periode) val internTilstandStateStore: InternTilstandStateStore = testDriver.getKeyValueStore(applicationConfig.kafkaTopology.internStateStoreName) - internTilstandStateStore.get(periode.id).shouldBeInstanceOf() + internTilstandStateStore.get(periode.id).shouldBeInstanceOf() val (_, _, periode2) = periode(periodeId = periode.id, identitetsnummer = identitetsnummer, avsluttetMetadata = metadata(tidspunkt = startTime)) periodeTopic.pipeInput(key, periode2) @@ -70,7 +70,7 @@ class PeriodeStreamTest : FreeSpec({ with(kafkaKeyContext()) { val (id, key, periode) = periode(identitetsnummer = identitetsnummer, startetMetadata = metadata(tidspunkt = startTime)) val internTilstandStateStore: InternTilstandStateStore = testDriver.getKeyValueStore(applicationConfig.kafkaTopology.internStateStoreName) - internTilstandStateStore.put(periode.id, initTilstand(id, key, periode)) + internTilstandStateStore.put(periode.id, opprettBekreftelseTilstand(id, key, periode)) val state = internTilstandStateStore.get(periode.id) periodeTopic.pipeInput(key, periode) diff --git a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/TestUtils.kt b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/TestUtils.kt index dffdccf2..d2d52f61 100644 --- a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/TestUtils.kt +++ b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/TestUtils.kt @@ -25,7 +25,7 @@ inline fun List.assertExactlyOne(f: T2.() -> Unit) it.first() }.apply(f) -fun internTilstand( +fun bekreftelseTilstand( periodeStart: Instant, periodeId: UUID = UUID.randomUUID(), identitetsnummer: String = "12345678901", @@ -33,7 +33,7 @@ fun internTilstand( recordKey: Long = 1L, avsluttet: Instant? = null, bekreftelser: List = emptyList() -) = InternTilstand( +) = BekreftelseTilstand( periode = PeriodeInfo( periodeId = periodeId, identitetsnummer = identitetsnummer, diff --git a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/bekreftelsegenerering/NaarAndreHarAnsvarGenereresDetIkkeNyBekreftelser.kt b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/bekreftelsegenerering/NaarAndreStarterBekreftelsePaaVegneAvGenereresDetIkkeNyeBekreftelser.kt similarity index 75% rename from apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/bekreftelsegenerering/NaarAndreHarAnsvarGenereresDetIkkeNyBekreftelser.kt rename to apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/bekreftelsegenerering/NaarAndreStarterBekreftelsePaaVegneAvGenereresDetIkkeNyeBekreftelser.kt index c648d082..ab89f36c 100644 --- a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/bekreftelsegenerering/NaarAndreHarAnsvarGenereresDetIkkeNyBekreftelser.kt +++ b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/bekreftelsegenerering/NaarAndreStarterBekreftelsePaaVegneAvGenereresDetIkkeNyeBekreftelser.kt @@ -6,28 +6,28 @@ import io.kotest.matchers.shouldBe import no.nav.paw.bekreftelsetjeneste.paavegneav.InternPaaVegneAv import no.nav.paw.bekreftelsetjeneste.paavegneav.Loesning import no.nav.paw.bekreftelsetjeneste.paavegneav.WallClock -import no.nav.paw.bekreftelsetjeneste.paavegneav.bekreftelsePaaVegneAvTilstand +import no.nav.paw.bekreftelsetjeneste.paavegneav.opprettPaaVegneAvTilstand import no.nav.paw.bekreftelsetjeneste.bekreftelse -import no.nav.paw.bekreftelsetjeneste.internTilstand +import no.nav.paw.bekreftelsetjeneste.bekreftelseTilstand import no.nav.paw.bekreftelsetjeneste.standardIntervaller import no.nav.paw.bekreftelsetjeneste.topology.prosessererBekreftelser import no.nav.paw.test.days import no.nav.paw.test.seconds import java.time.Instant -class NaarAndreHarAnsvarGenereresDetIkkeNyBekreftelser : FreeSpec({ +class NaarAndreStarterBekreftelsePaaVegneAvGenereresDetIkkeNyeBekreftelser : FreeSpec({ val intervaller = standardIntervaller val periodeStart = Instant.parse("2024-10-27T18:00:00Z") - val internTilstand = internTilstand(periodeStart = periodeStart) - val ansvar = bekreftelsePaaVegneAvTilstand( - periodeId = internTilstand.periode.periodeId, - internPaaVegneAv = InternPaaVegneAv( + val bekreftelseTilstand = bekreftelseTilstand(periodeStart = periodeStart) + val paaVegneAvTilstand = opprettPaaVegneAvTilstand( + periodeId = bekreftelseTilstand.periode.periodeId, + paaVegneAv = InternPaaVegneAv( loesning = Loesning.DAGPENGER, intervall = intervaller.interval, gracePeriode = intervaller.graceperiode ) ) - "Når andre har ansvar og det ikke finnes noen bekreftelser skal det ikke genereres nye bekreftelser når " - { + "Når andre har startet bekreftelsePaaVegneAv og det ikke finnes noen bekreftelser skal det ikke genereres nye bekreftelser når " - { listOf( 1.seconds, 1.days, @@ -36,7 +36,7 @@ class NaarAndreHarAnsvarGenereresDetIkkeNyBekreftelser : FreeSpec({ 50.days ).forEach { tidEtterStart -> "bekreftelse puntuator kjører $tidEtterStart etter start av periode" - { - val resultat = sequenceOf(internTilstand to ansvar) + val resultat = sequenceOf(bekreftelseTilstand to paaVegneAvTilstand) .prosessererBekreftelser( bekreftelseKonfigurasjon = intervaller, wallClock = WallClock(periodeStart + tidEtterStart) @@ -49,7 +49,7 @@ class NaarAndreHarAnsvarGenereresDetIkkeNyBekreftelser : FreeSpec({ } } } - "Når andre har ansvar og det finnes en ikke besvart bekreftelse skal det ikke skje noe " - { + "Når andre har startet bekreftelsePaaVegneAv og det finnes en ikke besvart bekreftelse skal det ikke skje noe " - { listOf( 1.seconds, 1.days, @@ -59,7 +59,7 @@ class NaarAndreHarAnsvarGenereresDetIkkeNyBekreftelser : FreeSpec({ ).forEach { tidEtterStart -> "bekreftelse puntuator kjører $tidEtterStart etter start av periode" - { val resultat = sequenceOf( - internTilstand.copy( + bekreftelseTilstand.copy( bekreftelser = listOf( intervaller.bekreftelse( gjelderFra = periodeStart, @@ -67,7 +67,7 @@ class NaarAndreHarAnsvarGenereresDetIkkeNyBekreftelser : FreeSpec({ gracePeriodeVarselet = null ) ) - ) to ansvar + ) to paaVegneAvTilstand ) .prosessererBekreftelser( bekreftelseKonfigurasjon = intervaller, diff --git a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/bekreftelsegenerering/NaarAnsvaretGaarTilbakeTilRegisteret.kt b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/bekreftelsegenerering/NaarPaaVegneAvStoppes.kt similarity index 84% rename from apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/bekreftelsegenerering/NaarAnsvaretGaarTilbakeTilRegisteret.kt rename to apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/bekreftelsegenerering/NaarPaaVegneAvStoppes.kt index 6cd19f56..9dbbff0e 100644 --- a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/bekreftelsegenerering/NaarAnsvaretGaarTilbakeTilRegisteret.kt +++ b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/bekreftelsegenerering/NaarPaaVegneAvStoppes.kt @@ -8,7 +8,7 @@ import io.kotest.matchers.types.shouldBeInstanceOf import no.nav.paw.bekreftelse.internehendelser.BekreftelseTilgjengelig import no.nav.paw.bekreftelsetjeneste.paavegneav.WallClock import no.nav.paw.bekreftelsetjeneste.gracePeriodeUtloeper -import no.nav.paw.bekreftelsetjeneste.internTilstand +import no.nav.paw.bekreftelsetjeneste.bekreftelseTilstand import no.nav.paw.bekreftelsetjeneste.standardIntervaller import no.nav.paw.bekreftelsetjeneste.tilgjengelig import no.nav.paw.bekreftelsetjeneste.tilstand.IkkeKlarForUtfylling @@ -18,13 +18,13 @@ import no.nav.paw.test.days import no.nav.paw.test.seconds import java.time.Instant -class NaarAnsvaretGaarTilbakeTilRegisteret : FreeSpec({ +class NaarPaaVegneAvStoppes : FreeSpec({ val intervaller = standardIntervaller.copy( migreringstidspunkt = Instant.parse("2022-01-27T23:12:11Z"), ) val startTid = Instant.parse("2023-01-27T23:12:11Z") - val tilstand = internTilstand(periodeStart = startTid) - "Når ansvaret går tilbake til registeret" - { + val tilstand = bekreftelseTilstand(periodeStart = startTid) + "Når paaVegneAv stoppes" - { "og ingen tidligere bekreftelser finnes" - { "bare opprettes en intern bekreftelse før ${startTid + intervaller.interval - intervaller.tilgjengeligOffset}" { val (interntTilstand, hendelser) = sequenceOf(tilstand to null) @@ -80,7 +80,17 @@ class NaarAnsvaretGaarTilbakeTilRegisteret : FreeSpec({ } } "uten at noen bekreftelser er levert, skal det genereres en ny bekreftelse som starter ved periode start" - { - + val (interntTilstand, hendelser) = sequenceOf(tilstand to null) + .prosessererBekreftelser( + bekreftelseKonfigurasjon = intervaller, + wallClock = WallClock(startTid + 1.days) + ).first() + interntTilstand shouldNotBe tilstand + interntTilstand.bekreftelser.size shouldBe 1 + interntTilstand.bekreftelser.first().gjelderFra shouldBe startTid + interntTilstand.bekreftelser.first().tilstandsLogg.siste.shouldBeInstanceOf() + interntTilstand.bekreftelser.first().gjelderTil shouldBe Instant.parse("2023-02-12T23:00:00Z") + hendelser.shouldBeEmpty() } } }) \ No newline at end of file diff --git a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/AndreTarAnsvarMenDetSendesAldriInnNoeTest.kt b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/AndreStarterBekreftelsePaaVegneAvMenDetSendesAldriInnNoeTest.kt similarity index 68% rename from apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/AndreTarAnsvarMenDetSendesAldriInnNoeTest.kt rename to apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/AndreStarterBekreftelsePaaVegneAvMenDetSendesAldriInnNoeTest.kt index 19305efa..d1d88afe 100644 --- a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/AndreTarAnsvarMenDetSendesAldriInnNoeTest.kt +++ b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/AndreStarterBekreftelsePaaVegneAvMenDetSendesAldriInnNoeTest.kt @@ -13,37 +13,37 @@ import no.nav.paw.test.assertEvent import no.nav.paw.test.assertNoMessage import no.nav.paw.test.days -class AndreTarAnsvarMenDetSendesAldriInnNoeTest: FreeSpec({ +class AndreStarterBekreftelsePaaVegneAvMenDetSendesAldriInnNoeTest: FreeSpec({ with(ApplicationTestContext()) { val intervall = applicationConfig.bekreftelseKonfigurasjon.interval val grace = applicationConfig.bekreftelseKonfigurasjon.graceperiode with(kafkaKeyContext()) { - "Applikasjonstest hvor noen tar ansvar rett etter at perioden er lest, men avslutter ansvar igjen før en eneste" + + "Applikasjonstest hvor noen starter bekreftelsePaaVegneAv rett etter at perioden er lest, men stopper igjen før en eneste" + " bekreftelse er levert" - { val (id, key, periode) = periode(identitetsnummer = "12345678902") "Når perioden opprettes skal det ikke skje noe" { periodeTopic.pipeInput(key, periode) bekreftelseHendelseloggTopicOut.assertNoMessage() } - "Når andre tar ansvar sendes en 'AndreHarOvertattAnsvar' hendelse" { - val tarAnsvar = startPaaVegneAv(periodeId = periode.id) - bekreftelsePaaVegneAvTopic.pipeInput(key, tarAnsvar) - logger.info("Tar ansvar: $tarAnsvar") - bekreftelseHendelseloggTopicOut.assertEvent { hedelse: BekreftelsePaaVegneAvStartet -> - hedelse.periodeId shouldBe periode.id - hedelse.arbeidssoekerId shouldBe id + "Når andre starter bekreftelsePaaVegneAv sendes en 'BekreftelsePaaVegneAvStartet' hendelse" { + val startPaaVegneAv = startPaaVegneAv(periodeId = periode.id) + bekreftelsePaaVegneAvTopic.pipeInput(key, startPaaVegneAv) + logger.info("startPaaVegneAv: $startPaaVegneAv") + bekreftelseHendelseloggTopicOut.assertEvent { hendelse: BekreftelsePaaVegneAvStartet -> + hendelse.periodeId shouldBe periode.id + hendelse.arbeidssoekerId shouldBe id } bekreftelseHendelseloggTopicOut.assertNoMessage() } - "Når leveringsfristen utløper når andre har ansvar skjer det ingenting" { + "Når leveringsfristen utløper når andre har bekreftelsePaaVegneAv skjer det ingenting" { testDriver.advanceWallClockTime(intervall + 1.days) bekreftelseHendelseloggTopicOut.assertNoMessage() } - "Når grace perioden utløpet når andre har ansvar skjer det ingenting" { + "Når grace perioden utløpet når andre har bekreftelsePaaVegneAv skjer det ingenting" { testDriver.advanceWallClockTime(grace + 1.days) bekreftelseHendelseloggTopicOut.assertNoMessage() } - "Når andre avslutter ansvar blir en ny bekreftelse tilgjengelig" { + "Når andre stopper bekreftelsePaaVegneAv blir en ny bekreftelse tilgjengelig" { bekreftelsePaaVegneAvTopic.pipeInput(key, stoppPaaVegneAv(periodeId = periode.id)) testDriver.advanceWallClockTime(1.days) bekreftelseHendelseloggTopicOut.assertEvent { hendelse: BekreftelseTilgjengelig -> diff --git a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/DagpengerTarAnsvar1DagFoerGraceperiodenUtloeper.kt b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/DagpengerStarterBekreftelsePaaVegneAv1DagFoerGraceperiodenUtloeper.kt similarity index 70% rename from apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/DagpengerTarAnsvar1DagFoerGraceperiodenUtloeper.kt rename to apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/DagpengerStarterBekreftelsePaaVegneAv1DagFoerGraceperiodenUtloeper.kt index ac0d5291..b272e93d 100644 --- a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/DagpengerTarAnsvar1DagFoerGraceperiodenUtloeper.kt +++ b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/DagpengerStarterBekreftelsePaaVegneAv1DagFoerGraceperiodenUtloeper.kt @@ -13,53 +13,53 @@ import no.nav.paw.test.days import java.time.Duration import java.time.Instant -class DagpengerTarAnsvar1DagFoerGraceperiodenUtloeper : FreeSpec({ +class DagpengerStarterBekreftelsePaaVegneAv1DagFoerGraceperiodenUtloeper : FreeSpec({ val intervaller = standardIntervaller val periodeStart = Instant.parse("2024-10-23T08:00:00Z") - val initiellTilstand = internTilstand(periodeStart = periodeStart) + val initiellTilstand = bekreftelseTilstand(periodeStart = periodeStart) - "${Loesning.DAGPENGER} tar ansvar 1 dag før grace perioden utøper" - { + "${Loesning.DAGPENGER} starter bekreftelsePaaVegneAv 1 dag før grace perioden utøper" - { val tilstand = initiellTilstand.leggTilNyEllerOppdaterBekreftelse( intervaller.bekreftelse( gjelderFra = periodeStart, gracePeriodeUtloept = null ) ) - val dagpengerTarAnsvar = no.nav.paw.arbeidssoekerregisteret.testdata.bekreftelse.startPaaVegneAv( + val dagpengerStarterBekreftelsePaaVegneAv = no.nav.paw.arbeidssoekerregisteret.testdata.bekreftelse.startPaaVegneAv( periodeId = tilstand.periode.periodeId, bekreftelsesloesning = no.nav.paw.bekreftelse.paavegneav.v1.vo.Bekreftelsesloesning.DAGPENGER, ) val handlinger = haandterBekreftelsePaaVegneAvEndret( wallclock = WallClock(intervaller.gracePeriodeUtloeper(periodeStart) - 1.days), - tilstand = tilstand, + bekreftelseTilstand = tilstand, paaVegneAvTilstand = null, - paaVegneAv = dagpengerTarAnsvar + paaVegneAvHendelse = dagpengerStarterBekreftelsePaaVegneAv ) - "Ansvar skal skrives til key-value store" { - handlinger.assertExactlyOne { + "BekreftelsePaaVegneAv skal skrives til key-value store" { + handlinger.assertExactlyOne { id shouldBe tilstand.periode.periodeId value shouldBe PaaVegneAvTilstand( periodeId = tilstand.periode.periodeId, - internPaaVegneAvList = listOf( + paaVegneAvList = listOf( InternPaaVegneAv( loesning = Loesning.DAGPENGER, - intervall = Duration.ofMillis((dagpengerTarAnsvar.handling as Start).intervalMS), - gracePeriode = Duration.ofMillis((dagpengerTarAnsvar.handling as Start).graceMS) + intervall = Duration.ofMillis((dagpengerStarterBekreftelsePaaVegneAv.handling as Start).intervalMS), + gracePeriode = Duration.ofMillis((dagpengerStarterBekreftelsePaaVegneAv.handling as Start).graceMS) ) ) ) } } - "AndreHarOvertattAnsvar hendelse skal sendes" { + "BekreftelsePaaVegneAvStartet hendelse skal sendes" { handlinger.assertExactlyOne { hendelse.shouldBeInstanceOf() hendelse.periodeId shouldBe tilstand.periode.periodeId } } - "Åpne bekreftelser settes til AnsvarOvertattAvAndre" { - withClue("Handlinger inneholdt ikke skriving av intern tilstand med forventet status: ${handlinger.filterIsInstance()}") { - handlinger.assertExactlyOne { + "Åpne bekreftelser settes til InternBekreftelsePaaVegneAvStartet" { + withClue("Handlinger inneholdt ikke skriving av intern tilstand med forventet status: ${handlinger.filterIsInstance()}") { + handlinger.assertExactlyOne { id shouldBe tilstand.periode.periodeId value.bekreftelser.size shouldBe 1 value.bekreftelser.first().sisteTilstand().shouldBeInstanceOf() diff --git a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/IngenAndreTarAnsvarTest.kt b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/IngenStarterBekreftelsePaaVegneAvTest.kt similarity index 73% rename from apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/IngenAndreTarAnsvarTest.kt rename to apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/IngenStarterBekreftelsePaaVegneAvTest.kt index babcb7c1..7b847c29 100644 --- a/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/IngenAndreTarAnsvarTest.kt +++ b/apps/bekreftelse-tjeneste/src/test/kotlin/no/nav/paw/bekreftelsetjeneste/paavegneav/IngenStarterBekreftelsePaaVegneAvTest.kt @@ -4,26 +4,28 @@ import io.kotest.core.spec.style.FreeSpec import io.kotest.matchers.shouldBe import io.kotest.matchers.types.shouldBeInstanceOf import no.nav.paw.arbeidssoekerregisteret.testdata.kafkaKeyContext +import no.nav.paw.arbeidssoekerregisteret.testdata.mainavro.metadata import no.nav.paw.arbeidssoekerregisteret.testdata.mainavro.periode import no.nav.paw.bekreftelse.internehendelser.BekreftelseTilgjengelig import no.nav.paw.bekreftelse.internehendelser.LeveringsfristUtloept import no.nav.paw.bekreftelsetjeneste.ApplicationTestContext import no.nav.paw.test.days +import java.time.Instant -class IngenAndreTarAnsvarTest : FreeSpec({ - with(ApplicationTestContext()) { - val intervall = applicationConfig.bekreftelseKonfigurasjon.interval +class IngenStarterBekreftelsePaaVegneAvTest : FreeSpec({ + val startTime = Instant.parse("2024-01-02T08:00:00Z") + with(ApplicationTestContext(initialWallClockTime = startTime)) { val grace = applicationConfig.bekreftelseKonfigurasjon.graceperiode with(kafkaKeyContext()) { - "Applikasjonstest hvor ingen andre tar ansvar" - { - "Bruker avslutter via rapportering" - { - val (id, key, periode) = periode(identitetsnummer = "12345678901") + "Applikasjonstest hvor ingen andre starter bekreftelsePaaVegneAv" - { + "Bruker avslutter via bekreftelse" - { + val (id, key, periode) = periode(identitetsnummer = "12345678901", startetMetadata = metadata(tidspunkt = startTime)) periodeTopic.pipeInput(key, periode) "Når perioden opprettes skal det ikke skje noe" { bekreftelseHendelseloggTopicOut.isEmpty shouldBe true } - "Etter ${intervall.toDays()} dager skal en rapportering være tilgjengelig" { - testDriver.advanceWallClockTime(intervall) + "Etter 18 dager fra en tirsdag skal en bekreftelse være tilgjengelig" { + testDriver.advanceWallClockTime(18.days) bekreftelseHendelseloggTopicOut.isEmpty shouldBe false val kv = bekreftelseHendelseloggTopicOut.readKeyValue() kv.key shouldBe key @@ -33,7 +35,7 @@ class IngenAndreTarAnsvarTest : FreeSpec({ gjelderFra shouldBe periode.startet.tidspunkt } } - "Når rapporteringen ikke blir besvart innen fristen sendes det ut en melding" { + "Når bekreftelse ikke blir besvart innen fristen sendes det ut en melding" { testDriver.advanceWallClockTime(grace + 1.days) bekreftelseHendelseloggTopicOut.isEmpty shouldBe false val kv = bekreftelseHendelseloggTopicOut.readKeyValue()