Skip to content

Commit

Permalink
Merge pull request #783 from navikt/bug/opprettelsestidspunkt
Browse files Browse the repository at this point in the history
Bug/opprettelsestidspunkt
  • Loading branch information
anderslysne authored Nov 11, 2024
2 parents 9f2ff85 + 6185268 commit c493900
Show file tree
Hide file tree
Showing 15 changed files with 293 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -87,56 +87,55 @@ object HendelseModel {
companion object {
fun createAndValidateKonkret(
konkret: LocalDateTime,
opprettetTidspunkt: OffsetDateTime,
notifikasjonOpprettetTidspunkt: OffsetDateTime,
frist: LocalDate?,
startTidspunkt: LocalDateTime?,
) =
Konkret(konkret, konkret.inOsloAsInstant()).apply {
validerGrenseVerdier(opprettetTidspunkt, frist, startTidspunkt)
validerGrenseVerdier(notifikasjonOpprettetTidspunkt, frist, startTidspunkt)
}

fun createAndValidateEtterOpprettelse(
etterOpprettelse: ISO8601Period,
opprettetTidspunkt: OffsetDateTime,
notifikasjonOpprettetTidspunkt: OffsetDateTime,
frist: LocalDate?,
startTidspunkt: LocalDateTime?,
) =
EtterOpprettelse(etterOpprettelse, (opprettetTidspunkt + etterOpprettelse).toInstant()).apply {
validerGrenseVerdier(opprettetTidspunkt, frist, startTidspunkt)
EtterOpprettelse(etterOpprettelse, (notifikasjonOpprettetTidspunkt + etterOpprettelse).toInstant()).apply {
validerGrenseVerdier(notifikasjonOpprettetTidspunkt, frist, startTidspunkt)
}

fun createAndValidateFørFrist(
rFrist: ISO8601Period,
opprettetTidspunkt: OffsetDateTime,
notifikasjonOpprettetTidspunkt: OffsetDateTime,
frist: LocalDate?
): FørFrist {
if (frist == null) {
throw UgyldigPåminnelseTidspunktException("du må oppgi `frist`, siden `foerFrist` skal være relativ til denne")
}

return FørFrist(førFrist, (LocalDateTime.of(frist, LocalTime.MAX) - førFrist).inOsloAsInstant()).apply {
validerGrenseVerdier(opprettetTidspunkt, frist, null)
validerGrenseVerdier(notifikasjonOpprettetTidspunkt, frist, null)
}
}

fun createAndValidateFørStartTidspunkt(
rStartTidpunkt: ISO8601Period,
opprettetTidspunkt: OffsetDateTime,
notifikasjonOpprettetTidspunkt: OffsetDateTime,
startTidspunkt: LocalDateTime?
): FørStartTidspunkt {
if (startTidspunkt == null) {
throw UgyldigPåminnelseTidspunktException("foerStartTidspunkt er kun gyldig på kalenderavtaler")
}

return FørStartTidspunkt(førStartTidpunkt, (startTidspunkt - førStartTidpunkt).inOsloAsInstant()).apply {
validerGrenseVerdier(opprettetTidspunkt, null, startTidspunkt)
validerGrenseVerdier(notifikasjonOpprettetTidspunkt, null, startTidspunkt)
}
}

}

fun validerGrenseVerdier(opprettetTidspunkt: OffsetDateTime, frist: LocalDate?, startTidspunkt: LocalDateTime?) {
if (påminnelseTidspunkt < opprettetTidspunkt.toInstant()) {
fun validerGrenseVerdier(notifikasjonOpprettetTidspunkt: OffsetDateTime, frist: LocalDate?, startTidspunkt: LocalDateTime?) {
if (påminnelseTidspunkt < notifikasjonOpprettetTidspunkt.toInstant()) {
throw UgyldigPåminnelseTidspunktException("påminnelsestidspunktet kan ikke være før oppgaven er opprettet")
}
if (frist != null && LocalDateTime.of(frist, LocalTime.MAX).inOsloAsInstant() < påminnelseTidspunkt) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ internal class MutationKalenderavtale(
sakId = sakId,
eksterneVarsler = eksterneVarsler.map { it.tilHendelseModel(virksomhetsnummer) },
påminnelse = paaminnelse?.tilDomene(
opprettetTidspunkt = opprettetTidspunkt,
notifikasjonOpprettetTidspunkt = opprettetTidspunkt,
frist = null,
startTidspunkt = startTidspunkt,
virksomhetsnummer = virksomhetsnummer,
Expand Down Expand Up @@ -317,7 +317,7 @@ internal class MutationKalenderavtale(
hardDelete = hardDelete?.tilHendelseModel(),
eksterneVarsler = eksterneVarsler?.map { it.tilHendelseModel(eksisterende.virksomhetsnummer) } ?: emptyList(),
påminnelse = if (nyTilstand == AVLYST) null else paaminnelse?.tilDomene(
opprettetTidspunkt = eksisterende.opprettetTidspunkt,
notifikasjonOpprettetTidspunkt = eksisterende.opprettetTidspunkt,
frist = null,
startTidspunkt = nyttStartTidspunkt ?: eksisterende.startTidspunkt,
virksomhetsnummer = eksisterende.virksomhetsnummer,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ internal class MutationNyOppgave(
it.tilHendelseModel(metadata.virksomhetsnummer)
},
påminnelse = paaminnelse?.tilDomene(
opprettetTidspunkt = metadata.opprettetTidspunkt,
notifikasjonOpprettetTidspunkt = metadata.opprettetTidspunkt,
frist = frist,
startTidspunkt = null,
virksomhetsnummer = metadata.virksomhetsnummer,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel
import no.nav.arbeidsgiver.notifikasjon.infrastruktur.graphql.*
import no.nav.arbeidsgiver.notifikasjon.produsent.ProdusentModel
import no.nav.arbeidsgiver.notifikasjon.produsent.ProdusentRepository
import java.time.OffsetDateTime
import java.util.*

internal class MutationOppgavePåminnelse(
Expand Down Expand Up @@ -83,7 +82,7 @@ internal class MutationOppgavePåminnelse(
produsentId = produsent.id,
kildeAppNavn = context.appName,
påminnelse = paaminnelse?.tilDomene(
opprettetTidspunkt = OffsetDateTime.now(),
notifikasjonOpprettetTidspunkt = notifikasjon.opprettetTidspunkt,
frist = notifikasjon.frist,
startTidspunkt = null,
virksomhetsnummer = notifikasjon.virksomhetsnummer,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import no.nav.arbeidsgiver.notifikasjon.produsent.ProdusentModel
import no.nav.arbeidsgiver.notifikasjon.produsent.ProdusentRepository
import java.time.Instant
import java.time.LocalDate
import java.time.OffsetDateTime
import java.util.*

internal class MutationOppgaveUtsettFrist(
Expand Down Expand Up @@ -87,7 +86,7 @@ internal class MutationOppgaveUtsettFrist(
frist = nyFrist,
fristEndretTidspunkt = Instant.now(),
påminnelse = paaminnelse?.tilDomene(
opprettetTidspunkt = OffsetDateTime.now(),
notifikasjonOpprettetTidspunkt = notifikasjon.opprettetTidspunkt,
frist = nyFrist,
startTidspunkt = null,
virksomhetsnummer = notifikasjon.virksomhetsnummer,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -219,12 +219,12 @@ internal data class PaaminnelseInput(
val eksterneVarsler: List<PaaminnelseEksterntVarselInput>,
) {
fun tilDomene(
opprettetTidspunkt: OffsetDateTime,
notifikasjonOpprettetTidspunkt: OffsetDateTime,
frist: LocalDate?,
startTidspunkt: LocalDateTime?,
virksomhetsnummer: String,
) : HendelseModel.Påminnelse = HendelseModel.Påminnelse(
tidspunkt = tidspunkt.tilDomene(opprettetTidspunkt, frist, startTidspunkt),
tidspunkt = tidspunkt.tilDomene(notifikasjonOpprettetTidspunkt, frist, startTidspunkt),
eksterneVarsler = eksterneVarsler.map {
it.tilDomene(virksomhetsnummer)
}
Expand All @@ -238,30 +238,30 @@ data class PaaminnelseTidspunktInput(
val foerStartTidspunkt: ISO8601Period?,
) {
fun tilDomene(
opprettetTidspunkt: OffsetDateTime,
notifikasjonOpprettetTidspunkt: OffsetDateTime,
frist: LocalDate?,
startTidspunkt: LocalDateTime?,
): HendelseModel.PåminnelseTidspunkt = when {
konkret != null -> HendelseModel.PåminnelseTidspunkt.createAndValidateKonkret(
konkret,
opprettetTidspunkt,
notifikasjonOpprettetTidspunkt,
frist,
startTidspunkt,
)
etterOpprettelse != null -> HendelseModel.PåminnelseTidspunkt.createAndValidateEtterOpprettelse(
etterOpprettelse,
opprettetTidspunkt,
notifikasjonOpprettetTidspunkt,
frist,
startTidspunkt
)
foerFrist != null -> HendelseModel.PåminnelseTidspunkt.createAndValidateFørFrist(
foerFrist,
opprettetTidspunkt,
notifikasjonOpprettetTidspunkt,
frist,
)
foerStartTidspunkt != null -> HendelseModel.PåminnelseTidspunkt.createAndValidateFørStartTidspunkt(
foerStartTidspunkt,
opprettetTidspunkt,
notifikasjonOpprettetTidspunkt,
startTidspunkt,
)
else -> throw RuntimeException("Feil format")
Expand Down
1 change: 0 additions & 1 deletion app/src/main/resources/produsent.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -1461,7 +1461,6 @@ input PaaminnelseTidspunktInput @ExactlyOneFieldGiven {
konkret: ISO8601LocalDateTime
"""
Relativ til når oppgaven/kalenderavtalen er angitt som opprettet. Altså X duration etter opprettelse.
Ved utsatt frist er den relativ til tidspunktet fristen ble utsatt.
"""
etterOpprettelse: ISO8601Duration

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ suspend fun BrukerRepository.påminnelseOpprettet(
frist = oppgave.frist,
tidspunkt = HendelseModel.PåminnelseTidspunkt.createAndValidateKonkret(
konkret = konkretPåminnelseTidspunkt,
opprettetTidspunkt = oppgave.opprettetTidspunkt,
notifikasjonOpprettetTidspunkt = oppgave.opprettetTidspunkt,
frist = oppgave.frist,
startTidspunkt = null,
),
Expand All @@ -341,7 +341,7 @@ suspend fun BrukerRepository.påminnelseOpprettet(
frist = null,
tidspunkt = HendelseModel.PåminnelseTidspunkt.createAndValidateKonkret(
konkret = konkretPåminnelseTidspunkt,
opprettetTidspunkt = kalenderavtale.opprettetTidspunkt,
notifikasjonOpprettetTidspunkt = kalenderavtale.opprettetTidspunkt,
frist = null,
startTidspunkt = kalenderavtale.startTidspunkt,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,17 @@ import io.kotest.matchers.shouldNotBe
import io.ktor.server.testing.*
import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel
import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.AltinnMottaker
import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.FristUtsatt
import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.OppgaveOpprettet
import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.OppgaveUtgått
import no.nav.arbeidsgiver.notifikasjon.produsent.Produsent
import no.nav.arbeidsgiver.notifikasjon.produsent.ProdusentRepositoryImpl
import no.nav.arbeidsgiver.notifikasjon.tid.inOsloAsInstant
import no.nav.arbeidsgiver.notifikasjon.util.FakeHendelseProdusent
import no.nav.arbeidsgiver.notifikasjon.util.getTypedContent
import no.nav.arbeidsgiver.notifikasjon.util.ktorProdusentTestServer
import no.nav.arbeidsgiver.notifikasjon.util.testDatabase
import java.time.LocalDate
import java.time.OffsetDateTime
import java.util.*

Expand Down Expand Up @@ -517,6 +520,65 @@ class OppgavePaaminnelseEndresTests : DescribeSpec({
.count() shouldBe 1
}
}
context("Påminnelse blir endret relativ til op") {

val (produsentModel, stubbedKafkaProducer, engine) = setupEngine()
OppgaveOpprettet(
virksomhetsnummer = "1",
merkelapp = merkelapp,
eksternId = eksternId,
mottakere = listOf(mottaker),
hendelseId = uuid,
notifikasjonId = uuid,
tekst = "test",
lenke = "https://nav.no",
opprettetTidspunkt = OffsetDateTime.parse("2024-01-01T01:01:00Z"),
kildeAppNavn = "",
produsentId = "",
grupperingsid = null,
eksterneVarsler = listOf(),
hardDelete = null,
frist = null,
påminnelse = null,
sakId = null
).also { produsentModel.oppdaterModellEtterHendelse(it) }

val response = engine.produsentApi(
"""
mutation {
oppgaveEndrePaaminnelse(
id: "$uuid",
paaminnelse: {
tidspunkt: {
etterOpprettelse: "P14DT"
}
}
idempotencyKey: "1234"
) {
__typename
... on OppgaveEndrePaaminnelseVellykket {
id
}
... on Error {
feilmelding
}
}
}
"""
)

it("Påminnelsestidspunkt er satt relativ til opprettelse av oppgave") {
val vellykket =
response.getTypedContent<MutationOppgavePåminnelse.OppgaveEndrePaaminnelseVellykket>("oppgaveEndrePaaminnelse")
vellykket.id shouldBe uuid
}
it("har sendt melding til kafka") {
val hendelse = stubbedKafkaProducer.hendelser
.filterIsInstance<HendelseModel.OppgavePåminnelseEndret>()
.last()
hendelse.påminnelse?.tidspunkt?.påminnelseTidspunkt shouldBe OffsetDateTime.parse("2024-01-15T01:01:00Z").toInstant()
}
}
}
})

Expand Down
Loading

0 comments on commit c493900

Please sign in to comment.