diff --git a/.nais/feature.yaml b/.nais/feature.yaml index c442457a..27d38db8 100644 --- a/.nais/feature.yaml +++ b/.nais/feature.yaml @@ -1,5 +1,6 @@ name: bidrag-dokument-forsendelse-feature bucket_name: bidrag-dokument-forsendelse-feature +min_replicas: 1 ingresses: - https://bidrag-dokument-forsendelse-feature.intern.dev.nav.no env: @@ -32,7 +33,7 @@ env: KODEVERK_URL: https://kodeverk.dev-fss-pub.nais.io - JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Xmx1500m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -XX:MaxRAMPercentage=80.0 + JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -XX:MaxRAMPercentage=80.0 -XX:+UseContainerSupport LAGRE_DIST_INFO_PAGE_SIZE: 100 LAGRE_DIST_INFO_CRON: "0 */5 * * * ?" diff --git a/.nais/main.yaml b/.nais/main.yaml index 0e363988..ea8f64cc 100644 --- a/.nais/main.yaml +++ b/.nais/main.yaml @@ -1,5 +1,6 @@ name: bidrag-dokument-forsendelse bucket_name: bidrag-dokument-forsendelse-main +min_replicas: 1 ingresses: - https://bidrag-dokument-forsendelse.intern.dev.nav.no env: @@ -42,7 +43,7 @@ env: GCP_BUCKET_DOCUMENT_KMS_KEY_PATH: projects/bidrag-dev-45a9/locations/europe-north1/keyRings/bidrag-dokument-forsendelse-feature/cryptoKeys/bucket-dokument-encryption GCP_DOCUMENT_CLIENTSIDE_KMS_KEY_PATH: gcp-kms://projects/bidrag-dev-45a9/locations/europe-north1/keyRings/bidrag-dokument-forsendelse-feature/cryptoKeys/clientside_document_encryption - JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Xmx1500m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -XX:MaxRAMPercentage=80.0 + JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -XX:MaxRAMPercentage=80.0 -XX:+UseContainerSupport database: dbname: bidrag-dokument-forsendelse-main autoResize: false diff --git a/.nais/nais.yaml b/.nais/nais.yaml index 280c6829..c6e72f46 100644 --- a/.nais/nais.yaml +++ b/.nais/nais.yaml @@ -6,8 +6,8 @@ metadata: labels: team: bidrag annotations: - nginx.ingress.kubernetes.io/proxy-body-size: "256m" - nginx.ingress.kubernetes.io/proxy-read-timeout: "300" + nginx.ingress.kubernetes.io/proxy-body-size: "256m" + nginx.ingress.kubernetes.io/proxy-read-timeout: "300" spec: azure: application: @@ -64,10 +64,14 @@ spec: - name: bidrag-dokument-forsendelse envVarPrefix: DB resources: - limits: - memory: 3000Mi requests: - memory: 1500Mi + cpu: 1000m + memory: 1024Mi + limits: + memory: 4096Mi + replicas: + min: {{min_replicas}} + max: 4 ingresses: {{#each ingresses as |url|}} - {{url}} diff --git a/.nais/prod.yaml b/.nais/prod.yaml index a7239495..dc277d19 100644 --- a/.nais/prod.yaml +++ b/.nais/prod.yaml @@ -1,5 +1,6 @@ name: bidrag-dokument-forsendelse bucket_name: bidrag-dokument-forsendelse-prod +min_replicas: 2 ingresses: - https://bidrag-dokument-forsendelse.intern.nav.no env: @@ -40,7 +41,7 @@ env: OPPDATER_DIST_STATUS_ENABLED: true GCP_DOCUMENT_CLIENTSIDE_KMS_KEY_PATH: gcp-kms://projects/bidrag-prod-8f72/locations/europe-north1/keyRings/bidrag-dokument-forsendelse/cryptoKeys/clientside_document_encryption - JAVA_OPTS: -Xmx1500m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -XX:MaxRAMPercentage=80.0 + JAVA_OPTS: -Xmx1028m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -XX:MaxRAMPercentage=80.0 database: dbname: bidrag-dokument-forsendelse autoResize: false diff --git a/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/api/DokumentKontroller.kt b/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/api/DokumentKontroller.kt index adf6a70c..0e366fde 100644 --- a/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/api/DokumentKontroller.kt +++ b/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/api/DokumentKontroller.kt @@ -34,6 +34,21 @@ class DokumentKontroller(val fysiskDokumentService: FysiskDokumentService) { .body(fysiskDokumentService.hentDokument(forsendelseIdMedPrefix.numerisk, dokumentreferanse)) } + @GetMapping("/dokumentreferanse/{dokumentreferanse}") + @Operation( + summary = "Hent fysisk dokument som byte", + security = [SecurityRequirement(name = "bearer-key")] + ) + fun hentDokumentForReferanse(@PathVariable dokumentreferanse: String): ResponseEntity { + return ResponseEntity.ok() + .contentType(MediaType.APPLICATION_PDF) + .header( + HttpHeaders.CONTENT_DISPOSITION, + "inline; filename=$dokumentreferanse.pdf" + ) + .body(fysiskDokumentService.hentDokument(dokumentreferanse)) + } + @RequestMapping( *["/dokument/{forsendelseIdMedPrefix}/{dokumentreferanse}", "/dokument/{forsendelseIdMedPrefix}"], method = [RequestMethod.OPTIONS] @@ -48,4 +63,16 @@ class DokumentKontroller(val fysiskDokumentService: FysiskDokumentService) { ): List { return fysiskDokumentService.hentDokumentMetadata(forsendelseIdMedPrefix.numerisk, dokumentreferanse) } + + @RequestMapping( + *["/dokumentreferanse/{dokumentreferanse}"], + method = [RequestMethod.OPTIONS] + ) + @Operation( + summary = "Hent metadata om dokument", + security = [SecurityRequirement(name = "bearer-key")] + ) + fun hentDokumentMetadataForReferanse(@PathVariable dokumentreferanse: String): List { + return fysiskDokumentService.hentDokumentMetadataForReferanse(dokumentreferanse) + } } diff --git "a/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/api/dto/OpprettForesp\303\270rselTo.kt" "b/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/api/dto/OpprettForesp\303\270rselTo.kt" index 38a34544..51fb2e5a 100644 --- "a/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/api/dto/OpprettForesp\303\270rselTo.kt" +++ "b/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/api/dto/OpprettForesp\303\270rselTo.kt" @@ -1,5 +1,6 @@ package no.nav.bidrag.dokument.forsendelse.api.dto +import com.fasterxml.jackson.annotation.JsonFormat import com.fasterxml.jackson.annotation.JsonInclude import io.swagger.v3.oas.annotations.media.Schema import no.nav.bidrag.dokument.dto.DokumentArkivSystemDto @@ -66,6 +67,7 @@ data class OpprettDokumentForespørsel( @Schema(description = "Dokumentets tittel") override val tittel: String = "", @Schema(description = "Språket på inneholdet i dokumentet.") val språk: String? = null, @Schema(description = "Arkivsystem hvor dokument er lagret", enumAsRef = true) override val arkivsystem: DokumentArkivSystemDto? = null, + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd.MM.yyyy-HH-mm-ss") @Schema(description = "Dato dokument ble opprettet") override val dokumentDato: LocalDateTime? = null, @Schema(description = "Referansen til dokumentet hvis det er allerede er lagret i arkivsystem. Hvis dette ikke settes opprettes det en ny dokumentreferanse som kan brukes ved opprettelse av dokument") override val dokumentreferanse: String? = null, @Schema(description = "JournalpostId til dokumentet hvis det er allerede er lagret i arkivsystem") override val journalpostId: JournalpostId? = null, diff --git a/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/config/RestConfig.kt b/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/config/RestConfig.kt index a096a612..c4565003 100644 --- a/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/config/RestConfig.kt +++ b/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/config/RestConfig.kt @@ -9,6 +9,7 @@ import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.Import import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder + @Configuration @EnableSecurityConfiguration @Import(RestOperationsAzure::class) @@ -21,4 +22,5 @@ class RestConfig { .failOnUnknownProperties(false) .serializationInclusion(JsonInclude.Include.NON_NULL) } + } diff --git a/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/persistence/database/repository/DokumentRepository.kt b/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/persistence/database/repository/DokumentRepository.kt index b74ff768..738852ff 100644 --- a/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/persistence/database/repository/DokumentRepository.kt +++ b/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/persistence/database/repository/DokumentRepository.kt @@ -9,6 +9,8 @@ interface DokumentRepository : CrudRepository { @Query("select d from dokument d where d.dokumentreferanseOriginal = :dokumentreferanse or d.dokumentId = :dokumentId") fun hentDokumenterMedDokumentreferanse(dokumentreferanse: String, dokumentId: Long?): List + fun findByDokumentId(dokumentId: Long?): Dokument? + @Query("select d from dokument d where d.dokumentStatus = 'BESTILLING_FEILET' and d.slettetTidspunkt is null and d.forsendelse.status = 'UNDER_PRODUKSJON'") fun hentDokumenterSomHarStatusBestillingFeilet(): List diff --git a/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/service/FerdigstillForsendelseService.kt b/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/service/FerdigstillForsendelseService.kt index 9e09cb34..fd661860 100644 --- a/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/service/FerdigstillForsendelseService.kt +++ b/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/service/FerdigstillForsendelseService.kt @@ -85,7 +85,7 @@ class FerdigstillForsendelseService( OpprettDokumentDto( brevkode = it.dokumentmalId, tittel = if (it.tilknyttetSom === DokumentTilknyttetSom.HOVEDDOKUMENT) hovedtittelMedBeskjed else it.tittel, - fysiskDokument = fysiskDokumentService.hentFysiskDokument(it) + dokumentreferanse = it.dokumentreferanse, ) }, tilknyttSaker = listOf(forsendelse.saksnummer), diff --git a/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/service/FysiskDokumentService.kt b/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/service/FysiskDokumentService.kt index 9d542cba..6fab20b6 100644 --- a/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/service/FysiskDokumentService.kt +++ b/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/service/FysiskDokumentService.kt @@ -47,6 +47,21 @@ class FysiskDokumentService( throw FantIkkeDokument("Kan ikke hente dokument $dokumentreferanse med forsendelseId $forsendelseId fra arkivsystem = $arkivSystem") } + fun hentDokument(dokumentreferanse: String): ByteArray { + val dokument = dokumentTjeneste.hentDokument(dokumentreferanse) + ?: fantIkkeDokument(-1, dokumentreferanse) + val forsendelse = dokument.forsendelse + + tilgangskontrollService.sjekkTilgangForsendelse(forsendelse) + + if (dokument.dokumentStatus == DokumentStatus.KONTROLLERT) { + return dokumentStorageService.hentFil(dokument.filsti) + } + + val arkivSystem = dokument.arkivsystem + throw FantIkkeDokument("Kan ikke hente dokument $dokumentreferanse med forsendelseId ${forsendelse.forsendelseId} fra arkivsystem = $arkivSystem") + } + fun hentFysiskDokument(dokumentMetadata: DokumentMetadata): ByteArray { return if (dokumentMetadata.arkivsystem == DokumentArkivSystemDto.BIDRAG) { hentDokument( @@ -107,6 +122,17 @@ class FysiskDokumentService( return listOf(mapTilDokumentMetadata(dokument)) } + fun hentDokumentMetadataForReferanse(dokumentreferanse: String): List { + val dokument = dokumentTjeneste.hentDokument(dokumentreferanse) ?: throw FantIkkeDokument("Fant ikke dokumentreferanse=$dokumentreferanse") + + if (dokument.arkivsystem == DokumentArkivSystem.FORSENDELSE) { + log.info { "Dokument $dokumentreferanse er symlink til dokument ${dokument.dokumentreferanseOriginal} i forsendelse ${dokument.journalpostIdOriginal}" } + return hentDokumentMetadata(dokument.forsendelseId!!, dokument.dokumentreferanseOriginal) + } + + return listOf(mapTilDokumentMetadata(dokument)) + } + private fun mapTilDokumentMetadata(dokument: Dokument): DokumentMetadata { val dokumentreferanse = if (dokument.erFraAnnenKilde) dokument.dokumentreferanseOriginal else dokument.dokumentreferanse return if (dokument.dokumentStatus == DokumentStatus.KONTROLLERT) { diff --git a/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/service/dao/DokumentTjeneste.kt b/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/service/dao/DokumentTjeneste.kt index e9b16f76..897587cc 100644 --- a/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/service/dao/DokumentTjeneste.kt +++ b/src/main/kotlin/no/nav/bidrag/dokument/forsendelse/service/dao/DokumentTjeneste.kt @@ -59,6 +59,10 @@ class DokumentTjeneste( return dokumentRepository.hentDokumenterMedDokumentreferanse(dokumentreferanse, dokumentreferanse.utenPrefiks.toLong()) } + fun hentDokument(dokumentreferanse: String): Dokument? { + return dokumentRepository.findByDokumentId(dokumentreferanse.utenPrefiks.toLong()) + } + fun hentDokumenterSomHarStatusBestillingFeilet(): List { return dokumentRepository.hentDokumenterSomHarStatusBestillingFeilet() } diff --git a/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/api/DistribuerKontrollerTest.kt b/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/api/DistribuerKontrollerTest.kt index 9874b72b..b9f24477 100644 --- a/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/api/DistribuerKontrollerTest.kt +++ b/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/api/DistribuerKontrollerTest.kt @@ -22,8 +22,7 @@ import no.nav.bidrag.dokument.forsendelse.utils.med import no.nav.bidrag.dokument.forsendelse.utils.nyttDokument import no.nav.bidrag.dokument.forsendelse.utils.opprettForsendelse2 import no.nav.bidrag.dokument.forsendelse.utvidelser.forsendelseIdMedPrefix -import no.nav.bidrag.dokument.forsendelse.utvidelser.hoveddokument -import no.nav.bidrag.dokument.forsendelse.utvidelser.vedlegger +import org.intellij.lang.annotations.Language import org.junit.jupiter.api.Test import org.springframework.http.HttpEntity import org.springframework.http.HttpStatus @@ -183,30 +182,26 @@ class DistribuerKontrollerTest : KontrollerTestRunner() { oppdatertForsendelse.dokumenter.forEach { it.dokumentreferanseFagarkiv shouldBe "JOARK${it.dokumentreferanse}" } - - stubUtils.Valider().opprettJournalpostKaltMed( - "{" + - "\"skalFerdigstilles\":true," + - "\"tittel\":\"Tittel på hoveddokument\"," + - "\"gjelderIdent\":\"${forsendelse.gjelderIdent}\"," + - "\"avsenderMottaker\":{\"navn\":\"${forsendelse.mottaker?.navn}\",\"ident\":\"${forsendelse.mottaker?.ident}\",\"type\":\"FNR\",\"adresse\":null}," + - "\"dokumenter\":[" + - "{\"tittel\":\"Tittel på hoveddokument\",\"brevkode\":\"BI091\",\"fysiskDokument\":\"SlZCRVJpMHhMamNnUW1GelpUWTBJR1Z1WTI5a1pYUWdabmx6YVhOcklHUnZhM1Z0Wlc1MA==\"}," + - "{\"tittel\":\"Tittel vedlegg\",\"brevkode\":\"BI100\",\"fysiskDokument\":\"SlZCRVJpMHhMamNnUW1GelpUWTBJR1Z1WTI5a1pYUWdabmx6YVhOcklHUnZhM1Z0Wlc1MA==\"}]," + - "\"tilknyttSaker\":[\"${forsendelse.saksnummer}\"]," + - "\"tema\":\"FAR\"," + - "\"journalposttype\":\"UTGÅENDE\"," + - "\"referanseId\":\"$referanseId\"," + - "\"journalførendeEnhet\":\"${forsendelse.enhet}\"" + - "}" - ) + @Language("Json") + val expectedJson = """ + { + "skalFerdigstilles":true, + "tittel":"Tittel på hoveddokument", + "gjelderIdent":"${forsendelse.gjelderIdent}", + "avsenderMottaker":{"navn":"${forsendelse.mottaker?.navn}","ident":"${forsendelse.mottaker?.ident}","type":"FNR","adresse":null}, + "dokumenter":[ + {"tittel":"Tittel på hoveddokument","brevkode":"BI091","dokumentreferanse":"${forsendelse.dokumenter[0].dokumentreferanse}"}, + {"tittel":"Tittel vedlegg","brevkode":"BI100","dokumentreferanse":"${forsendelse.dokumenter[1].dokumentreferanse}"} + ], + "tilknyttSaker":["${forsendelse.saksnummer}"], + "tema":"FAR", + "journalposttype":"UTGÅENDE", + "referanseId":"$referanseId", + "journalførendeEnhet":"${forsendelse.enhet}" + } + """.trimIndent().replace("\n", "").replace(" ", "") + stubUtils.Valider().opprettJournalpostKaltMed(expectedJson) stubUtils.Valider().bestillDistribusjonKaltMed("JOARK-$nyJournalpostId") - stubUtils.Valider().hentDokumentKalt(forsendelse.forsendelseIdMedPrefix, forsendelse.dokumenter.vedlegger[0].dokumentreferanse) - stubUtils.Valider() - .hentDokumentKalt( - forsendelse.dokumenter.hoveddokument?.journalpostId!!, - forsendelse.dokumenter.hoveddokument?.dokumentreferanseOriginal!! - ) } } @@ -250,31 +245,27 @@ class DistribuerKontrollerTest : KontrollerTestRunner() { oppdatertForsendelse.dokumenter.forEach { it.dokumentreferanseFagarkiv shouldBe "JOARK${it.dokumentreferanse}" } - - - stubUtils.Valider().opprettJournalpostKaltMed( - "{" + - "\"skalFerdigstilles\":true," + - "\"tittel\":\"Tittel på hoveddokument\"," + - "\"gjelderIdent\":\"${forsendelse.gjelderIdent}\"," + - "\"avsenderMottaker\":{\"navn\":\"${forsendelse.mottaker?.navn}\",\"ident\":\"${forsendelse.mottaker?.ident}\",\"type\":\"FNR\",\"adresse\":null}," + - "\"dokumenter\":[" + - "{\"tittel\":\"Tittel på hoveddokument\",\"brevkode\":\"BI091\",\"fysiskDokument\":\"SlZCRVJpMHhMamNnUW1GelpUWTBJR1Z1WTI5a1pYUWdabmx6YVhOcklHUnZhM1Z0Wlc1MA==\"}," + - "{\"tittel\":\"Tittel vedlegg\",\"brevkode\":\"BI100\",\"fysiskDokument\":\"SlZCRVJpMHhMamNnUW1GelpUWTBJR1Z1WTI5a1pYUWdabmx6YVhOcklHUnZhM1Z0Wlc1MA==\"}]," + - "\"tilknyttSaker\":[\"${forsendelse.saksnummer}\"]," + - "\"tema\":\"BID\"," + - "\"journalposttype\":\"UTGÅENDE\"," + - "\"referanseId\":\"$referanseId\"," + - "\"journalførendeEnhet\":\"${forsendelse.enhet}\"" + - "}" - ) + @Language("Json") + val expectedJson = """ + { + "skalFerdigstilles":true, + "tittel":"Tittel på hoveddokument", + "gjelderIdent":"${forsendelse.gjelderIdent}", + "avsenderMottaker":{"navn":"${forsendelse.mottaker?.navn}","ident":"${forsendelse.mottaker?.ident}","type":"FNR","adresse":null}, + "dokumenter":[ + {"tittel":"Tittel på hoveddokument","brevkode":"BI091","dokumentreferanse":"${forsendelse.dokumenter[0].dokumentreferanse}"}, + {"tittel":"Tittel vedlegg","brevkode":"BI100","dokumentreferanse":"${forsendelse.dokumenter[1].dokumentreferanse}"} + ], + "tilknyttSaker":["${forsendelse.saksnummer}"], + "tema":"BID", + "journalposttype":"UTGÅENDE", + "referanseId":"$referanseId", + "journalførendeEnhet":"${forsendelse.enhet}" + } + """.trimIndent().replace("\n", "").replace(" ", "") + + stubUtils.Valider().opprettJournalpostKaltMed(expectedJson) stubUtils.Valider().bestillDistribusjonKaltMed("JOARK-$nyJournalpostId") - stubUtils.Valider().hentDokumentKalt(forsendelse.forsendelseIdMedPrefix, forsendelse.dokumenter.vedlegger[0].dokumentreferanse) - stubUtils.Valider() - .hentDokumentKalt( - forsendelse.dokumenter.hoveddokument?.journalpostId!!, - forsendelse.dokumenter.hoveddokument?.dokumentreferanseOriginal!! - ) } } @@ -353,26 +344,26 @@ class DistribuerKontrollerTest : KontrollerTestRunner() { oppdatertForsendelse.dokumenter.forEach { it.dokumentreferanseFagarkiv shouldBe "JOARK${it.dokumentreferanse}" } - - stubUtils.Valider().opprettJournalpostKaltMed( - "{" + - "\"skalFerdigstilles\":true," + - "\"tittel\":\"Dokument knyttet til forsendelse 1\"," + - "\"gjelderIdent\":\"${forsendelse.gjelderIdent}\"," + - "\"avsenderMottaker\":{\"navn\":\"${forsendelse.mottaker?.navn}\",\"ident\":\"${forsendelse.mottaker?.ident}\",\"type\":\"FNR\",\"adresse\":null}," + - "\"dokumenter\":[" + - "{\"tittel\":\"Dokument knyttet til forsendelse 1\",\"brevkode\":\"$DOKUMENTMAL_UTGÅENDE\",\"fysiskDokument\":\"SlZCRVJpMHhMamNnUW1GelpUWTBJR1Z1WTI5a1pYUWdabmx6YVhOcklHUnZhM1Z0Wlc1MA==\"}," + - "{\"tittel\":\"Dokument knyttet til forsendelse 2\",\"brevkode\":\"$DOKUMENTMAL_UTGÅENDE\",\"fysiskDokument\":\"SlZCRVJpMHhMamNnUW1GelpUWTBJR1Z1WTI5a1pYUWdabmx6YVhOcklHUnZhM1Z0Wlc1MA==\"}]," + - "\"tilknyttSaker\":[\"${forsendelse.saksnummer}\"]," + - "\"tema\":\"BID\"," + - "\"journalposttype\":\"UTGÅENDE\"," + - "\"referanseId\":\"$referanseId\"," + - "\"journalførendeEnhet\":\"${forsendelse.enhet}\"" + - "}" - ) + @Language("Json") + val expectedJson = """ + { + "skalFerdigstilles":true, + "tittel":"Dokument knyttet til forsendelse 1", + "gjelderIdent":"${forsendelse.gjelderIdent}", + "avsenderMottaker":{"navn":"${forsendelse.mottaker?.navn}","ident":"${forsendelse.mottaker?.ident}","type":"FNR","adresse":null}, + "dokumenter":[ + {"tittel":"Dokument knyttet til forsendelse 1","brevkode":"$DOKUMENTMAL_UTGÅENDE","dokumentreferanse":"${forsendelse.dokumenter[0].dokumentreferanse}"}, + {"tittel":"Dokument knyttet til forsendelse 2","brevkode":"$DOKUMENTMAL_UTGÅENDE","dokumentreferanse":"${forsendelse.dokumenter[1].dokumentreferanse}"} + ], + "tilknyttSaker":["${forsendelse.saksnummer}"], + "tema":"BID", + "journalposttype":"UTGÅENDE", + "referanseId":"$referanseId", + "journalførendeEnhet":"${forsendelse.enhet}" + } + """.trimIndent().replace("\n", "").replace(" ", "") + stubUtils.Valider().opprettJournalpostKaltMed(expectedJson) stubUtils.Valider().bestillDistribusjonKaltMed("JOARK-$nyJournalpostId") - stubUtils.Valider().hentDokumentKalt(forsendelseOriginal.forsendelseIdMedPrefix, forsendelseOriginal.dokumenter[0].dokumentreferanse) - stubUtils.Valider().hentDokumentKalt(forsendelseOriginal.forsendelseIdMedPrefix, forsendelseOriginal.dokumenter[1].dokumentreferanse) } } @@ -446,29 +437,27 @@ class DistribuerKontrollerTest : KontrollerTestRunner() { oppdatertForsendelse.dokumenter.forEach { it.dokumentreferanseFagarkiv shouldBe "JOARK${it.dokumentreferanse}" } - stubUtils.Valider().opprettJournalpostKaltMed( - "{" + - "\"skalFerdigstilles\":true," + - "\"tittel\":\"Tittel på hoveddokument\"," + - "\"gjelderIdent\":\"${forsendelse.gjelderIdent}\"," + - "\"avsenderMottaker\":{\"navn\":\"${forsendelse.mottaker?.navn}\",\"ident\":\"${forsendelse.mottaker?.ident}\",\"type\":\"FNR\",\"adresse\":null}," + - "\"dokumenter\":[" + - "{\"tittel\":\"Tittel på hoveddokument\",\"brevkode\":\"BI091\",\"fysiskDokument\":\"SlZCRVJpMHhMamNnUW1GelpUWTBJR1Z1WTI5a1pYUWdabmx6YVhOcklHUnZhM1Z0Wlc1MA==\"}," + - "{\"tittel\":\"Tittel vedlegg\",\"brevkode\":\"BI100\",\"fysiskDokument\":\"SlZCRVJpMHhMamNnUW1GelpUWTBJR1Z1WTI5a1pYUWdabmx6YVhOcklHUnZhM1Z0Wlc1MA==\"}]," + - "\"tilknyttSaker\":[\"${forsendelse.saksnummer}\"]," + - "\"tema\":\"BID\"," + - "\"journalposttype\":\"UTGÅENDE\"," + - "\"referanseId\":\"$referanseId\"," + - "\"journalførendeEnhet\":\"${forsendelse.enhet}\"" + - "}" - ) + + @Language("Json") + val expectedJson = """ + { + "skalFerdigstilles":true, + "tittel":"Tittel på hoveddokument", + "gjelderIdent":"${forsendelse.gjelderIdent}", + "avsenderMottaker":{"navn":"${forsendelse.mottaker?.navn}","ident":"${forsendelse.mottaker?.ident}","type":"FNR","adresse":null}, + "dokumenter":[ + {"tittel":"Tittel på hoveddokument","brevkode":"BI091","dokumentreferanse":"${forsendelse.dokumenter[0].dokumentreferanse}"}, + {"tittel":"Tittel vedlegg","brevkode":"BI100","dokumentreferanse":"${forsendelse.dokumenter[1].dokumentreferanse}"} + ], + "tilknyttSaker":["${forsendelse.saksnummer}"], + "tema":"BID", + "journalposttype":"UTGÅENDE", + "referanseId":"$referanseId", + "journalførendeEnhet":"${forsendelse.enhet}" + } + """.trimIndent().replace("\n", "").replace(" ", "") + stubUtils.Valider().opprettJournalpostKaltMed(expectedJson) stubUtils.Valider().bestillDistribusjonKaltMed("JOARK-$nyJournalpostId", batchId = batchId) - stubUtils.Valider().hentDokumentKalt(forsendelse.forsendelseIdMedPrefix, forsendelse.dokumenter.vedlegger[0].dokumentreferanse) - stubUtils.Valider() - .hentDokumentKalt( - forsendelse.dokumenter.hoveddokument?.journalpostId!!, - forsendelse.dokumenter.hoveddokument?.dokumentreferanseOriginal!! - ) } } @@ -517,30 +506,27 @@ class DistribuerKontrollerTest : KontrollerTestRunner() { it.dokumentreferanseFagarkiv shouldBe "JOARK${it.dokumentreferanse}" } - stubUtils.Valider().opprettJournalpostKaltMed( - "{" + - "\"skalFerdigstilles\":true," + - "\"tittel\":\"Tittel på hoveddokument\"," + - "\"gjelderIdent\":\"${forsendelse.gjelderIdent}\"," + - "\"avsenderMottaker\":{\"navn\":\"${forsendelse.mottaker?.navn}\",\"ident\":\"${forsendelse.mottaker?.ident}\",\"type\":\"FNR\",\"adresse\":null}," + - "\"dokumenter\":[" + - "{\"tittel\":\"Tittel på hoveddokument (dokumentet er sendt per post med vedlegg)\",\"brevkode\":\"BI091\",\"fysiskDokument\":\"SlZCRVJpMHhMamNnUW1GelpUWTBJR1Z1WTI5a1pYUWdabmx6YVhOcklHUnZhM1Z0Wlc1MA==\"}," + - "{\"tittel\":\"Tittel vedlegg\",\"brevkode\":\"BI100\",\"fysiskDokument\":\"SlZCRVJpMHhMamNnUW1GelpUWTBJR1Z1WTI5a1pYUWdabmx6YVhOcklHUnZhM1Z0Wlc1MA==\"}]," + - "\"tilknyttSaker\":[\"${forsendelse.saksnummer}\"]," + - "\"kanal\":\"LOKAL_UTSKRIFT\"," + - "\"tema\":\"BID\"," + - "\"journalposttype\":\"UTGÅENDE\"," + - "\"referanseId\":\"$referanseId\"," + - "\"journalførendeEnhet\":\"${forsendelse.enhet}\"" + - "}" - ) + @Language("Json") + val expectedJson = """ + { + "skalFerdigstilles":true, + "tittel":"Tittel på hoveddokument", + "gjelderIdent":"${forsendelse.gjelderIdent}", + "avsenderMottaker":{"navn":"${forsendelse.mottaker?.navn}","ident":"${forsendelse.mottaker?.ident}","type":"FNR","adresse":null}, + "dokumenter":[ + {"tittel":"Tittel på hoveddokument (dokumentet er sendt per post med vedlegg)","brevkode":"BI091","dokumentreferanse":"${forsendelse.dokumenter[0].dokumentreferanse}"}, + {"tittel":"Tittel vedlegg","brevkode":"BI100","dokumentreferanse":"${forsendelse.dokumenter[1].dokumentreferanse}"} + ], + "tilknyttSaker":["${forsendelse.saksnummer}"], + "kanal":"LOKAL_UTSKRIFT", + "tema":"BID", + "journalposttype":"UTGÅENDE", + "referanseId":"$referanseId", + "journalførendeEnhet":"${forsendelse.enhet}" + } + """.trimIndent().replace("\n", "").replace(" ", "") + stubUtils.Valider().opprettJournalpostKaltMed(expectedJson) stubUtils.Valider().bestillDistribusjonKaltMed("JOARK-$nyJournalpostId", "\"lokalUtskrift\":true") - stubUtils.Valider().hentDokumentKalt(forsendelse.forsendelseIdMedPrefix, forsendelse.dokumenter.vedlegger[0].dokumentreferanse) - stubUtils.Valider() - .hentDokumentKalt( - forsendelse.dokumenter.hoveddokument?.journalpostId!!, - forsendelse.dokumenter.hoveddokument?.dokumentreferanseOriginal!! - ) } } } diff --git a/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/api/ForsendelseVerdikjedeTest.kt b/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/api/ForsendelseVerdikjedeTest.kt index 90ccd8bb..dd08ad5c 100644 --- a/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/api/ForsendelseVerdikjedeTest.kt +++ b/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/api/ForsendelseVerdikjedeTest.kt @@ -292,9 +292,9 @@ class ForsendelseVerdikjedeTest : KontrollerTestContainerRunner() { "\"gjelderIdent\":\"${opprettetForsendelseOppdatert.gjelderIdent}\"," + "\"avsenderMottaker\":{\"navn\":\"${opprettetForsendelseOppdatert.mottaker?.navn}\",\"ident\":\"${opprettetForsendelseOppdatert.mottaker?.ident}\",\"type\":\"FNR\",\"adresse\":null}," + "\"dokumenter\":[" + - "{\"tittel\":\"Ny tittel dokument fra Joark\",\"fysiskDokument\":\"UkVESUdFUklOR0RBVEFfQllURQ==\"}," + - "{\"tittel\":\"Tittel på hoveddokument\",\"brevkode\":\"BI091\",\"fysiskDokument\":\"SlZCRVJpMHhMamNnUW1GelpUWTBJR1Z1WTI5a1pYUWdabmx6YVhOcklHUnZhM1Z0Wlc1MA==\"}," + - "{\"tittel\":\"Ny tittel koblet dokument fra original\",\"brevkode\":\"$DOKUMENTMAL_UTGÅENDE\",\"fysiskDokument\":\"SlZCRVJpMHhMamNnUW1GelpUWTBJR1Z1WTI5a1pYUWdabmx6YVhOcklHUnZhM1Z0Wlc1MA==\"}]," + + "{\"tittel\":\"Ny tittel dokument fra Joark\",\"dokumentreferanse\":\"${opprettetForsendelseOppdatert.dokumenter[2].dokumentreferanse}\"}," + + "{\"tittel\":\"Tittel på hoveddokument\",\"brevkode\":\"BI091\",\"dokumentreferanse\":\"${opprettetForsendelseOppdatert.dokumenter[1].dokumentreferanse}\"}," + + "{\"tittel\":\"Ny tittel koblet dokument fra original\",\"brevkode\":\"$DOKUMENTMAL_UTGÅENDE\",\"dokumentreferanse\":\"${opprettetForsendelseOppdatert.dokumenter[0].dokumentreferanse}\"}]," + "\"tilknyttSaker\":[\"${opprettetForsendelseOppdatert.saksnummer}\"]," + "\"tema\":\"BID\"," + "\"journalposttype\":\"UTGÅENDE\"," + diff --git a/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/hendelse/DokumentHendelseTest.kt b/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/hendelse/DokumentHendelseTest.kt index 40e7f79e..be1ff962 100644 --- a/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/hendelse/DokumentHendelseTest.kt +++ b/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/hendelse/DokumentHendelseTest.kt @@ -310,7 +310,7 @@ class DokumentHendelseTest : KafkaHendelseTestRunner() { "\"tittel\":\"Forsendelse notat\"," + "\"gjelderIdent\":\"${forsendelseEtter.gjelderIdent}\"," + "\"dokumenter\":[" + - "{\"tittel\":\"Forsendelse notat\",\"brevkode\":\"BI091\",\"fysiskDokument\":\"SlZCRVJpMHhMamNnUW1GelpUWTBJR1Z1WTI5a1pYUWdabmx6YVhOcklHUnZhM1Z0Wlc1MA==\"}]," + + "{\"tittel\":\"Forsendelse notat\",\"brevkode\":\"BI091\",\"dokumentreferanse\":\"${forsendelseEtter.dokumenter[0].dokumentreferanse}\"}]," + "\"tilknyttSaker\":[\"${forsendelseEtter.saksnummer}\"]," + "\"datoDokument\":\"2022-01-05T01:02:03\"," + "\"tema\":\"BID\"," + @@ -320,8 +320,6 @@ class DokumentHendelseTest : KafkaHendelseTestRunner() { "\"saksbehandlerIdent\":\"Z999444\"" + "}" ) - - stubUtils.Valider().hentDokumentKalt(forsendelseEtter.forsendelseIdMedPrefix, forsendelseEtter.dokumenter[0].dokumentreferanse) } } } diff --git a/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/hendelse/OppdaterDistribusjonStatusTest.kt b/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/hendelse/OppdaterDistribusjonStatusTest.kt index 14071dbf..70749105 100644 --- a/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/hendelse/OppdaterDistribusjonStatusTest.kt +++ b/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/hendelse/OppdaterDistribusjonStatusTest.kt @@ -1,5 +1,6 @@ package no.nav.bidrag.dokument.forsendelse.hendelse +import com.github.tomakehurst.wiremock.client.WireMock import com.ninjasquad.springmockk.SpykBean import io.kotest.assertions.assertSoftly import io.kotest.matchers.collections.shouldContain @@ -64,6 +65,7 @@ class OppdaterDistribusjonStatusTest : KafkaHendelseTestRunner() { @BeforeEach fun resetSpys() { clearAllMocks() + WireMock.resetAllRequests() } private fun opprettForsendelseFerdigstiltIkkeDistribuert(): Forsendelse { diff --git a/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/service/FerdigstillForsendelseServiceTest.kt b/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/service/FerdigstillForsendelseServiceTest.kt index 553daed0..0c5af2b6 100644 --- a/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/service/FerdigstillForsendelseServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/dokument/forsendelse/service/FerdigstillForsendelseServiceTest.kt @@ -1,6 +1,7 @@ package no.nav.bidrag.dokument.forsendelse.service import com.ninjasquad.springmockk.MockkBean +import io.kotest.matchers.collections.shouldBeIn import io.kotest.matchers.date.shouldHaveSameDayAs import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe @@ -335,8 +336,9 @@ class FerdigstillForsendelseServiceTest { verify { bidragDokumentConsumer.opprettJournalpost( withArg { - it.dokumenter.forEach { dok -> - dok.fysiskDokument shouldBe DOKUMENT_FIL.toByteArray() + it.dokumenter.forEachIndexed { i, dok -> + dok.fysiskDokument shouldBe null + dok.dokumentreferanse shouldBeIn listOf("BIF2", "BIF1") } } )