Skip to content

Commit

Permalink
Justert tester til å tåle endringer i BekreftelseConfig, lagt til tes…
Browse files Browse the repository at this point in the history
…t for opprettelsen av ikkeKlar bekreftelse ved periode start
  • Loading branch information
robertkittilsen committed Sep 25, 2024
1 parent fab120b commit 6c27ae7
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,17 @@ fun fristForNesteBekreftelse(forrige: Instant, interval: Duration): Instant {
return forrige.plus(interval)
}

fun gjenstaendeGracePeriode(timestamp: Instant, gjelderTil: Instant): Duration {
val gracePeriode = BekreftelseConfig.gracePeriode
val utvidetGjelderTil = gjelderTil.plus(gracePeriode)

return if (timestamp.isAfter(utvidetGjelderTil)) {
Duration.ZERO
} else {
Duration.between(timestamp, utvidetGjelderTil)
}
}

// TODO: Finn regler for magic monday og gjør nødvendig justeringer
/*fun fristForNesteBekreftelseWithMagicMonday(forrige: Instant, interval: Duration): Instant {
Expand All @@ -28,22 +39,11 @@ fun fristForNesteBekreftelse(forrige: Instant, interval: Duration): Instant {
return forrige
.plus(interval)
.let { LocalDate.ofInstant(it, ZoneId.systemDefault()) }
//.with(magicMondayAdjuster)
.with(magicMondayAdjuster)
.plusDays(1)
.atStartOfDay(zoneId).toInstant()
}*/

fun gjenstaendeGracePeriode(timestamp: Instant, gjelderTil: Instant): Duration {
val gracePeriode = BekreftelseConfig.gracePeriode
val utvidetGjelderTil = gjelderTil.plus(gracePeriode)

return if (timestamp.isAfter(utvidetGjelderTil)) {
Duration.ZERO
} else {
Duration.between(timestamp, utvidetGjelderTil)
}
}

class MagicMondayAdjuster: TemporalAdjuster {
override fun adjustInto(temporal: java.time.temporal.Temporal): java.time.temporal.Temporal {
val internalAdjuster = TemporalAdjusters.next(DayOfWeek.MONDAY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import org.apache.kafka.streams.StreamsConfig
import org.apache.kafka.streams.TopologyTestDriver
import org.apache.kafka.streams.state.internals.InMemoryKeyValueBytesStoreSupplier
import org.apache.kafka.streams.state.internals.KeyValueStoreBuilder
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.time.Duration
import java.time.Instant
Expand All @@ -44,7 +45,7 @@ class ApplicationTestContext(initialWallClockTime: Instant = Instant.now()) {
kafkaKeysClient = inMemoryKafkaKeysMock()
)

val logger = LoggerFactory.getLogger(ApplicationTestContext::class.java)
val logger: Logger = LoggerFactory.getLogger(ApplicationTestContext::class.java)

val testDriver: TopologyTestDriver =
with(applicationContext) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,53 @@ 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.bekreftelsetjeneste.tilstand.Bekreftelse
import no.nav.paw.bekreftelsetjeneste.tilstand.BekreftelseConfig
import no.nav.paw.bekreftelsetjeneste.tilstand.InternTilstand
import no.nav.paw.bekreftelsetjeneste.tilstand.PeriodeInfo
import no.nav.paw.bekreftelsetjeneste.tilstand.Tilstand
import no.nav.paw.bekreftelsetjeneste.tilstand.fristForNesteBekreftelse
import java.time.Duration
import java.time.Instant

class BekreftelsePunctuatorTest : FreeSpec({
// TODO: Lag individuelle tester for hver hendelse, for BekreftelseMeldingMottatt og BaOmAaAvsluttePeriode
"BekreftelsePunctuator sender riktig hendelser" - {
with(ApplicationTestContext()){
val (periode, kafkaKeyResponse) = periode(identitetsnummer = "12345678901")

val startTime = Instant.ofEpochMilli(1704185347) // 01-01-2024 - 08:49:07
val identitetsnummer = "12345678901"

"BekreftelsePunctuator sender riktig hendelser i rekkefølge" - {
with(ApplicationTestContext(initialWallClockTime = startTime)){
val (periode, kafkaKeyResponse) = periode(identitetsnummer = identitetsnummer, startet = startTime)
periodeTopic.pipeInput(kafkaKeyResponse.key, periode)
"Når perioden opprettes skal det ikke skje noe" {
"Når perioden opprettes skal det opprettes en intern tilstand med en bekreftelse" {
testDriver.advanceWallClockTime(Duration.ofSeconds(5))
hendelseLoggTopic.isEmpty shouldBe true
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,
sisteVarselOmGjenstaaendeGraceTid = null,
bekreftelseId = currentState.bekreftelser.first().bekreftelseId,
gjelderFra = periode.startet.tidspunkt,
gjelderTil = fristForNesteBekreftelse(periode.startet.tidspunkt, BekreftelseConfig.bekreftelseInterval)
)
)
)

}
"Etter 11 dager skal det ha blitt sendt en BekreftelseTilgjengelig hendelse" {
testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseInterval.minus(BekreftelseConfig.bekreftelseTilgjengeligOffset))
testDriver.advanceWallClockTime(Duration.ofHours(1))
testDriver.advanceWallClockTime(Duration.ofSeconds(5))
val stateStore:StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName)
stateStore.all().use {
it.forEach {
Expand All @@ -38,7 +70,7 @@ class BekreftelsePunctuatorTest : FreeSpec({
}
"Etter 14 dager skal det ha blitt sendt en LeveringsFristUtloept hendelse" {
testDriver.advanceWallClockTime(BekreftelseConfig.bekreftelseTilgjengeligOffset)
testDriver.advanceWallClockTime(Duration.ofHours(1))
testDriver.advanceWallClockTime(Duration.ofSeconds(5))
val stateStore:StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName)
stateStore.all().use {
it.forEach {
Expand All @@ -55,7 +87,7 @@ class BekreftelsePunctuatorTest : FreeSpec({
}
"Etter 17,5 dager uten svar skal det ha blitt sendt en RegisterGracePeriodeGjenstaaendeTid hendelse" {
testDriver.advanceWallClockTime(BekreftelseConfig.varselFoerGracePeriodeUtloept)
testDriver.advanceWallClockTime(Duration.ofHours(1))
testDriver.advanceWallClockTime(Duration.ofSeconds(5))
val stateStore:StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName)
stateStore.all().use {
it.forEach {
Expand All @@ -72,7 +104,7 @@ class BekreftelsePunctuatorTest : FreeSpec({
}
"Etter 21 dager uten svar skal det ha blitt sendt en RegisterGracePeriodeUtloept hendelse" {
testDriver.advanceWallClockTime(BekreftelseConfig.varselFoerGracePeriodeUtloept)
testDriver.advanceWallClockTime(Duration.ofHours(1))
testDriver.advanceWallClockTime(Duration.ofSeconds(5))
val stateStore:StateStore = testDriver.getKeyValueStore(applicationConfiguration.stateStoreName)
stateStore.all().use {
it.forEach {
Expand All @@ -88,8 +120,13 @@ class BekreftelsePunctuatorTest : FreeSpec({
kv.value.shouldBeInstanceOf<RegisterGracePeriodeUtloept>()
}
"Etter 25 dager skal det ha blitt sendt en BekreftelseTilgjengelig hendelse" {
testDriver.advanceWallClockTime(Duration.ofDays(4))
testDriver.advanceWallClockTime(Duration.ofHours(1))
testDriver.advanceWallClockTime(
Duration.between(
startTime.plus(BekreftelseConfig.bekreftelseInterval).plus(BekreftelseConfig.gracePeriode),
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 {
Expand All @@ -106,6 +143,13 @@ class BekreftelsePunctuatorTest : FreeSpec({
}
}
}
// TODO: Lag individuelle tester for hver hendelse, for BekreftelseMeldingMottatt og BaOmAaAvsluttePeriode
/*"BekreftelsePunctuator håndterer BekreftelseMeldingMotatt og BaOmAaAvsluttePeriode hendelser" - {
with(ApplicationTestContext(initialWallClockTime = startTime)){
val (periode, kafkaKeyResponse) = periode(identitetsnummer = identitetsnummer, startet = startTime)
}
}*/
})


0 comments on commit 6c27ae7

Please sign in to comment.