From 227ad0a263e5027e759d02b4a9381013321ec07d Mon Sep 17 00:00:00 2001 From: bragejahren <70642183+bragejahren@users.noreply.github.com> Date: Wed, 23 Oct 2024 16:05:31 +0200 Subject: [PATCH] NAV-22361: Tar i bruk nytt endepunkt for henting av tilgangsstyrte journalposter (#4787) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Favro: [NAV-22361](https://favro.com/organization/98c34fb974ce445eac854de0/1844bbac3b6605eacc8f5543?card=NAV-22361) ### 💰 Hva skal gjøres, og hvorfor? Per nå gjøres det ingen ingen kontroll på vår side om hvorvidt det finnes personer med adressebeskyttelse blant dokumentene vi henter for søker. Det finnes en tilgangskontroll for søker i `dokarkiv` som gir feil dersom søker har adressebeskyttelse (kode 6, 7 eller 19) og saksbehandler ikke har tilgang, men `dokarkiv` har ingen sjekk på om barna i en søknad har adressebeskyttelse. Denne tilgangskontrollen er nå lagt inn i `familie-integrasjoner` og ligger bak et nytt endepunkt for henting av tilgangsstyrte journalposter. Tar her i bruk det nye endepunktet. Relatert PR for nytt endepunkt i `familie-integrasjoner`: https://github.com/navikt/familie-integrasjoner/pull/1017 ### ✅ Checklist - [x] Jeg har testet mine endringer i henhold til akseptansekriteriene 🕵️ - [ ] Jeg har config- eller sql-endringer. - [ ] Jeg har skrevet tester. --------- Co-authored-by: Hanne Olsen --- .../featureToggle/FeatureToggleConfig.kt | 3 + .../familieintegrasjoner/IntegrasjonClient.kt | 18 ++++ ...InnkommendeJournalf\303\270ringService.kt" | 19 ++-- .../Journalf\303\270ringController.kt" | 24 +++-- .../ba/sak/integrasjoner/Datagenerator.kt | 14 +++ .../IntegrasjonClientTest.kt | 90 ++++++++++++------- ...deJournalf\303\270ringServiceEnhetTest.kt" | 71 +++++++++++++++ .../Journalf\303\270ringControllerTest.kt" | 77 ++++++++++++++++ .../enheterNavIdentHarTilgangTilResponse.json | 14 +++ ...tTilgangsstyrteJournalposterForBruker.json | 47 ++++++++++ 10 files changed, 327 insertions(+), 50 deletions(-) create mode 100644 "src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/InnkommendeJournalf\303\270ringServiceEnhetTest.kt" create mode 100644 "src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/Journalf\303\270ringControllerTest.kt" create mode 100644 src/test/resources/familieintegrasjoner/json/enheterNavIdentHarTilgangTilResponse.json create mode 100644 src/test/resources/familieintegrasjoner/json/hentTilgangsstyrteJournalposterForBruker.json diff --git a/src/main/kotlin/no/nav/familie/ba/sak/config/featureToggle/FeatureToggleConfig.kt b/src/main/kotlin/no/nav/familie/ba/sak/config/featureToggle/FeatureToggleConfig.kt index f321c952447..12e7d3d242a 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/config/featureToggle/FeatureToggleConfig.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/config/featureToggle/FeatureToggleConfig.kt @@ -19,6 +19,9 @@ class FeatureToggleConfig { // NAV-22311 const val OPPRETT_SAK_PÅ_RIKTIG_ENHET_OG_SAKSBEHANDLER = "familie-ba-ks-sak.opprett-sak-paa-riktig-enhet-og-saksbehandler" + // NAV-22361 + const val BRUK_NYTT_RETUR_OBJEKT_FOR_JOURNALPOSTER = "familie-ba-ks-sak.bruk-nytt-retur-objekt-for-journalposter" + // satsendring // Oppretter satsendring-tasker for de som ikke har fått ny task const val SATSENDRING_ENABLET: String = "familie-ba-sak.satsendring-enablet" diff --git a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClient.kt b/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClient.kt index ce707a72575..290fa15c066 100644 --- a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClient.kt +++ b/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClient.kt @@ -34,6 +34,7 @@ import no.nav.familie.kontrakter.felles.enhet.Enhet import no.nav.familie.kontrakter.felles.enhet.HentEnheterNavIdentHarTilgangTilRequest import no.nav.familie.kontrakter.felles.journalpost.Journalpost import no.nav.familie.kontrakter.felles.journalpost.JournalposterForBrukerRequest +import no.nav.familie.kontrakter.felles.journalpost.TilgangsstyrtJournalpost import no.nav.familie.kontrakter.felles.kodeverk.KodeverkDto import no.nav.familie.kontrakter.felles.navkontor.NavKontorEnhet import no.nav.familie.kontrakter.felles.oppgave.FinnOppgaveRequest @@ -378,6 +379,23 @@ class IntegrasjonClient( } } + @Retryable( + value = [Exception::class], + maxAttempts = 3, + backoff = Backoff(delayExpression = RETRY_BACKOFF_5000MS), + ) + fun hentTilgangsstyrteJournalposterForBruker(journalposterForBrukerRequest: JournalposterForBrukerRequest): List { + val uri = URI.create("$integrasjonUri/journalpost/tilgangsstyrt/baks") + + return kallEksternTjenesteRessurs( + tjeneste = "dokarkiv", + uri = uri, + formål = "Hent tilgangsstyrte journalposter for bruker", + ) { + postForEntity(uri, journalposterForBrukerRequest) + } + } + fun hentOppgaver(finnOppgaveRequest: FinnOppgaveRequest): FinnOppgaveResponseDto { val uri = URI.create("$integrasjonUri/oppgave/v4") diff --git "a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/InnkommendeJournalf\303\270ringService.kt" "b/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/InnkommendeJournalf\303\270ringService.kt" index 66d6460b78e..8907a2f8536 100644 --- "a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/InnkommendeJournalf\303\270ringService.kt" +++ "b/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/InnkommendeJournalf\303\270ringService.kt" @@ -7,6 +7,7 @@ import no.nav.familie.ba.sak.ekstern.restDomene.RestFerdigstillOppgaveKnyttJourn import no.nav.familie.ba.sak.ekstern.restDomene.RestInstitusjon import no.nav.familie.ba.sak.ekstern.restDomene.RestJournalføring import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.IntegrasjonClient +import no.nav.familie.ba.sak.integrasjoner.journalføring.InnkommendeJournalføringService.Companion.NAV_NO import no.nav.familie.ba.sak.integrasjoner.journalføring.domene.DbJournalpost import no.nav.familie.ba.sak.integrasjoner.journalføring.domene.DbJournalpostType import no.nav.familie.ba.sak.integrasjoner.journalføring.domene.FagsakSystem @@ -36,6 +37,7 @@ import no.nav.familie.kontrakter.felles.journalpost.Journalpost import no.nav.familie.kontrakter.felles.journalpost.JournalposterForBrukerRequest import no.nav.familie.kontrakter.felles.journalpost.Journalstatus.FERDIGSTILT import no.nav.familie.kontrakter.felles.journalpost.Sak +import no.nav.familie.kontrakter.felles.journalpost.TilgangsstyrtJournalpost import org.springframework.stereotype.Service import java.time.LocalDate @@ -57,14 +59,15 @@ class InnkommendeJournalføringService( fun hentJournalpost(journalpostId: String): Journalpost = integrasjonClient.hentJournalpost(journalpostId) - fun hentJournalposterForBruker(brukerId: String): List = - integrasjonClient.hentJournalposterForBruker( - JournalposterForBrukerRequest( - antall = 1000, - brukerId = Bruker(id = brukerId, type = BrukerIdType.FNR), - tema = listOf(Tema.BAR), - ), - ) + fun hentJournalposterForBruker(brukerId: String): List = + integrasjonClient + .hentTilgangsstyrteJournalposterForBruker( + JournalposterForBrukerRequest( + antall = 1000, + brukerId = Bruker(id = brukerId, type = BrukerIdType.FNR), + tema = listOf(Tema.BAR), + ), + ) private fun oppdaterLogiskeVedlegg(request: RestJournalføring) { request.dokumenter.forEach { dokument -> diff --git "a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/Journalf\303\270ringController.kt" "b/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/Journalf\303\270ringController.kt" index 04ecd207c8c..f58761eb9a7 100644 --- "a/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/Journalf\303\270ringController.kt" +++ "b/src/main/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/Journalf\303\270ringController.kt" @@ -3,11 +3,13 @@ package no.nav.familie.ba.sak.integrasjoner.journalføring import jakarta.validation.Valid import no.nav.familie.ba.sak.common.FunksjonellFeil import no.nav.familie.ba.sak.config.BehandlerRolle +import no.nav.familie.ba.sak.config.FeatureToggleConfig import no.nav.familie.ba.sak.ekstern.restDomene.RestJournalføring import no.nav.familie.ba.sak.sikkerhet.TilgangService import no.nav.familie.kontrakter.felles.PersonIdent import no.nav.familie.kontrakter.felles.Ressurs import no.nav.familie.kontrakter.felles.journalpost.Journalpost +import no.nav.familie.unleash.UnleashService import no.nav.security.token.support.core.api.ProtectedWithClaims import org.springframework.http.MediaType import org.springframework.http.ResponseEntity @@ -27,6 +29,7 @@ import org.springframework.web.bind.annotation.RestController class JournalføringController( private val innkommendeJournalføringService: InnkommendeJournalføringService, private val tilgangService: TilgangService, + private val unleashService: UnleashService, ) { @GetMapping(path = ["/{journalpostId}/hent"], produces = [MediaType.APPLICATION_JSON_VALUE]) fun hentJournalpost( @@ -36,14 +39,19 @@ class JournalføringController( @PostMapping(path = ["/for-bruker"]) fun hentJournalposterForBruker( @RequestBody personIdentBody: PersonIdent, - ): ResponseEntity>> = - ResponseEntity.ok( - Ressurs.success( - innkommendeJournalføringService.hentJournalposterForBruker( - personIdentBody.ident, - ), - ), - ) + ): ResponseEntity>> { + val tilgangsstyrteJournalposter = + innkommendeJournalføringService.hentJournalposterForBruker( + personIdentBody.ident, + ) + val response = + if (unleashService.isEnabled(FeatureToggleConfig.BRUK_NYTT_RETUR_OBJEKT_FOR_JOURNALPOSTER, false)) { + tilgangsstyrteJournalposter + } else { + tilgangsstyrteJournalposter.map { it.journalpost } + } + return ResponseEntity.ok(Ressurs.success(response)) + } @GetMapping("/{journalpostId}/hent/{dokumentInfoId}") fun hentDokument( diff --git a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/Datagenerator.kt b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/Datagenerator.kt index 139a8b69610..8ea004178c8 100644 --- a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/Datagenerator.kt +++ b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/Datagenerator.kt @@ -17,6 +17,7 @@ import no.nav.familie.kontrakter.felles.journalpost.Journalstatus import no.nav.familie.kontrakter.felles.journalpost.LogiskVedlegg import no.nav.familie.kontrakter.felles.journalpost.RelevantDato import no.nav.familie.kontrakter.felles.journalpost.Sak +import no.nav.familie.kontrakter.felles.journalpost.TilgangsstyrtJournalpost import no.nav.familie.kontrakter.felles.oppgave.Behandlingstype import no.nav.familie.kontrakter.felles.oppgave.IdentGruppe import no.nav.familie.kontrakter.felles.oppgave.Oppgave @@ -80,6 +81,19 @@ fun lagTestJournalpost( relevanteDatoer = listOf(RelevantDato(LocalDateTime.now(), "DATO_REGISTRERT")), ) +fun lagTilgangsstyrtJournalpost( + personIdent: String, + journalpostId: String, + harTilgang: Boolean = true, +): TilgangsstyrtJournalpost = + TilgangsstyrtJournalpost( + lagTestJournalpost( + personIdent = personIdent, + journalpostId = journalpostId, + ), + harTilgang = harTilgang, + ) + fun lagTestOppgave(): OpprettOppgaveRequest = OpprettOppgaveRequest( ident = OppgaveIdentV2(ident = "test", gruppe = IdentGruppe.AKTOERID), diff --git a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClientTest.kt b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClientTest.kt index e0c27a482a2..214fcf4e2d8 100644 --- a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClientTest.kt +++ b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/familieintegrasjoner/IntegrasjonClientTest.kt @@ -1,60 +1,82 @@ package no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner -import io.mockk.every +import com.github.tomakehurst.wiremock.WireMockServer +import com.github.tomakehurst.wiremock.client.WireMock +import com.github.tomakehurst.wiremock.core.WireMockConfiguration import io.mockk.mockk -import no.nav.familie.ba.sak.datagenerator.oppgave.lagEnhet import no.nav.familie.ba.sak.kjerne.arbeidsfordeling.BarnetrygdEnhet +import no.nav.familie.kontrakter.felles.BrukerIdType import no.nav.familie.kontrakter.felles.NavIdent -import no.nav.familie.kontrakter.felles.Ressurs -import no.nav.familie.kontrakter.felles.enhet.Enhet +import no.nav.familie.kontrakter.felles.Tema +import no.nav.familie.kontrakter.felles.journalpost.Bruker +import no.nav.familie.kontrakter.felles.journalpost.JournalposterForBrukerRequest import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import org.springframework.http.HttpMethod -import org.springframework.http.HttpStatus -import org.springframework.http.ResponseEntity +import org.springframework.boot.web.client.RestTemplateBuilder import org.springframework.web.client.RestOperations -import org.springframework.web.client.exchange import java.net.URI class IntegrasjonClientTest { private val mockedRestOperations: RestOperations = mockk() + private val restOperations: RestOperations = RestTemplateBuilder().build() private val baseUri = URI("http://localhost:8080") - private val integrasjonClient: IntegrasjonClient = - IntegrasjonClient( - baseUri, - mockedRestOperations, - ) + private lateinit var wiremockServerItem: WireMockServer + private lateinit var integrasjonClient: IntegrasjonClient + + @BeforeEach + fun initClass() { + wiremockServerItem = WireMockServer(WireMockConfiguration.wireMockConfig().dynamicPort()) + wiremockServerItem.start() + integrasjonClient = IntegrasjonClient(URI.create(wiremockServerItem.baseUrl()), restOperations) + } @Test - fun `skal hente enheter som NAV-ident har tilgang til`() { + fun `hentEnheterSomNavIdentHarTilgangTil - skal hente enheter som NAV-ident har tilgang til`() { // Arrange val navIdent = NavIdent("1") - val enhet1 = lagEnhet(BarnetrygdEnhet.VADSØ.enhetsnummer) - val enhet2 = lagEnhet(BarnetrygdEnhet.OSLO.enhetsnummer) - - every { - mockedRestOperations.exchange>>( - eq(URI("$baseUri/enhetstilganger")), - eq(HttpMethod.POST), - any(), - ) - } returns - ResponseEntity>>( - Ressurs.success( - listOf( - enhet1, - enhet2, - ), - ), - HttpStatus.OK, - ) + wiremockServerItem.stubFor( + WireMock + .post(WireMock.urlEqualTo("/enhetstilganger")) + .willReturn(WireMock.okJson(readFile("enheterNavIdentHarTilgangTilResponse.json"))), + ) // Act val enheter = integrasjonClient.hentBehandlendeEnheterSomNavIdentHarTilgangTil(navIdent) // Assert assertThat(enheter).hasSize(2) - assertThat(enheter).contains(enhet1, enhet2) + assertThat(enheter).anySatisfy { + assertThat(it.enhetsnummer).isEqualTo(BarnetrygdEnhet.VADSØ.enhetsnummer) + assertThat(it.enhetsnavn).isEqualTo(BarnetrygdEnhet.VADSØ.enhetsnavn) + } + assertThat(enheter).anySatisfy { + assertThat(it.enhetsnummer).isEqualTo(BarnetrygdEnhet.OSLO.enhetsnummer) + assertThat(it.enhetsnavn).isEqualTo(BarnetrygdEnhet.OSLO.enhetsnavn) + } + } + + @Test + fun `hentTilgangsstyrteJournalposterForBruker - skal hente tilgangsstyrte journalposter for bruker`() { + // Arrange + wiremockServerItem.stubFor( + WireMock + .post(WireMock.urlEqualTo("/journalpost/tilgangsstyrt/baks")) + .willReturn(WireMock.okJson(readFile("hentTilgangsstyrteJournalposterForBruker.json"))), + ) + + // Act + val tilgangsstyrteJournalposter = integrasjonClient.hentTilgangsstyrteJournalposterForBruker(JournalposterForBrukerRequest(brukerId = Bruker(id = "12345678910", type = BrukerIdType.FNR), antall = 100, tema = listOf(Tema.BAR))) + + // Assert + assertThat(tilgangsstyrteJournalposter).hasSize(1) + val tilgangsstyrtJournalpost = tilgangsstyrteJournalposter.single() + assertThat(tilgangsstyrtJournalpost.journalpost.journalpostId).isEqualTo("453492634") + assertThat(tilgangsstyrtJournalpost.journalpost.tema).isEqualTo(Tema.BAR.name) + assertThat(tilgangsstyrtJournalpost.journalpost.kanal).isEqualTo("NAV_NO") + assertThat(tilgangsstyrtJournalpost.harTilgang).isTrue } + + private fun readFile(filnavn: String): String = this::class.java.getResource("/familieintegrasjoner/json/$filnavn").readText() } diff --git "a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/InnkommendeJournalf\303\270ringServiceEnhetTest.kt" "b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/InnkommendeJournalf\303\270ringServiceEnhetTest.kt" new file mode 100644 index 00000000000..9d09f7cb9b0 --- /dev/null +++ "b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/InnkommendeJournalf\303\270ringServiceEnhetTest.kt" @@ -0,0 +1,71 @@ +package no.nav.familie.ba.sak.integrasjoner.journalføring + +import io.mockk.every +import io.mockk.mockk +import no.nav.familie.ba.sak.integrasjoner.familieintegrasjoner.IntegrasjonClient +import no.nav.familie.ba.sak.integrasjoner.journalføring.domene.JournalføringRepository +import no.nav.familie.ba.sak.integrasjoner.lagTilgangsstyrtJournalpost +import no.nav.familie.ba.sak.kjerne.behandling.BehandlingHentOgPersisterService +import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingSøknadsinfoService +import no.nav.familie.ba.sak.kjerne.fagsak.FagsakService +import no.nav.familie.ba.sak.kjerne.logg.LoggService +import no.nav.familie.ba.sak.kjerne.steg.StegService +import no.nav.familie.kontrakter.felles.BrukerIdType +import no.nav.familie.kontrakter.felles.Tema +import no.nav.familie.kontrakter.felles.journalpost.Bruker +import no.nav.familie.kontrakter.felles.journalpost.JournalposterForBrukerRequest +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test + +class InnkommendeJournalføringServiceEnhetTest { + private val mockedIntegrasjonClient: IntegrasjonClient = mockk() + private val mockedFagsakService: FagsakService = mockk() + private val mockedBehandlingHentOgPersisterService: BehandlingHentOgPersisterService = mockk() + private val mockedJournalføringRepository: JournalføringRepository = mockk() + private val mockedLoggService: LoggService = mockk() + private val mockedStegService: StegService = mockk() + private val mockedJournalføringMetrikk: JournalføringMetrikk = mockk() + private val mockedBehandlingSøknadsinfoService: BehandlingSøknadsinfoService = mockk() + private val innkommendeJournalføringService: InnkommendeJournalføringService = + InnkommendeJournalføringService( + integrasjonClient = mockedIntegrasjonClient, + fagsakService = mockedFagsakService, + behandlingHentOgPersisterService = mockedBehandlingHentOgPersisterService, + journalføringRepository = mockedJournalføringRepository, + loggService = mockedLoggService, + stegService = mockedStegService, + journalføringMetrikk = mockedJournalføringMetrikk, + behandlingSøknadsinfoService = mockedBehandlingSøknadsinfoService, + ) + + @Test + fun `skal hente og returnere tilgangsstyrte journalposter`() { + // Arrange + val brukerId = "12345678910" + val journalpostId = "123" + val journalposter = + listOf( + lagTilgangsstyrtJournalpost( + personIdent = brukerId, + journalpostId = journalpostId, + harTilgang = true, + ), + ) + + every { + mockedIntegrasjonClient.hentTilgangsstyrteJournalposterForBruker( + JournalposterForBrukerRequest( + antall = 1000, + brukerId = Bruker(id = brukerId, type = BrukerIdType.FNR), + tema = listOf(Tema.BAR), + ), + ) + } returns journalposter + + // Act + val journalposterForBruker = innkommendeJournalføringService.hentJournalposterForBruker(brukerId) + + // Assert + assertThat(journalposterForBruker.first { it.journalpost.journalpostId === journalpostId }.harTilgang).isTrue + } +} diff --git "a/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/Journalf\303\270ringControllerTest.kt" "b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/Journalf\303\270ringControllerTest.kt" new file mode 100644 index 00000000000..daa90545ef9 --- /dev/null +++ "b/src/test/enhetstester/kotlin/no/nav/familie/ba/sak/integrasjoner/journalf\303\270ring/Journalf\303\270ringControllerTest.kt" @@ -0,0 +1,77 @@ +package no.nav.familie.ba.sak.integrasjoner.journalføring + +import io.mockk.every +import io.mockk.mockk +import no.nav.familie.ba.sak.config.FeatureToggleConfig +import no.nav.familie.ba.sak.integrasjoner.lagTilgangsstyrtJournalpost +import no.nav.familie.ba.sak.sikkerhet.TilgangService +import no.nav.familie.kontrakter.felles.PersonIdent +import no.nav.familie.kontrakter.felles.journalpost.Journalpost +import no.nav.familie.kontrakter.felles.journalpost.TilgangsstyrtJournalpost +import no.nav.familie.unleash.UnleashService +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test +import org.springframework.http.HttpStatus + +class JournalføringControllerTest { + private val innkommendeJournalføringService: InnkommendeJournalføringService = mockk() + private val tilgangService: TilgangService = mockk() + private val unleashService: UnleashService = mockk() + private val journalføringController: JournalføringController = + JournalføringController( + innkommendeJournalføringService = innkommendeJournalføringService, + tilgangService = tilgangService, + unleashService = unleashService, + ) + + @Nested + inner class HentJournalposterForBruker { + @Test + fun `skal returnere liste av journalposter når toggle er av`() { + // Arrange + val personIdent = PersonIdent("123") + val journalpostId = "1" + + every { innkommendeJournalføringService.hentJournalposterForBruker(personIdent.ident) } returns listOf(lagTilgangsstyrtJournalpost(personIdent.ident, journalpostId = journalpostId)) + every { unleashService.isEnabled(FeatureToggleConfig.BRUK_NYTT_RETUR_OBJEKT_FOR_JOURNALPOSTER, false) } returns false + + // Act + val responseEntity = journalføringController.hentJournalposterForBruker(personIdentBody = personIdent) + + // Assert + assertThat(responseEntity.statusCode).isEqualTo(HttpStatus.OK) + assertThat(responseEntity.body).isNotNull + assertThat(responseEntity.body!!.data).isNotNull + val journalposter = responseEntity.body!!.data!! + assertThat(journalposter).hasSize(1) + assertThat(journalposter.single()).isInstanceOf(Journalpost::class.java) + val journalpost = journalposter.single() as Journalpost + assertThat(journalpost.journalpostId).isEqualTo("1") + } + + @Test + fun `skal returnere liste av tilgangsstyrte journalposter når toggle er på`() { + // Arrange + val personIdent = PersonIdent("123") + val journalpostId = "1" + + every { innkommendeJournalføringService.hentJournalposterForBruker(personIdent.ident) } returns listOf(lagTilgangsstyrtJournalpost(personIdent.ident, journalpostId = journalpostId, harTilgang = true)) + every { unleashService.isEnabled(FeatureToggleConfig.BRUK_NYTT_RETUR_OBJEKT_FOR_JOURNALPOSTER, false) } returns true + + // Act + val responseEntity = journalføringController.hentJournalposterForBruker(personIdentBody = personIdent) + + // Assert + assertThat(responseEntity.statusCode).isEqualTo(HttpStatus.OK) + assertThat(responseEntity.body).isNotNull + assertThat(responseEntity.body!!.data).isNotNull + val journalposter = responseEntity.body!!.data!! + assertThat(journalposter).hasSize(1) + assertThat(journalposter.single()).isInstanceOf(TilgangsstyrtJournalpost::class.java) + val tilgangsstyrtJournalpost = journalposter.single() as TilgangsstyrtJournalpost + assertThat(tilgangsstyrtJournalpost.journalpost.journalpostId).isEqualTo("1") + assertThat(tilgangsstyrtJournalpost.harTilgang).isTrue + } + } +} diff --git a/src/test/resources/familieintegrasjoner/json/enheterNavIdentHarTilgangTilResponse.json b/src/test/resources/familieintegrasjoner/json/enheterNavIdentHarTilgangTilResponse.json new file mode 100644 index 00000000000..619f3b9938c --- /dev/null +++ b/src/test/resources/familieintegrasjoner/json/enheterNavIdentHarTilgangTilResponse.json @@ -0,0 +1,14 @@ +{ + "data": [ + { + "enhetsnummer": "4820", + "enhetsnavn": "NAV Familie- og pensjonsytelser Vadsø" + }, + { + "enhetsnummer": "4833", + "enhetsnavn": "NAV Familie- og pensjonsytelser Oslo 1" + } + ], + "status": "SUKSESS", + "melding": "Fant enheter" +} \ No newline at end of file diff --git a/src/test/resources/familieintegrasjoner/json/hentTilgangsstyrteJournalposterForBruker.json b/src/test/resources/familieintegrasjoner/json/hentTilgangsstyrteJournalposterForBruker.json new file mode 100644 index 00000000000..7cf878edc4f --- /dev/null +++ b/src/test/resources/familieintegrasjoner/json/hentTilgangsstyrteJournalposterForBruker.json @@ -0,0 +1,47 @@ +{ + "data": [ + { + "journalpost": { + "journalpostId": "453492634", + "journalposttype": "I", + "journalstatus": "JOURNALFOERT", + "tema": "BAR", + "kanal": "NAV_NO", + "dokumenter": [ + { + "dokumentInfoId": "453871494", + "tittel": "Søknad om ordinær barnetrygd", + "brevkode": "NAV 33-00.07", + "dokumentstatus": null, + "dokumentvarianter": [ + { + "variantformat": "ARKIV" + }, + { + "variantformat": "ORIGINAL" + } + ], + "logiskeVedlegg": [] + } + ], + "relevanteDatoer": [ + { + "dato": "2020-01-31T08:00:17", + "datotype": "DATO_DOKUMENT" + }, + { + "dato": "2020-03-11T09:09:15", + "datotype": "DATO_JOURNALFOERT" + }, + { + "dato": "2020-01-31T08:00:17", + "datotype": "DATO_REGISTRERT" + } + ] + }, + "harTilgang": true + } + ], + "status": "SUKSESS", + "melding": "Hentet journalposter" +} \ No newline at end of file