Skip to content

Commit

Permalink
Legg til oppfolgingsperiode start/slutt på graphql endepunkt (#896)
Browse files Browse the repository at this point in the history
* Legg til start/slutt oppfolgingsperiode på graphql endepunkt

* Add oppfolgingsperiode-id to aktivitet in rs tests

* Fjern utkommentert linje

* Fullfør tester

* Fix test
  • Loading branch information
tu55eladd authored Dec 17, 2024
1 parent 254819a commit b7e6f0c
Show file tree
Hide file tree
Showing 8 changed files with 101 additions and 39 deletions.
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand All @@ -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<OppfolgingsPeriode> {
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
}

Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -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<AktivitetDTO> = emptyList()
val aktiviteter: List<AktivitetDTO> = emptyList(),
val start: ZonedDateTime?,
val slutt: ZonedDateTime?,
)

class Error (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Oppfolgingsperiode> {
return oppfolgingsperiodeDAO.getByAktorId(aktorId)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -68,6 +69,9 @@ private static WireMockServer getWireMockServer() {
@Autowired
protected NavMockService navMockService;

@Autowired
protected OppfolgingsperiodeService oppfolgingsperiodeService;

@Value("${topic.inn.aktivitetskort}")
private String aktivitetskortTopic;

Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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<String, String> stringStringKafkaTemplate;

private final KafkaJsonTemplate<RekrutteringsbistandStatusoppdatering> rekrutteringsbistandStatusoppdateringProducer;

private final String aktivitetsKortV1Topic;
private final OppfolgingsperiodeService oppfolgingsperiodeService;

/**
* Henter alle aktiviteter for et fnr via aktivitet-apiet.
Expand All @@ -87,10 +86,13 @@ public AktivitetsplanDTO hentAktiviteterForFnr(MockBruker mockBruker) {
}

public AktivitetsplanDTO hentAktiviteterForFnr(MockBruker mockBruker, RestassuredUser user) {
List<AktivitetDTO> aktiviteter = queryAktivitetskort(mockBruker, user, DefaultGraphqlQuery.INSTANCE.getQuery())
.getData().getPerioder()
.stream().flatMap(periode -> periode.getAktiviteter().stream())
.toList();
List<AktivitetDTO> 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);
}

Expand Down Expand Up @@ -562,4 +564,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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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()
Expand All @@ -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)
Expand Down
Loading

0 comments on commit b7e6f0c

Please sign in to comment.