Skip to content

Commit

Permalink
Utvidet tester for ansvar og fikset bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
nilsmsa committed Oct 24, 2024
1 parent 4dcddd9 commit d81236c
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 57 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ fun InternTilstand.oppdaterBekreftelse(ny: Bekreftelse): InternTilstand {
return copy(bekreftelser = nyBekreftelser)
}

fun InternTilstand.leggTilNyBekreftelse(ny: Bekreftelse): InternTilstand {
fun InternTilstand.leggTilNyEllerOppdaterBekreftelse(ny: Bekreftelse): InternTilstand {
val nyBekreftelser = bekreftelser
.filter { it.bekreftelseId != ny.bekreftelseId }
.plus(ny)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@ import io.opentelemetry.api.trace.Span
import io.opentelemetry.api.trace.SpanKind
import io.opentelemetry.api.trace.StatusCode
import io.opentelemetry.instrumentation.annotations.WithSpan
import no.nav.paw.bekreftelse.internehendelser.BaOmAaAvsluttePeriode
import no.nav.paw.bekreftelse.internehendelser.BekreftelseHendelse
import no.nav.paw.bekreftelse.internehendelser.BekreftelseHendelseSerde
import no.nav.paw.bekreftelse.internehendelser.BekreftelseMeldingMottatt
import no.nav.paw.bekreftelse.internehendelser.*
import no.nav.paw.bekreftelsetjeneste.config.ApplicationConfig
import no.nav.paw.bekreftelsetjeneste.tilstand.*
import no.nav.paw.config.kafka.streams.Punctuation
Expand Down Expand Up @@ -96,7 +93,9 @@ fun processPawNamespace(
}

return when (val sisteTilstand = bekreftelse.sisteTilstand()) {
is VenterSvar, is KlarForUtfylling -> {
is VenterSvar,
is KlarForUtfylling,
is AnsvarOvertattAvAndre -> {
val (hendelser, oppdatertBekreftelse) = behandleGyldigSvar(gjeldeneTilstand, hendelse, bekreftelse)
Span.current().setAttribute("bekreftelse.tilstand", sisteTilstand.toString())
gjeldeneTilstand.oppdaterBekreftelse(oppdatertBekreftelse) to hendelser
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package no.nav.paw.bekreftelsetjeneste

import io.kotest.assertions.withClue
import io.kotest.matchers.shouldBe
import no.nav.paw.bekreftelsetjeneste.config.BekreftelseIntervals
import no.nav.paw.bekreftelsetjeneste.tilstand.*
import java.time.Instant
import java.util.*

inline fun <T1: Any, reified T2: T1> List<T1>.assertExactlyOne(f: T2.() -> Unit) =
filterIsInstance<T2>()
.let {
withClue("Expected exactly one ${T2::class.simpleName} but found ${it.size}") {
it.size shouldBe 1
}
it.first()
}.apply(f)

fun internTilstand(
periodeStart: Instant,
periodeId: UUID = UUID.randomUUID(),
identitetsnummer: String = "12345678901",
arbeidsoekerId: Long = 1L,
recordKey: Long = 1L,
avsluttet: Instant? = null,
bekreftelser: List<Bekreftelse> = emptyList()
) = InternTilstand(
periode = PeriodeInfo(
periodeId = periodeId,
identitetsnummer = identitetsnummer,
arbeidsoekerId = arbeidsoekerId,
recordKey = recordKey,
startet = periodeStart,
avsluttet = avsluttet
),
bekreftelser = bekreftelser
)

fun BekreftelseIntervals.bekreftelse(
gjelderFra: Instant = Instant.now(),
gjelderTil: Instant = gjelderFra + interval,
ikkeKlarForUtfylling: IkkeKlarForUtfylling? = IkkeKlarForUtfylling(gjelderFra),
klarForUtfylling: KlarForUtfylling? = KlarForUtfylling(gjelderFra + interval - tilgjengeligOffset),
venterSvar: VenterSvar? = VenterSvar(gjelderFra + interval),
gracePeriodeVarselet: GracePeriodeVarselet? = GracePeriodeVarselet(gjelderFra + interval + varselFoerGraceperiodeUtloept),
gracePeriodeUtloept: GracePeriodeUtloept? = GracePeriodeUtloept(gjelderFra + interval + graceperiode)
): Bekreftelse = Bekreftelse(
tilstandsLogg = listOfNotNull(
ikkeKlarForUtfylling,
klarForUtfylling,
venterSvar,
gracePeriodeVarselet,
gracePeriodeUtloept
).sortedBy { it.timestamp }
.let {
BekreftelseTilstandsLogg(
siste = it.last(),
tidligere = it.dropLast(1)
)
},
bekreftelseId = UUID.randomUUID(),
gjelderFra = gjelderFra,
gjelderTil = gjelderTil
)

fun BekreftelseIntervals.gracePeriodeVarsel(startTid: Instant): Instant =
startTid.plus(interval).plus(graceperiode).minus(varselFoerGraceperiodeUtloept)

fun BekreftelseIntervals.gracePeriodeUtloeper(startTid: Instant): Instant =
startTid.plus(interval).plus(graceperiode)

fun BekreftelseIntervals.tilgjengelig(startTid: Instant): Instant = startTid.plus(interval).plus(tilgjengeligOffset)

fun BekreftelseIntervals.frist(startTid: Instant): Instant = startTid.plus(interval)
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ import io.kotest.matchers.shouldBe
import io.kotest.matchers.types.shouldBeInstanceOf
import no.nav.paw.bekreftelse.ansvar.v1.vo.TarAnsvar
import no.nav.paw.bekreftelse.internehendelser.AndreHarOvertattAnsvar
import no.nav.paw.bekreftelsetjeneste.*
import no.nav.paw.bekreftelsetjeneste.config.BekreftelseIntervals
import no.nav.paw.bekreftelsetjeneste.tilstand.*
import java.time.Duration
import java.time.Instant
import java.util.*

class DagpengerTarAnsvar1DagFoerGraceperiodenUtloeper : FreeSpec({
val intervaller = BekreftelseIntervals(
Expand All @@ -24,32 +24,24 @@ class DagpengerTarAnsvar1DagFoerGraceperiodenUtloeper : FreeSpec({
val initiellTilstand = internTilstand(periodeStart)

"${Loesning.DAGPENGER} tar ansvar 1 dag før grace perioden utøper" - {
val tilstand = initiellTilstand.leggTilNyBekreftelse(
ny = Bekreftelse(
tilstandsLogg = BekreftelseTilstandsLogg(
siste = GracePeriodeVarselet(intervaller.gracePeriodeVarsel(periodeStart)),
tidligere = listOf(
KlarForUtfylling(intervaller.tilgjengelig(periodeStart)),
VenterSvar(intervaller.frist(periodeStart))
)
),
bekreftelseId = UUID.randomUUID(),
val tilstand = initiellTilstand.leggTilNyEllerOppdaterBekreftelse(
ny = intervaller.bekreftelse(
gjelderFra = periodeStart,
gjelderTil = periodeStart.plus(intervaller.interval)
gracePeriodeUtloept = null
)
)
val dagpengerTarAnsvar = no.nav.paw.arbeidssoekerregisteret.testdata.bekreftelse.tarAnsvar(
periodeId = tilstand.periode.periodeId,
bekreftelsesloesning = no.nav.paw.bekreftelse.ansvar.v1.vo.Bekreftelsesloesning.DAGPENGER,
)
val handlinger = haandterAnsvarEndret(
wallclock = WallClock(periodeStart.plus(intervaller.graceperiode).minus(1.days)),
wallclock = WallClock(intervaller.gracePeriodeUtloeper(periodeStart) - 1.days),
tilstand = tilstand,
ansvar = null,
ansvarEndret = dagpengerTarAnsvar
)
"Ansvar skal skrives til key-value store" {
handlinger.handling<SkrivAnsvar> {
handlinger.assertExactlyOne<Handling, SkrivAnsvar> {
id shouldBe tilstand.periode.periodeId
value shouldBe Ansvar(
periodeId = tilstand.periode.periodeId,
Expand All @@ -64,52 +56,22 @@ class DagpengerTarAnsvar1DagFoerGraceperiodenUtloeper : FreeSpec({
}
}
"AndreHarOvertattAnsvar hendelse skal sendes" {
handlinger.handling<SendHendelse> {
handlinger.assertExactlyOne<Handling, SendHendelse> {
hendelse.shouldBeInstanceOf<AndreHarOvertattAnsvar>()
hendelse.periodeId shouldBe tilstand.periode.periodeId
}
}
"Åpne bekreftelser settes til AnsvarOvertattAvAndre" {
handlinger.handling<SkrivInternTilstand> {
id shouldBe tilstand.periode.periodeId
value.bekreftelser.size shouldBe 1
value.bekreftelser.first().sisteTilstand().shouldBeInstanceOf<AnsvarOvertattAvAndre>()
withClue("Handlinger inneholdt ikke skriving av intern tilstand med forventet status: ${handlinger.filterIsInstance<SkrivInternTilstand>()}") {
handlinger.assertExactlyOne<Handling, SkrivInternTilstand> {
id shouldBe tilstand.periode.periodeId
value.bekreftelser.size shouldBe 1
value.bekreftelser.first().sisteTilstand().shouldBeInstanceOf<AnsvarOvertattAvAndre>()
}
}
}
"Ingen andre handlinger skal utføres" {
handlinger.size shouldBe 3
}
}

})

inline fun <reified T : Handling> List<Handling>.handling(f: T.() -> Unit = { }): T =
filterIsInstance<T>()
.let {
withClue("Expected exactly one ${T::class.simpleName} but found ${it.size}") {
it.size shouldBe 1
}
it.first()
}

fun internTilstand(periodeStart: Instant) = InternTilstand(
periode = PeriodeInfo(
periodeId = UUID.randomUUID(),
identitetsnummer = "12345678901",
arbeidsoekerId = 1L,
recordKey = 1L,
startet = periodeStart,
avsluttet = null
),
bekreftelser = emptyList()
)

fun BekreftelseIntervals.gracePeriodeVarsel(startTid: Instant): Instant =
startTid.plus(interval).plus(graceperiode).minus(varselFoerGraceperiodeUtloept)

fun BekreftelseIntervals.gracePeriodeUtloeper(startTid: Instant): Instant =
startTid.plus(interval).plus(graceperiode)

fun BekreftelseIntervals.tilgjengelig(startTid: Instant): Instant = startTid.plus(interval).plus(tilgjengeligOffset)

fun BekreftelseIntervals.frist(startTid: Instant): Instant = startTid.plus(interval)

0 comments on commit d81236c

Please sign in to comment.