diff --git a/build.gradle.kts b/build.gradle.kts index 46b4ecc09..5aaceaed8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { id("com.github.davidmc24.gradle.plugin.avro") version "1.9.1" id("project-report") id("jacoco") - id("org.sonarqube") version "4.4.1.3373" + id("org.sonarqube") version "6.0.0.5145" id("org.springframework.boot") version "3.4.0" kotlin("plugin.lombok") version "2.1.0" id("io.freefair.lombok") version "8.11" @@ -153,7 +153,7 @@ dependencies { implementation("no.nav.common:util:$common_version") implementation("no.nav.common:types:$common_version") implementation("org.apache.commons:commons-collections4:4.4") - implementation("no.nav.tms.varsel:kotlin-builder:2.1.0") + implementation("no.nav.tms.varsel:kotlin-builder:2.1.1") implementation("no.nav.poao.dab:spring-auth:$dab_common_version") implementation("no.nav.poao.dab:spring-a2-annotations:$dab_common_version") @@ -171,14 +171,12 @@ dependencies { implementation("org.springframework.kafka:spring-kafka") implementation("com.squareup.okhttp3:okhttp") implementation("io.micrometer:micrometer-registry-prometheus-simpleclient") - implementation("org.flywaydb:flyway-database-postgresql:10.15.2") + implementation("org.flywaydb:flyway-database-postgresql:11.0.0") implementation("org.postgresql:postgresql:42.7.4") implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.18.2") - // Hvis det ønskes swagger doc, foreslås å bruke springdoc (springdoc-openapi-starter-webmvc-ui - se no.nav.fo.veilarbdialog.rest.SwaggerConfig for eksempelconfig) - implementation("io.swagger.core.v3:swagger-annotations:2.2.26") // BigQuery - implementation(platform("com.google.cloud:libraries-bom:26.50.0")) + implementation(platform("com.google.cloud:libraries-bom:26.51.0")) implementation("com.google.cloud:google-cloud-bigquery") implementation("io.getunleash:unleash-client-java:9.2.6") diff --git a/src/main/kotlin/no/nav/veilarbaktivitet/aktivitetskort/graphql/AktivitetskortController.kt b/src/main/kotlin/no/nav/veilarbaktivitet/aktivitetskort/graphql/AktivitetskortController.kt index ac0767929..c2186af3a 100644 --- a/src/main/kotlin/no/nav/veilarbaktivitet/aktivitetskort/graphql/AktivitetskortController.kt +++ b/src/main/kotlin/no/nav/veilarbaktivitet/aktivitetskort/graphql/AktivitetskortController.kt @@ -1,7 +1,7 @@ package no.nav.veilarbaktivitet.aktivitetskort.graphql +import no.nav.common.client.aktoroppslag.AktorOppslagClient import no.nav.common.types.identer.EnhetId -import no.nav.common.types.identer.Fnr import no.nav.poao.dab.spring_auth.IAuthService import no.nav.poao.dab.spring_auth.TilgangsType import no.nav.veilarbaktivitet.aktivitet.AktivitetAppService @@ -13,6 +13,7 @@ import no.nav.veilarbaktivitet.aktivitet.dto.AktivitetDTO import no.nav.veilarbaktivitet.aktivitet.mappers.AktivitetDTOMapper import no.nav.veilarbaktivitet.aktivitetskort.MigreringService import no.nav.veilarbaktivitet.config.ownerProviders.AktivitetOwnerProvider +import no.nav.veilarbaktivitet.oppfolging.periode.OppfolgingsperiodeService import no.nav.veilarbaktivitet.person.Person import org.springframework.graphql.data.method.annotation.Argument import org.springframework.graphql.data.method.annotation.QueryMapping @@ -30,18 +31,24 @@ class AktivitetskortController( val ownerProvider: AktivitetOwnerProvider, val aktivitetService: AktivitetService, val aktivitetAppService: AktivitetAppService, + val oppfolgingsperiodeService: OppfolgingsperiodeService, + val aktorOppslagClient: AktorOppslagClient, val authService: IAuthService ) { @QueryMapping fun perioder(@Argument fnr: String): List { - val fnr = getContextUserIdent(fnr) - val eksternBrukerId = Fnr.of(fnr.get()) - authService.sjekkTilgangTilPerson(eksternBrukerId, TilgangsType.LESE) - val aktiviteter = getAktiviteter(fnr) + val eksternBrukerId = getContextUserIdent(fnr) + authService.sjekkTilgangTilPerson(eksternBrukerId.otherFnr(), TilgangsType.LESE) + val aktorId = aktorOppslagClient.hentAktorId(eksternBrukerId.otherFnr()) + val oppfolgingsPerioder = oppfolgingsperiodeService.hentOppfolgingsPerioder(Person.AktorId(aktorId.get())) + val aktiviteter = getAktiviteter(eksternBrukerId) .groupBy { it.oppfolgingsperiodeId } .toList() - .map { OppfolgingsPeriode(it.first, it.second) } + .map { (oppfolgingPeriodeId, aktiviteter) -> + oppfolgingsPerioder.first { it.oppfolgingsperiodeId.equals(oppfolgingPeriodeId) } + .let { OppfolgingsPeriode(oppfolgingPeriodeId, aktiviteter, it.startTid, it.sluttTid) } + } return aktiviteter } @@ -78,7 +85,7 @@ class AktivitetskortController( return historikkService.hentHistorikk(listOf(aktivitetId))[aktivitetId]!! } - private fun getContextUserIdent(fnr: String): Person { + private fun getContextUserIdent(fnr: String): Person.Fnr { return when { authService.erEksternBruker() -> Person.fnr(authService.getLoggedInnUser().get()) fnr.isNotBlank() -> Person.fnr(fnr) diff --git a/src/main/kotlin/no/nav/veilarbaktivitet/aktivitetskort/graphql/QueryAktivitetsPerioder.kt b/src/main/kotlin/no/nav/veilarbaktivitet/aktivitetskort/graphql/QueryAktivitetsPerioder.kt index ac2d418b7..055e2eabc 100644 --- a/src/main/kotlin/no/nav/veilarbaktivitet/aktivitetskort/graphql/QueryAktivitetsPerioder.kt +++ b/src/main/kotlin/no/nav/veilarbaktivitet/aktivitetskort/graphql/QueryAktivitetsPerioder.kt @@ -1,11 +1,14 @@ package no.nav.veilarbaktivitet.aktivitetskort.graphql import no.nav.veilarbaktivitet.aktivitet.dto.AktivitetDTO +import java.time.ZonedDateTime import java.util.* class OppfolgingsPeriode( val id: UUID?, - val aktiviteter: List = emptyList() + val aktiviteter: List = emptyList(), + val start: ZonedDateTime?, + val slutt: ZonedDateTime?, ) class Error ( diff --git a/src/main/kotlin/no/nav/veilarbaktivitet/eventsLogger/IsPublisertDAO.kt b/src/main/kotlin/no/nav/veilarbaktivitet/eventsLogger/IsPublisertDAO.kt index df139e95e..38aa24a59 100644 --- a/src/main/kotlin/no/nav/veilarbaktivitet/eventsLogger/IsPublisertDAO.kt +++ b/src/main/kotlin/no/nav/veilarbaktivitet/eventsLogger/IsPublisertDAO.kt @@ -13,7 +13,7 @@ open class IsPublisertDAO( join veilarbaktivitet.aktivitet a on mote.aktivitet_id = a.aktivitet_id and mote.versjon = a.versjon where mote.referat is not null - and a.til_dato < NOW() + and a.fra_dato < NOW() -- Kun se på møter/samtalereferater som ikke er datert frem i tid and a.gjeldende = 1 -- Bare siste versjon and a.historisk_dato is null -- Ikke ta med referat i avsluttede perioder group by mote.referat_publisert diff --git a/src/main/kotlin/no/nav/veilarbaktivitet/oppfolging/periode/OppfolgingsperiodeService.kt b/src/main/kotlin/no/nav/veilarbaktivitet/oppfolging/periode/OppfolgingsperiodeService.kt index 64fb91cd4..849c0e86c 100644 --- a/src/main/kotlin/no/nav/veilarbaktivitet/oppfolging/periode/OppfolgingsperiodeService.kt +++ b/src/main/kotlin/no/nav/veilarbaktivitet/oppfolging/periode/OppfolgingsperiodeService.kt @@ -55,4 +55,8 @@ class OppfolgingsperiodeService( fun hentMål(fnr: Fnr): MålDTO { return oppfolgingClient.hentMål(fnr).orElseGet(null) } + + fun hentOppfolgingsPerioder(aktorId: AktorId): List { + return oppfolgingsperiodeDAO.getByAktorId(aktorId) + } } diff --git a/src/main/kotlin/no/nav/veilarbaktivitet/oppfolging/periode/OppfolgingsperiodeUtil.kt b/src/main/kotlin/no/nav/veilarbaktivitet/oppfolging/periode/OppfolgingsperiodeUtil.kt index 5a11aab8a..7a3a0151f 100644 --- a/src/main/kotlin/no/nav/veilarbaktivitet/oppfolging/periode/OppfolgingsperiodeUtil.kt +++ b/src/main/kotlin/no/nav/veilarbaktivitet/oppfolging/periode/OppfolgingsperiodeUtil.kt @@ -13,37 +13,37 @@ import kotlin.math.abs val log = LoggerFactory.getLogger("no.nav.veilarbaktivitet.oppfolging.periode.OppfolgingsperiodeUtil")!! -fun finnOppfolgingsperiodeForArenaAktivitet(oppfolgingsperioder: List, primærDato: LocalDate?): Oppfolgingsperiode? { - return primærDato?.let { oppfolgingsperioder.finnOppfolgingsperiodeForTidspunkt(it.atStartOfDay()) } +fun finnOppfolgingsperiodeForArenaAktivitet(oppfolgingsperioder: List, aktivitetOppslagsdato: LocalDate?): Oppfolgingsperiode? { + return aktivitetOppslagsdato?.let { oppfolgingsperioder.finnOppfolgingsperiodeForTidspunkt(it.atStartOfDay()) } } -fun List.finnOppfolgingsperiodeForTidspunkt(tidspunkt: LocalDateTime): Oppfolgingsperiode? { +fun List.finnOppfolgingsperiodeForTidspunkt(aktivitetOppslagsdato: LocalDateTime): Oppfolgingsperiode? { val oppfolgingsperioder = this.sortedByDescending { it.startTid } if (oppfolgingsperioder.isEmpty()) { - log.info("Arenatiltak finn oppfølgingsperiode - bruker har ingen oppfølgingsperioder - tidspunkt=${tidspunkt}, oppfolgingsperioder=${listOf()}") + log.info("Arenatiltak finn oppfølgingsperiode - bruker har ingen oppfølgingsperioder - tidspunkt=${aktivitetOppslagsdato}, oppfolgingsperioder=${listOf()}") return null } - val opprettetTidspunktCZDT = tidspunkt.atZone(ZoneId.systemDefault()) + val opprettetTidspunktCDT = aktivitetOppslagsdato.atZone(ZoneId.systemDefault()) val match = oppfolgingsperioder - .firstOrNull { oppfolgingsperiode -> oppfolgingsperiode.erInnenforPeriode(opprettetTidspunktCZDT) } + .firstOrNull { oppfolgingsperiode -> oppfolgingsperiode.erInnenforPeriode(opprettetTidspunktCDT) } ?: oppfolgingsperioder .filterIndexed { index, oppfolgingsperiode -> val forrigePeriode = oppfolgingsperioder.getOrNull(index + 1) - val startetEtterAtForrigePeriodeBleAvsluttet = forrigePeriode?.sluttTid?.let { opprettetTidspunktCZDT.isAfter(it) } ?: false - val startetRettFørDennePeriodenBleStartet = oppfolgingsperiode.erInnenforMedEkstraSlack(opprettetTidspunktCZDT) - startetEtterAtForrigePeriodeBleAvsluttet || startetRettFørDennePeriodenBleStartet + val aktivitetStartetEtterAtForrigePeriodeBleAvsluttet = forrigePeriode?.sluttTid?.let { opprettetTidspunktCDT.isAfter(it) } ?: false + val aktivitetStartetRettFørDennePeriodenBleStartet = oppfolgingsperiode.erInnenforMedEkstraSlack(opprettetTidspunktCDT) + aktivitetStartetEtterAtForrigePeriodeBleAvsluttet || aktivitetStartetRettFørDennePeriodenBleStartet } - .minByOrNull { abs(ChronoUnit.MILLIS.between(opprettetTidspunktCZDT, it.startTid)) } + .minByOrNull { abs(ChronoUnit.MILLIS.between(opprettetTidspunktCDT, it.startTid)) } ?.also { _ -> - log.info("Arenatiltak finn oppfølgingsperiode - valgt oppfølgingsperiode som startet etter opprettetdato) - tidspunkt=${tidspunkt}, oppfolgingsperioder=${oppfolgingsperioder}") + log.info("Arenatiltak finn oppfølgingsperiode - valgt oppfølgingsperiode som startet etter opprettetdato) - tidspunkt=${aktivitetOppslagsdato}, oppfolgingsperioder=${oppfolgingsperioder}") } return if (match != null) { match } else { - log.info("Arenatiltak finn oppfølgingsperiode - opprettetTidspunkt har ingen god match på oppfølgingsperioder) - tidspunkt=${tidspunkt}, oppfolgingsperioder=${oppfolgingsperioder}") + log.info("Arenatiltak finn oppfølgingsperiode - opprettetTidspunkt har ingen god match på oppfølgingsperioder) - tidspunkt=${aktivitetOppslagsdato}, oppfolgingsperioder=${oppfolgingsperioder}") null } } diff --git a/src/test/java/no/nav/veilarbaktivitet/SpringBootTestBase.java b/src/test/java/no/nav/veilarbaktivitet/SpringBootTestBase.java index 5e4d10fb9..52d5522ee 100644 --- a/src/test/java/no/nav/veilarbaktivitet/SpringBootTestBase.java +++ b/src/test/java/no/nav/veilarbaktivitet/SpringBootTestBase.java @@ -11,6 +11,7 @@ import no.nav.veilarbaktivitet.config.kafka.kafkatemplates.KafkaJsonTemplate; import no.nav.veilarbaktivitet.db.DbTestUtils; import no.nav.veilarbaktivitet.mock_nav_modell.NavMockService; +import no.nav.veilarbaktivitet.oppfolging.periode.OppfolgingsperiodeService; import no.nav.veilarbaktivitet.stilling_fra_nav.RekrutteringsbistandStatusoppdatering; import no.nav.veilarbaktivitet.stilling_fra_nav.StillingFraNavTestService; import no.nav.veilarbaktivitet.util.AktivitetTestService; @@ -68,6 +69,9 @@ private static WireMockServer getWireMockServer() { @Autowired protected NavMockService navMockService; + @Autowired + protected OppfolgingsperiodeService oppfolgingsperiodeService; + @Value("${topic.inn.aktivitetskort}") private String aktivitetskortTopic; @@ -83,7 +87,7 @@ public void setup() { DbTestUtils.cleanupTestDb(jdbcTemplate); JdbcTemplateLockProvider l = (JdbcTemplateLockProvider) lockProvider; l.clearCache(); - aktivitetTestService = new AktivitetTestService(stillingFraNavTestService, port, innRekrutteringsbistandStatusoppdateringTopic, kafkaTestService, stringStringKafkaTemplate, navCommonKafkaJsonTemplate, aktivitetskortTopic); + aktivitetTestService = new AktivitetTestService(stillingFraNavTestService, port, innRekrutteringsbistandStatusoppdateringTopic, kafkaTestService, stringStringKafkaTemplate, navCommonKafkaJsonTemplate, aktivitetskortTopic, oppfolgingsperiodeService); } @DynamicPropertySource diff --git a/src/test/java/no/nav/veilarbaktivitet/controller/AktivitetsplanRSTest.java b/src/test/java/no/nav/veilarbaktivitet/controller/AktivitetsplanRSTest.java index f1afa4f67..7e968a057 100644 --- a/src/test/java/no/nav/veilarbaktivitet/controller/AktivitetsplanRSTest.java +++ b/src/test/java/no/nav/veilarbaktivitet/controller/AktivitetsplanRSTest.java @@ -104,19 +104,24 @@ void hentAktivitetVersjoner_returnererIkkeForhaandsorientering() { @Test void hentAktivitetsplan_henterAktiviteterMedForhaandsorientering() { - AktivitetData aktivitetDataMedForhaandsorientering = aktivitetDAO.opprettNyAktivitet(nyttStillingssok().withAktorId(mockBruker.getAktorId())); - AktivitetData aktivitetDataUtenForhaandsorientering = aktivitetDAO.opprettNyAktivitet(nyttStillingssok().withAktorId(mockBruker.getAktorId())); + AktivitetData aktivitetDataMedForhaandsorientering = aktivitetDAO.opprettNyAktivitet( + nyttStillingssok().withAktorId(mockBruker.getAktorId()).withOppfolgingsperiodeId(mockBruker.getOppfolgingsperiodeId())); + AktivitetData aktivitetDataUtenForhaandsorientering = aktivitetDAO.opprettNyAktivitet( + nyttStillingssok().withAktorId(mockBruker.getAktorId()).withOppfolgingsperiodeId(mockBruker.getOppfolgingsperiodeId())); var fho = ForhaandsorienteringDTO.builder().tekst("fho tekst").type(Type.SEND_FORHAANDSORIENTERING).build(); avtaltMedNavService.opprettFHO(new AvtaltMedNavDTO().setAktivitetVersjon(aktivitetDataMedForhaandsorientering.getVersjon()).setForhaandsorientering(fho), aktivitetDataMedForhaandsorientering.getId(), mockBruker.getAktorId(), NavIdent.of("V123")); - var resultat = aktivitetTestService.hentAktiviteterForFnr(mockBruker, mockBrukersVeileder); - assertNotNull(resultat.getAktiviteter().stream().filter(aktivitet -> Objects.equals(aktivitet.getId(), aktivitetDataMedForhaandsorientering.getId().toString())).toList().getFirst().getForhaandsorientering()); - assertNull(resultat.getAktiviteter().stream().filter(aktivitet -> Objects.equals(aktivitet.getId(), aktivitetDataUtenForhaandsorientering.getId().toString())).toList().getFirst().getForhaandsorientering()); + var aktiviteter = aktivitetTestService.hentAktiviteterForFnr(mockBruker, mockBrukersVeileder).getAktiviteter(); + assertNotNull(aktiviteter.stream().filter(aktivitet -> + Objects.equals(aktivitet.getId(), aktivitetDataMedForhaandsorientering.getId().toString())).toList().getFirst().getForhaandsorientering()); + assertNull(aktiviteter.stream().filter(aktivitet -> + Objects.equals(aktivitet.getId(), aktivitetDataUtenForhaandsorientering.getId().toString())).toList().getFirst().getForhaandsorientering()); } @Test void hentAktivitetsplan_henterStillingFraNavDataUtenCVData() { - var aktivitet = nyStillingFraNav().withAktorId(mockBruker.getAktorId()); + var aktivitet = nyStillingFraNav().withAktorId(mockBruker.getAktorId()) + .withOppfolgingsperiodeId(mockBruker.getOppfolgingsperiodeId()); AktivitetData aktivitetData = aktivitetDAO.opprettNyAktivitet(aktivitet); var resultat = aktivitetTestService.hentAktiviteterForFnr(mockBruker, mockBrukersVeileder); @@ -128,7 +133,8 @@ void hentAktivitetsplan_henterStillingFraNavDataUtenCVData() { @Test void hentAktivitetsplan_henterStillingFraNavDataMedCVData() { - var aktivitet = nyStillingFraNavMedCVKanDeles().withAktorId(mockBruker.getAktorId()); + var aktivitet = nyStillingFraNavMedCVKanDeles().withAktorId(mockBruker.getAktorId()) + .withOppfolgingsperiodeId(mockBruker.getOppfolgingsperiodeId()); AktivitetData aktivitetData = aktivitetDAO.opprettNyAktivitet(aktivitet); var resultat = aktivitetTestService.hentAktiviteterForFnr(mockBruker, mockBrukersVeileder); @@ -141,7 +147,8 @@ void hentAktivitetsplan_henterStillingFraNavDataMedCVData() { @Test void hentAktivitetsplan_henterStillingFraNavDataMedCvSvar() { - var aktivitet = nyStillingFraNavMedCVKanDeles().withAktorId(mockBruker.getAktorId()); + var aktivitet = nyStillingFraNavMedCVKanDeles().withAktorId(mockBruker.getAktorId()) + .withOppfolgingsperiodeId(mockBruker.getOppfolgingsperiodeId()); AktivitetData aktivitetData = aktivitetDAO.opprettNyAktivitet(aktivitet); var resultat = aktivitetTestService.hentAktiviteterForFnr(mockBruker, mockBrukersVeileder); diff --git a/src/test/java/no/nav/veilarbaktivitet/util/AktivitetTestService.java b/src/test/java/no/nav/veilarbaktivitet/util/AktivitetTestService.java index 89b6b84c1..2cdc020f4 100644 --- a/src/test/java/no/nav/veilarbaktivitet/util/AktivitetTestService.java +++ b/src/test/java/no/nav/veilarbaktivitet/util/AktivitetTestService.java @@ -16,6 +16,7 @@ import no.nav.veilarbaktivitet.aktivitetskort.bestilling.KasseringsBestilling; import no.nav.veilarbaktivitet.aktivitetskort.dto.KafkaAktivitetskortWrapperDTO; import no.nav.veilarbaktivitet.aktivitetskort.graphql.GraphqlResult; +import no.nav.veilarbaktivitet.aktivitetskort.graphql.QueryAktivitetsPerioder; import no.nav.veilarbaktivitet.arena.ArenaController; import no.nav.veilarbaktivitet.arena.model.ArenaAktivitetDTO; import no.nav.veilarbaktivitet.arena.model.ArenaId; @@ -30,6 +31,8 @@ import no.nav.veilarbaktivitet.mock_nav_modell.MockBruker; import no.nav.veilarbaktivitet.mock_nav_modell.MockVeileder; import no.nav.veilarbaktivitet.mock_nav_modell.RestassuredUser; +import no.nav.veilarbaktivitet.oppfolging.periode.OppfolgingsperiodeService; +import no.nav.veilarbaktivitet.oppfolging.periode.SisteOppfolgingsperiodeV1; import no.nav.veilarbaktivitet.person.Person; import no.nav.veilarbaktivitet.stilling_fra_nav.KontaktpersonData; import no.nav.veilarbaktivitet.stilling_fra_nav.RekrutteringsbistandStatusoppdatering; @@ -65,16 +68,12 @@ public class AktivitetTestService { private final StillingFraNavTestService stillingFraNavTestService; private final int port; - private final String innRekrutteringsbistandStatusoppdateringTopic; - private final KafkaTestService kafkaTestService; - private final KafkaTemplate stringStringKafkaTemplate; - private final KafkaJsonTemplate rekrutteringsbistandStatusoppdateringProducer; - private final String aktivitetsKortV1Topic; + private final OppfolgingsperiodeService oppfolgingsperiodeService; /** * Henter alle aktiviteter for et fnr via aktivitet-apiet. @@ -87,10 +86,13 @@ public AktivitetsplanDTO hentAktiviteterForFnr(MockBruker mockBruker) { } public AktivitetsplanDTO hentAktiviteterForFnr(MockBruker mockBruker, RestassuredUser user) { - List aktiviteter = queryAktivitetskort(mockBruker, user, DefaultGraphqlQuery.INSTANCE.getQuery()) - .getData().getPerioder() - .stream().flatMap(periode -> periode.getAktiviteter().stream()) - .toList(); + List aktiviteter = Optional.ofNullable(queryAktivitetskort(mockBruker, user, DefaultGraphqlQuery.INSTANCE.getQuery()) + .getData()) + .map(QueryAktivitetsPerioder::getPerioder) + .map(perioder -> perioder.stream() + .flatMap(periode -> periode.getAktiviteter().stream()) + .toList()) + .orElse(List.of()); return new AktivitetsplanDTO().setAktiviteter(aktiviteter); } @@ -593,4 +595,9 @@ public AktivitetDTO hentAktivitetByFunksjonellId(MockBruker mockBruker, MockVeil .filter((a) -> Objects.equals(a.getFunksjonellId(), funksjonellId)) .findFirst().orElseThrow(() -> new IllegalStateException("Fant ikke aktivitet med funksjonellId %s".formatted(funksjonellId))); } + + /* Mockbruker har allerede periode, brukes til å upserte gamle perioder */ + public void upsertOppfolgingsperiode(SisteOppfolgingsperiodeV1 sistePeriode) { + oppfolgingsperiodeService.upsertOppfolgingsperiode(sistePeriode); + } } diff --git a/src/test/kotlin/no/nav/veilarbaktivitet/aktivitetskort/AktivitetskortConsumerIntegrationTest.kt b/src/test/kotlin/no/nav/veilarbaktivitet/aktivitetskort/AktivitetskortConsumerIntegrationTest.kt index e74df455b..0c51d29f3 100644 --- a/src/test/kotlin/no/nav/veilarbaktivitet/aktivitetskort/AktivitetskortConsumerIntegrationTest.kt +++ b/src/test/kotlin/no/nav/veilarbaktivitet/aktivitetskort/AktivitetskortConsumerIntegrationTest.kt @@ -31,6 +31,7 @@ import no.nav.veilarbaktivitet.mock_nav_modell.BrukerOptions import no.nav.veilarbaktivitet.mock_nav_modell.MockBruker import no.nav.veilarbaktivitet.mock_nav_modell.MockVeileder import no.nav.veilarbaktivitet.mock_nav_modell.WireMockUtil +import no.nav.veilarbaktivitet.oppfolging.periode.SisteOppfolgingsperiodeV1 import no.nav.veilarbaktivitet.person.Innsender import no.nav.veilarbaktivitet.util.AktivitetskortFeilListener import no.nav.veilarbaktivitet.util.AktivitetskortIdMappingListener @@ -217,6 +218,12 @@ class AktivitetskortConsumerIntegrationTest( val serie = ArenaAktivitetskortSerie(mockBruker, "MIDLONNTIL", gammelperiode) val actual = serie.ny(AktivitetskortStatus.PLANLAGT, endretTidspunkt = ZonedDateTime.now().minusDays(75)) aktivitetTestService.opprettEksterntArenaKort(actual) + aktivitetTestService.upsertOppfolgingsperiode(SisteOppfolgingsperiodeV1.builder() + .uuid(gammelperiode.id) + .aktorId(mockBruker.aktorId.get()) + .startDato(gammelperiode.slutt?.minusDays(10)) + .sluttDato(gammelperiode.slutt).build() + ) val aktivitetFoer = hentAktivitet(serie.funksjonellId) assertThat(aktivitetFoer.oppfolgingsperiodeId).isNotNull() assertThat(aktivitetFoer.isHistorisk).isFalse() @@ -243,9 +250,15 @@ class AktivitetskortConsumerIntegrationTest( val serie = ArenaAktivitetskortSerie(mockBruker, "VARIG", avsluttetPeriode) val opprettMelding: ArenaKort = serie.ny(AktivitetskortStatus.GJENNOMFORES, avsluttetPeriode.slutt!!.minusDays(2)) - val endretMelding: ArenaKort = serie.ny(AktivitetskortStatus.AVBRUTT, avsluttetPeriode.slutt!!.minusDays(1)) + val endretMelding: ArenaKort = serie.ny(AktivitetskortStatus.AVBRUTT, avsluttetPeriode.slutt.minusDays(1)) + aktivitetTestService.upsertOppfolgingsperiode(SisteOppfolgingsperiodeV1.builder() + .uuid(avsluttetPeriode.id) + .aktorId(mockBruker.aktorId.get()) + .startDato(avsluttetPeriode.slutt.minusDays(10)) + .sluttDato(avsluttetPeriode.slutt).build() + ) aktivitetTestService.opprettEksterntArenaKort(opprettMelding) - tiltakMigreringCronService!!.settTiltakOpprettetSomHistoriskTilHistorisk() + tiltakMigreringCronService.settTiltakOpprettetSomHistoriskTilHistorisk() aktivitetTestService.opprettEksterntArenaKort(endretMelding) val aktivitet = hentAktivitet(serie.funksjonellId) assertThat(aktivitet.status).isEqualTo(AktivitetStatus.AVBRUTT) diff --git a/src/test/kotlin/no/nav/veilarbaktivitet/aktivitetskort/graphql/AktivitetskortControllerTest.kt b/src/test/kotlin/no/nav/veilarbaktivitet/aktivitetskort/graphql/AktivitetskortControllerTest.kt index 3567ef92d..5020e7f8c 100644 --- a/src/test/kotlin/no/nav/veilarbaktivitet/aktivitetskort/graphql/AktivitetskortControllerTest.kt +++ b/src/test/kotlin/no/nav/veilarbaktivitet/aktivitetskort/graphql/AktivitetskortControllerTest.kt @@ -6,10 +6,14 @@ import no.nav.veilarbaktivitet.aktivitet.domain.AktivitetStatus import no.nav.veilarbaktivitet.aktivitet.dto.AktivitetTypeDTO import no.nav.veilarbaktivitet.mock_nav_modell.BrukerOptions import no.nav.veilarbaktivitet.mock_nav_modell.MockVeileder +import no.nav.veilarbaktivitet.oppfolging.periode.SisteOppfolgingsperiodeV1 import no.nav.veilarbaktivitet.testutils.AktivitetDtoTestBuilder import no.nav.veilarbaktivitet.util.DateUtils import org.assertj.core.api.Assertions.assertThat +import org.assertj.core.api.Assertions.within import org.junit.jupiter.api.Test +import java.time.ZonedDateTime +import java.time.temporal.ChronoUnit import java.util.* class AktivitetskortControllerTest: SpringBootTestBase() { @@ -25,6 +29,8 @@ class AktivitetskortControllerTest: SpringBootTestBase() { query($fnrParam: String!) { perioder(fnr: $fnrParam) { id, + start, + slutt, aktiviteter { id, opprettetDato @@ -33,17 +39,32 @@ class AktivitetskortControllerTest: SpringBootTestBase() { } """.trimIndent().replace("\n", "") - val gammelPeriode = UUID.randomUUID() - val nyPeriode = UUID.randomUUID() + val gammelPeriodeId = UUID.randomUUID() + val gammelperiodeStart = ZonedDateTime.now().minusYears(4) + val gammelperiodeSlutt = gammelperiodeStart + val nyPeriode = mockBruker.oppfolgingsperiodeId val jobbAktivitet = AktivitetDtoTestBuilder.nyAktivitet(AktivitetTypeDTO.IJOBB) - .toBuilder().oppfolgingsperiodeId(gammelPeriode).build() + .toBuilder().oppfolgingsperiodeId(gammelPeriodeId).build() aktivitetTestService.opprettAktivitet(mockBruker, mockBruker, jobbAktivitet) val aktivitet = AktivitetDtoTestBuilder.nyAktivitet(AktivitetTypeDTO.EGEN) .toBuilder().oppfolgingsperiodeId(nyPeriode).build() + aktivitetTestService.upsertOppfolgingsperiode(SisteOppfolgingsperiodeV1.builder() + .uuid(gammelPeriodeId) + .aktorId(mockBruker.aktorId.get()) + .startDato(gammelperiodeStart) + .sluttDato(gammelperiodeSlutt) + .build() + ) aktivitetTestService.opprettAktivitet(mockBruker, mockBruker, aktivitet) val result = aktivitetTestService.queryAktivitetskort(mockBruker, mockBruker, query) + val nyestePeriode = result.data?.perioder?.last() + val gammelPeriode = result.data?.perioder?.first() assertThat(result.errors).isNull() assertThat(result.data?.perioder).hasSize(2) + assertThat(nyestePeriode?.start).isCloseTo(mockBruker.oppfolgingsperioder.first().startTid, within(1, ChronoUnit.MILLIS)) + assertThat(nyestePeriode?.slutt).isNull() + assertThat(gammelPeriode?.start).isCloseTo(gammelperiodeStart, within(1, ChronoUnit.MILLIS)) + assertThat(gammelPeriode?.start).isCloseTo(gammelperiodeSlutt, within(1, ChronoUnit.MILLIS)) } @Test @@ -147,9 +168,8 @@ class AktivitetskortControllerTest: SpringBootTestBase() { @Test fun `skal kunne hente eier av aktivitetskort`() { - val nyPeriode = UUID.randomUUID() val jobbAktivitet = AktivitetDtoTestBuilder.nyAktivitet(AktivitetTypeDTO.IJOBB) - .toBuilder().oppfolgingsperiodeId(nyPeriode).build() + .toBuilder().oppfolgingsperiodeId(mockBruker.oppfolgingsperiodeId).build() val aktivitet = aktivitetTestService.opprettAktivitet(mockBruker, mockBruker, jobbAktivitet) val aktivitetIdParam = "\$aktivitetId" val query = """ @@ -170,9 +190,8 @@ class AktivitetskortControllerTest: SpringBootTestBase() { @Test fun `skal kunne hente historikk`() { - val nyPeriode = UUID.randomUUID() val jobbAktivitet = AktivitetDtoTestBuilder.nyAktivitet(AktivitetTypeDTO.IJOBB) - .toBuilder().oppfolgingsperiodeId(nyPeriode).build() + .toBuilder().oppfolgingsperiodeId(mockBruker.oppfolgingsperiodeId).build() val aktivitet = aktivitetTestService.opprettAktivitet(mockBruker, mockBruker, jobbAktivitet) aktivitetTestService.oppdaterAktivitetStatus(mockBruker, mockVeileder, aktivitet, AktivitetStatus.GJENNOMFORES) val aktivitetIdParam = "\$aktivitetId" @@ -200,12 +219,11 @@ class AktivitetskortControllerTest: SpringBootTestBase() { @Test fun `skal serialisere datoer riktig (aktivitet)`() { - val nyPeriode = UUID.randomUUID() // riktig: "2024-04-30T22:00:00.000+00:00" // feil: "2024-05-01T00:00+02:00" val fraDatoIso = "2024-04-30T22:00:00.000+00:00" val jobbAktivitet = AktivitetDtoTestBuilder.nyAktivitet(AktivitetTypeDTO.IJOBB) - .toBuilder().oppfolgingsperiodeId(nyPeriode).fraDato(DateUtils.dateFromISO8601(fraDatoIso)).build() + .toBuilder().oppfolgingsperiodeId(mockBruker.oppfolgingsperiodeId).fraDato(DateUtils.dateFromISO8601(fraDatoIso)).build() val aktivitet = aktivitetTestService.opprettAktivitet(mockBruker, mockBruker, jobbAktivitet) aktivitetTestService.oppdaterAktivitetStatus(mockBruker, mockVeileder, aktivitet, AktivitetStatus.GJENNOMFORES) val aktivitetIdParam = "\$aktivitetId" @@ -223,12 +241,11 @@ class AktivitetskortControllerTest: SpringBootTestBase() { @Test fun `skal serialisere datoer riktig (perioder)`() { - val nyPeriode = UUID.randomUUID() // riktig: "2024-04-30T22:00:00.000+00:00" // feil: "2024-05-01T00:00+02:00" val fraDatoIso = "2024-04-30T22:00:00.000+00:00" val jobbAktivitet = AktivitetDtoTestBuilder.nyAktivitet(AktivitetTypeDTO.IJOBB) - .toBuilder().oppfolgingsperiodeId(nyPeriode).fraDato(DateUtils.dateFromISO8601(fraDatoIso)).build() + .toBuilder().oppfolgingsperiodeId(mockBruker.oppfolgingsperiodeId).fraDato(DateUtils.dateFromISO8601(fraDatoIso)).build() val aktivitet = aktivitetTestService.opprettAktivitet(mockBruker, mockBruker, jobbAktivitet) aktivitetTestService.oppdaterAktivitetStatus(mockBruker, mockVeileder, aktivitet, AktivitetStatus.GJENNOMFORES) val fnrParam = "\$fnr"