diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/hendelse/Hendelse.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/hendelse/Hendelse.kt index d9a658e47..5626c136f 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/hendelse/Hendelse.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/hendelse/Hendelse.kt @@ -87,27 +87,27 @@ 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( førFrist: ISO8601Period, - opprettetTidspunkt: OffsetDateTime, + notifikasjonOpprettetTidspunkt: OffsetDateTime, frist: LocalDate? ): FørFrist { if (frist == null) { @@ -115,13 +115,13 @@ object HendelseModel { } 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( førStartTidpunkt: ISO8601Period, - opprettetTidspunkt: OffsetDateTime, + notifikasjonOpprettetTidspunkt: OffsetDateTime, startTidspunkt: LocalDateTime? ): FørStartTidspunkt { if (startTidspunkt == null) { @@ -129,14 +129,13 @@ object HendelseModel { } 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) { diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationKalenderavtale.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationKalenderavtale.kt index 43923813a..202220bad 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationKalenderavtale.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationKalenderavtale.kt @@ -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, @@ -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, diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationNyOppgave.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationNyOppgave.kt index ddc82f819..e63f48522 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationNyOppgave.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationNyOppgave.kt @@ -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, diff --git "a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationOppgaveP\303\245minnelse.kt" "b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationOppgaveP\303\245minnelse.kt" index 06c2e4863..09d721bc3 100644 --- "a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationOppgaveP\303\245minnelse.kt" +++ "b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationOppgaveP\303\245minnelse.kt" @@ -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( @@ -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, diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationOppgaveUtsettFrist.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationOppgaveUtsettFrist.kt index 1a0b05bd1..fdc4a0580 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationOppgaveUtsettFrist.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/MutationOppgaveUtsettFrist.kt @@ -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( @@ -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, diff --git a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/NyNotifikasjonFelles.kt b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/NyNotifikasjonFelles.kt index d7a0e694e..d30c1b42a 100644 --- a/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/NyNotifikasjonFelles.kt +++ b/app/src/main/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/NyNotifikasjonFelles.kt @@ -219,12 +219,12 @@ internal data class PaaminnelseInput( val eksterneVarsler: List, ) { 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) } @@ -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") diff --git a/app/src/main/resources/produsent.graphql b/app/src/main/resources/produsent.graphql index 3557946d7..bb2b87daf 100644 --- a/app/src/main/resources/produsent.graphql +++ b/app/src/main/resources/produsent.graphql @@ -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 diff --git a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/bruker/Common.kt b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/bruker/Common.kt index 1918ac36b..55696e6bf 100644 --- a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/bruker/Common.kt +++ b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/bruker/Common.kt @@ -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, ), @@ -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, ), diff --git a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/OppgavePaaminnelseEndresTests.kt b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/OppgavePaaminnelseEndresTests.kt index dd54ccc38..4875c999e 100644 --- a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/OppgavePaaminnelseEndresTests.kt +++ b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/OppgavePaaminnelseEndresTests.kt @@ -6,7 +6,9 @@ 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 @@ -14,6 +16,7 @@ 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.* @@ -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("oppgaveEndrePaaminnelse") + vellykket.id shouldBe uuid + } + it("har sendt melding til kafka") { + val hendelse = stubbedKafkaProducer.hendelser + .filterIsInstance() + .last() + hendelse.påminnelse?.tidspunkt?.påminnelseTidspunkt shouldBe OffsetDateTime.parse("2024-01-15T01:01:00Z").toInstant() + } + } } }) diff --git "a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/P\303\245minnelseInputTests.kt" "b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/P\303\245minnelseInputTests.kt" new file mode 100644 index 000000000..e05680c47 --- /dev/null +++ "b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/P\303\245minnelseInputTests.kt" @@ -0,0 +1,124 @@ +package no.nav.arbeidsgiver.notifikasjon.produsent.api + +import io.kotest.core.spec.style.DescribeSpec +import io.kotest.matchers.shouldBe +import no.nav.arbeidsgiver.notifikasjon.infrastruktur.ISO8601Period +import no.nav.arbeidsgiver.notifikasjon.tid.inOsloAsInstant +import org.junit.jupiter.api.assertThrows +import java.time.LocalDate +import java.time.LocalDateTime +import java.time.LocalTime +import java.time.OffsetDateTime + +class PåminnelseInputTests : DescribeSpec({ + context("Konkret påminnelse") { + it("Påminnelsestidspunkt er blir satt riktig") { + val notifikasjonOpprettetTidspunkt = OffsetDateTime.parse("2024-01-01T01:01Z") + val konkretPåminnelseInput = PaaminnelseInput( + tidspunkt = PaaminnelseTidspunktInput(konkret = LocalDateTime.parse("2024-01-07T01:01"), etterOpprettelse = null, foerFrist = null, foerStartTidspunkt = null), + eksterneVarsler = emptyList()); + + val result = konkretPåminnelseInput.tilDomene(notifikasjonOpprettetTidspunkt, null, null, "123"); + + val expectedPåminnelseTidspunkt = konkretPåminnelseInput.tidspunkt.konkret!!.inOsloAsInstant() + result.tidspunkt.påminnelseTidspunkt shouldBe expectedPåminnelseTidspunkt + } + + it("Påminnelse er etter oppgavens frist"){ + val notifikasjonOpprettetTidspunkt = OffsetDateTime.parse("2024-01-01T01:01Z") + val konkretPåminnelseInput = PaaminnelseInput( + tidspunkt = PaaminnelseTidspunktInput(konkret = LocalDateTime.parse("2024-01-07T01:01"), etterOpprettelse = null, foerFrist = null, foerStartTidspunkt = null), + eksterneVarsler = emptyList()); + + assertThrows { + konkretPåminnelseInput.tilDomene(notifikasjonOpprettetTidspunkt, LocalDate.parse("2024-01-06"), null, "123"); + } + } + + it("Påminnelse er før notifikasjon er opprettet") { + val notifikasjonOpprettetTidspunkt = OffsetDateTime.parse("2024-02-01T01:01Z") + val konkretPåminnelseInput = PaaminnelseInput( + tidspunkt = PaaminnelseTidspunktInput(konkret = LocalDateTime.parse("2024-01-07T01:01"), etterOpprettelse = null, foerFrist = null, foerStartTidspunkt = null), + eksterneVarsler = emptyList()); + + assertThrows { + konkretPåminnelseInput.tilDomene(notifikasjonOpprettetTidspunkt, null, null, "123"); + } + } + } + context("PåminnelsesTidspunkt relativ til OppgaveOpprettet") { + it("Påminnelsetidspunkt blir satt riktig") { + val notifikasjonOpprettetTidspunkt = OffsetDateTime.parse("2024-01-01T01:01Z") + val etterOpprettelsePåminnelseInput = PaaminnelseInput( + tidspunkt = PaaminnelseTidspunktInput(konkret = null, etterOpprettelse = ISO8601Period.parse("P7DT"), foerFrist = null, foerStartTidspunkt = null), + eksterneVarsler = emptyList()); + + val result = etterOpprettelsePåminnelseInput.tilDomene(notifikasjonOpprettetTidspunkt, null, null, "123"); + + val expectedPåminnelseTidspunkt = notifikasjonOpprettetTidspunkt.plusDays(7).toInstant() + result.tidspunkt.påminnelseTidspunkt shouldBe expectedPåminnelseTidspunkt + } + } + + context("PåminnelsesTidspunkt relativ til frist på oppgave") { + it("Påminnelsetidspunkt blir satt riktig") { + val notifikasjonOpprettetTidspunkt = OffsetDateTime.parse("2024-01-01T01:01Z") + val oppgaveFrist = LocalDate.parse("2024-02-08") + val førFristPåminnelseInput = PaaminnelseInput( + tidspunkt = PaaminnelseTidspunktInput(konkret = null, etterOpprettelse = null, foerFrist = ISO8601Period.parse("P7DT"), foerStartTidspunkt = null), + eksterneVarsler = emptyList()); + + val result = førFristPåminnelseInput.tilDomene(notifikasjonOpprettetTidspunkt, oppgaveFrist, null, "123"); + + val expectedPåminnelseTidspunkt = LocalDateTime.of(oppgaveFrist.minusDays(7), LocalTime.MAX).inOsloAsInstant() + result.tidspunkt.påminnelseTidspunkt shouldBe expectedPåminnelseTidspunkt + } + + it ("Frist på oppgaven er null"){ + val notifikasjonOpprettetTidspunkt = OffsetDateTime.parse("2024-02-01T01:01Z") + val førFristPåminnelseInput = PaaminnelseInput( + tidspunkt = PaaminnelseTidspunktInput(konkret = null, etterOpprettelse = null, foerFrist = ISO8601Period.parse("P7DT"), foerStartTidspunkt = null), + eksterneVarsler = emptyList()); + + assertThrows { + førFristPåminnelseInput.tilDomene(notifikasjonOpprettetTidspunkt, null, null, "123"); + } + } + + it ("Påminnelse vil være før oppgaven er opprettet"){ + val notifikasjonOpprettetTidspunkt = OffsetDateTime.parse("2024-02-01T01:01Z") + val førFristPåminnelseInput = PaaminnelseInput( + tidspunkt = PaaminnelseTidspunktInput(konkret = null, etterOpprettelse = null, foerFrist = ISO8601Period.parse("P7DT"), foerStartTidspunkt = null), + eksterneVarsler = emptyList()); + + assertThrows { + førFristPåminnelseInput.tilDomene(notifikasjonOpprettetTidspunkt, LocalDate.parse("2024-02-02"), null, "123"); + } + } + } + context("PåminnelsesTidspunkt er relativ til startTidspunkt på kalenderavtale"){ + it("Påminnelsetidspunkt blir satt riktig"){ + val notifikasjonOpprettetTidspunkt = OffsetDateTime.parse("2024-01-01T01:01Z") + val kalenderAvtaleStartTidspunkt = LocalDateTime.parse("2024-01-15T01:01") + val førStartTidspunktPåminnelseInput = PaaminnelseInput( + tidspunkt = PaaminnelseTidspunktInput(konkret = null, etterOpprettelse = null, foerFrist = null, foerStartTidspunkt = ISO8601Period.parse("P7DT")), + eksterneVarsler = emptyList()); + + val result = førStartTidspunktPåminnelseInput.tilDomene(notifikasjonOpprettetTidspunkt, null, kalenderAvtaleStartTidspunkt, "123"); + val expectedPåminnelseTidspunkt = kalenderAvtaleStartTidspunkt.minusDays(7).inOsloAsInstant() + result.tidspunkt.påminnelseTidspunkt shouldBe expectedPåminnelseTidspunkt + } + + it("Påminnelsetidspunkt vil være før kalenderavtalen er opprettet"){ + val notifikasjonOpprettetTidspunkt = OffsetDateTime.parse("2024-01-01T01:01Z") + val kalenderAvtaleStartTidspunkt = LocalDateTime.parse("2024-01-03T01:01") + val førStartTidspunktPåminnelseInput = PaaminnelseInput( + tidspunkt = PaaminnelseTidspunktInput(konkret = null, etterOpprettelse = null, foerFrist = null, foerStartTidspunkt = ISO8601Period.parse("P7DT")), + eksterneVarsler = emptyList()); + + assertThrows { + førStartTidspunktPåminnelseInput.tilDomene(notifikasjonOpprettetTidspunkt, null, kalenderAvtaleStartTidspunkt, "123"); + } + } + } +}) diff --git a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/UtsattFristTests.kt b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/UtsattFristTests.kt index cab4bfb58..a882835a1 100644 --- a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/UtsattFristTests.kt +++ b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/produsent/api/UtsattFristTests.kt @@ -3,6 +3,7 @@ package no.nav.arbeidsgiver.notifikasjon.produsent.api import io.kotest.core.spec.style.DescribeSpec import io.kotest.matchers.shouldBe 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.BeskjedOpprettet import no.nav.arbeidsgiver.notifikasjon.hendelse.HendelseModel.FristUtsatt @@ -566,6 +567,80 @@ class UtsattFristTests : DescribeSpec({ response.getTypedContent("oppgaveUtsettFristByEksternId") } } + context("Utgått Oppgave får utsatt frist") { + + 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) + produsentModel.oppdaterModellEtterHendelse( + OppgaveUtgått( + virksomhetsnummer = it.virksomhetsnummer, + notifikasjonId = it.notifikasjonId, + hendelseId = it.hendelseId, + produsentId = it.produsentId, + kildeAppNavn = it.kildeAppNavn, + hardDelete = null, + nyLenke = null, + utgaattTidspunkt = OffsetDateTime.parse("2024-01-07T01:01Z") + ) + ) + } + + val response = engine.produsentApi( + """ + mutation { + oppgaveUtsettFristByEksternId( + eksternId: "$eksternId", + merkelapp: "$merkelapp", + nyFrist: "2024-01-21", + paaminnelse: { + tidspunkt: { + etterOpprettelse: "P14DT" + } + } + ) { + __typename + ... on OppgaveUtsettFristVellykket { + id + } + ... on Error { + feilmelding + } + } + } + """ + ) + it("Påminnelsestidspunkt er satt relativ til opprettelse av oppgave") { + val vellykket = + response.getTypedContent("oppgaveUtsettFristByEksternId") + vellykket.id shouldBe uuid + } + it("har sendt melding til kafka") { + val hendelse = stubbedKafkaProducer.hendelser + .filterIsInstance() + .last() + hendelse.frist shouldBe LocalDate.parse("2024-01-21") + hendelse.påminnelse?.tidspunkt?.påminnelseTidspunkt shouldBe OffsetDateTime.parse("2024-01-15T01:01:00Z").toInstant() + } + } } }) diff --git "a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/KalenderavtaleTests.kt" "b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/KalenderavtaleTests.kt" index 0d64d78bc..151045f4c 100644 --- "a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/KalenderavtaleTests.kt" +++ "b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/KalenderavtaleTests.kt" @@ -66,7 +66,7 @@ class KalenderavtaleTests : DescribeSpec({ service.processHendelse(kalenderavtaleOpprettet, metadata) val nyttTidspunkt = HendelseModel.PåminnelseTidspunkt.createAndValidateFørStartTidspunkt( førStartTidpunkt = ISO8601Period.parse("P2D"), - opprettetTidspunkt = opprettetTidspunkt, + notifikasjonOpprettetTidspunkt = opprettetTidspunkt, startTidspunkt = startTidspunkt, ) service.processHendelse( @@ -154,7 +154,7 @@ private val kalenderavtaleOpprettet = HendelseModel.KalenderavtaleOpprettet( påminnelse = HendelseModel.Påminnelse( tidspunkt = HendelseModel.PåminnelseTidspunkt.createAndValidateFørStartTidspunkt( førStartTidpunkt = ISO8601Period.parse("P1D"), - opprettetTidspunkt = opprettetTidspunkt, + notifikasjonOpprettetTidspunkt = opprettetTidspunkt, startTidspunkt = startTidspunkt, ), eksterneVarsler = listOf( diff --git "a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/OppgaveP\303\245minnelseEndretTests.kt" "b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/OppgaveP\303\245minnelseEndretTests.kt" index b5a44d3c7..7e86295bc 100644 --- "a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/OppgaveP\303\245minnelseEndretTests.kt" +++ "b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/OppgaveP\303\245minnelseEndretTests.kt" @@ -132,7 +132,7 @@ private val oppgaveUtenPaminnelseOpprettet = HendelseModel.OppgaveOpprettet( private val førstePåminnelse = HendelseModel.Påminnelse( tidspunkt = HendelseModel.PåminnelseTidspunkt.createAndValidateEtterOpprettelse( etterOpprettelse = ISO8601Period.parse("P4D"), - opprettetTidspunkt = oppgaveUtenPaminnelseOpprettet.opprettetTidspunkt, + notifikasjonOpprettetTidspunkt = oppgaveUtenPaminnelseOpprettet.opprettetTidspunkt, frist = frist, startTidspunkt = null, ), @@ -142,7 +142,7 @@ private val førstePåminnelse = HendelseModel.Påminnelse( private val andrePåminnelse = HendelseModel.Påminnelse( tidspunkt = HendelseModel.PåminnelseTidspunkt.createAndValidateEtterOpprettelse( etterOpprettelse = ISO8601Period.parse("P11D"), - opprettetTidspunkt = oppgaveUtenPaminnelseOpprettet.opprettetTidspunkt, + notifikasjonOpprettetTidspunkt = oppgaveUtenPaminnelseOpprettet.opprettetTidspunkt, frist = frist, startTidspunkt = null, ), diff --git "a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/UtsattFristTests.kt" "b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/UtsattFristTests.kt" index 27acbc0e4..f11880514 100644 --- "a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/UtsattFristTests.kt" +++ "b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/skedulert_p\303\245minnelse/UtsattFristTests.kt" @@ -213,7 +213,7 @@ private val oppgaveOpprettet = HendelseModel.OppgaveOpprettet( påminnelse = HendelseModel.Påminnelse( tidspunkt = HendelseModel.PåminnelseTidspunkt.createAndValidateEtterOpprettelse( etterOpprettelse = ISO8601Period.parse("P7D"), - opprettetTidspunkt = oppgaveOpprettetTidspunkt, + notifikasjonOpprettetTidspunkt = oppgaveOpprettetTidspunkt, frist = førsteFrist, startTidspunkt = null, ), @@ -248,7 +248,7 @@ private val fristUtsatt = HendelseModel.FristUtsatt( påminnelse = HendelseModel.Påminnelse( tidspunkt = HendelseModel.PåminnelseTidspunkt.createAndValidateEtterOpprettelse( etterOpprettelse = ISO8601Period.parse("P7D"), - opprettetTidspunkt = fristEndretTidspunkt, + notifikasjonOpprettetTidspunkt = fristEndretTidspunkt, frist = andreFrist, startTidspunkt = null, ), diff --git a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/util/EksempelHendelser.kt b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/util/EksempelHendelser.kt index d447965c5..1da5c2e6a 100644 --- a/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/util/EksempelHendelser.kt +++ b/app/src/test/kotlin/no/nav/arbeidsgiver/notifikasjon/util/EksempelHendelser.kt @@ -658,7 +658,7 @@ object EksempelHendelse { frist = LocalDate.parse("2021-01-14"), tidspunkt = HendelseModel.PåminnelseTidspunkt.createAndValidateKonkret( konkret = LocalDateTime.parse("2021-01-10T12:00:00"), - opprettetTidspunkt = OffsetDateTime.parse("2021-01-01T13:37:00Z"), + notifikasjonOpprettetTidspunkt = OffsetDateTime.parse("2021-01-01T13:37:00Z"), frist = LocalDate.parse("2021-01-14"), startTidspunkt = null, ),