From d57635eba4ba804caf65099121dfcf64d91ec290 Mon Sep 17 00:00:00 2001 From: Emil Albrektsson <61695840+albrektsson@users.noreply.github.com> Date: Thu, 19 Sep 2024 09:26:51 +0200 Subject: [PATCH 01/12] =?UTF-8?q?Lagt=20til=20st=C3=B8tte=20for=20=C3=A5?= =?UTF-8?q?=20kopiere=20journalpost=20(#1117)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * WIP Støtte for å kopiere journalpost * Testjobb * Fikser kopiering av journalpost * Refaktorerer ut krav for kopiering. * Fjerner ubrukt felt. * Fjerner rapid og ubrukte klasser. * Fikser circular reference. * Lagrer journalpostkopi gjennom hendelseMottaker. * Etterspørr datoOpprettet ved kall mot SAF. * Legger på TODO... * Fjerner konsumering fra punsjbolle topic. * Fikser feilhåndtering ved kopiering av journalpost. * Rydder opp kode * Bruker enum for string verdier. * Fjerner ubrukt variabel. * Bruker enum for string verdier. * Forenkler logikk. * Returnerer mer detaljert respons ved kopiering av JP. --------- Co-authored-by: Ramin Esfandiari Co-authored-by: Ramin Esfandiari --- nais/dev-fss.yml | 4 - nais/prod-fss.yml | 4 - pom.xml | 6 - .../k9punsj/domenetjenester/SoknadService.kt | 4 +- .../k9punsj/felles/PunsjFagsakYtelseType.kt | 12 ++ .../k9punsj/innsending/InnsendingClient.kt | 69 -------- .../KopierJournalpostInnsendingClient.kt | 44 ----- .../integrasjoner/dokarkiv/DokarkivGateway.kt | 55 ++++++- .../k9punsj/integrasjoner/dokarkiv/SafDtos.kt | 20 ++- .../integrasjoner/dokarkiv/SafGateway.kt | 2 +- .../integrasjoner/gosys/GosysService.kt | 2 +- .../integrasjoner/k9sak/K9SakService.kt | 5 + .../integrasjoner/k9sak/K9SakServiceImpl.kt | 35 ++++ .../k9sak/dto/HentK9SaksnummerGrunnlagDto.kt | 6 +- .../k9punsj/journalpost/JournalpostRoutes.kt | 58 ++----- .../k9punsj/journalpost/JournalpostService.kt | 13 +- .../JournalpostkopieringService.kt | 152 ++++++++++++++++++ .../journalpost/dto/KopierJournalpostDto.kt | 13 ++ .../journalpost/dto/KopierJournalpostInfo.kt | 15 +- .../no/nav/k9punsj/kafka/KafkaConsumers.kt | 12 -- .../no/nav/k9punsj/utils/PeriodeUtils.kt | 4 + src/main/resources/application.yml | 7 - .../no/nav/k9punsj/MockConfiguration.kt | 1 - .../AksjonspunktServiceImplTest.kt | 4 - .../domenetjenester/SoknadServiceTest.kt | 7 +- .../no/nav/k9punsj/fordel/FordelKafkaTest.kt | 4 - .../k9punsj/fordel/HendelseMottakerTest.kt | 4 - ...pieringJournalpostInnsendingMappingTest.kt | 57 ------- .../innsending/LoggingInnsendingClient.kt | 16 -- .../journalpost/JournalpostServiceTest.kt | 4 + .../journalpost/KopierJournalpostRouteTest.kt | 131 +++++++++++++-- .../no/nav/k9punsj/journalpost/SafDtosTest.kt | 13 +- .../postmottak/PostMottakServiceTest.kt | 4 +- .../rest/eksternt/k9sak/LokalK9SakService.kt | 5 + .../rest/eksternt/k9sak/TestK9SakService.kt | 7 +- .../no/nav/k9punsj/wiremock/SafMocks.kt | 3 + 36 files changed, 474 insertions(+), 328 deletions(-) delete mode 100644 src/main/kotlin/no/nav/k9punsj/innsending/InnsendingClient.kt delete mode 100644 src/main/kotlin/no/nav/k9punsj/innsending/KopierJournalpostInnsendingClient.kt create mode 100644 src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostkopieringService.kt delete mode 100644 src/test/kotlin/no/nav/k9punsj/innsending/KopieringJournalpostInnsendingMappingTest.kt delete mode 100644 src/test/kotlin/no/nav/k9punsj/innsending/LoggingInnsendingClient.kt diff --git a/nais/dev-fss.yml b/nais/dev-fss.yml index db2025ea5..01a163bd1 100644 --- a/nais/dev-fss.yml +++ b/nais/dev-fss.yml @@ -146,8 +146,6 @@ spec: value: api://dev-fss.teamdokumenthandtering.dokarkiv-q1/.default # Integrasjoner (Kafka) - - name: K9_RAPID_TOPIC - value: "omsorgspenger.k9-rapid-v2" - name: SEND_AKSJONSPUNKTHENDELSE_TIL_K9LOS value: "k9saksbehandling.punsj-aksjonspunkthendelse-v1" - name: SEND_BREVBESTILLING_TIL_K9_FORMIDLING @@ -156,8 +154,6 @@ spec: value: "k9saksbehandling.k9-punsj-til-los" - name: K9_FORDEL_TOPIC value: "k9saksbehandling.fordel-journalforing" - - name: K9_PUNSJBOLLE_TOPIC - value: "k9saksbehandling.punsjbar-journalpost" # Div - name: SETT_PAA_VENT_TID diff --git a/nais/prod-fss.yml b/nais/prod-fss.yml index feff52237..c37e5bb13 100644 --- a/nais/prod-fss.yml +++ b/nais/prod-fss.yml @@ -139,8 +139,6 @@ spec: value: api://prod-fss.teamdokumenthandtering.dokarkiv/.default # Integrasjoner (Kafka) - - name: K9_RAPID_TOPIC - value: "omsorgspenger.k9-rapid-v2" - name: SEND_AKSJONSPUNKTHENDELSE_TIL_K9LOS value: "k9saksbehandling.punsj-aksjonspunkthendelse-v1" - name: SEND_BREVBESTILLING_TIL_K9_FORMIDLING @@ -149,8 +147,6 @@ spec: value: "k9saksbehandling.k9-punsj-til-los" - name: K9_FORDEL_TOPIC value: "k9saksbehandling.fordel-journalforing" - - name: K9_PUNSJBOLLE_TOPIC - value: "k9saksbehandling.punsjbar-journalpost" # Feature toggles - name: FERDIGSTILL_GOSYSOPPGAVE_ENABLED diff --git a/pom.xml b/pom.xml index 5557d914e..2183d6783 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,6 @@ 4.2.0 10.1.0 9.5.2 - 1.20240510083323-9f05ca1 42.7.4 @@ -126,11 +125,6 @@ soknad ${k9-format.version} - - no.nav.k9.rapid - behov - ${k9-rapid.version} - diff --git a/src/main/kotlin/no/nav/k9punsj/domenetjenester/SoknadService.kt b/src/main/kotlin/no/nav/k9punsj/domenetjenester/SoknadService.kt index f407a820f..99c260347 100644 --- a/src/main/kotlin/no/nav/k9punsj/domenetjenester/SoknadService.kt +++ b/src/main/kotlin/no/nav/k9punsj/domenetjenester/SoknadService.kt @@ -74,7 +74,7 @@ class SoknadService( val journalposter = safGateway.hentJournalposter(journalpostIdListe) val journalposterMedTypeUtgaaende = journalposter.filterNotNull() - .filter { it.journalposttype == SafDtos.JournalpostType.U.toString() } + .filter { it.journalposttype == SafDtos.JournalpostType.UTGAAENDE.kode } .map { it.journalpostId } .toSet() if (journalposterMedTypeUtgaaende.isNotEmpty()) { @@ -339,7 +339,7 @@ class SoknadService( private suspend fun hentOgSjekkJournalpostene(journalpostIdListe: List): Pair, Set> { val journalposter = safGateway.hentJournalposter(journalpostIdListe) val journalposterMedTypeUtgaaende = journalposter.filterNotNull() - .filter { it.journalposttype == SafDtos.JournalpostType.U.toString() } + .filter { it.journalposttype == SafDtos.JournalpostType.UTGAAENDE.kode } .map { it.journalpostId } .toSet() return Pair(journalposter, journalposterMedTypeUtgaaende) diff --git a/src/main/kotlin/no/nav/k9punsj/felles/PunsjFagsakYtelseType.kt b/src/main/kotlin/no/nav/k9punsj/felles/PunsjFagsakYtelseType.kt index 59e818ba9..f5360284f 100644 --- a/src/main/kotlin/no/nav/k9punsj/felles/PunsjFagsakYtelseType.kt +++ b/src/main/kotlin/no/nav/k9punsj/felles/PunsjFagsakYtelseType.kt @@ -40,5 +40,17 @@ enum class PunsjFagsakYtelseType(@JsonValue val kode: String, val navn: String, fun fraNavn(navn: String): PunsjFagsakYtelseType { return values().firstOrNull { it.name == navn } ?: UDEFINERT } + + fun FagsakYtelseType.somPunsjFagsakYtelseType(): PunsjFagsakYtelseType = when(this) { + FagsakYtelseType.PLEIEPENGER_SYKT_BARN -> PLEIEPENGER_SYKT_BARN + FagsakYtelseType.PLEIEPENGER_NÆRSTÅENDE -> PLEIEPENGER_LIVETS_SLUTTFASE + FagsakYtelseType.OMSORGSPENGER -> OMSORGSPENGER + FagsakYtelseType.OMSORGSPENGER_KS -> OMSORGSPENGER_KRONISK_SYKT_BARN + FagsakYtelseType.OMSORGSPENGER_MA -> OMSORGSPENGER_MIDLERTIDIG_ALENE + FagsakYtelseType.OMSORGSPENGER_AO -> OMSORGSPENGER_ALENE_OMSORGEN + FagsakYtelseType.OPPLÆRINGSPENGER -> OPPLÆRINGSPENGER + FagsakYtelseType.UDEFINERT -> UKJENT + else -> throw IllegalStateException("Ikke støttet fagsakytelsetype: $this") + } } } diff --git a/src/main/kotlin/no/nav/k9punsj/innsending/InnsendingClient.kt b/src/main/kotlin/no/nav/k9punsj/innsending/InnsendingClient.kt deleted file mode 100644 index d75277b8f..000000000 --- a/src/main/kotlin/no/nav/k9punsj/innsending/InnsendingClient.kt +++ /dev/null @@ -1,69 +0,0 @@ -package no.nav.k9punsj.innsending - -import com.fasterxml.jackson.module.kotlin.convertValue -import de.huxhorn.sulky.ulid.ULID -import kotlinx.coroutines.runBlocking -import net.logstash.logback.argument.StructuredArguments.keyValue -import no.nav.k9.kodeverk.behandling.FagsakYtelseType -import no.nav.k9.rapid.behov.Behov -import no.nav.k9.rapid.behov.Behovssekvens -import no.nav.k9.søknad.Søknad -import no.nav.k9punsj.journalpost.dto.KopierJournalpostInfo -import no.nav.k9punsj.utils.objectMapper -import org.slf4j.LoggerFactory -import java.util.* - -interface InnsendingClient { - fun mapKopierJournalpost(info: KopierJournalpostInfo): Pair { - val behovssekvensId = ulid.nextULID() - val correlationId = UUID.randomUUID().toString() - logger.info( - "Sender journalpost (${info.journalpostId}) til kopiering med ytelse ${info.ytelse.kode}", - keyValue("journalpost_id", info.journalpostId), - keyValue("correlation_id", correlationId), - keyValue("behovssekvens_id", behovssekvensId) - ) - return Behovssekvens( - id = behovssekvensId, - correlationId = correlationId, - behov = arrayOf( - Behov( - navn = KopierPunsjbarJournalpostBehovNavn, - input = mapOf( - VersjonKey to KopierPunsjbarJournalpostVersjon, - "journalpostId" to info.journalpostId, - "fra" to info.fra, - "til" to info.til, - "pleietrengende" to info.pleietrengende, - "annenPart" to info.annenPart, - "søknadstype" to info.ytelse.somSøknadstype() - ) - ) - ) - ).keyValue - } - - suspend fun sendKopierJournalpost(info: KopierJournalpostInfo) = send(mapKopierJournalpost(info)) - - suspend fun send(pair: Pair) - - companion object { - private val logger = LoggerFactory.getLogger(InnsendingClient::class.java) - private val objectMapper = objectMapper() - private val ulid = ULID() - private const val VersjonKey = "versjon" - - private const val KopierPunsjbarJournalpostBehovNavn = "KopierPunsjbarJournalpost" - private const val KopierPunsjbarJournalpostVersjon = "1.0.0" - - private fun FagsakYtelseType.somSøknadstype() = when (this) { - FagsakYtelseType.PLEIEPENGER_SYKT_BARN -> "PleiepengerSyktBarn" - FagsakYtelseType.OMSORGSPENGER -> "Omsorgspenger" - FagsakYtelseType.OMSORGSPENGER_KS -> "OmsorgspengerKroniskSyktBarn" - FagsakYtelseType.PLEIEPENGER_NÆRSTÅENDE -> "PleiepengerLivetsSluttfase" - else -> throw IllegalArgumentException("Støtter ikke ytelse ${this.navn}") - } - - internal fun Søknad.somMap(): Map = objectMapper.convertValue(this) - } -} diff --git a/src/main/kotlin/no/nav/k9punsj/innsending/KopierJournalpostInnsendingClient.kt b/src/main/kotlin/no/nav/k9punsj/innsending/KopierJournalpostInnsendingClient.kt deleted file mode 100644 index 8a2231881..000000000 --- a/src/main/kotlin/no/nav/k9punsj/innsending/KopierJournalpostInnsendingClient.kt +++ /dev/null @@ -1,44 +0,0 @@ -package no.nav.k9punsj.innsending - -import no.nav.k9punsj.StandardProfil -import org.apache.kafka.clients.CommonClientConfigs -import org.apache.kafka.clients.producer.KafkaProducer -import org.apache.kafka.clients.producer.ProducerConfig -import org.apache.kafka.clients.producer.ProducerRecord -import org.apache.kafka.common.serialization.StringSerializer -import org.slf4j.LoggerFactory -import org.springframework.beans.factory.annotation.Value -import org.springframework.stereotype.Component - -@Component -@StandardProfil -class KopierJournalpostInnsendingClient( - kafkaBaseProperties: Map, - @Value("\${no.nav.kafka.k9_rapid.topic}") private val k9rapidTopic: String -): InnsendingClient { - private val clientId = kafkaBaseProperties.getValue(CommonClientConfigs.CLIENT_ID_CONFIG) - private val kafkaProducer = KafkaProducer( - kafkaBaseProperties.toMutableMap().also { - it[ProducerConfig.ACKS_CONFIG] = "1" - it[ProducerConfig.LINGER_MS_CONFIG] = "0" - it[ProducerConfig.MAX_IN_FLIGHT_REQUESTS_PER_CONNECTION] = "1" - }, - StringSerializer(), - StringSerializer() - ) - - override suspend fun send(pair: Pair) { - val (key, value) = pair - kotlin.runCatching { - kafkaProducer.send(ProducerRecord(k9rapidTopic, key, value)).get() - }.onSuccess { metadata -> - logger.info("Innsending OK, Key=[$key], ClientId=[$clientId], Topic=[${metadata.topic()}], Offset=[${metadata.offset()}], Partition=[${metadata.partition()}]") - }.onFailure { throwable -> - throw IllegalStateException("Feil ved innsending, Key=[$key], ClientId=[$clientId], Topic=[$k9rapidTopic]", throwable) - } - } - - private companion object { - private val logger = LoggerFactory.getLogger(KopierJournalpostInnsendingClient::class.java) - } -} diff --git a/src/main/kotlin/no/nav/k9punsj/integrasjoner/dokarkiv/DokarkivGateway.kt b/src/main/kotlin/no/nav/k9punsj/integrasjoner/dokarkiv/DokarkivGateway.kt index 80504d7c0..8bae1498b 100644 --- a/src/main/kotlin/no/nav/k9punsj/integrasjoner/dokarkiv/DokarkivGateway.kt +++ b/src/main/kotlin/no/nav/k9punsj/integrasjoner/dokarkiv/DokarkivGateway.kt @@ -38,10 +38,8 @@ import org.springframework.http.MediaType import org.springframework.http.ResponseEntity import org.springframework.stereotype.Service import org.springframework.web.reactive.function.BodyInserters -import org.springframework.web.reactive.function.client.ClientResponse import org.springframework.web.reactive.function.client.ExchangeStrategies import org.springframework.web.reactive.function.client.WebClient -import org.springframework.web.reactive.function.client.toEntity import java.net.URI import java.util.* import kotlin.coroutines.coroutineContext @@ -208,6 +206,56 @@ class DokarkivGateway( } } + internal suspend fun knyttTilAnnenSak( + journalpostId: JournalpostId, + identitetsnummer: Identitetsnummer, + saksnummer: String + ): JournalpostId { + val accessToken = cachedAccessTokenClient + .getAccessToken( + scopes = dokarkivScope, + onBehalfOf = coroutineContext.hentAuthentication().accessToken + ) + + @Language("JSON") + val dto = """ + { + "sakstype": "${SafDtos.Sakstype.FAGSAK}", + "fagsaksystem": "${FagsakSystem.K9}", + "fagsakId": "$saksnummer", + "journalfoerendeEnhet": "9999", + "tema": "${Tema.OMS}", + "bruker": { + "idType": "${IdType.FNR}", + "id": "$identitetsnummer" + } + } + """.trimIndent() + val body = BodyInserters.fromValue(dto) + val url = URI.create(knyttTilAnnenSakUrl(journalpostId)) + + val response = client + .put() + .uri(url) + .header(ConsumerIdHeaderKey, ConsumerIdHeaderValue) + .header(CorrelationIdHeader, coroutineContext.hentCorrelationId()) + .header(HttpHeaders.AUTHORIZATION, accessToken.asAuthoriationHeader()) + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_JSON) + .body(body) + .retrieve() + .toEntity(String::class.java) + .awaitFirst() + + check(response.statusCode.is2xxSuccessful) { + "Feil ved kopiering av journalpost. HttpStatus=[${response.statusCode.value()}, Response=[${response.body}], Url=[$url]" + } + + val nyJournalpostId = JSONObject(response.body).get("nyJournalpostId").toString().somJournalpostId() + + return nyJournalpostId + } + private companion object { private val logger: Logger = LoggerFactory.getLogger(DokarkivGateway::class.java) private const val ConsumerIdHeaderKey = "Nav-Consumer-Id" @@ -233,6 +281,8 @@ class DokarkivGateway( private fun String.oppdaterJournalpostUrl() = "$baseUrl/rest/journalpostapi/v1/journalpost/$this" private val opprettOgFerdigstillJournalpostUrl = "$baseUrl/rest/journalpostapi/v1/journalpost?forsoekFerdigstill=true" private fun String.ferdigstillJournalpostUrl() = "$baseUrl/rest/journalpostapi/v1/journalpost/$this/ferdigstill" + private fun knyttTilAnnenSakUrl(journalpostId: JournalpostId) = + "$baseUrl/rest/journalpostapi/v1/journalpost/$journalpostId/knyttTilAnnenSak" private fun JSONObject.stringOrNull(key: String) = when (notNullNotBlankString(key)) { true -> getString(key) @@ -371,6 +421,7 @@ data class JournalPostRequest( } enum class Tema { OMS } +enum class IdType { FNR } enum class JournalpostType { NOTAT } enum class DokumentKategori { IS } enum class FagsakSystem { K9 } diff --git a/src/main/kotlin/no/nav/k9punsj/integrasjoner/dokarkiv/SafDtos.kt b/src/main/kotlin/no/nav/k9punsj/integrasjoner/dokarkiv/SafDtos.kt index 359e9abe5..c9a2dae19 100644 --- a/src/main/kotlin/no/nav/k9punsj/integrasjoner/dokarkiv/SafDtos.kt +++ b/src/main/kotlin/no/nav/k9punsj/integrasjoner/dokarkiv/SafDtos.kt @@ -14,6 +14,7 @@ internal object SafDtos { tema tittel journalposttype + datoOpprettet relevanteDatoer { dato datotype @@ -89,8 +90,8 @@ internal object SafDtos { OMS } - enum class JournalpostType { - I, N, U + enum class JournalpostType(val kode: String) { + INNGAAENDE("I"), NOTAT("N"), UTGAAENDE("U") } internal enum class AvsenderType { @@ -117,6 +118,9 @@ internal object SafDtos { GENERELL_SAK, FAGSAK } + internal enum class K9Type { SØKNAD, ETTERSENDELSE } + internal enum class K9Kilde { DIGITAL } + internal data class Bruker( val id: String?, val type: String? @@ -164,18 +168,24 @@ internal object SafDtos { val avsenderMottaker: AvsenderMottaker?, val dokumenter: List, val relevanteDatoer: List, + val datoOpprettet: LocalDateTime, private val tilleggsopplysninger: List = emptyList() ) { val k9Kilde = tilleggsopplysninger.firstOrNull { it.nokkel == "k9.kilde" }?.verdi val k9Type = tilleggsopplysninger.firstOrNull { it.nokkel == "k9.type" }?.verdi - private val erDigital = "DIGITAL" == k9Kilde - private val erEttersendelse = "ETTERSENDELSE" == k9Type - private val erSøknad = "SØKNAD" == k9Type + val erUtgående = journalposttype == JournalpostType.UTGAAENDE.kode + private val erDigital = K9Kilde.DIGITAL.name == k9Kilde + val erEttersendelse = K9Type.ETTERSENDELSE.name == k9Type + private val erSøknad = K9Type.SØKNAD.name == k9Type val erIkkeStøttetDigitalJournalpost = when (erDigital) { true -> !(erEttersendelse || erSøknad) false -> false } val ikkeErTemaOMS = tema?.let { Tema.OMS.name != it } ?: false + + private val erInngående = journalposttype == JournalpostType.INNGAAENDE.kode + private val erNotat = journalposttype == JournalpostType.NOTAT.kode + internal val kanKopieres = erInngående || erNotat } internal data class Tilleggsopplysning( diff --git a/src/main/kotlin/no/nav/k9punsj/integrasjoner/dokarkiv/SafGateway.kt b/src/main/kotlin/no/nav/k9punsj/integrasjoner/dokarkiv/SafGateway.kt index 8519216c1..1f13d570d 100644 --- a/src/main/kotlin/no/nav/k9punsj/integrasjoner/dokarkiv/SafGateway.kt +++ b/src/main/kotlin/no/nav/k9punsj/integrasjoner/dokarkiv/SafGateway.kt @@ -158,7 +158,7 @@ class SafGateway( } // Kan ikke oppdatere eller ferdigstille Notater som er under redigering. - if (journalpost?.journalposttype == "N" && + if (journalpost?.journalposttype == SafDtos.JournalpostType.NOTAT.kode && journalpost.journalstatus?.equals("UNDER_ARBEID") == true ) throw NotatUnderArbeidFeil().also { logger.warn("Ikke støttet journalpost: Type NOTAT med status UNDER_ARBEID") diff --git a/src/main/kotlin/no/nav/k9punsj/integrasjoner/gosys/GosysService.kt b/src/main/kotlin/no/nav/k9punsj/integrasjoner/gosys/GosysService.kt index e52938087..500d50aac 100644 --- a/src/main/kotlin/no/nav/k9punsj/integrasjoner/gosys/GosysService.kt +++ b/src/main/kotlin/no/nav/k9punsj/integrasjoner/gosys/GosysService.kt @@ -49,7 +49,7 @@ internal class GosysService( ?: return ServerResponse.status(HttpStatus.NOT_FOUND).buildAndAwait() .also { logger.warn("Kunne ikke finne journalpost med id {}", oppgaveRequest.journalpostId) } - if (!(journalpostInfo.journalpostType == SafDtos.JournalpostType.I.name + if (!(journalpostInfo.journalpostType == SafDtos.JournalpostType.INNGAAENDE.kode && journalpostInfo.journalpostStatus == SafDtos.Journalstatus.MOTTATT.name) ) { logger.warn( diff --git a/src/main/kotlin/no/nav/k9punsj/integrasjoner/k9sak/K9SakService.kt b/src/main/kotlin/no/nav/k9punsj/integrasjoner/k9sak/K9SakService.kt index 71855a408..e3eece3e8 100644 --- a/src/main/kotlin/no/nav/k9punsj/integrasjoner/k9sak/K9SakService.kt +++ b/src/main/kotlin/no/nav/k9punsj/integrasjoner/k9sak/K9SakService.kt @@ -10,6 +10,7 @@ import no.nav.k9punsj.felles.dto.PeriodeDto import no.nav.k9punsj.felles.dto.SaksnummerDto import no.nav.k9punsj.felles.dto.SøknadEntitet import no.nav.k9punsj.integrasjoner.k9sak.dto.Fagsak +import no.nav.k9punsj.integrasjoner.k9sak.dto.HentK9SaksnummerGrunnlag import no.nav.k9punsj.integrasjoner.k9sak.dto.ReservertSaksnummerDto import no.nav.k9punsj.integrasjoner.k9sak.dto.ReserverSaksnummerDto @@ -42,6 +43,10 @@ interface K9SakService { punsjFagsakYtelseType: PunsjFagsakYtelseType ): Pair + suspend fun hentEllerOpprettSaksnummer( + hentK9SaksnummerGrunnlag: HentK9SaksnummerGrunnlag + ): String + suspend fun sendInnSoeknad( soknad: Søknad, journalpostId: String, diff --git a/src/main/kotlin/no/nav/k9punsj/integrasjoner/k9sak/K9SakServiceImpl.kt b/src/main/kotlin/no/nav/k9punsj/integrasjoner/k9sak/K9SakServiceImpl.kt index 499b5d03a..57101c353 100644 --- a/src/main/kotlin/no/nav/k9punsj/integrasjoner/k9sak/K9SakServiceImpl.kt +++ b/src/main/kotlin/no/nav/k9punsj/integrasjoner/k9sak/K9SakServiceImpl.kt @@ -52,6 +52,7 @@ import no.nav.k9punsj.omsorgspengerutbetaling.tilOmsUtvisning import no.nav.k9punsj.opplaeringspenger.tilOlpvisning import no.nav.k9punsj.pleiepengerlivetssluttfase.tilPlsvisning import no.nav.k9punsj.pleiepengersyktbarn.tilPsbvisning +import no.nav.k9punsj.utils.PeriodeUtils.somK9Periode import no.nav.k9punsj.utils.objectMapper import org.intellij.lang.annotations.Language import org.json.JSONArray @@ -300,6 +301,40 @@ class K9SakServiceImpl( } } + override suspend fun hentEllerOpprettSaksnummer( + k9SaksnummerGrunnlag: HentK9SaksnummerGrunnlag + ): String { + val søkerAktørId = personService.finnEllerOpprettPersonVedNorskIdent(k9SaksnummerGrunnlag.søker).aktørId + val pleietrengendeAktørId = + if (!k9SaksnummerGrunnlag.pleietrengende.isNullOrEmpty() && k9SaksnummerGrunnlag.pleietrengende != "null") { + personService.finnEllerOpprettPersonVedNorskIdent(k9SaksnummerGrunnlag.pleietrengende).aktørId + } else null + val annenpartAktørId = + if (!k9SaksnummerGrunnlag.annenPart.isNullOrEmpty() && k9SaksnummerGrunnlag.annenPart != "null") { + personService.finnEllerOpprettPersonVedNorskIdent(k9SaksnummerGrunnlag.annenPart).aktørId + } else null + + val ytelseTypeKode = k9SaksnummerGrunnlag.søknadstype.somK9FagsakYtelseType().kode + val k9Periode = k9SaksnummerGrunnlag.periode?.let { Periode(it.fom, it.tom) } + requireNotNull(k9Periode) { "Mangler periode" } + + val payloadMedAktørId = FinnEllerOpprettSak( + ytelseTypeKode, + søkerAktørId, + pleietrengendeAktørId, + annenpartAktørId, + k9Periode, + null + ) + + val body = kotlin.runCatching { objectMapper(kodeverdiSomString = kodeverdiSomString).writeValueAsString(payloadMedAktørId) }.getOrNull() + ?: throw IllegalStateException("Feilet serialisering") + + val response = httpPost(body, opprettFagsakUrl) + + return JSONObject(response).getString("saksnummer").toString() + } + override suspend fun sendInnSoeknad( soknad: Søknad, journalpostId: String, diff --git a/src/main/kotlin/no/nav/k9punsj/integrasjoner/k9sak/dto/HentK9SaksnummerGrunnlagDto.kt b/src/main/kotlin/no/nav/k9punsj/integrasjoner/k9sak/dto/HentK9SaksnummerGrunnlagDto.kt index ab7e4c2bc..44906d7f9 100644 --- a/src/main/kotlin/no/nav/k9punsj/integrasjoner/k9sak/dto/HentK9SaksnummerGrunnlagDto.kt +++ b/src/main/kotlin/no/nav/k9punsj/integrasjoner/k9sak/dto/HentK9SaksnummerGrunnlagDto.kt @@ -10,4 +10,8 @@ data class HentK9SaksnummerGrunnlag( val pleietrengende: String?, val annenPart: String?, val periode: PeriodeDto?, -) +) { + override fun toString(): String { + return "HentK9SaksnummerGrunnlag(søknadstype=$søknadstype, harSøker=true, harpleietrengende=${pleietrengende != null}, harAnnenPart=${annenPart != null}, periode=$periode)" + } +} diff --git a/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostRoutes.kt b/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostRoutes.kt index 17077dd52..8753b9a11 100644 --- a/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostRoutes.kt +++ b/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostRoutes.kt @@ -8,14 +8,14 @@ import no.nav.k9punsj.RequestContext import no.nav.k9punsj.SaksbehandlerRoutes import no.nav.k9punsj.akjonspunkter.AksjonspunktService import no.nav.k9punsj.domenetjenester.PersonService -import no.nav.k9punsj.felles.PunsjFagsakYtelseType import no.nav.k9punsj.felles.IdentOgJournalpost import no.nav.k9punsj.felles.Identitetsnummer.Companion.somIdentitetsnummer import no.nav.k9punsj.felles.IkkeFunnet import no.nav.k9punsj.felles.IkkeStøttetJournalpost import no.nav.k9punsj.felles.IkkeTilgang +import no.nav.k9punsj.felles.JournalpostId.Companion.somJournalpostId +import no.nav.k9punsj.felles.PunsjFagsakYtelseType import no.nav.k9punsj.fordel.K9FordelType -import no.nav.k9punsj.innsending.InnsendingClient import no.nav.k9punsj.integrasjoner.dokarkiv.SafDtos import no.nav.k9punsj.integrasjoner.gosys.GosysService import no.nav.k9punsj.integrasjoner.k9sak.K9SakService @@ -24,7 +24,6 @@ import no.nav.k9punsj.journalpost.dto.BehandlingsAarDto import no.nav.k9punsj.journalpost.dto.IdentDto import no.nav.k9punsj.journalpost.dto.JournalpostInfoDto import no.nav.k9punsj.journalpost.dto.KopierJournalpostDto -import no.nav.k9punsj.journalpost.dto.KopierJournalpostInfo import no.nav.k9punsj.journalpost.dto.LukkJournalpostDto import no.nav.k9punsj.journalpost.dto.PunsjJournalpost import no.nav.k9punsj.journalpost.dto.PunsjJournalpostKildeType @@ -49,8 +48,6 @@ import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.http.HttpHeaders import org.springframework.http.HttpStatus -import org.springframework.http.ProblemDetail -import org.springframework.web.ErrorResponseException import org.springframework.web.reactive.function.BodyExtractors import org.springframework.web.reactive.function.server.ServerRequest import org.springframework.web.reactive.function.server.ServerResponse @@ -59,7 +56,7 @@ import org.springframework.web.reactive.function.server.buildAndAwait import org.springframework.web.reactive.function.server.json import java.time.LocalDate import java.time.LocalDateTime -import java.util.UUID +import java.util.* import java.util.regex.Pattern import kotlin.coroutines.coroutineContext @@ -67,11 +64,11 @@ import kotlin.coroutines.coroutineContext internal class JournalpostRoutes( private val authenticationHandler: AuthenticationHandler, private val journalpostService: JournalpostService, + private val journalpostkopieringService: JournalpostkopieringService, private val pdlService: PdlService, private val personService: PersonService, private val aksjonspunktService: AksjonspunktService, private val pepClient: IPepClient, - private val innsendingClient: InnsendingClient, private val gosysService: GosysService, private val sakService: SakService, private val k9SakService: K9SakService, @@ -120,7 +117,7 @@ internal class JournalpostRoutes( val safJournalPost = journalpostService.hentSafJournalPost(journalpostId = journalpostId) val kanOpprettesJournalforingsOppgave = - (journalpostInfo.journalpostType == SafDtos.JournalpostType.I.name && + (journalpostInfo.journalpostType == SafDtos.JournalpostType.INNGAAENDE.kode && journalpostInfo.journalpostStatus == SafDtos.Journalstatus.MOTTATT.name) val erFerdigstiltEllerJournalfoert = ( journalpostInfo.journalpostStatus == SafDtos.Journalstatus.FERDIGSTILT.name || @@ -411,8 +408,6 @@ internal class JournalpostRoutes( RequestContext(coroutineContext, request) { val journalpostId = request.pathVariable("journalpost_id") val dto = request.body(BodyExtractors.toMono(KopierJournalpostDto::class.java)).awaitFirst() - val journalpost = journalpostService.hentHvisJournalpostMedId(journalpostId) - ?: throw KanIkkeKopieresErrorResponse("Finner ikke journalpost.") val identListe = mutableListOf(dto.fra, dto.til) dto.barn?.let { identListe.add(it) } @@ -424,43 +419,14 @@ internal class JournalpostRoutes( .bodyValueAndAwait("Har ikke lov til å kopiere journalpost.") } - val safJournalpost = journalpostService.hentSafJournalPost(journalpostId) - if (safJournalpost != null && safJournalpost.journalposttype == "U") { - throw KanIkkeKopieresErrorResponse("Ikke støttet journalposttype: ${safJournalpost.journalposttype}") - } - - val k9FagsakYtelseType: FagsakYtelseType = - dto.ytelse?.somK9FagsakYtelseType() ?: journalpost.ytelse?.let { - val punsjFagsakYtelseType = PunsjFagsakYtelseType.fromKode(it) - journalpost.utledK9sakFagsakYtelseType(punsjFagsakYtelseType.somK9FagsakYtelseType()) - } ?: throw KanIkkeKopieresErrorResponse("Mangler ytelse for journalpost.") - - if (journalpost.type == K9FordelType.INNTEKTSMELDING_UTGÅTT.kode) { - throw KanIkkeKopieresErrorResponse("Kan ikke kopiere journalpost med type inntektsmelding utgått.") - } - - val støttedeYtelseTyperForKopiering = setOf( - FagsakYtelseType.OMSORGSPENGER_KS, - FagsakYtelseType.PLEIEPENGER_SYKT_BARN, - FagsakYtelseType.PLEIEPENGER_NÆRSTÅENDE + val kopierJournalpostInfo = journalpostkopieringService.kopierJournalpost( + journalpostId = journalpostId.somJournalpostId(), + kopierJournalpostDto = dto ) - if (k9FagsakYtelseType !in støttedeYtelseTyperForKopiering) { - throw KanIkkeKopieresErrorResponse("Støtter ikke kopiering av ${k9FagsakYtelseType.navn} for relaterte journalposter") - } - - innsendingClient.sendKopierJournalpost( - KopierJournalpostInfo( - journalpostId = journalpostId, - fra = dto.fra, - til = dto.til, - pleietrengende = dto.barn, - ytelse = k9FagsakYtelseType - ) - ) return@RequestContext ServerResponse - .status(HttpStatus.ACCEPTED) - .bodyValueAndAwait("Journalposten vil bli kopiert.") + .status(HttpStatus.CREATED) + .bodyValueAndAwait(kopierJournalpostInfo) } } } @@ -548,10 +514,6 @@ internal class JournalpostRoutes( } } - private class KanIkkeKopieresErrorResponse(feil: String) : - ErrorResponseException(HttpStatus.CONFLICT, ProblemDetail.forStatusAndDetail(HttpStatus.CONFLICT, feil), null) - - private fun ServerRequest.journalpostId(): String = pathVariable(JournalpostIdKey) private fun ServerRequest.dokumentId(): String = pathVariable(DokumentIdKey) diff --git a/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostService.kt b/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostService.kt index 127a35b01..c8223a364 100644 --- a/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostService.kt +++ b/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostService.kt @@ -2,10 +2,10 @@ package no.nav.k9punsj.journalpost import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.module.kotlin.convertValue -import no.nav.k9punsj.felles.PunsjFagsakYtelseType import no.nav.k9punsj.felles.Identitetsnummer import no.nav.k9punsj.felles.Identitetsnummer.Companion.somIdentitetsnummer import no.nav.k9punsj.felles.IkkeTilgang +import no.nav.k9punsj.felles.PunsjFagsakYtelseType import no.nav.k9punsj.felles.Sak import no.nav.k9punsj.felles.dto.JournalposterDto import no.nav.k9punsj.felles.dto.SøknadEntitet @@ -97,7 +97,7 @@ class JournalpostService( norskIdent = norskIdent, aktørId = aktørId, mottattDato = mottattDato, - erInngående = SafDtos.JournalpostType.I == parsedJournalpost.journalpostType, + erInngående = SafDtos.JournalpostType.INNGAAENDE == parsedJournalpost.journalpostType, journalpostStatus = safJournalpost.journalstatus!!, journalpostType = safJournalpost.journalposttype ) @@ -141,7 +141,10 @@ class JournalpostService( } } - internal suspend fun oppdaterOgFerdigstillForMottak(dto: JournalpostMottaksHaandteringDto, saksnummer: String): Pair { + internal suspend fun oppdaterOgFerdigstillForMottak( + dto: JournalpostMottaksHaandteringDto, + saksnummer: String, + ): Pair { val journalpostDataFraSaf = safGateway.hentDataFraSaf(dto.journalpostId) return dokarkivGateway.oppdaterJournalpostDataOgFerdigstill( dataFraSaf = journalpostDataFraSaf, @@ -175,7 +178,7 @@ class JournalpostService( } private fun utledMottattDato(parsedSafJournalpost: ParsedSafJournalpost): LocalDateTime { - return if (parsedSafJournalpost.journalpostType == SafDtos.JournalpostType.I) { + return if (parsedSafJournalpost.journalpostType == SafDtos.JournalpostType.INNGAAENDE) { parsedSafJournalpost.relevanteDatoer.firstOrNull { it.datotype == SafDtos.Datotype.DATO_REGISTRERT }?.dato } else { parsedSafJournalpost.relevanteDatoer.firstOrNull { it.datotype == SafDtos.Datotype.DATO_JOURNALFOERT }?.dato @@ -294,7 +297,7 @@ private fun SafDtos.Journalpost.parseJournalpost(): ParsedSafJournalpost { } return ParsedSafJournalpost( - journalpostType = enumValueOfOrNull(journalposttype), + journalpostType = SafDtos.JournalpostType.entries.first { it.kode == journalposttype }, brukerType = enumValueOfOrNull(bruker?.type), avsenderType = enumValueOfOrNull(avsender?.type), tema = enumValueOfOrNull(tema), diff --git a/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostkopieringService.kt b/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostkopieringService.kt new file mode 100644 index 000000000..6d82ca8ea --- /dev/null +++ b/src/main/kotlin/no/nav/k9punsj/journalpost/JournalpostkopieringService.kt @@ -0,0 +1,152 @@ +package no.nav.k9punsj.journalpost + +import no.nav.k9.kodeverk.behandling.FagsakYtelseType +import no.nav.k9punsj.felles.Identitetsnummer.Companion.somIdentitetsnummer +import no.nav.k9punsj.felles.JournalpostId +import no.nav.k9punsj.felles.PunsjFagsakYtelseType +import no.nav.k9punsj.felles.PunsjFagsakYtelseType.Companion.somPunsjFagsakYtelseType +import no.nav.k9punsj.fordel.FordelPunsjEventDto +import no.nav.k9punsj.fordel.HendelseMottaker +import no.nav.k9punsj.fordel.K9FordelType +import no.nav.k9punsj.integrasjoner.dokarkiv.DokarkivGateway +import no.nav.k9punsj.integrasjoner.dokarkiv.SafDtos +import no.nav.k9punsj.integrasjoner.dokarkiv.SafGateway +import no.nav.k9punsj.integrasjoner.k9sak.K9SakService +import no.nav.k9punsj.integrasjoner.k9sak.dto.HentK9SaksnummerGrunnlag +import no.nav.k9punsj.journalpost.dto.KopierJournalpostDto +import no.nav.k9punsj.journalpost.dto.KopierJournalpostInfo +import no.nav.k9punsj.journalpost.dto.utledK9sakFagsakYtelseType +import no.nav.k9punsj.utils.PeriodeUtils.somPeriodeDto +import org.slf4j.LoggerFactory +import org.springframework.http.HttpStatus +import org.springframework.http.ProblemDetail +import org.springframework.stereotype.Service +import org.springframework.web.ErrorResponseException + +@Service +class JournalpostkopieringService( + private val journalpostRepository: JournalpostRepository, + private val k9SakService: K9SakService, + private val hendeMottaker: HendelseMottaker, + private val safGateway: SafGateway, + private val dokarkivGateway: DokarkivGateway, +) { + private companion object { + private val logger = LoggerFactory.getLogger(JournalpostkopieringService::class.java) + } + + internal suspend fun kopierJournalpost( + journalpostId: JournalpostId, + kopierJournalpostDto: KopierJournalpostDto, + ): KopierJournalpostInfo { + val (safJournalpost, k9FagsakYtelseType: FagsakYtelseType) = validerJournalpostKopiering( + journalpostId = journalpostId, + kopierJournalpostDto = kopierJournalpostDto + ) + + val k9SakGrunnlag = kopierJournalpostDto.somK9SakGrunnlag( + k9FagsakYtelseType = k9FagsakYtelseType, + periodeDto = safJournalpost.datoOpprettet.toLocalDate().somPeriodeDto() + ) + + val saksnummer = hentEllerOpprettSaksnummer( + journalpostId = journalpostId.toString(), + kopierJournalpostDto = kopierJournalpostDto, + k9SakGrunnlag = k9SakGrunnlag + ) + + val nyJournalpostId = dokarkivGateway.knyttTilAnnenSak( + journalpostId = journalpostId, + identitetsnummer = k9SakGrunnlag.søker.somIdentitetsnummer(), + saksnummer = saksnummer + ) + logger.info("Kopiert journalpost: $journalpostId til ny journalpost: $nyJournalpostId med saksnummer: $saksnummer") + + hendeMottaker.prosesser( + FordelPunsjEventDto( + aktørId = kopierJournalpostDto.til, + journalpostId = nyJournalpostId.toString(), + type = K9FordelType.KOPI.kode, + ytelse = k9FagsakYtelseType.kode, + gosysoppgaveId = null + ) + ) + + return KopierJournalpostInfo( + nyJournalpostId = nyJournalpostId.toString(), + saksnummer = saksnummer, + fra = kopierJournalpostDto.fra, + til = kopierJournalpostDto.til, + pleietrengende = kopierJournalpostDto.barn, + annenPart = kopierJournalpostDto.annenPart, + ytelse = k9FagsakYtelseType.somPunsjFagsakYtelseType() + ) + } + + private suspend fun validerJournalpostKopiering( + journalpostId: JournalpostId, + kopierJournalpostDto: KopierJournalpostDto, + ): Pair { + + val journalpost = journalpostRepository.hentHvis(journalpostId.toString()) + ?: throw KanIkkeKopieresErrorResponse("Finner ikke journalpost i DB.") + + val safJournalpost = safGateway.hentJournalpostInfo(journalpostId.toString()) + ?: throw KanIkkeKopieresErrorResponse("Finner ikke SAF journalpost.") + + if (safJournalpost.erUtgående) { + throw KanIkkeKopieresErrorResponse("Ikke støttet journalposttype: ${safJournalpost.journalposttype}") + } + + if (!safJournalpost.kanKopieres) { + throw KanIkkeKopieresErrorResponse("Kan ikke kopieres. $journalpost.") + } + + if (journalpost.type != null && journalpost.type == K9FordelType.INNTEKTSMELDING_UTGÅTT.kode) { + throw KanIkkeKopieresErrorResponse("Kan ikke kopier journalpost med type inntektsmelding utgått.") + } + + val k9FagsakYtelseType: FagsakYtelseType = + kopierJournalpostDto.ytelse?.somK9FagsakYtelseType() ?: journalpost.ytelse?.let { + val punsjFagsakYtelseType = PunsjFagsakYtelseType.fromKode(it) + journalpost.utledK9sakFagsakYtelseType(punsjFagsakYtelseType.somK9FagsakYtelseType()) + } ?: throw KanIkkeKopieresErrorResponse("Mangler ytelse for journalpost.") + + val støttedeYtelseTyperForKopiering = listOf( + FagsakYtelseType.OMSORGSPENGER_KS, + FagsakYtelseType.PLEIEPENGER_SYKT_BARN, + FagsakYtelseType.PLEIEPENGER_NÆRSTÅENDE + ) + + if (!støttedeYtelseTyperForKopiering.contains(k9FagsakYtelseType)) { + throw KanIkkeKopieresErrorResponse("Støtter ikke kopiering av ${k9FagsakYtelseType.navn} for relaterte journalposter") + } + + return Pair(safJournalpost, k9FagsakYtelseType) + } + + private suspend fun hentEllerOpprettSaksnummer( + journalpostId: String, + kopierJournalpostDto: KopierJournalpostDto, + k9SakGrunnlag: HentK9SaksnummerGrunnlag, + ): String { + + // Sjekker om journalposten kopieres til samme person og logger hvis så er tilfelle + if (kopierJournalpostDto.fra == kopierJournalpostDto.til) { + val saksnummer = k9SakService.hentEllerOpprettSaksnummer(k9SakGrunnlag) + logger.info("Kopierer journalpost: $journalpostId til samme person med saksnummer: $saksnummer") + return saksnummer // Bruker eksisterende saksnummer for samme person + } + + // Hvis journalposten kopieres til en annen person, Hent eller opprett nytt saksnummer + val saksnummer = k9SakService.hentEllerOpprettSaksnummer( + k9SakGrunnlag.copy(søker = kopierJournalpostDto.til) + ) + logger.info("Kopierer journalpost: $journalpostId til ny person med saksnummer: $saksnummer") + return saksnummer + } + + class KanIkkeKopieresErrorResponse(feil: String) : + ErrorResponseException(HttpStatus.CONFLICT, ProblemDetail.forStatusAndDetail(HttpStatus.CONFLICT, feil), null) + +} diff --git a/src/main/kotlin/no/nav/k9punsj/journalpost/dto/KopierJournalpostDto.kt b/src/main/kotlin/no/nav/k9punsj/journalpost/dto/KopierJournalpostDto.kt index 850f45529..8a14cad5a 100644 --- a/src/main/kotlin/no/nav/k9punsj/journalpost/dto/KopierJournalpostDto.kt +++ b/src/main/kotlin/no/nav/k9punsj/journalpost/dto/KopierJournalpostDto.kt @@ -1,6 +1,11 @@ package no.nav.k9punsj.journalpost.dto +import no.nav.k9.kodeverk.behandling.FagsakYtelseType +import no.nav.k9punsj.felles.Identitetsnummer.Companion.somIdentitetsnummer import no.nav.k9punsj.felles.PunsjFagsakYtelseType +import no.nav.k9punsj.felles.PunsjFagsakYtelseType.Companion.somPunsjFagsakYtelseType +import no.nav.k9punsj.felles.dto.PeriodeDto +import no.nav.k9punsj.integrasjoner.k9sak.dto.HentK9SaksnummerGrunnlag data class KopierJournalpostDto( val fra: String, @@ -14,4 +19,12 @@ data class KopierJournalpostDto( "Må sette minst en av barn og annenPart" } } + + fun somK9SakGrunnlag(k9FagsakYtelseType: FagsakYtelseType, periodeDto: PeriodeDto?): HentK9SaksnummerGrunnlag = HentK9SaksnummerGrunnlag( + søknadstype = ytelse ?: k9FagsakYtelseType.somPunsjFagsakYtelseType(), + søker = fra.somIdentitetsnummer().toString(), + pleietrengende = barn?.somIdentitetsnummer().toString(), + annenPart = annenPart?.somIdentitetsnummer().toString(), + periode = periodeDto + ) } diff --git a/src/main/kotlin/no/nav/k9punsj/journalpost/dto/KopierJournalpostInfo.kt b/src/main/kotlin/no/nav/k9punsj/journalpost/dto/KopierJournalpostInfo.kt index 8e0ded904..0c7b4e667 100644 --- a/src/main/kotlin/no/nav/k9punsj/journalpost/dto/KopierJournalpostInfo.kt +++ b/src/main/kotlin/no/nav/k9punsj/journalpost/dto/KopierJournalpostInfo.kt @@ -1,12 +1,13 @@ package no.nav.k9punsj.journalpost.dto -import no.nav.k9.kodeverk.behandling.FagsakYtelseType +import no.nav.k9punsj.felles.PunsjFagsakYtelseType data class KopierJournalpostInfo( - internal val journalpostId: String, - internal val fra: String, - internal val til: String, - internal val pleietrengende: String? = null, - internal val annenPart: String? = null, - internal val ytelse: FagsakYtelseType + val nyJournalpostId: String, + val saksnummer: String, + val fra: String, + val til: String, + val pleietrengende: String? = null, + val annenPart: String? = null, + val ytelse: PunsjFagsakYtelseType ) diff --git a/src/main/kotlin/no/nav/k9punsj/kafka/KafkaConsumers.kt b/src/main/kotlin/no/nav/k9punsj/kafka/KafkaConsumers.kt index 5946f55c4..c9cf5c5d7 100644 --- a/src/main/kotlin/no/nav/k9punsj/kafka/KafkaConsumers.kt +++ b/src/main/kotlin/no/nav/k9punsj/kafka/KafkaConsumers.kt @@ -13,20 +13,9 @@ import java.io.IOException @StandardProfil class KafkaConsumers( val hendelseMottaker: HendelseMottaker, - @Value("\${no.nav.kafka.k9_punsjbolle.topic}") private val meldingerFraPunsjbolleTopic: String, @Value("\${no.nav.kafka.k9_fordel.topic}") private val meldingerFraFordelTopic: String, ) { - @KafkaListener( - topics = [PUNSJBOLLE_TOPIC], - groupId = "k9-punsj-1", - properties = ["auto.offset.reset:earliest"] - ) - @Throws(IOException::class) - fun consumePunsjbarJournalpost(message: String) { - runBlocking { hendelseMottaker.prosesser(message.somFordelPunsjEventDto(meldingerFraPunsjbolleTopic)) } - } - @KafkaListener( topics = [FORDEL_TOPIC], groupId = "k9-punsj-1", @@ -38,7 +27,6 @@ class KafkaConsumers( } private companion object { - private const val PUNSJBOLLE_TOPIC = "k9saksbehandling.punsjbar-journalpost" private const val FORDEL_TOPIC = "k9saksbehandling.fordel-journalforing" } } diff --git a/src/main/kotlin/no/nav/k9punsj/utils/PeriodeUtils.kt b/src/main/kotlin/no/nav/k9punsj/utils/PeriodeUtils.kt index a0ecbaac2..e4b73cde0 100644 --- a/src/main/kotlin/no/nav/k9punsj/utils/PeriodeUtils.kt +++ b/src/main/kotlin/no/nav/k9punsj/utils/PeriodeUtils.kt @@ -3,6 +3,8 @@ package no.nav.k9punsj.utils import no.nav.fpsak.tidsserie.LocalDateInterval import no.nav.k9.søknad.felles.type.Periode import no.nav.k9punsj.felles.dto.PeriodeDto +import java.time.LocalDate +import kotlin.concurrent.thread object PeriodeUtils { fun PeriodeDto?.erSatt() = this != null && (fom != null || tom != null) @@ -18,4 +20,6 @@ object PeriodeUtils { fun LocalDateInterval.somK9Periode(): Periode { return Periode(this.fomDato, this.tomDato) } + + fun LocalDate.somPeriodeDto() = PeriodeDto(fom = this, tom = this) } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 7822ccdb5..d8987018a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -56,9 +56,6 @@ no.nav: base_url: ${K9SAK_BASE_URL} scope: ${K9SAK_SCOPE} - k9punsjbolle: - base_url: ${K9PUNSJBOLLE_BASE_URL} - scope: ${K9PUNSJBOLLE_SCOPE} gosys: base_url: ${GOSYS_BASE_URL} @@ -99,12 +96,8 @@ no.nav: topic: ${SEND_AKSJONSPUNKTHENDELSE_TIL_K9LOS} k9_punsj_til_los: topic: ${SEND_OPPDATERING_TIL_K9LOS} - k9_rapid: - topic: ${K9_RAPID_TOPIC} k9_fordel: topic: ${K9_FORDEL_TOPIC} - k9_punsjbolle: - topic: ${K9_PUNSJBOLLE_TOPIC} override_truststore_password: ${KAFKA_OVERRIDE_TRUSTSTORE_PASSWORD} server: diff --git a/src/test/kotlin/no/nav/k9punsj/MockConfiguration.kt b/src/test/kotlin/no/nav/k9punsj/MockConfiguration.kt index b28ec53e5..f36c1508f 100644 --- a/src/test/kotlin/no/nav/k9punsj/MockConfiguration.kt +++ b/src/test/kotlin/no/nav/k9punsj/MockConfiguration.kt @@ -67,7 +67,6 @@ internal object MockConfiguration { "SEND_AKSJONSPUNKTHENDELSE_TIL_K9LOS" to "privat-k9punsj-aksjonspunkthendelse-v1", "SEND_OPPDATERING_TIL_K9LOS" to "k9saksbehandling.k9-punsj-til-los", "K9_FORDEL_TOPIC" to "k9saksbehandling.fordel-journalforing", - "K9_PUNSJBOLLE_TOPIC" to "k9saksbehandling.punsjbar-journalpost" ) } } diff --git a/src/test/kotlin/no/nav/k9punsj/akjonspunkter/AksjonspunktServiceImplTest.kt b/src/test/kotlin/no/nav/k9punsj/akjonspunkter/AksjonspunktServiceImplTest.kt index 970fe9804..bf8dce971 100644 --- a/src/test/kotlin/no/nav/k9punsj/akjonspunkter/AksjonspunktServiceImplTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/akjonspunkter/AksjonspunktServiceImplTest.kt @@ -12,7 +12,6 @@ import no.nav.k9punsj.felles.PunsjFagsakYtelseType import no.nav.k9punsj.felles.dto.SøknadEntitet import no.nav.k9punsj.fordel.FordelPunsjEventDto import no.nav.k9punsj.integrasjoner.k9losapi.PunsjEventDto -import no.nav.k9punsj.innsending.InnsendingClient import no.nav.k9punsj.integrasjoner.dokarkiv.DokarkivGateway import no.nav.k9punsj.integrasjoner.dokarkiv.SafGateway import no.nav.k9punsj.integrasjoner.k9sak.K9SakService @@ -40,9 +39,6 @@ internal class AksjonspunktServiceImplTest: AbstractContainerBaseTest() { @MockBean private lateinit var dokarkivGateway: DokarkivGateway - @MockBean - private lateinit var innsendingClient: InnsendingClient - @MockBean private lateinit var søknadMetrikkService: SøknadMetrikkService diff --git a/src/test/kotlin/no/nav/k9punsj/domenetjenester/SoknadServiceTest.kt b/src/test/kotlin/no/nav/k9punsj/domenetjenester/SoknadServiceTest.kt index 6b1952a14..1e057df63 100644 --- a/src/test/kotlin/no/nav/k9punsj/domenetjenester/SoknadServiceTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/domenetjenester/SoknadServiceTest.kt @@ -14,7 +14,6 @@ import no.nav.k9.søknad.ytelse.psb.v1.PleiepengerSyktBarn import no.nav.k9punsj.domenetjenester.repository.SøknadRepository import no.nav.k9punsj.felles.JournalpostId.Companion.somJournalpostId import no.nav.k9punsj.felles.dto.SøknadEntitet -import no.nav.k9punsj.innsending.InnsendingClient import no.nav.k9punsj.integrasjoner.dokarkiv.DokarkivGateway import no.nav.k9punsj.integrasjoner.dokarkiv.FerdigstillJournalpost import no.nav.k9punsj.integrasjoner.dokarkiv.JoarkTyper.JournalpostStatus.Companion.somJournalpostStatus @@ -45,9 +44,6 @@ internal class SoknadServiceTest { @MockK(relaxUnitFun = true) private lateinit var mockSøknadRepository: SøknadRepository - @MockK(relaxUnitFun = true) - private lateinit var mockInnsendingClient: InnsendingClient - @MockK(relaxUnitFun = true) private lateinit var mockSøknadMetrikkService: SøknadMetrikkService @@ -96,7 +92,7 @@ internal class SoknadServiceTest { journalpostId = "525115311", tittel = "omsorgspengerutbetaling", tema = "OMS", - journalposttype = "N", + journalposttype = SafDtos.JournalpostType.NOTAT.kode, journalstatus = "FEILREGISTRERT", bruker = SafDtos.Bruker( id = "2351670926708", @@ -121,6 +117,7 @@ internal class SoknadServiceTest { ) ) ), + datoOpprettet = LocalDateTime.parse("2022-07-01T13:32:05"), relevanteDatoer = listOf( SafDtos.RelevantDato( dato = LocalDateTime.parse("2022-07-01T13:32:05"), diff --git a/src/test/kotlin/no/nav/k9punsj/fordel/FordelKafkaTest.kt b/src/test/kotlin/no/nav/k9punsj/fordel/FordelKafkaTest.kt index 6d7f18650..8d7793ad0 100644 --- a/src/test/kotlin/no/nav/k9punsj/fordel/FordelKafkaTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/fordel/FordelKafkaTest.kt @@ -7,7 +7,6 @@ import no.nav.k9punsj.akjonspunkter.AksjonspunktKode import no.nav.k9punsj.akjonspunkter.AksjonspunktServiceImpl import no.nav.k9punsj.akjonspunkter.AksjonspunktStatus import no.nav.k9punsj.domenetjenester.SoknadService -import no.nav.k9punsj.innsending.InnsendingClient import no.nav.k9punsj.integrasjoner.dokarkiv.DokarkivGateway import no.nav.k9punsj.integrasjoner.dokarkiv.SafGateway import no.nav.k9punsj.integrasjoner.k9losapi.PunsjEventDto @@ -34,9 +33,6 @@ internal class FordelKafkaTest: AbstractContainerBaseTest() { @MockBean private lateinit var dokarkivGateway: DokarkivGateway - @MockBean - private lateinit var innsendingClient: InnsendingClient - @MockBean private lateinit var soknadService: SoknadService diff --git a/src/test/kotlin/no/nav/k9punsj/fordel/HendelseMottakerTest.kt b/src/test/kotlin/no/nav/k9punsj/fordel/HendelseMottakerTest.kt index d93714f44..ee756dec8 100644 --- a/src/test/kotlin/no/nav/k9punsj/fordel/HendelseMottakerTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/fordel/HendelseMottakerTest.kt @@ -7,7 +7,6 @@ import no.nav.k9punsj.akjonspunkter.AksjonspunktRepository import no.nav.k9punsj.akjonspunkter.AksjonspunktService import no.nav.k9punsj.akjonspunkter.AksjonspunktStatus import no.nav.k9punsj.domenetjenester.SoknadService -import no.nav.k9punsj.innsending.InnsendingClient import no.nav.k9punsj.integrasjoner.dokarkiv.DokarkivGateway import no.nav.k9punsj.integrasjoner.dokarkiv.SafGateway import no.nav.k9punsj.journalpost.JournalpostService @@ -31,9 +30,6 @@ internal class HendelseMottakerTest: AbstractContainerBaseTest() { @MockBean private lateinit var dokarkivGateway: DokarkivGateway - @MockBean - private lateinit var innsendingClient: InnsendingClient - @MockBean private lateinit var soknadService: SoknadService diff --git a/src/test/kotlin/no/nav/k9punsj/innsending/KopieringJournalpostInnsendingMappingTest.kt b/src/test/kotlin/no/nav/k9punsj/innsending/KopieringJournalpostInnsendingMappingTest.kt deleted file mode 100644 index 1ecd355b1..000000000 --- a/src/test/kotlin/no/nav/k9punsj/innsending/KopieringJournalpostInnsendingMappingTest.kt +++ /dev/null @@ -1,57 +0,0 @@ -package no.nav.k9punsj.innsending - -import no.nav.k9.kodeverk.behandling.FagsakYtelseType -import no.nav.k9punsj.journalpost.dto.KopierJournalpostInfo -import org.intellij.lang.annotations.Language -import org.json.JSONObject -import org.junit.jupiter.api.Test -import org.skyscreamer.jsonassert.JSONAssert - -internal class KopieringJournalpostInnsendingMappingTest { - private val innsendingClient = LoggingInnsendingClient() - - @Test - fun `mappe kopiering av journalpost for pleiepenger syk barn`() { - mapKopierJournalpostOgAssert( - fagsakYtelseType = FagsakYtelseType.PLEIEPENGER_SYKT_BARN, - søknadstype = "PleiepengerSyktBarn" - ) - } - - @Test - fun `mappe kopiering av journalpost for omsorgspengr kronisk sykt barn`() { - mapKopierJournalpostOgAssert( - fagsakYtelseType = FagsakYtelseType.OMSORGSPENGER_KS, - søknadstype = "OmsorgspengerKroniskSyktBarn" - ) - } - - private fun mapKopierJournalpostOgAssert(fagsakYtelseType: FagsakYtelseType, søknadstype: String) { - val (_, value) = innsendingClient.mapKopierJournalpost( - KopierJournalpostInfo( - journalpostId = "11111111111", - fra = "22222222222", - til = "33333333333", - pleietrengende = "44444444444", - ytelse = fagsakYtelseType - ) - ) - - val behov = JSONObject(value).getJSONObject("@behov").getJSONObject("KopierPunsjbarJournalpost").toString() - - @Language("JSON") - val expected = """ - { - "versjon": "1.0.0", - "journalpostId": "11111111111", - "fra": "22222222222", - "til": "33333333333", - "pleietrengende": "44444444444", - "annenPart": null, - "søknadstype": "$søknadstype" - } - """.trimIndent() - - JSONAssert.assertEquals(expected, behov, true) - } -} diff --git a/src/test/kotlin/no/nav/k9punsj/innsending/LoggingInnsendingClient.kt b/src/test/kotlin/no/nav/k9punsj/innsending/LoggingInnsendingClient.kt deleted file mode 100644 index 88387d200..000000000 --- a/src/test/kotlin/no/nav/k9punsj/innsending/LoggingInnsendingClient.kt +++ /dev/null @@ -1,16 +0,0 @@ -package no.nav.k9punsj.innsending - -import org.slf4j.LoggerFactory -import org.springframework.stereotype.Component - -@Component -class LoggingInnsendingClient : InnsendingClient { - override suspend fun send(pair: Pair) { - val (key, value) = pair - logger.info("Innsending. Key=[$key], Value=[$value]") - } - - private companion object { - private val logger = LoggerFactory.getLogger(LoggingInnsendingClient::class.java) - } -} diff --git a/src/test/kotlin/no/nav/k9punsj/journalpost/JournalpostServiceTest.kt b/src/test/kotlin/no/nav/k9punsj/journalpost/JournalpostServiceTest.kt index e35e2efe4..5d786fc30 100644 --- a/src/test/kotlin/no/nav/k9punsj/journalpost/JournalpostServiceTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/journalpost/JournalpostServiceTest.kt @@ -10,6 +10,7 @@ import no.nav.k9punsj.felles.Identitetsnummer.Companion.somIdentitetsnummer import no.nav.k9punsj.felles.Sak import no.nav.k9punsj.integrasjoner.dokarkiv.DokarkivGateway import no.nav.k9punsj.integrasjoner.dokarkiv.SafGateway +import no.nav.k9punsj.integrasjoner.k9sak.K9SakService import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows @@ -28,6 +29,9 @@ internal class JournalpostServiceTest: AbstractContainerBaseTest() { @MockK private lateinit var objectMapper: ObjectMapper + @MockK + private lateinit var k9SakService: K9SakService + @InjectMockKs private lateinit var journalpostService: JournalpostService diff --git a/src/test/kotlin/no/nav/k9punsj/journalpost/KopierJournalpostRouteTest.kt b/src/test/kotlin/no/nav/k9punsj/journalpost/KopierJournalpostRouteTest.kt index 6c631376a..14276cdaa 100644 --- a/src/test/kotlin/no/nav/k9punsj/journalpost/KopierJournalpostRouteTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/journalpost/KopierJournalpostRouteTest.kt @@ -3,33 +3,37 @@ package no.nav.k9punsj.journalpost import io.micrometer.core.instrument.simple.SimpleMeterRegistry import kotlinx.coroutines.runBlocking import no.nav.helse.dusseldorf.testsupport.jws.Azure -import no.nav.k9.kodeverk.behandling.FagsakYtelseType import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.akjonspunkter.AksjonspunktService import no.nav.k9punsj.domenetjenester.SoknadService +import no.nav.k9punsj.felles.Identitetsnummer.Companion.somIdentitetsnummer +import no.nav.k9punsj.felles.JournalpostId.Companion.somJournalpostId import no.nav.k9punsj.felles.PunsjFagsakYtelseType import no.nav.k9punsj.fordel.FordelPunsjEventDto import no.nav.k9punsj.fordel.HendelseMottaker import no.nav.k9punsj.fordel.K9FordelType -import no.nav.k9punsj.innsending.InnsendingClient import no.nav.k9punsj.integrasjoner.dokarkiv.DokarkivGateway +import no.nav.k9punsj.integrasjoner.dokarkiv.SafDtos import no.nav.k9punsj.integrasjoner.dokarkiv.SafGateway import no.nav.k9punsj.journalpost.dto.BehandlingsAarDto import no.nav.k9punsj.journalpost.dto.KopierJournalpostDto import no.nav.k9punsj.util.IdGenerator import no.nav.k9punsj.wiremock.saksbehandlerAccessToken +import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.ValueSource +import org.mockito.Mockito import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.actuate.metrics.MetricsEndpoint import org.springframework.boot.test.mock.mockito.MockBean import org.springframework.http.HttpHeaders import org.springframework.web.reactive.function.BodyInserters import java.time.LocalDate +import java.time.LocalDateTime internal class KopierJournalpostRouteTest : AbstractContainerBaseTest() { @@ -39,9 +43,6 @@ internal class KopierJournalpostRouteTest : AbstractContainerBaseTest() { @MockBean private lateinit var dokarkivGateway: DokarkivGateway - @MockBean - private lateinit var innsendingClient: InnsendingClient - @MockBean private lateinit var soknadService: SoknadService @@ -80,10 +81,47 @@ internal class KopierJournalpostRouteTest : AbstractContainerBaseTest() { @Test fun `Mapper kopierjournalpostinfo med barn og sender inn`(): Unit = runBlocking { - val journalpostId = IdGenerator.nesteId() + val saksnummer = "ABC123" + val søkerAktørId = "27519339353" + val barn = "05032435485" + + Mockito.`when`(safGateway.hentJournalpostInfo(journalpostId)).thenReturn( + SafDtos.Journalpost( + journalpostId = journalpostId, + tema = null, + journalstatus = SafDtos.Journalstatus.JOURNALFOERT.name, + journalposttype = SafDtos.JournalpostType.NOTAT.kode, + dokumenter = emptyList(), + relevanteDatoer = emptyList(), + avsender = null, + avsenderMottaker = null, + bruker = SafDtos.Bruker( + id = søkerAktørId, + type = "AKTOER_ID" + ), + sak = SafDtos.Sak( + sakstype = SafDtos.Sakstype.FAGSAK, + fagsakId = saksnummer, + fagsaksystem = "K9", + tema = SafDtos.Tema.OMS.name + ), + datoOpprettet = LocalDateTime.now(), + tittel = null + ) + ) + + val nyJournalpostId = IdGenerator.nesteId() + Mockito.`when`( + dokarkivGateway.knyttTilAnnenSak( + journalpostId = journalpostId.somJournalpostId(), + identitetsnummer = søkerAktørId.somIdentitetsnummer(), + saksnummer = saksnummer + ) + ).thenReturn(nyJournalpostId.somJournalpostId()) + val melding = FordelPunsjEventDto( - aktørId = "1234567890", + aktørId = søkerAktørId, journalpostId = journalpostId, type = K9FordelType.PAPIRSØKNAD.kode, ytelse = "PSB" @@ -95,7 +133,7 @@ internal class KopierJournalpostRouteTest : AbstractContainerBaseTest() { val kopierJournalpostDto = KopierJournalpostDto( fra = journalpost.aktørId.toString(), til = journalpost.aktørId.toString(), - barn = "05032435485", + barn = barn, annenPart = null, ytelse = null ) @@ -106,15 +144,67 @@ internal class KopierJournalpostRouteTest : AbstractContainerBaseTest() { .body(BodyInserters.fromValue(kopierJournalpostDto)) .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) .exchange() - .expectStatus().isAccepted + .expectStatus().isCreated + .expectBody() + .json(""" + { + "nyJournalpostId":"$nyJournalpostId", + "saksnummer":"$saksnummer", + "fra":"$søkerAktørId", + "til":"$søkerAktørId", + "pleietrengende":"$barn", + "annenPart":null, + "ytelse":"PSB" + }""".trimIndent()) + + val journalpostKopi = journalpostRepository.hentHvis(nyJournalpostId) + Assertions.assertNotNull(journalpostKopi) + assertThat(journalpostKopi!!.type).isNotNull().isEqualTo(K9FordelType.KOPI.kode) } @Test fun `Støtter å overstyre ytelse på journalpost ved kopiering`(): Unit = runBlocking { - val journalpostId = IdGenerator.nesteId() + val saksnummer = "ABC123" + val søkerAktørId = "27519339353" + val barn = "05032435485" + + Mockito.`when`(safGateway.hentJournalpostInfo(journalpostId)).thenReturn( + SafDtos.Journalpost( + journalpostId = journalpostId, + tema = null, + journalstatus = SafDtos.Journalstatus.JOURNALFOERT.name, + journalposttype = SafDtos.JournalpostType.NOTAT.kode, + dokumenter = emptyList(), + relevanteDatoer = emptyList(), + avsender = null, + avsenderMottaker = null, + bruker = SafDtos.Bruker( + id = søkerAktørId, + type = "AKTOER_ID" + ), + sak = SafDtos.Sak( + sakstype = SafDtos.Sakstype.FAGSAK, + fagsakId = saksnummer, + fagsaksystem = "K9", + tema = SafDtos.Tema.OMS.name + ), + datoOpprettet = LocalDateTime.now(), + tittel = null + ) + ) + + val nyJournalpostId = IdGenerator.nesteId() + Mockito.`when`( + dokarkivGateway.knyttTilAnnenSak( + journalpostId = journalpostId.somJournalpostId(), + identitetsnummer = søkerAktørId.somIdentitetsnummer(), + saksnummer = saksnummer + ) + ).thenReturn(nyJournalpostId.somJournalpostId()) + val melding = FordelPunsjEventDto( - aktørId = "1234567890", + aktørId = søkerAktørId, journalpostId = journalpostId, type = K9FordelType.PAPIRSØKNAD.kode, ytelse = PunsjFagsakYtelseType.UKJENT.kode @@ -126,7 +216,7 @@ internal class KopierJournalpostRouteTest : AbstractContainerBaseTest() { val kopierJournalpostDto = KopierJournalpostDto( fra = journalpost.aktørId.toString(), til = journalpost.aktørId.toString(), - barn = "05032435485", + barn = barn, annenPart = null, ytelse = PunsjFagsakYtelseType.PLEIEPENGER_SYKT_BARN ) @@ -137,7 +227,22 @@ internal class KopierJournalpostRouteTest : AbstractContainerBaseTest() { .body(BodyInserters.fromValue(kopierJournalpostDto)) .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) .exchange() - .expectStatus().isAccepted + .expectStatus().isCreated + .expectBody() + .json(""" + { + "nyJournalpostId":"$nyJournalpostId", + "saksnummer":"$saksnummer", + "fra":"$søkerAktørId", + "til":"$søkerAktørId", + "pleietrengende":"$barn", + "annenPart":null, + "ytelse":"PSB" + }""".trimIndent()) + + val journalpostKopi = journalpostRepository.hentHvis(nyJournalpostId) + Assertions.assertNotNull(journalpostKopi) + assertThat(journalpostKopi!!.type).isNotNull().isEqualTo(K9FordelType.KOPI.kode) } @ParameterizedTest diff --git a/src/test/kotlin/no/nav/k9punsj/journalpost/SafDtosTest.kt b/src/test/kotlin/no/nav/k9punsj/journalpost/SafDtosTest.kt index 4504c559c..050bb2404 100644 --- a/src/test/kotlin/no/nav/k9punsj/journalpost/SafDtosTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/journalpost/SafDtosTest.kt @@ -3,6 +3,7 @@ package no.nav.k9punsj.journalpost import no.nav.k9punsj.integrasjoner.dokarkiv.SafDtos import org.assertj.core.api.Assertions import org.junit.jupiter.api.Test +import java.time.LocalDateTime internal class SafDtosTest { @@ -12,8 +13,9 @@ internal class SafDtosTest { journalpostId = "123456789", tema = "test", tittel = "omsorgspengerutbetaling", - journalposttype = "test", + journalposttype = SafDtos.JournalpostType.UTGAAENDE.kode, journalstatus = "test", + datoOpprettet = LocalDateTime.now(), bruker = null, sak = null, avsender = null, @@ -32,8 +34,9 @@ internal class SafDtosTest { journalpostId = "123456789", tema = "AAP", tittel = "Arbeidsavklaringspenger", - journalposttype = SafDtos.JournalpostType.I.name, + journalposttype = SafDtos.JournalpostType.INNGAAENDE.kode, journalstatus = SafDtos.Journalstatus.MOTTATT.name, + datoOpprettet = LocalDateTime.now(), bruker = null, sak = null, avsender = null, @@ -52,8 +55,9 @@ internal class SafDtosTest { journalpostId = "123456789", tema = "test", tittel = "omsorgspengerutbetaling", - journalposttype = "test", + journalposttype = SafDtos.JournalpostType.INNGAAENDE.kode, journalstatus = "test", + datoOpprettet = LocalDateTime.now(), bruker = null, sak = null, avsender = null, @@ -72,8 +76,9 @@ internal class SafDtosTest { journalpostId = "123456789", tema = "test", tittel = "omsorgspengerutbetaling", - journalposttype = "test", + journalposttype = SafDtos.JournalpostType.NOTAT.kode, journalstatus = "test", + datoOpprettet = LocalDateTime.now(), bruker = null, sak = null, avsender = null, diff --git a/src/test/kotlin/no/nav/k9punsj/journalpost/postmottak/PostMottakServiceTest.kt b/src/test/kotlin/no/nav/k9punsj/journalpost/postmottak/PostMottakServiceTest.kt index 83a94b911..bb3b073f0 100644 --- a/src/test/kotlin/no/nav/k9punsj/journalpost/postmottak/PostMottakServiceTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/journalpost/postmottak/PostMottakServiceTest.kt @@ -27,6 +27,7 @@ import org.springframework.beans.factory.annotation.Value import org.springframework.http.HttpStatus import org.springframework.kafka.test.utils.KafkaTestUtils import java.time.Duration +import java.time.LocalDateTime import java.util.* class PostMottakServiceTest : AbstractContainerBaseTest() { @@ -145,7 +146,7 @@ class PostMottakServiceTest : AbstractContainerBaseTest() { journalpostId = journalpostId, tema = "OMS", tittel = "Søknad om pleipenger til sykt barn", - journalposttype = SafDtos.JournalpostType.I.name, + journalposttype = SafDtos.JournalpostType.INNGAAENDE.kode, journalstatus = SafDtos.Journalstatus.MOTTATT.name, bruker = SafDtos.Bruker( id = brukerIdent, @@ -157,6 +158,7 @@ class PostMottakServiceTest : AbstractContainerBaseTest() { fagsaksystem = "K9", tema = SafDtos.Tema.OMS.name ), + datoOpprettet = LocalDateTime.now(), avsender = null, avsenderMottaker = null, dokumenter = listOf(), diff --git a/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/LokalK9SakService.kt b/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/LokalK9SakService.kt index d627f8985..b3f8bac32 100644 --- a/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/LokalK9SakService.kt +++ b/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/LokalK9SakService.kt @@ -14,6 +14,7 @@ import no.nav.k9punsj.felles.dto.SøknadEntitet import no.nav.k9punsj.integrasjoner.k9sak.K9SakService import no.nav.k9punsj.integrasjoner.k9sak.dto.Fagsak import no.nav.k9punsj.integrasjoner.k9sak.dto.ReserverSaksnummerDto +import no.nav.k9punsj.integrasjoner.k9sak.dto.HentK9SaksnummerGrunnlag import no.nav.k9punsj.integrasjoner.k9sak.dto.ReservertSaksnummerDto import no.nav.k9punsj.util.MockUtil.erFødtI import org.springframework.stereotype.Component @@ -97,6 +98,10 @@ class LokalK9SakService : K9SakService { return Pair("ABC123", null) } + override suspend fun hentEllerOpprettSaksnummer(hentK9SaksnummerGrunnlag: HentK9SaksnummerGrunnlag): String { + return "ABC123" + } + override suspend fun sendInnSoeknad( soknad: Søknad, journalpostId: String, diff --git a/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/TestK9SakService.kt b/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/TestK9SakService.kt index 0b3faa223..03cdb6664 100644 --- a/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/TestK9SakService.kt +++ b/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/TestK9SakService.kt @@ -12,8 +12,9 @@ import no.nav.k9punsj.felles.dto.SaksnummerDto import no.nav.k9punsj.felles.dto.SøknadEntitet import no.nav.k9punsj.integrasjoner.k9sak.K9SakService import no.nav.k9punsj.integrasjoner.k9sak.dto.Fagsak -import no.nav.k9punsj.integrasjoner.k9sak.dto.ReserverSaksnummerDto +import no.nav.k9punsj.integrasjoner.k9sak.dto.HentK9SaksnummerGrunnlag import no.nav.k9punsj.integrasjoner.k9sak.dto.ReservertSaksnummerDto +import no.nav.k9punsj.integrasjoner.k9sak.dto.ReserverSaksnummerDto import org.springframework.context.annotation.Profile import org.springframework.stereotype.Component import java.time.LocalDate @@ -103,6 +104,10 @@ internal class TestK9SakService : K9SakService { return Pair("ABC123", null) } + override suspend fun hentEllerOpprettSaksnummer(hentK9SaksnummerGrunnlag: HentK9SaksnummerGrunnlag): String { + return "ABC123" + } + override suspend fun sendInnSoeknad( soknad: Søknad, journalpostId: String, diff --git a/src/test/kotlin/no/nav/k9punsj/wiremock/SafMocks.kt b/src/test/kotlin/no/nav/k9punsj/wiremock/SafMocks.kt index e1a0c679a..193eeaaf0 100644 --- a/src/test/kotlin/no/nav/k9punsj/wiremock/SafMocks.kt +++ b/src/test/kotlin/no/nav/k9punsj/wiremock/SafMocks.kt @@ -253,6 +253,7 @@ object SafMockResponses { "tema": "$tema", "journalposttype": "I", "journalstatus": "MOTTATT", + "datoOpprettet": "2020-10-12T12:53:21", "relevanteDatoer" : [ { "dato" : "2020-10-12T12:53:21.046Z", @@ -337,6 +338,7 @@ object SafMockResponses { "tema": "OMS", "journalposttype": "I", "journalstatus": "MOTTATT", + "datoOpprettet": "2020-10-12T12:53:21", "relevanteDatoer" : [ { "dato" : "2020-10-12T12:53:21.046Z", @@ -418,6 +420,7 @@ object SafMockResponses { "fagsaksystem": "K9", "tema": "OMS" }, + "datoOpprettet": "2020-10-12T12:53:21", "relevanteDatoer" : [ { "dato" : "2022-10-12T12:53:21.046Z", From 4356207f8308da2c5280416ecb9839b0154ed751 Mon Sep 17 00:00:00 2001 From: Morten Osvik Date: Thu, 19 Sep 2024 16:19:40 +0200 Subject: [PATCH 02/12] Legg til tester for OLP igjen --- .../OpplaeringspengerTests.kt | 1092 +++++++++-------- 1 file changed, 584 insertions(+), 508 deletions(-) diff --git a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt index 951912308..2106bf692 100644 --- a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt +++ b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt @@ -1,615 +1,692 @@ package no.nav.k9punsj.opplaeringspenger -/* +import io.mockk.junit5.MockKExtension +import kotlinx.coroutines.runBlocking +import no.nav.helse.dusseldorf.testsupport.jws.Azure +import no.nav.k9punsj.AbstractContainerBaseTest +import no.nav.k9punsj.felles.dto.OpprettNySøknad +import no.nav.k9punsj.felles.dto.PeriodeDto +import no.nav.k9punsj.felles.dto.SendSøknad +import no.nav.k9punsj.journalpost.JournalpostRepository +import no.nav.k9punsj.metrikker.JournalpostMetrikkRepository +import no.nav.k9punsj.utils.objectMapper +import no.nav.k9punsj.util.LesFraFilUtil +import no.nav.k9punsj.util.TestUtils.hentSøknadId +import no.nav.k9punsj.wiremock.saksbehandlerAccessToken +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Disabled +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.ExtendWith +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.http.HttpHeaders +import org.springframework.http.HttpStatus +import org.springframework.test.context.junit.jupiter.SpringExtension +import org.springframework.web.reactive.function.BodyInserters +import java.net.URI +import java.time.LocalDate + + @ExtendWith(SpringExtension::class, MockKExtension::class) @Disabled("OLP er ikke i bruk eller under utvikling") -class OpplaeringspengerTests { +class OpplaeringspengerTests : AbstractContainerBaseTest() { + + @Autowired + lateinit var journalpostRepo: JournalpostRepository + + @Autowired + lateinit var journalpostMetrikkRepository: JournalpostMetrikkRepository + + @BeforeEach + internal fun setUp() { + cleanUpDB() + } + + @AfterEach + internal fun tearDown() { + cleanUpDB() + } - private val client = TestSetup.client private val api = "api" private val søknadTypeUri = "opplaeringspenger-soknad" private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" + @Test fun `Får tom liste når personen ikke har en eksisterende mappe`(): Unit = runBlocking { val norskIdent = "01110050053" - val (status, body) = client.get() + webTestClient.get() .uri { it.pathSegment(api, søknadTypeUri, "mappe").build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) .header("X-Nav-NorskIdent", norskIdent) - .awaitStatusWithBody() - assertEquals(HttpStatus.OK, status) - assertTrue(body.søknader!!.isEmpty()) + .exchange() + .expectStatus().isEqualTo(HttpStatus.OK) + .expectBody() } + @Test fun `Opprette ny mappe på person`(): Unit = runBlocking { val norskIdent = "01010050053" - val opprettNySøknad = opprettSøknad(norskIdent, "999") - val status = client.post() + val journalpostid = "9999" + val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) + + webTestClient.post() .uri { it.pathSegment(api, søknadTypeUri).build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) .body(BodyInserters.fromValue(opprettNySøknad)) - .awaitStatuscode() - assertEquals(HttpStatus.CREATED, status) + .exchange() + .expectStatus().isEqualTo(HttpStatus.CREATED) + .expectBody() } + @Test fun `Hente eksisterende mappe på person`(): Unit = runBlocking { val norskIdent = "02020050163" - val opprettNySøknad = opprettSøknad(norskIdent, "9999") + val journalpostid = "9999" + val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) - val status = client.post() + webTestClient.post() .uri { it.pathSegment(api, søknadTypeUri).build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) .body(BodyInserters.fromValue(opprettNySøknad)) - .awaitStatuscode() - assertEquals(HttpStatus.CREATED, status) + .exchange() + .expectStatus().isEqualTo(HttpStatus.CREATED) + .expectBody() - val (httpStatus, body) = client.get() + webTestClient.get() .uri { it.pathSegment(api, søknadTypeUri, "mappe").build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) .header("X-Nav-NorskIdent", norskIdent) - .awaitStatusWithBody() - assertEquals(HttpStatus.OK, httpStatus) - - val journalposterDto = body.søknader?.first()?.journalposter - assertEquals("9999", journalposterDto?.first()) + .exchange() + .expectStatus().isEqualTo(HttpStatus.OK) + .expectBody().consumeWith { response -> + val svarOlpDto = objectMapper().readValue(response.responseBody, SvarOlpDto::class.java) + assertThat(svarOlpDto.søknader).isNotEmpty + assertEquals(journalpostid, svarOlpDto.søknader?.first()?.journalposter?.first()) + } } + @Test fun `Hent en søknad`(): Unit = runBlocking { val søknad = LesFraFilUtil.søknadFraFrontendOlpFull() val norskIdent = "02030050163" val journalpostid = "21707da8-a13b-4927-8776-c53399727b29" - tilpasserSøknadsMalTilTesten(søknad, norskIdent, journalpostid) + tilpasserSøknadsMalTilTesten(søknad, norskIdent, journalpostid) val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) - val resPost = client.post() + val response = webTestClient.post() .uri { it.pathSegment(api, søknadTypeUri).build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) .body(BodyInserters.fromValue(opprettNySøknad)) - .awaitExchangeBlocking() + .exchange() + .expectStatus().isEqualTo(HttpStatus.CREATED) + .expectHeader().exists("Location") + .returnResult(URI::class.java) - val location = resPost.headers().asHttpHeaders().location - assertEquals(HttpStatus.CREATED, resPost.statusCode()) - assertNotNull(location) + val location = response.responseHeaders.location - val søknadViaGet = client.get() + webTestClient.get() .uri { it.pathSegment(api, søknadTypeUri, "mappe", hentSøknadId(location)).build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - assertNotNull(søknadViaGet) - assertEquals(journalpostid, søknadViaGet.journalposter?.first()) + .exchange() + .expectBody().consumeWith { res -> + val søknadOlpDto = objectMapper().readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) + assertNotNull(søknadOlpDto) + assertEquals(journalpostid, søknadOlpDto.journalposter?.first()) + } } + @Test fun `Oppdaterer en søknad`(): Unit = runBlocking { val søknadFraFrontend = LesFraFilUtil.søknadFraFrontendOlpFull() val norskIdent = "02030050163" val journalpostid = "9999" - tilpasserSøknadsMalTilTesten(søknadFraFrontend, norskIdent, journalpostid) + tilpasserSøknadsMalTilTesten(søknadFraFrontend, norskIdent, journalpostid) val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) - val resPost = client.post() + val response = webTestClient.post() .uri { it.pathSegment(api, søknadTypeUri).build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) .body(BodyInserters.fromValue(opprettNySøknad)) - .awaitExchangeBlocking() - - val location = resPost.headers().asHttpHeaders().location - assertEquals(HttpStatus.CREATED, resPost.statusCode()) - assertNotNull(location) + .exchange() + .expectStatus().isEqualTo(HttpStatus.CREATED) + .expectHeader().exists("Location") + .returnResult(URI::class.java) + val location = response.responseHeaders.location leggerPåNySøknadId(søknadFraFrontend, location) - val (httpstatus, oppdatertSoeknadDto) = client.put() + webTestClient.put() .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) .body(BodyInserters.fromValue(søknadFraFrontend)) - .awaitStatusWithBody() - - assertNotNull(oppdatertSoeknadDto) - assertEquals(norskIdent, oppdatertSoeknadDto.soekerId) - assertEquals( - listOf( - PeriodeDto( - LocalDate.of(2018, 12, 30), - LocalDate.of(2019, 10, 20) + .exchange() + .expectStatus().isEqualTo(HttpStatus.OK) + .expectBody().consumeWith { res -> + val oppdatertSøknad = objectMapper().readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) + assertNotNull(oppdatertSøknad) + assertEquals(norskIdent, oppdatertSøknad.soekerId) + assertEquals( + listOf( + PeriodeDto( + LocalDate.of(2018, 12, 30), + LocalDate.of(2019, 10, 20) + ) + ), + oppdatertSøknad.soeknadsperiode ) - ), - oppdatertSoeknadDto.soeknadsperiode - ) - assertEquals(HttpStatus.OK, httpstatus) + } } + @Test fun `Oppdaterer en søknad med metadata`(): Unit = runBlocking { val søknadFraFrontend = LesFraFilUtil.søknadFraFrontendOlpFull() val norskIdent = "02030050163" val journalpostid = "9999" - tilpasserSøknadsMalTilTesten(søknadFraFrontend, norskIdent, journalpostid) + tilpasserSøknadsMalTilTesten(søknadFraFrontend, norskIdent, journalpostid) val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) - val resPost = client.post() + val opprettetSøknadResponse = webTestClient.post() .uri { it.pathSegment(api, søknadTypeUri).build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) .body(BodyInserters.fromValue(opprettNySøknad)) - .awaitExchangeBlocking() - - val location = resPost.headers().asHttpHeaders().location - assertEquals(HttpStatus.CREATED, resPost.statusCode()) - assertNotNull(location) + .exchange() + .expectStatus().isEqualTo(HttpStatus.CREATED) + .expectHeader().exists("Location") + .returnResult(URI::class.java) + val location = opprettetSøknadResponse.responseHeaders.location leggerPåNySøknadId(søknadFraFrontend, location) - val (httpstatus, oppdatertJson) = client.put() + val oppdatertSøknadResponse = webTestClient.put() .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) .body(BodyInserters.fromValue(søknadFraFrontend)) - .awaitStatusWithBody() - - val oppdatertSoeknadDto = objectMapper().readValue(oppdatertJson, OpplaeringspengerSøknadDto::class.java) - - assertNotNull(oppdatertSoeknadDto) - assertEquals(norskIdent, oppdatertSoeknadDto.soekerId) - assertEquals( - listOf( - PeriodeDto( - LocalDate.of(2018, 12, 30), - LocalDate.of(2019, 10, 20) + .exchange() + .expectStatus().isEqualTo(HttpStatus.OK) + .expectBody().consumeWith { res -> + val oppdatertSøknad = objectMapper().readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) + assertNotNull(oppdatertSøknad) + assertEquals(norskIdent, oppdatertSøknad.soekerId) + assertEquals( + listOf( + PeriodeDto( + LocalDate.of(2018, 12, 30), + LocalDate.of(2019, 10, 20) + ) + ), + oppdatertSøknad.soeknadsperiode ) - ), - oppdatertSoeknadDto.soeknadsperiode - ) - assertEquals(HttpStatus.OK, httpstatus) + }.returnResult() - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", hentSøknadId(location)).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - assertNotNull(søknadViaGet) - assertThat(oppdatertSoeknadDto.metadata).isEqualTo(søknadViaGet.metadata) - } - - @Test - fun `Innsending av søknad returnerer 404 når mappe ikke finnes`(): Unit = runBlocking { - val norskIdent = "12030050163" - val søknadId = "d8e2c5a8-b993-4d2d-9cb5-fdb22a653a0c" - - val sendSøknad = lagSendSøknad(norskIdent = norskIdent, søknadId = søknadId) - - val status = client.post() - .uri { it.pathSegment(api, søknadTypeUri, "send").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(sendSøknad)) - .awaitStatuscode() - - assertEquals(HttpStatus.BAD_REQUEST, status) - } - - @Test - fun `sjekker at mapping fungre hele veien`(): Unit = runBlocking { - val gyldigSoeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() - - val visningDto = objectMapper().convertValue(gyldigSoeknad) - val mapTilSendingsformat = MapOlpTilK9Format( - søknadId = visningDto.soeknadId, - journalpostIder = visningDto.journalposter?.toSet() ?: emptySet(), - perioderSomFinnesIK9 = emptyList(), - dto = visningDto - ).søknadOgFeil() - assertNotNull(mapTilSendingsformat) - - val tilbake = objectMapper().convertValue(visningDto) - assertEquals(visningDto.soekerId, tilbake["soekerId"].toString()) - } - - @Test - fun `Prøver å sende søknaden til Kafka når den er gyldig`(): Unit = runBlocking { - val norskIdent = "02020050121" - val gyldigSoeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() - tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent) - - val (_, status, body) = opprettOgSendInnSoeknad( - soeknadJson = gyldigSoeknad, - ident = norskIdent, - journalpostid = "99998888" - ) - assertThat(body.feil).isNull() - assertEquals(HttpStatus.ACCEPTED, status) - - assertThat(DbContainerInitializer.getJournalpostRepo().kanSendeInn(listOf("99998888"))).isFalse - } - - @Test - fun `Skal få 409 når det blir sendt på en journalpost som er sendt fra før, og innsendingen ikke inneholder andre journalposter som kan sendes inn`(): Unit = - runBlocking { - val norskIdent = "02020050121" - val gyldigSoeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() - val journalpostId = "34234234" - tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostId) - val (id, status, body) = - opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid = journalpostId) - - assertThat(body.feil).isNull() - assertEquals(HttpStatus.ACCEPTED, status) - assertThat(DbContainerInitializer.getJournalpostRepo().kanSendeInn(listOf(journalpostId))).isFalse - - val sendSøknad = lagSendSøknad(norskIdent = norskIdent, søknadId = id) - val (httpstatus, body2) = client.post() - .uri { it.pathSegment(api, søknadTypeUri, "send").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(sendSøknad)) - .awaitStatusWithBody() - - assertEquals(HttpStatus.CONFLICT, httpstatus) - assertThat(body2.feil).isEqualTo("Innsendingen må inneholde minst en journalpost som kan sendes inn.") - } - - @Test - fun `Skal kunne lagre ned minimal søknad`(): Unit = runBlocking { - val norskIdent = "02022352121" - val soeknad: SøknadJson = LesFraFilUtil.minimalSøknad() - val journalpostId = IdGenerator.nesteId() - tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostId) - - val (_, status, body) = opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostId) - - assertEquals(HttpStatus.BAD_REQUEST, status) - assertThat(body.feil).isNotEmpty - } - - @Test - fun `Skal kunne lagre med tid søknad`(): Unit = runBlocking { - val norskIdent = "02022352121" - val soeknad: SøknadJson = LesFraFilUtil.tidSøknad() - tilpasserSøknadsMalTilTesten(soeknad, norskIdent) - - val (_, status, body) = opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent) - - assertEquals(HttpStatus.BAD_REQUEST, status) - assertThat(body.feil).isNotEmpty - } - - @Test - fun `Skal kunne lagre ned ferie fra søknad`(): Unit = runBlocking { - val norskIdent = "02022352121" - val soeknad: SøknadJson = LesFraFilUtil.ferieSøknad() - tilpasserSøknadsMalTilTesten(soeknad, norskIdent) - - val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) - - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - assertNotNull(søknadViaGet) - assertEquals(søknadViaGet.lovbestemtFerie?.get(0)?.fom!!, LocalDate.of(2021, 4, 14)) - } - - @Test - fun `Skal kunne lagre ned sn fra søknad`(): Unit = runBlocking { - val norskIdent = "02022352121" - val soeknad: SøknadJson = LesFraFilUtil.sn() - tilpasserSøknadsMalTilTesten(soeknad, norskIdent) + val oppdatertSøknad = objectMapper().readValue(oppdatertSøknadResponse.responseBody, OpplaeringspengerSøknadDto::class.java) - val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) - - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - assertNotNull(søknadViaGet) - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.virksomhetNavn).isEqualTo("FiskerAS") - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.organisasjonsnummer).isEqualTo("890508087") - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.periode?.fom).isEqualTo( - LocalDate.of(2021, 5, 10) - ) - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.landkode).isEqualTo("") - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.regnskapsførerNavn).isEqualTo("Regskapsfører") - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.regnskapsførerTlf).isEqualTo("88888889") - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.registrertIUtlandet).isEqualTo( - false - ) - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.bruttoInntekt).isEqualTo("1200000") - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.erNyoppstartet).isEqualTo(false) - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.virksomhetstyper).isEqualTo( - listOf("Fiske", "Jordbruk", "Dagmamma i eget hjem/familiebarnehage", "Annen næringsvirksomhet") - ) - } - - @Test - fun `Skal kunne lagre flagg om medisinske og punsjet`(): Unit = runBlocking { - val norskIdent = "02022352121" - val soeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() - tilpasserSøknadsMalTilTesten(soeknad, norskIdent) - - val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) - - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - assertNotNull(søknadViaGet) - assertThat(søknadViaGet.harInfoSomIkkeKanPunsjes).isEqualTo(true) - assertThat(søknadViaGet.harMedisinskeOpplysninger).isEqualTo(false) - } - - @Test - fun `Skal verifisere at søknad er ok`(): Unit = runBlocking { - val norskIdent = "02022352121" - val soeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() - tilpasserSøknadsMalTilTesten(soeknad, norskIdent) - opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) - - val httpStatus = client.post() - .uri { it.pathSegment(api, søknadTypeUri, "valider").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(soeknad)) - .awaitStatuscode() - - assertEquals(HttpStatus.ACCEPTED, httpStatus) - } - - @Test - fun `Skal verifisere at vi utvider men flere journalposter`(): Unit = runBlocking { - val norskIdent = "02022352121" - val soeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() - tilpasserSøknadsMalTilTesten(soeknad, norskIdent) - - val søknadId = opprettSoeknad(ident = norskIdent) - leggerPåNySøknadId(soeknad, søknadId) - - client.put() - .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(soeknad)) - .awaitExchangeBlocking() - - val med2: SøknadJson = LesFraFilUtil.søknadFraFrontendMed2() - tilpasserSøknadsMalTilTesten(med2, norskIdent) - leggerPåNySøknadId(med2, søknadId) - - client.put() - .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(med2)) - .awaitExchangeBlocking() - - val id = hentSøknadId(søknadId) - - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", id).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - assertThat(søknadViaGet.journalposter).hasSize(2) - assertThat(søknadViaGet.journalposter).isEqualTo(listOf("9999", "10000")) - } - - @Test - @Disabled("TODO") - fun `Skal verifisere at alle felter blir lagret`(): Unit = runBlocking { - val norskIdent = "12022352121" - val soeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() - tilpasserSøknadsMalTilTesten(soeknad, norskIdent) - - val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) - - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - // GUI format - assertNotNull(søknadViaGet) - assertThat(søknadViaGet.soekerId).isEqualTo(norskIdent) - assertThat(søknadViaGet.journalposter!![0]).isEqualTo("99998888") - assertThat(søknadViaGet.mottattDato).isEqualTo(LocalDate.of(2020, 10, 12)) - assertThat(søknadViaGet.barn?.norskIdent).isEqualTo("22222222222") - assertThat(søknadViaGet.soeknadsperiode?.first()?.fom).isEqualTo(LocalDate.of(2018, 12, 30)) - assertThat(søknadViaGet.soeknadsperiode?.first()?.tom).isEqualTo(LocalDate.of(2019, 10, 20)) - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.periode?.fom).isEqualTo( - LocalDate.of(2018, 12, 30) - ) - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.periode?.tom).isNull() - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.virksomhetstyper).hasSize(4) - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.virksomhetNavn).isEqualTo("FiskerAS") - assertThat(søknadViaGet.opptjeningAktivitet?.frilanser?.startdato).isEqualTo("2019-10-10") - assertThat(søknadViaGet.opptjeningAktivitet?.arbeidstaker!![0].organisasjonsnummer).isEqualTo("910909088") - assertThat(søknadViaGet.arbeidstid?.arbeidstakerList!![0].organisasjonsnummer).isEqualTo("910909088") - assertThat(søknadViaGet.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].periode?.fom).isEqualTo( - LocalDate.of(2018, 12, 30) - ) - assertThat(søknadViaGet.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].periode?.tom).isEqualTo( - LocalDate.of(2019, 10, 20) - ) - assertThat(søknadViaGet.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].faktiskArbeidTimerPerDag).isEqualTo( - "7,48" - ) - assertThat(søknadViaGet.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].jobberNormaltTimerPerDag).isEqualTo( - "7,48" - ) - assertThat(søknadViaGet.arbeidstid?.frilanserArbeidstidInfo!!.perioder?.first()?.periode?.fom).isEqualTo( - LocalDate.of( - 2018, - 12, - 30 - ) - ) - assertThat(søknadViaGet.arbeidstid?.selvstendigNæringsdrivendeArbeidstidInfo!!.perioder?.first()?.jobberNormaltTimerPerDag).isEqualTo( - "7" - ) - assertThat(søknadViaGet.uttak?.first()?.timerPleieAvBarnetPerDag).isEqualTo("7,5") - assertThat(søknadViaGet.omsorg?.relasjonTilBarnet).isEqualTo("MOR") - assertThat(søknadViaGet.bosteder!![0].land).isEqualTo("RU") - assertThat(søknadViaGet.lovbestemtFerie!![0].fom).isEqualTo(LocalDate.of(2018, 12, 30)) - assertThat(søknadViaGet.utenlandsopphold!![0].periode?.fom).isEqualTo(LocalDate.of(2018, 12, 30)) - assertThat(søknadViaGet.soknadsinfo!!.harMedsoeker).isEqualTo(true) - assertThat(søknadViaGet.soknadsinfo!!.samtidigHjemme).isEqualTo(true) - - // k9-format, faktisk søknad format - val mapTilEksternFormat = MapOlpTilK9Format( - søknadViaGet.soeknadId, - søknadViaGet.journalposter!!.toSet(), - emptyList(), - søknadViaGet - ) - - assertThat(mapTilEksternFormat.feil()).isEmpty() - val søknad = mapTilEksternFormat.søknad() - - assertThat(søknad.søker.personIdent.verdi).isEqualTo(norskIdent) - val ytelse = søknad.getYtelse() - - assertThat(ytelse.barn.personIdent.verdi).isEqualTo("22222222222") - assertThat(ytelse.søknadsperiode.iso8601).isEqualTo("2018-12-30/2019-10-20") - assertThat(ytelse.opptjeningAktivitet.selvstendigNæringsdrivende?.get(0)?.perioder?.keys?.first()?.iso8601).isEqualTo( - "2018-12-30/.." - ) - assertThat(ytelse?.opptjeningAktivitet?.selvstendigNæringsdrivende?.get(0)?.perioder?.values?.first()?.virksomhetstyper).hasSize( - 4 - ) - assertThat(ytelse?.opptjeningAktivitet?.selvstendigNæringsdrivende?.get(0)?.virksomhetNavn).isEqualTo("FiskerAS") - assertThat(ytelse.opptjeningAktivitet?.frilanser?.startdato).isEqualTo("2019-10-10") - assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].organisasjonsnummer.verdi).isEqualTo("910909088") - assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo.perioder?.keys?.first()?.iso8601).isEqualTo("2018-12-30/2019-10-20") - assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo.perioder?.values?.first()?.faktiskArbeidTimerPerDag?.toString()).isEqualTo( - "PT7H29M" - ) - assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo.perioder?.values?.first()?.jobberNormaltTimerPerDag?.toString()).isEqualTo( - "PT7H29M" - ) - assertThat(ytelse.arbeidstid?.selvstendigNæringsdrivendeArbeidstidInfo!!.get().perioder?.values?.first()?.jobberNormaltTimerPerDag).isEqualTo( - Duration.ofHours(7) - ) - assertThat(ytelse.arbeidstid?.frilanserArbeidstidInfo!!.get().perioder?.keys?.first()?.iso8601).isEqualTo("2018-12-30/2019-10-20") - assertThat(ytelse.uttak?.perioder?.values?.first()?.timerPleieAvBarnetPerDag.toString()).isEqualTo("PT7H30M") - assertThat(ytelse.bosteder.perioder.values.first().land.landkode).isEqualTo("RU") - assertThat(ytelse.lovbestemtFerie!!.perioder?.get(Periode("2018-12-30/2019-06-20"))?.isSkalHaFerie).isEqualTo( - true - ) - assertThat(ytelse.lovbestemtFerie!!.perioder?.get(Periode("2019-06-21/2019-10-20"))?.isSkalHaFerie).isEqualTo( - false - ) - assertThat(ytelse.utenlandsopphold!!.perioder.keys.first()?.iso8601).isEqualTo("2018-12-30/2019-01-08") - assertThat(ytelse.utenlandsopphold!!.perioder.values.first()?.Årsak).isEqualTo(Utenlandsopphold.UtenlandsoppholdÅrsak.BARNET_INNLAGT_I_HELSEINSTITUSJON_DEKKET_ETTER_AVTALE_MED_ET_ANNET_LAND_OM_TRYGD) - assertThat(ytelse.opptjeningAktivitet.frilanser.startdato).isEqualTo(LocalDate.of(2019, 10, 10)) - assertThat(ytelse.opptjeningAktivitet.frilanser.sluttdato).isEqualTo(LocalDate.of(2019, 11, 10)) - } - - private suspend fun opprettOgSendInnSoeknad( - soeknadJson: SøknadJson, - ident: String, - journalpostid: String = IdGenerator.nesteId() - ): Triple { - val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) - - // oppretter en søknad - val resPost = client.post() - .uri { it.pathSegment(api, søknadTypeUri).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(innsendingForOpprettelseAvMappe)) - .awaitExchangeBlocking() - - val location = resPost.headers().asHttpHeaders().location - assertEquals(HttpStatus.CREATED, resPost.statusCode()) - assertNotNull(location) - - leggerPåNySøknadId(soeknadJson, location) - - // fyller ut en søknad - val søknadDtoFyltUt = client.put() - .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(soeknadJson)) - .awaitBodyWithType() - - assertNotNull(søknadDtoFyltUt.soekerId) - - val søknadId = søknadDtoFyltUt.soeknadId - val sendSøknad = lagSendSøknad(norskIdent = ident, søknadId = søknadId) - - val journalposter = søknadDtoFyltUt.journalposter!! - - val kanSendeInn = DbContainerInitializer.getJournalpostRepo().kanSendeInn(journalposter) - assertThat(kanSendeInn).isTrue - - // sender en søknad - val (httpstatus, oasSoknadsfeil) = client.post() - .uri { it.pathSegment(api, søknadTypeUri, "send").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(sendSøknad)) - .awaitStatusWithBody() - return Triple(søknadId, httpstatus, oasSoknadsfeil) - } - - private suspend fun opprettOgLagreSoeknad( - soeknadJson: SøknadJson, - ident: String, - journalpostid: String = IdGenerator.nesteId() - ): OpplaeringspengerSøknadDto { - val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) - - // oppretter en søknad - val resPost = client.post() - .uri { it.pathSegment(api, søknadTypeUri).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(innsendingForOpprettelseAvMappe)) - .awaitExchangeBlocking() - - val location = resPost.headers().asHttpHeaders().location - assertEquals(HttpStatus.CREATED, resPost.statusCode()) - assertNotNull(location) - - leggerPåNySøknadId(soeknadJson, location) - - // fyller ut en søknad - val søknadDtoFyltUt = client.put() - .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } + webTestClient.get() + .uri { it.pathSegment(api, søknadTypeUri, "mappe", hentSøknadId(location)).build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(soeknadJson)) - .awaitBodyWithType() - - assertNotNull(søknadDtoFyltUt.soekerId) - return søknadDtoFyltUt + .exchange() + .expectStatus().isEqualTo(HttpStatus.OK) + .expectBody().consumeWith { res -> + val søknad = objectMapper().readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) + assertNotNull(søknad) + assertThat(søknad.metadata).isEqualTo(oppdatertSøknad.metadata) + assertEquals(norskIdent, søknad.soekerId) + assertEquals( + listOf( + PeriodeDto( + LocalDate.of(2018, 12, 30), + LocalDate.of(2019, 10, 20) + ) + ), + søknad.soeknadsperiode + ) + } } - private suspend fun opprettSoeknad( - ident: String, - journalpostid: String = IdGenerator.nesteId() - ): URI? { - val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) - - // oppretter en søknad - val resPost = client.post() - .uri { it.pathSegment(api, søknadTypeUri).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(innsendingForOpprettelseAvMappe)) - .awaitExchangeBlocking() - val location = resPost.headers().asHttpHeaders().location - assertEquals(HttpStatus.CREATED, resPost.statusCode()) - assertNotNull(location) - - return location - } +// @Test +// fun `Innsending av søknad returnerer 404 når mappe ikke finnes`(): Unit = runBlocking { +// val norskIdent = "12030050163" +// val søknadId = "d8e2c5a8-b993-4d2d-9cb5-fdb22a653a0c" +// +// val sendSøknad = lagSendSøknad(norskIdent = norskIdent, søknadId = søknadId) +// +// val status = client.post() +// .uri { it.pathSegment(api, søknadTypeUri, "send").build() } +// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +// .body(BodyInserters.fromValue(sendSøknad)) +// .awaitStatuscode() +// +// assertEquals(HttpStatus.BAD_REQUEST, status) +// } +// +// @Test +// fun `sjekker at mapping fungre hele veien`(): Unit = runBlocking { +// val gyldigSoeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() +// +// val visningDto = objectMapper().convertValue(gyldigSoeknad) +// val mapTilSendingsformat = MapOlpTilK9Format( +// søknadId = visningDto.soeknadId, +// journalpostIder = visningDto.journalposter?.toSet() ?: emptySet(), +// perioderSomFinnesIK9 = emptyList(), +// dto = visningDto +// ).søknadOgFeil() +// assertNotNull(mapTilSendingsformat) +// +// val tilbake = objectMapper().convertValue(visningDto) +// assertEquals(visningDto.soekerId, tilbake["soekerId"].toString()) +// } +// +//// @Test +//// fun `Prøver å sende søknaden til Kafka når den er gyldig`(): Unit = runBlocking { +//// val norskIdent = "02020050121" +//// val gyldigSoeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() +//// tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent) +//// +//// val (_, status, body) = opprettOgSendInnSoeknad( +//// soeknadJson = gyldigSoeknad, +//// ident = norskIdent, +//// journalpostid = "99998888" +//// ) +//// assertThat(body.feil).isNull() +//// assertEquals(HttpStatus.ACCEPTED, status) +//// +//// assertThat(journalpostRepo.kanSendeInn(listOf("99998888"))).isFalse +//// } +//// +//// @Test +//// fun `Skal få 409 når det blir sendt på en journalpost som er sendt fra før, og innsendingen ikke inneholder andre journalposter som kan sendes inn`(): Unit = +//// runBlocking { +//// val norskIdent = "02020050121" +//// val gyldigSoeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() +//// val journalpostId = "34234234" +//// tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostId) +//// val (id, status, body) = +//// opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid = journalpostId) +//// +//// assertThat(body.feil).isNull() +//// assertEquals(HttpStatus.ACCEPTED, status) +//// assertThat(journalpostRepo.kanSendeInn(listOf(journalpostId))).isFalse +//// +//// val sendSøknad = lagSendSøknad(norskIdent = norskIdent, søknadId = id) +//// val (httpstatus, body2) = client.post() +//// .uri { it.pathSegment(api, søknadTypeUri, "send").build() } +//// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +//// .body(BodyInserters.fromValue(sendSøknad)) +//// .awaitStatusWithBody() +//// +//// assertEquals(HttpStatus.CONFLICT, httpstatus) +//// assertThat(body2.feil).isEqualTo("Innsendingen må inneholde minst en journalpost som kan sendes inn.") +//// } +// +//// @Test +//// fun `Skal kunne lagre ned minimal søknad`(): Unit = runBlocking { +//// val norskIdent = "02022352121" +//// val soeknad: SøknadJson = LesFraFilUtil.minimalSøknad() +//// val journalpostId = IdGenerator.nesteId() +//// tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostId) +//// +//// val (_, status, body) = opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostId) +//// +//// assertEquals(HttpStatus.BAD_REQUEST, status) +//// assertThat(body.feil).isNotEmpty +//// } +//// +//// @Test +//// fun `Skal kunne lagre med tid søknad`(): Unit = runBlocking { +//// val norskIdent = "02022352121" +//// val soeknad: SøknadJson = LesFraFilUtil.tidSøknad() +//// tilpasserSøknadsMalTilTesten(soeknad, norskIdent) +//// +//// val (_, status, body) = opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent) +//// +//// assertEquals(HttpStatus.BAD_REQUEST, status) +//// assertThat(body.feil).isNotEmpty +//// } +// +// @Test +// fun `Skal kunne lagre ned ferie fra søknad`(): Unit = runBlocking { +// val norskIdent = "02022352121" +// val soeknad: SøknadJson = LesFraFilUtil.ferieSøknad() +// tilpasserSøknadsMalTilTesten(soeknad, norskIdent) +// +// val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) +// +// val søknadViaGet = client.get() +// .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } +// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +// .awaitBodyWithType() +// +// assertNotNull(søknadViaGet) +// assertEquals(søknadViaGet.lovbestemtFerie?.get(0)?.fom!!, LocalDate.of(2021, 4, 14)) +// } +// +// @Test +// fun `Skal kunne lagre ned sn fra søknad`(): Unit = runBlocking { +// val norskIdent = "02022352121" +// val soeknad: SøknadJson = LesFraFilUtil.sn() +// tilpasserSøknadsMalTilTesten(soeknad, norskIdent) +// +// val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) +// +// val søknadViaGet = client.get() +// .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } +// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +// .awaitBodyWithType() +// +// assertNotNull(søknadViaGet) +// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.virksomhetNavn).isEqualTo("FiskerAS") +// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.organisasjonsnummer).isEqualTo("890508087") +// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.periode?.fom).isEqualTo( +// LocalDate.of(2021, 5, 10) +// ) +// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.landkode).isEqualTo("") +// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.regnskapsførerNavn).isEqualTo("Regskapsfører") +// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.regnskapsførerTlf).isEqualTo("88888889") +// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.registrertIUtlandet).isEqualTo( +// false +// ) +// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.bruttoInntekt).isEqualTo("1200000") +// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.erNyoppstartet).isEqualTo(false) +// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.virksomhetstyper).isEqualTo( +// listOf("Fiske", "Jordbruk", "Dagmamma i eget hjem/familiebarnehage", "Annen næringsvirksomhet") +// ) +// } +// +// @Test +// fun `Skal kunne lagre flagg om medisinske og punsjet`(): Unit = runBlocking { +// val norskIdent = "02022352121" +// val soeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() +// tilpasserSøknadsMalTilTesten(soeknad, norskIdent) +// +// val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) +// +// val søknadViaGet = client.get() +// .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } +// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +// .awaitBodyWithType() +// +// assertNotNull(søknadViaGet) +// assertThat(søknadViaGet.harInfoSomIkkeKanPunsjes).isEqualTo(true) +// assertThat(søknadViaGet.harMedisinskeOpplysninger).isEqualTo(false) +// } +// +// @Test +// fun `Skal verifisere at søknad er ok`(): Unit = runBlocking { +// val norskIdent = "02022352121" +// val soeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() +// tilpasserSøknadsMalTilTesten(soeknad, norskIdent) +// opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) +// +// val httpStatus = client.post() +// .uri { it.pathSegment(api, søknadTypeUri, "valider").build() } +// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +// .body(BodyInserters.fromValue(soeknad)) +// .awaitStatuscode() +// +// assertEquals(HttpStatus.ACCEPTED, httpStatus) +// } +// +// @Test +// fun `Skal verifisere at vi utvider men flere journalposter`(): Unit = runBlocking { +// val norskIdent = "02022352121" +// val soeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() +// tilpasserSøknadsMalTilTesten(soeknad, norskIdent) +// +// val søknadId = opprettSoeknad(ident = norskIdent) +// leggerPåNySøknadId(soeknad, søknadId) +// +// client.put() +// .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } +// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +// .body(BodyInserters.fromValue(soeknad)) +// .awaitExchangeBlocking() +// +// val med2: SøknadJson = LesFraFilUtil.søknadFraFrontendMed2() +// tilpasserSøknadsMalTilTesten(med2, norskIdent) +// leggerPåNySøknadId(med2, søknadId) +// +// client.put() +// .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } +// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +// .body(BodyInserters.fromValue(med2)) +// .awaitExchangeBlocking() +// +// val id = hentSøknadId(søknadId) +// +// val søknadViaGet = client.get() +// .uri { it.pathSegment(api, søknadTypeUri, "mappe", id).build() } +// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +// .awaitBodyWithType() +// +// assertThat(søknadViaGet.journalposter).hasSize(2) +// assertThat(søknadViaGet.journalposter).isEqualTo(listOf("9999", "10000")) +// } +// +// @Test +// @Disabled("TODO") +// fun `Skal verifisere at alle felter blir lagret`(): Unit = runBlocking { +// val norskIdent = "12022352121" +// val soeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() +// tilpasserSøknadsMalTilTesten(soeknad, norskIdent) +// +// val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) +// +// val søknadViaGet = client.get() +// .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } +// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +// .awaitBodyWithType() +// +// // GUI format +// assertNotNull(søknadViaGet) +// assertThat(søknadViaGet.soekerId).isEqualTo(norskIdent) +// assertThat(søknadViaGet.journalposter!![0]).isEqualTo("99998888") +// assertThat(søknadViaGet.mottattDato).isEqualTo(LocalDate.of(2020, 10, 12)) +// assertThat(søknadViaGet.barn?.norskIdent).isEqualTo("22222222222") +// assertThat(søknadViaGet.soeknadsperiode?.first()?.fom).isEqualTo(LocalDate.of(2018, 12, 30)) +// assertThat(søknadViaGet.soeknadsperiode?.first()?.tom).isEqualTo(LocalDate.of(2019, 10, 20)) +// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.periode?.fom).isEqualTo( +// LocalDate.of(2018, 12, 30) +// ) +// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.periode?.tom).isNull() +// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.virksomhetstyper).hasSize(4) +// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.virksomhetNavn).isEqualTo("FiskerAS") +// assertThat(søknadViaGet.opptjeningAktivitet?.frilanser?.startdato).isEqualTo("2019-10-10") +// assertThat(søknadViaGet.opptjeningAktivitet?.arbeidstaker!![0].organisasjonsnummer).isEqualTo("910909088") +// assertThat(søknadViaGet.arbeidstid?.arbeidstakerList!![0].organisasjonsnummer).isEqualTo("910909088") +// assertThat(søknadViaGet.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].periode?.fom).isEqualTo( +// LocalDate.of(2018, 12, 30) +// ) +// assertThat(søknadViaGet.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].periode?.tom).isEqualTo( +// LocalDate.of(2019, 10, 20) +// ) +// assertThat(søknadViaGet.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].faktiskArbeidTimerPerDag).isEqualTo( +// "7,48" +// ) +// assertThat(søknadViaGet.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].jobberNormaltTimerPerDag).isEqualTo( +// "7,48" +// ) +// assertThat(søknadViaGet.arbeidstid?.frilanserArbeidstidInfo!!.perioder?.first()?.periode?.fom).isEqualTo( +// LocalDate.of( +// 2018, +// 12, +// 30 +// ) +// ) +// assertThat(søknadViaGet.arbeidstid?.selvstendigNæringsdrivendeArbeidstidInfo!!.perioder?.first()?.jobberNormaltTimerPerDag).isEqualTo( +// "7" +// ) +// assertThat(søknadViaGet.uttak?.first()?.timerPleieAvBarnetPerDag).isEqualTo("7,5") +// assertThat(søknadViaGet.omsorg?.relasjonTilBarnet).isEqualTo("MOR") +// assertThat(søknadViaGet.bosteder!![0].land).isEqualTo("RU") +// assertThat(søknadViaGet.lovbestemtFerie!![0].fom).isEqualTo(LocalDate.of(2018, 12, 30)) +// assertThat(søknadViaGet.utenlandsopphold!![0].periode?.fom).isEqualTo(LocalDate.of(2018, 12, 30)) +// assertThat(søknadViaGet.soknadsinfo!!.harMedsoeker).isEqualTo(true) +// assertThat(søknadViaGet.soknadsinfo!!.samtidigHjemme).isEqualTo(true) +// +// // k9-format, faktisk søknad format +// val mapTilEksternFormat = MapOlpTilK9Format( +// søknadViaGet.soeknadId, +// søknadViaGet.journalposter!!.toSet(), +// emptyList(), +// søknadViaGet +// ) +// +// assertThat(mapTilEksternFormat.feil()).isEmpty() +// val søknad = mapTilEksternFormat.søknad() +// +// assertThat(søknad.søker.personIdent.verdi).isEqualTo(norskIdent) +// val ytelse = søknad.getYtelse() +// +// assertThat(ytelse.barn.personIdent.verdi).isEqualTo("22222222222") +// assertThat(ytelse.søknadsperiode.iso8601).isEqualTo("2018-12-30/2019-10-20") +// assertThat(ytelse.opptjeningAktivitet.selvstendigNæringsdrivende?.get(0)?.perioder?.keys?.first()?.iso8601).isEqualTo( +// "2018-12-30/.." +// ) +// assertThat(ytelse?.opptjeningAktivitet?.selvstendigNæringsdrivende?.get(0)?.perioder?.values?.first()?.virksomhetstyper).hasSize( +// 4 +// ) +// assertThat(ytelse?.opptjeningAktivitet?.selvstendigNæringsdrivende?.get(0)?.virksomhetNavn).isEqualTo("FiskerAS") +// assertThat(ytelse.opptjeningAktivitet?.frilanser?.startdato).isEqualTo("2019-10-10") +// assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].organisasjonsnummer.verdi).isEqualTo("910909088") +// assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo.perioder?.keys?.first()?.iso8601).isEqualTo("2018-12-30/2019-10-20") +// assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo.perioder?.values?.first()?.faktiskArbeidTimerPerDag?.toString()).isEqualTo( +// "PT7H29M" +// ) +// assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo.perioder?.values?.first()?.jobberNormaltTimerPerDag?.toString()).isEqualTo( +// "PT7H29M" +// ) +// assertThat(ytelse.arbeidstid?.selvstendigNæringsdrivendeArbeidstidInfo!!.get().perioder?.values?.first()?.jobberNormaltTimerPerDag).isEqualTo( +// Duration.ofHours(7) +// ) +// assertThat(ytelse.arbeidstid?.frilanserArbeidstidInfo!!.get().perioder?.keys?.first()?.iso8601).isEqualTo("2018-12-30/2019-10-20") +// assertThat(ytelse.uttak?.perioder?.values?.first()?.timerPleieAvBarnetPerDag.toString()).isEqualTo("PT7H30M") +// assertThat(ytelse.bosteder.perioder.values.first().land.landkode).isEqualTo("RU") +// assertThat(ytelse.lovbestemtFerie!!.perioder?.get(Periode("2018-12-30/2019-06-20"))?.isSkalHaFerie).isEqualTo( +// true +// ) +// assertThat(ytelse.lovbestemtFerie!!.perioder?.get(Periode("2019-06-21/2019-10-20"))?.isSkalHaFerie).isEqualTo( +// false +// ) +// assertThat(ytelse.utenlandsopphold!!.perioder.keys.first()?.iso8601).isEqualTo("2018-12-30/2019-01-08") +// assertThat(ytelse.utenlandsopphold!!.perioder.values.first()?.Årsak).isEqualTo(Utenlandsopphold.UtenlandsoppholdÅrsak.BARNET_INNLAGT_I_HELSEINSTITUSJON_DEKKET_ETTER_AVTALE_MED_ET_ANNET_LAND_OM_TRYGD) +// assertThat(ytelse.opptjeningAktivitet.frilanser.startdato).isEqualTo(LocalDate.of(2019, 10, 10)) +// assertThat(ytelse.opptjeningAktivitet.frilanser.sluttdato).isEqualTo(LocalDate.of(2019, 11, 10)) +// } +// +//// private suspend fun opprettOgSendInnSoeknad( +//// soeknadJson: SøknadJson, +//// ident: String, +//// journalpostid: String = IdGenerator.nesteId() +//// ): Triple { +//// val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) +//// +//// // oppretter en søknad +//// val resPost = client.post() +//// .uri { it.pathSegment(api, søknadTypeUri).build() } +//// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +//// .body(BodyInserters.fromValue(innsendingForOpprettelseAvMappe)) +//// .awaitExchangeBlocking() +//// +//// val location = resPost.headers().asHttpHeaders().location +//// assertEquals(HttpStatus.CREATED, resPost.statusCode()) +//// assertNotNull(location) +//// +//// leggerPåNySøknadId(soeknadJson, location) +//// +//// // fyller ut en søknad +//// val søknadDtoFyltUt = client.put() +//// .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } +//// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +//// .body(BodyInserters.fromValue(soeknadJson)) +//// .awaitBodyWithType() +//// +//// assertNotNull(søknadDtoFyltUt.soekerId) +//// +//// val søknadId = søknadDtoFyltUt.soeknadId +//// val sendSøknad = lagSendSøknad(norskIdent = ident, søknadId = søknadId) +//// +//// val journalposter = søknadDtoFyltUt.journalposter!! +//// +//// val kanSendeInn = DbContainerInitializer.getJournalpostRepo().kanSendeInn(journalposter) +//// assertThat(kanSendeInn).isTrue +//// +//// // sender en søknad +//// val (httpstatus, oasSoknadsfeil) = client.post() +//// .uri { it.pathSegment(api, søknadTypeUri, "send").build() } +//// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +//// .body(BodyInserters.fromValue(sendSøknad)) +//// .awaitStatusWithBody() +//// return Triple(søknadId, httpstatus, oasSoknadsfeil) +//// } +// +// private suspend fun opprettOgLagreSoeknad( +// soeknadJson: SøknadJson, +// ident: String, +// journalpostid: String = IdGenerator.nesteId() +// ): OpplaeringspengerSøknadDto { +// val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) +// +// // oppretter en søknad +// val resPost = client.post() +// .uri { it.pathSegment(api, søknadTypeUri).build() } +// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +// .body(BodyInserters.fromValue(innsendingForOpprettelseAvMappe)) +// .awaitExchangeBlocking() +// +// val location = resPost.headers().asHttpHeaders().location +// assertEquals(HttpStatus.CREATED, resPost.statusCode()) +// assertNotNull(location) +// +// leggerPåNySøknadId(soeknadJson, location) +// +// // fyller ut en søknad +// val søknadDtoFyltUt = client.put() +// .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } +// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +// .body(BodyInserters.fromValue(soeknadJson)) +// .awaitBodyWithType() +// +// assertNotNull(søknadDtoFyltUt.soekerId) +// return søknadDtoFyltUt +// } +// +// private suspend fun opprettSoeknad( +// ident: String, +// journalpostid: String = IdGenerator.nesteId() +// ): URI? { +// val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) +// +// // oppretter en søknad +// val resPost = client.post() +// .uri { it.pathSegment(api, søknadTypeUri).build() } +// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +// .body(BodyInserters.fromValue(innsendingForOpprettelseAvMappe)) +// .awaitExchangeBlocking() +// +// val location = resPost.headers().asHttpHeaders().location +// assertEquals(HttpStatus.CREATED, resPost.statusCode()) +// assertNotNull(location) +// +// return location +// } } private fun opprettSøknad( personnummer: String, journalpostId: String ): OpprettNySøknad { - return OpprettNySøknad(personnummer, journalpostId, null, null) + return OpprettNySøknad(personnummer, journalpostId, "12345", null) } private fun lagSendSøknad( @@ -634,4 +711,3 @@ private fun leggerPåNySøknadId(søknadFraFrontend: MutableMap, l val trim = søknadId?.trim('/') søknadFraFrontend.replace("soeknadId", trim) } -*/ \ No newline at end of file From 9adc6de89b7a0cbe9b97876fae283c79cdd2428d Mon Sep 17 00:00:00 2001 From: Morten Osvik Date: Thu, 19 Sep 2024 16:20:21 +0200 Subject: [PATCH 03/12] Fjern dobbel institusjon i liste for lokal mock --- .../no/nav/k9punsj/rest/eksternt/k9sak/LokalK9SakService.kt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/LokalK9SakService.kt b/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/LokalK9SakService.kt index b3f8bac32..6a9db5334 100644 --- a/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/LokalK9SakService.kt +++ b/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/LokalK9SakService.kt @@ -174,11 +174,6 @@ class LokalK9SakService : K9SakService { "Sykehuset i Vestfold", gyldigePerioder ), - GodkjentOpplæringsinstitusjonDto( - UUID.fromString("202c3f51-fc70-4ecb-8bf1-2eb20daf6346"), - "Sykehus Asker/Bærum", - gyldigePerioder - ), GodkjentOpplæringsinstitusjonDto( UUID.fromString("7a53ef39-4cac-4866-a8ae-3784af75fc91"), "Sykehuset Innlandet Elverum", From 1ae6e6a4dddef13c98895ea5f591c812e7cf7b94 Mon Sep 17 00:00:00 2001 From: Morten Osvik Date: Fri, 20 Sep 2024 16:26:34 +0200 Subject: [PATCH 04/12] Fiks flere tester --- .../OpplaeringspengerTests.kt | 491 ++++++++---------- 1 file changed, 223 insertions(+), 268 deletions(-) diff --git a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt index 2106bf692..318e84398 100644 --- a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt +++ b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt @@ -1,5 +1,6 @@ package no.nav.k9punsj.opplaeringspenger +import com.fasterxml.jackson.module.kotlin.convertValue import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking import no.nav.helse.dusseldorf.testsupport.jws.Azure @@ -9,9 +10,12 @@ import no.nav.k9punsj.felles.dto.PeriodeDto import no.nav.k9punsj.felles.dto.SendSøknad import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.metrikker.JournalpostMetrikkRepository +import no.nav.k9punsj.openapi.OasSoknadsfeil import no.nav.k9punsj.utils.objectMapper import no.nav.k9punsj.util.LesFraFilUtil +import no.nav.k9punsj.util.SøknadJson import no.nav.k9punsj.util.TestUtils.hentSøknadId +import no.nav.k9punsj.wiremock.JournalpostIds import no.nav.k9punsj.wiremock.saksbehandlerAccessToken import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.AfterEach @@ -23,6 +27,7 @@ import org.junit.jupiter.api.extension.ExtendWith import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.HttpHeaders import org.springframework.http.HttpStatus +import org.springframework.http.HttpStatusCode import org.springframework.test.context.junit.jupiter.SpringExtension import org.springframework.web.reactive.function.BodyInserters import java.net.URI @@ -34,10 +39,7 @@ import java.time.LocalDate class OpplaeringspengerTests : AbstractContainerBaseTest() { @Autowired - lateinit var journalpostRepo: JournalpostRepository - - @Autowired - lateinit var journalpostMetrikkRepository: JournalpostMetrikkRepository + lateinit var journalpostRepository: JournalpostRepository @BeforeEach internal fun setUp() { @@ -52,18 +54,15 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { private val api = "api" private val søknadTypeUri = "opplaeringspenger-soknad" private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" + private val objectMapper = objectMapper() @Test fun `Får tom liste når personen ikke har en eksisterende mappe`(): Unit = runBlocking { val norskIdent = "01110050053" - webTestClient.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .header("X-Nav-NorskIdent", norskIdent) - .exchange() + hentMappe(norskIdent) .expectStatus().isEqualTo(HttpStatus.OK) - .expectBody() + .expectBody().jsonPath("$.søknader").isEmpty } @@ -71,7 +70,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { fun `Opprette ny mappe på person`(): Unit = runBlocking { val norskIdent = "01010050053" val journalpostid = "9999" - val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) + val opprettNySøknad = lagOpprettNySøknadDto(norskIdent, journalpostid) webTestClient.post() .uri { it.pathSegment(api, søknadTypeUri).build() } @@ -87,24 +86,16 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { fun `Hente eksisterende mappe på person`(): Unit = runBlocking { val norskIdent = "02020050163" val journalpostid = "9999" - val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) + val opprettNySøknad = lagOpprettNySøknadDto(norskIdent, journalpostid) - webTestClient.post() - .uri { it.pathSegment(api, søknadTypeUri).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(opprettNySøknad)) - .exchange() - .expectStatus().isEqualTo(HttpStatus.CREATED) - .expectBody() + opprettSøknadOgHentSøknadId(opprettNySøknad) - webTestClient.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .header("X-Nav-NorskIdent", norskIdent) - .exchange() + hentMappe(norskIdent) .expectStatus().isEqualTo(HttpStatus.OK) - .expectBody().consumeWith { response -> - val svarOlpDto = objectMapper().readValue(response.responseBody, SvarOlpDto::class.java) + .expectBody() + .consumeWith { response -> + assertNotNull(response.responseBody) + val svarOlpDto = objectMapper.readValue(response.responseBody, SvarOlpDto::class.java) assertThat(svarOlpDto.søknader).isNotEmpty assertEquals(journalpostid, svarOlpDto.søknader?.first()?.journalposter?.first()) } @@ -117,26 +108,15 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { val norskIdent = "02030050163" val journalpostid = "21707da8-a13b-4927-8776-c53399727b29" - tilpasserSøknadsMalTilTesten(søknad, norskIdent, journalpostid) - val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) + tilpassSøknadsMalTilTest(søknad, norskIdent, journalpostid) + val opprettNySøknad = lagOpprettNySøknadDto(norskIdent, journalpostid) - val response = webTestClient.post() - .uri { it.pathSegment(api, søknadTypeUri).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(opprettNySøknad)) - .exchange() - .expectStatus().isEqualTo(HttpStatus.CREATED) - .expectHeader().exists("Location") - .returnResult(URI::class.java) + val location = opprettSøknadOgHentSøknadId(opprettNySøknad) - val location = response.responseHeaders.location - - webTestClient.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", hentSøknadId(location)).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .exchange() - .expectBody().consumeWith { res -> - val søknadOlpDto = objectMapper().readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) + hentMappeGittSøknadFraLocation(location) + .expectBody() + .consumeWith { res -> + val søknadOlpDto = objectMapper.readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) assertNotNull(søknadOlpDto) assertEquals(journalpostid, søknadOlpDto.journalposter?.first()) } @@ -145,33 +125,21 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { @Test fun `Oppdaterer en søknad`(): Unit = runBlocking { - val søknadFraFrontend = LesFraFilUtil.søknadFraFrontendOlpFull() val norskIdent = "02030050163" - val journalpostid = "9999" + val journalpostId = "9999" + val k9Saksnummer = "12345" - tilpasserSøknadsMalTilTesten(søknadFraFrontend, norskIdent, journalpostid) - val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) + val søknad = OpprettNySøknad(norskIdent, journalpostId, k9Saksnummer, null) + val søknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() - val response = webTestClient.post() - .uri { it.pathSegment(api, søknadTypeUri).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(opprettNySøknad)) - .exchange() - .expectStatus().isEqualTo(HttpStatus.CREATED) - .expectHeader().exists("Location") - .returnResult(URI::class.java) - - val location = response.responseHeaders.location - leggerPåNySøknadId(søknadFraFrontend, location) + val locationMedSøknadId = opprettSøknadOgHentSøknadId(søknad) - webTestClient.put() - .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(søknadFraFrontend)) - .exchange() - .expectStatus().isEqualTo(HttpStatus.OK) - .expectBody().consumeWith { res -> - val oppdatertSøknad = objectMapper().readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) + tilpassSøknadTilTest(søknadJson, norskIdent, journalpostId, locationMedSøknadId) + oppdaterSøknad(søknadJson) + .expectStatus().isOk + .expectBody() + .consumeWith{ res -> + val oppdatertSøknad = objectMapper.readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) assertNotNull(oppdatertSøknad) assertEquals(norskIdent, oppdatertSøknad.soekerId) assertEquals( @@ -186,6 +154,16 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { } } + private fun tilpassSøknadTilTest( + søknadJson: SøknadJson, + norskIdent: String, + journalpostid: String, + location: URI? + ) { + tilpassSøknadsMalTilTest(søknadJson, norskIdent, journalpostid) + leggPåNySøknadId(søknadJson, location) + } + @Test fun `Oppdaterer en søknad med metadata`(): Unit = runBlocking { @@ -193,8 +171,8 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { val norskIdent = "02030050163" val journalpostid = "9999" - tilpasserSøknadsMalTilTesten(søknadFraFrontend, norskIdent, journalpostid) - val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) + tilpassSøknadsMalTilTest(søknadFraFrontend, norskIdent, journalpostid) + val opprettNySøknad = lagOpprettNySøknadDto(norskIdent, journalpostid) val opprettetSøknadResponse = webTestClient.post() .uri { it.pathSegment(api, søknadTypeUri).build() } @@ -206,7 +184,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { .returnResult(URI::class.java) val location = opprettetSøknadResponse.responseHeaders.location - leggerPåNySøknadId(søknadFraFrontend, location) + leggPåNySøknadId(søknadFraFrontend, location) val oppdatertSøknadResponse = webTestClient.put() .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } @@ -215,7 +193,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { .exchange() .expectStatus().isEqualTo(HttpStatus.OK) .expectBody().consumeWith { res -> - val oppdatertSøknad = objectMapper().readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) + val oppdatertSøknad = objectMapper.readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) assertNotNull(oppdatertSøknad) assertEquals(norskIdent, oppdatertSøknad.soekerId) assertEquals( @@ -229,15 +207,13 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { ) }.returnResult() - val oppdatertSøknad = objectMapper().readValue(oppdatertSøknadResponse.responseBody, OpplaeringspengerSøknadDto::class.java) + val oppdatertSøknad = + objectMapper.readValue(oppdatertSøknadResponse.responseBody, OpplaeringspengerSøknadDto::class.java) - webTestClient.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", hentSøknadId(location)).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .exchange() + hentMappeGittSøknadFraLocation(location) .expectStatus().isEqualTo(HttpStatus.OK) .expectBody().consumeWith { res -> - val søknad = objectMapper().readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) + val søknad = objectMapper.readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) assertNotNull(søknad) assertThat(søknad.metadata).isEqualTo(oppdatertSøknad.metadata) assertEquals(norskIdent, søknad.soekerId) @@ -254,105 +230,100 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { } + @Test + fun `Innsending av søknad returnerer 404 når mappe ikke finnes`(): Unit = runBlocking { + val norskIdent = "12030050163" + val søknadId = "d8e2c5a8-b993-4d2d-9cb5-fdb22a653a0c" + val sendSøknad = lagSendSøknadDto(norskIdent = norskIdent, søknadId = søknadId) + + sendSøknad(sendSøknad) + .expectStatus().isEqualTo(HttpStatus.BAD_REQUEST) + } + + + @Test + fun `Sjekker at mapping funger hele veien`(): Unit = runBlocking { + val gyldigSøknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() + val visningDto = objectMapper.convertValue(gyldigSøknad) + + val mapTilSendingsformat = MapOlpTilK9Format( + søknadId = visningDto.soeknadId, + journalpostIder = visningDto.journalposter?.toSet() ?: emptySet(), + perioderSomFinnesIK9 = emptyList(), + dto = visningDto + ).søknadOgFeil() + assertNotNull(mapTilSendingsformat) + + val tilbake = objectMapper.convertValue(visningDto) + assertEquals(visningDto.soekerId, tilbake.getValue("soekerId").toString()) + } + + + @Test + fun `Prøver å sende søknaden til Kafka når den er gyldig`(): Unit = runBlocking { + val norskIdent = "02020050121" + val søknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() + + val (_, status, body) = opprettOgSendInnSoeknad( + søknadJson = søknad, + norskIdent = norskIdent, + journalpostId = JournalpostIds.FerdigstiltMedSaksnummer + ) + assertThat(body.feil).isNull() + assertEquals(HttpStatus.ACCEPTED, status) + + assertThat(journalpostRepository.kanSendeInn(listOf(JournalpostIds.FerdigstiltMedSaksnummer))).isFalse + } + // @Test -// fun `Innsending av søknad returnerer 404 når mappe ikke finnes`(): Unit = runBlocking { -// val norskIdent = "12030050163" -// val søknadId = "d8e2c5a8-b993-4d2d-9cb5-fdb22a653a0c" +// fun `Skal få 409 når det blir sendt på en journalpost som er sendt fra før, og innsendingen ikke inneholder andre journalposter som kan sendes inn`(): Unit = +// runBlocking { +// val norskIdent = "02020050121" +// val gyldigSoeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() +// val journalpostId = "34234234" +// tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostId) +// val (id, status, body) = +// opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid = journalpostId) +// +// assertThat(body.feil).isNull() +// assertEquals(HttpStatus.ACCEPTED, status) +// assertThat(journalpostRepo.kanSendeInn(listOf(journalpostId))).isFalse +// +// val sendSøknad = lagSendSøknad(norskIdent = norskIdent, søknadId = id) +// val (httpstatus, body2) = client.post() +// .uri { it.pathSegment(api, søknadTypeUri, "send").build() } +// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) +// .body(BodyInserters.fromValue(sendSøknad)) +// .awaitStatusWithBody() +// +// assertEquals(HttpStatus.CONFLICT, httpstatus) +// assertThat(body2.feil).isEqualTo("Innsendingen må inneholde minst en journalpost som kan sendes inn.") +// } // -// val sendSøknad = lagSendSøknad(norskIdent = norskIdent, søknadId = søknadId) +// @Test +// fun `Skal kunne lagre ned minimal søknad`(): Unit = runBlocking { +// val norskIdent = "02022352121" +// val soeknad: SøknadJson = LesFraFilUtil.minimalSøknad() +// val journalpostId = IdGenerator.nesteId() +// tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostId) // -// val status = client.post() -// .uri { it.pathSegment(api, søknadTypeUri, "send").build() } -// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) -// .body(BodyInserters.fromValue(sendSøknad)) -// .awaitStatuscode() +// val (_, status, body) = opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostId) // // assertEquals(HttpStatus.BAD_REQUEST, status) +// assertThat(body.feil).isNotEmpty // } // // @Test -// fun `sjekker at mapping fungre hele veien`(): Unit = runBlocking { -// val gyldigSoeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() -// -// val visningDto = objectMapper().convertValue(gyldigSoeknad) -// val mapTilSendingsformat = MapOlpTilK9Format( -// søknadId = visningDto.soeknadId, -// journalpostIder = visningDto.journalposter?.toSet() ?: emptySet(), -// perioderSomFinnesIK9 = emptyList(), -// dto = visningDto -// ).søknadOgFeil() -// assertNotNull(mapTilSendingsformat) -// -// val tilbake = objectMapper().convertValue(visningDto) -// assertEquals(visningDto.soekerId, tilbake["soekerId"].toString()) -// } +// fun `Skal kunne lagre med tid søknad`(): Unit = runBlocking { +// val norskIdent = "02022352121" +// val soeknad: SøknadJson = LesFraFilUtil.tidSøknad() +// tilpasserSøknadsMalTilTesten(soeknad, norskIdent) // -//// @Test -//// fun `Prøver å sende søknaden til Kafka når den er gyldig`(): Unit = runBlocking { -//// val norskIdent = "02020050121" -//// val gyldigSoeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() -//// tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent) -//// -//// val (_, status, body) = opprettOgSendInnSoeknad( -//// soeknadJson = gyldigSoeknad, -//// ident = norskIdent, -//// journalpostid = "99998888" -//// ) -//// assertThat(body.feil).isNull() -//// assertEquals(HttpStatus.ACCEPTED, status) -//// -//// assertThat(journalpostRepo.kanSendeInn(listOf("99998888"))).isFalse -//// } -//// -//// @Test -//// fun `Skal få 409 når det blir sendt på en journalpost som er sendt fra før, og innsendingen ikke inneholder andre journalposter som kan sendes inn`(): Unit = -//// runBlocking { -//// val norskIdent = "02020050121" -//// val gyldigSoeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() -//// val journalpostId = "34234234" -//// tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostId) -//// val (id, status, body) = -//// opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid = journalpostId) -//// -//// assertThat(body.feil).isNull() -//// assertEquals(HttpStatus.ACCEPTED, status) -//// assertThat(journalpostRepo.kanSendeInn(listOf(journalpostId))).isFalse -//// -//// val sendSøknad = lagSendSøknad(norskIdent = norskIdent, søknadId = id) -//// val (httpstatus, body2) = client.post() -//// .uri { it.pathSegment(api, søknadTypeUri, "send").build() } -//// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) -//// .body(BodyInserters.fromValue(sendSøknad)) -//// .awaitStatusWithBody() -//// -//// assertEquals(HttpStatus.CONFLICT, httpstatus) -//// assertThat(body2.feil).isEqualTo("Innsendingen må inneholde minst en journalpost som kan sendes inn.") -//// } -// -//// @Test -//// fun `Skal kunne lagre ned minimal søknad`(): Unit = runBlocking { -//// val norskIdent = "02022352121" -//// val soeknad: SøknadJson = LesFraFilUtil.minimalSøknad() -//// val journalpostId = IdGenerator.nesteId() -//// tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostId) -//// -//// val (_, status, body) = opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostId) -//// -//// assertEquals(HttpStatus.BAD_REQUEST, status) -//// assertThat(body.feil).isNotEmpty -//// } -//// -//// @Test -//// fun `Skal kunne lagre med tid søknad`(): Unit = runBlocking { -//// val norskIdent = "02022352121" -//// val soeknad: SøknadJson = LesFraFilUtil.tidSøknad() -//// tilpasserSøknadsMalTilTesten(soeknad, norskIdent) -//// -//// val (_, status, body) = opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent) -//// -//// assertEquals(HttpStatus.BAD_REQUEST, status) -//// assertThat(body.feil).isNotEmpty -//// } +// val (_, status, body) = opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent) +// +// assertEquals(HttpStatus.BAD_REQUEST, status) +// assertThat(body.feil).isNotEmpty +// } // // @Test // fun `Skal kunne lagre ned ferie fra søknad`(): Unit = runBlocking { @@ -583,120 +554,104 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { // assertThat(ytelse.opptjeningAktivitet.frilanser.startdato).isEqualTo(LocalDate.of(2019, 10, 10)) // assertThat(ytelse.opptjeningAktivitet.frilanser.sluttdato).isEqualTo(LocalDate.of(2019, 11, 10)) // } -// -//// private suspend fun opprettOgSendInnSoeknad( -//// soeknadJson: SøknadJson, -//// ident: String, -//// journalpostid: String = IdGenerator.nesteId() -//// ): Triple { -//// val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) -//// -//// // oppretter en søknad -//// val resPost = client.post() -//// .uri { it.pathSegment(api, søknadTypeUri).build() } -//// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) -//// .body(BodyInserters.fromValue(innsendingForOpprettelseAvMappe)) -//// .awaitExchangeBlocking() -//// -//// val location = resPost.headers().asHttpHeaders().location -//// assertEquals(HttpStatus.CREATED, resPost.statusCode()) -//// assertNotNull(location) -//// -//// leggerPåNySøknadId(soeknadJson, location) -//// -//// // fyller ut en søknad -//// val søknadDtoFyltUt = client.put() -//// .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } -//// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) -//// .body(BodyInserters.fromValue(soeknadJson)) -//// .awaitBodyWithType() -//// -//// assertNotNull(søknadDtoFyltUt.soekerId) -//// -//// val søknadId = søknadDtoFyltUt.soeknadId -//// val sendSøknad = lagSendSøknad(norskIdent = ident, søknadId = søknadId) -//// -//// val journalposter = søknadDtoFyltUt.journalposter!! -//// -//// val kanSendeInn = DbContainerInitializer.getJournalpostRepo().kanSendeInn(journalposter) -//// assertThat(kanSendeInn).isTrue -//// -//// // sender en søknad -//// val (httpstatus, oasSoknadsfeil) = client.post() -//// .uri { it.pathSegment(api, søknadTypeUri, "send").build() } -//// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) -//// .body(BodyInserters.fromValue(sendSøknad)) -//// .awaitStatusWithBody() -//// return Triple(søknadId, httpstatus, oasSoknadsfeil) -//// } -// -// private suspend fun opprettOgLagreSoeknad( -// soeknadJson: SøknadJson, -// ident: String, -// journalpostid: String = IdGenerator.nesteId() -// ): OpplaeringspengerSøknadDto { -// val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) -// -// // oppretter en søknad -// val resPost = client.post() -// .uri { it.pathSegment(api, søknadTypeUri).build() } -// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) -// .body(BodyInserters.fromValue(innsendingForOpprettelseAvMappe)) -// .awaitExchangeBlocking() -// -// val location = resPost.headers().asHttpHeaders().location -// assertEquals(HttpStatus.CREATED, resPost.statusCode()) -// assertNotNull(location) -// -// leggerPåNySøknadId(soeknadJson, location) -// -// // fyller ut en søknad -// val søknadDtoFyltUt = client.put() -// .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } -// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) -// .body(BodyInserters.fromValue(soeknadJson)) -// .awaitBodyWithType() -// -// assertNotNull(søknadDtoFyltUt.soekerId) -// return søknadDtoFyltUt -// } -// -// private suspend fun opprettSoeknad( -// ident: String, -// journalpostid: String = IdGenerator.nesteId() -// ): URI? { -// val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) -// -// // oppretter en søknad -// val resPost = client.post() -// .uri { it.pathSegment(api, søknadTypeUri).build() } -// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) -// .body(BodyInserters.fromValue(innsendingForOpprettelseAvMappe)) -// .awaitExchangeBlocking() -// -// val location = resPost.headers().asHttpHeaders().location -// assertEquals(HttpStatus.CREATED, resPost.statusCode()) -// assertNotNull(location) -// -// return location -// } + + + private fun opprettOgSendInnSoeknad( + søknadJson: SøknadJson, + norskIdent: String, + journalpostId: String + ): Triple { + val k9Saksnummer = "12345" + + val søknad = OpprettNySøknad(norskIdent, journalpostId, k9Saksnummer, null) + val locationMedSøknadId = opprettSøknadOgHentSøknadId(søknad) + + tilpassSøknadTilTest(søknadJson, norskIdent, journalpostId, locationMedSøknadId) + val oppdatertSøknadResponse = oppdaterSøknad(søknadJson) + .expectStatus().isOk + .expectBody() + .returnResult() + + val oppdatertSøknad = objectMapper.readValue(oppdatertSøknadResponse.responseBody, OpplaeringspengerSøknadDto::class.java) + assertNotNull(oppdatertSøknad.soekerId) + + val søknadId = oppdatertSøknad.soeknadId + val sendSøknad = lagSendSøknadDto(norskIdent = norskIdent, søknadId = søknadId) + + val journalposter = oppdatertSøknad.journalposter!! + val kanSendeInn = journalpostRepository.kanSendeInn(journalposter) + assertThat(kanSendeInn).isTrue + + // sender en søknad + val response = sendSøknad(sendSøknad) + .expectStatus().isAccepted + .expectBody() + .returnResult() + + val httpstatus = response.status + val oasSoknadsfeil = objectMapper.readValue(response.responseBody, OasSoknadsfeil::class.java) + + return Triple(søknadId, httpstatus, oasSoknadsfeil) + } + + private fun sendSøknad(sendSøknad: SendSøknad) = webTestClient.post() + .uri { it.pathSegment(api, søknadTypeUri, "send").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .body(BodyInserters.fromValue(sendSøknad)) + .exchange() + + + private fun opprettSøknadOgHentSøknadId( + nySøknad: OpprettNySøknad + ): URI? { + val response = webTestClient.post() + .uri { it.pathSegment(api, søknadTypeUri).build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .body(BodyInserters.fromValue(nySøknad)) + .exchange() + .expectStatus().isEqualTo(HttpStatus.CREATED) + .expectHeader().exists("Location") + .expectBody() + .returnResult() + + val location = response.responseHeaders.location + + return location + } + + private fun oppdaterSøknad(søknadJson: SøknadJson) = webTestClient.put() + .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .body(BodyInserters.fromValue(søknadJson)) + .exchange() + + private fun hentMappe(norskIdent: String) = webTestClient.get() + .uri { it.pathSegment(api, søknadTypeUri, "mappe").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .header("X-Nav-NorskIdent", norskIdent) + .exchange() + + private fun hentMappeGittSøknadFraLocation(location: URI?) = webTestClient.get() + .uri { it.pathSegment(api, søknadTypeUri, "mappe", hentSøknadId(location)).build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .exchange() } -private fun opprettSøknad( +private fun lagOpprettNySøknadDto( personnummer: String, journalpostId: String ): OpprettNySøknad { return OpprettNySøknad(personnummer, journalpostId, "12345", null) } -private fun lagSendSøknad( +private fun lagSendSøknadDto( norskIdent: String, søknadId: String ): SendSøknad { return SendSøknad(norskIdent, søknadId) } -private fun tilpasserSøknadsMalTilTesten( +private fun tilpassSøknadsMalTilTest( søknad: MutableMap, norskIdent: String, journalpostId: String? = null @@ -705,7 +660,7 @@ private fun tilpasserSøknadsMalTilTesten( if (journalpostId != null) søknad.replace("journalposter", arrayOf(journalpostId)) } -private fun leggerPåNySøknadId(søknadFraFrontend: MutableMap, location: URI?) { +private fun leggPåNySøknadId(søknadFraFrontend: SøknadJson, location: URI?) { val path = location?.path val søknadId = path?.substring(path.lastIndexOf('/')) val trim = søknadId?.trim('/') From dfa054cd0b226916d4cb95f606ed86bda87bbfc4 Mon Sep 17 00:00:00 2001 From: Morten Osvik Date: Mon, 23 Sep 2024 09:19:17 +0200 Subject: [PATCH 05/12] Enda en test --- .../OpplaeringspengerTests.kt | 70 ++++++++++--------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt index 318e84398..eb78c54d9 100644 --- a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt +++ b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt @@ -9,17 +9,18 @@ import no.nav.k9punsj.felles.dto.OpprettNySøknad import no.nav.k9punsj.felles.dto.PeriodeDto import no.nav.k9punsj.felles.dto.SendSøknad import no.nav.k9punsj.journalpost.JournalpostRepository -import no.nav.k9punsj.metrikker.JournalpostMetrikkRepository +import no.nav.k9punsj.openapi.OasFeil import no.nav.k9punsj.openapi.OasSoknadsfeil -import no.nav.k9punsj.utils.objectMapper import no.nav.k9punsj.util.LesFraFilUtil import no.nav.k9punsj.util.SøknadJson import no.nav.k9punsj.util.TestUtils.hentSøknadId +import no.nav.k9punsj.utils.objectMapper import no.nav.k9punsj.wiremock.JournalpostIds import no.nav.k9punsj.wiremock.saksbehandlerAccessToken import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.AfterEach -import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNotNull import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.Test @@ -138,7 +139,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { oppdaterSøknad(søknadJson) .expectStatus().isOk .expectBody() - .consumeWith{ res -> + .consumeWith { res -> val oppdatertSøknad = objectMapper.readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) assertNotNull(oppdatertSøknad) assertEquals(norskIdent, oppdatertSøknad.soekerId) @@ -263,43 +264,47 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { fun `Prøver å sende søknaden til Kafka når den er gyldig`(): Unit = runBlocking { val norskIdent = "02020050121" val søknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() + val journalpostId = JournalpostIds.FerdigstiltMedSaksnummer val (_, status, body) = opprettOgSendInnSoeknad( søknadJson = søknad, norskIdent = norskIdent, - journalpostId = JournalpostIds.FerdigstiltMedSaksnummer + journalpostId = journalpostId ) assertThat(body.feil).isNull() assertEquals(HttpStatus.ACCEPTED, status) - assertThat(journalpostRepository.kanSendeInn(listOf(JournalpostIds.FerdigstiltMedSaksnummer))).isFalse + assertThat(journalpostRepository.kanSendeInn(listOf(journalpostId))).isFalse } -// @Test -// fun `Skal få 409 når det blir sendt på en journalpost som er sendt fra før, og innsendingen ikke inneholder andre journalposter som kan sendes inn`(): Unit = -// runBlocking { -// val norskIdent = "02020050121" -// val gyldigSoeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() -// val journalpostId = "34234234" -// tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostId) -// val (id, status, body) = -// opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid = journalpostId) -// -// assertThat(body.feil).isNull() -// assertEquals(HttpStatus.ACCEPTED, status) -// assertThat(journalpostRepo.kanSendeInn(listOf(journalpostId))).isFalse -// -// val sendSøknad = lagSendSøknad(norskIdent = norskIdent, søknadId = id) -// val (httpstatus, body2) = client.post() -// .uri { it.pathSegment(api, søknadTypeUri, "send").build() } -// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) -// .body(BodyInserters.fromValue(sendSøknad)) -// .awaitStatusWithBody() -// -// assertEquals(HttpStatus.CONFLICT, httpstatus) -// assertThat(body2.feil).isEqualTo("Innsendingen må inneholde minst en journalpost som kan sendes inn.") -// } -// + @Test + fun `Skal få 409 når det blir sendt på en journalpost som er sendt fra før, og innsendingen ikke inneholder andre journalposter som kan sendes inn`(): Unit = + runBlocking { + val norskIdent = "02020050121" + val gyldigSoeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() + val journalpostId = JournalpostIds.FerdigstiltMedSaksnummer + + val (søknadId, status, body) = + opprettOgSendInnSoeknad( + søknadJson = gyldigSoeknad, + norskIdent = norskIdent, + journalpostId = journalpostId + ) + + assertThat(body.feil).isNull() + assertEquals(HttpStatus.ACCEPTED, status) + assertThat(journalpostRepository.kanSendeInn(listOf(journalpostId))).isFalse + + val sendSøknad = lagSendSøknadDto(norskIdent = norskIdent, søknadId = søknadId) + sendSøknad(sendSøknad) + .expectStatus().isEqualTo(HttpStatus.CONFLICT) + .expectBody() + .consumeWith { res -> + val oasFeil = objectMapper.readValue(res.responseBody, OasFeil::class.java) + assertThat(oasFeil.feil).isEqualTo("Innsendingen må inneholde minst en journalpost som kan sendes inn.") + } + } + // @Test // fun `Skal kunne lagre ned minimal søknad`(): Unit = runBlocking { // val norskIdent = "02022352121" @@ -572,7 +577,8 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { .expectBody() .returnResult() - val oppdatertSøknad = objectMapper.readValue(oppdatertSøknadResponse.responseBody, OpplaeringspengerSøknadDto::class.java) + val oppdatertSøknad = + objectMapper.readValue(oppdatertSøknadResponse.responseBody, OpplaeringspengerSøknadDto::class.java) assertNotNull(oppdatertSøknad.soekerId) val søknadId = oppdatertSøknad.soeknadId From 03deae6f4d6e0cf484a51483cf4530f00651b2b8 Mon Sep 17 00:00:00 2001 From: Morten Osvik Date: Tue, 24 Sep 2024 15:40:46 +0200 Subject: [PATCH 06/12] =?UTF-8?q?Legg=20til=20test=20for=20minimal=20s?= =?UTF-8?q?=C3=B8knad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OpplaeringspengerTests.kt | 87 +++++++++++++------ .../no/nav/k9punsj/util/LesFraFilUtil.kt | 8 ++ .../resources/olp/med-tid-s\303\270knad.json" | 75 ++++++++++++++++ .../resources/olp/minimal-s\303\270knad.json" | 58 +++++++++++++ 4 files changed, 201 insertions(+), 27 deletions(-) create mode 100644 "src/test/resources/olp/med-tid-s\303\270knad.json" create mode 100644 "src/test/resources/olp/minimal-s\303\270knad.json" diff --git a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt index eb78c54d9..0defb2f05 100644 --- a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt +++ b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt @@ -277,6 +277,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { assertThat(journalpostRepository.kanSendeInn(listOf(journalpostId))).isFalse } + @Test fun `Skal få 409 når det blir sendt på en journalpost som er sendt fra før, og innsendingen ikke inneholder andre journalposter som kan sendes inn`(): Unit = runBlocking { @@ -305,31 +306,60 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { } } -// @Test -// fun `Skal kunne lagre ned minimal søknad`(): Unit = runBlocking { -// val norskIdent = "02022352121" -// val soeknad: SøknadJson = LesFraFilUtil.minimalSøknad() -// val journalpostId = IdGenerator.nesteId() -// tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostId) -// -// val (_, status, body) = opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostId) -// -// assertEquals(HttpStatus.BAD_REQUEST, status) -// assertThat(body.feil).isNotEmpty -// } -// -// @Test -// fun `Skal kunne lagre med tid søknad`(): Unit = runBlocking { -// val norskIdent = "02022352121" -// val soeknad: SøknadJson = LesFraFilUtil.tidSøknad() -// tilpasserSøknadsMalTilTesten(soeknad, norskIdent) -// -// val (_, status, body) = opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent) -// -// assertEquals(HttpStatus.BAD_REQUEST, status) -// assertThat(body.feil).isNotEmpty -// } -// + + @Test + fun `Skal kunne lagre ned en minimal søknad`(): Unit = runBlocking { + val norskIdent = "02022352121" + val minimalSøknad: SøknadJson = LesFraFilUtil.minimalSøknadOlp() + val journalpostId = JournalpostIds.FerdigstiltMedSaksnummer + + val (_, status, body) = + opprettOgSendInnSoeknad( + søknadJson = minimalSøknad, + norskIdent = norskIdent, + journalpostId = journalpostId + ) + + assertThat(body.feil).isNull() + assertEquals(HttpStatus.ACCEPTED, status) + } + + + @Test + fun `Skal få feil hvis mottattDato ikke er fylt ut`(): Unit = runBlocking { + val norskIdent = "02022352121" + val minimalSøknad: SøknadJson = LesFraFilUtil.minimalSøknadOlp() + settMottattDatoTilNull(minimalSøknad) + val journalpostId = JournalpostIds.FerdigstiltMedSaksnummer + + val (_, status, body) = + opprettOgSendInnSoeknad( + søknadJson = minimalSøknad, + norskIdent = norskIdent, + journalpostId = journalpostId + ) + + assertEquals(HttpStatus.BAD_REQUEST, status) + assertEquals("mottattDato", body.feil?.get(0)?.feilkode) + } + + + @Test + fun `Skal kunne lagre søknad med tid`(): Unit = runBlocking { + val norskIdent = "02022352121" + val søknadMedTid: SøknadJson = LesFraFilUtil.tidSøknadOlp() + val journalpostId = JournalpostIds.FerdigstiltMedSaksnummer + + val (_, status, body) = opprettOgSendInnSoeknad( + søknadJson = søknadMedTid, + norskIdent = norskIdent, + journalpostId = journalpostId + ) + + assertThat(body.feil).isNull() + assertEquals(HttpStatus.ACCEPTED, status) + } + // @Test // fun `Skal kunne lagre ned ferie fra søknad`(): Unit = runBlocking { // val norskIdent = "02022352121" @@ -590,7 +620,6 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { // sender en søknad val response = sendSøknad(sendSøknad) - .expectStatus().isAccepted .expectBody() .returnResult() @@ -657,8 +686,12 @@ private fun lagSendSøknadDto( return SendSøknad(norskIdent, søknadId) } +private fun settMottattDatoTilNull(søknad: SøknadJson) { + søknad.replace("mottattDato", null) +} + private fun tilpassSøknadsMalTilTest( - søknad: MutableMap, + søknad: SøknadJson, norskIdent: String, journalpostId: String? = null ) { diff --git a/src/test/kotlin/no/nav/k9punsj/util/LesFraFilUtil.kt b/src/test/kotlin/no/nav/k9punsj/util/LesFraFilUtil.kt index 1f1440503..5e64d13b8 100644 --- a/src/test/kotlin/no/nav/k9punsj/util/LesFraFilUtil.kt +++ b/src/test/kotlin/no/nav/k9punsj/util/LesFraFilUtil.kt @@ -208,5 +208,13 @@ class LesFraFilUtil { fun søknadFraFrontendOlpFull(): SøknadJson { return objectMapper().readValue(lesFraFilOlp("søknad-fra-frontend.json")) } + + fun minimalSøknadOlp(): SøknadJson { + return objectMapper().readValue(lesFraFilOlp("minimal-søknad.json")) + } + + fun tidSøknadOlp(): SøknadJson { + return objectMapper().readValue(lesFraFilOlp("med-tid-søknad.json")) + } } } diff --git "a/src/test/resources/olp/med-tid-s\303\270knad.json" "b/src/test/resources/olp/med-tid-s\303\270knad.json" new file mode 100644 index 000000000..a4a8d1235 --- /dev/null +++ "b/src/test/resources/olp/med-tid-s\303\270knad.json" @@ -0,0 +1,75 @@ +{ + "soeknadId": "0df10260-c763-47d2-a348-158738cbec99", + "soekerId": "", + "journalposter": [ + "200" + ], + "mottattDato": "2019-10-20", + "klokkeslett": "12:53", + "barn": { + "norskIdent": "22222222222", + "foedselsdato": "2018-10-30" + }, + "soeknadsperiode": [ + { + "fom": "2018-12-30", + "tom": "2019-10-20" + } + ], + "trekkKravPerioder": [], + "opptjeningAktivitet": { + "arbeidstaker": [], + "selvstendigNaeringsdrivende": null, + "frilanser": null + }, + "soknadsinfo": null, + "bosteder": [], + "utenlandsopphold": [], + "lovbestemtFerie": [], + "arbeidstid": { + "arbeidstakerList": [ + { + "norskIdent": "24058120878", + "organisasjonsnummer": null, + "arbeidstidInfo": { + "perioder": [ + { + "periode": { + "fom": "2018-12-30", + "tom": "2019-10-20" + }, + "faktiskArbeidTimerPerDag": "7,48", + "jobberNormaltTimerPerDag": "7,48" + } + ] + } + } + ], + "frilanserArbeidstidInfo": null, + "selvstendigNæringsdrivendeArbeidstidInfo": null + }, + "uttak": [], + "omsorg": {}, + "kurs": { + "kursHolder": { + "holder": "Nav", + "institusjonsUuid": null + }, + "formaal": "test", + "kursperioder": [ + { + "periode": { + "fom": "2022-12-14", + "tom": "2023-01-14" + }, + "avreise": "2022-12-14", + "hjemkomst": "2023-01-14" + } + ] + }, + "harInfoSomIkkeKanPunsjes": false, + "harMedisinskeOpplysninger": false, + "begrunnelseForInnsending": null, + "metadata": null, + "k9saksnummer": null +} diff --git "a/src/test/resources/olp/minimal-s\303\270knad.json" "b/src/test/resources/olp/minimal-s\303\270knad.json" new file mode 100644 index 000000000..4d1062ffd --- /dev/null +++ "b/src/test/resources/olp/minimal-s\303\270knad.json" @@ -0,0 +1,58 @@ +{ + "soeknadId": "0df10260-c763-47d2-a348-158738cbec99", + "soekerId": "", + "journalposter": [ + "200" + ], + "mottattDato": "2019-10-20", + "klokkeslett": "12:53", + "barn": { + "norskIdent": "22222222222", + "foedselsdato": "2018-10-30" + }, + "soeknadsperiode": [ + { + "fom": "2018-12-30", + "tom": "2019-10-20" + } + ], + "trekkKravPerioder": [], + "opptjeningAktivitet": { + "arbeidstaker": [], + "selvstendigNaeringsdrivende": null, + "frilanser": null + }, + "soknadsinfo": null, + "bosteder": [], + "utenlandsopphold": [], + "lovbestemtFerie": [], + "arbeidstid": { + "arbeidstakerList": [], + "frilanserArbeidstidInfo": {}, + "selvstendigNæringsdrivendeArbeidstidInfo": null + }, + "uttak": [], + "omsorg": {}, + "kurs": { + "kursHolder": { + "holder": "Nav", + "institusjonsUuid": null + }, + "formaal": "test", + "kursperioder": [ + { + "periode": { + "fom": "2022-12-14", + "tom": "2023-01-14" + }, + "avreise": "2022-12-14", + "hjemkomst": "2023-01-14" + } + ] + }, + "harInfoSomIkkeKanPunsjes": false, + "harMedisinskeOpplysninger": false, + "begrunnelseForInnsending": null, + "metadata": null, + "k9saksnummer": null +} From c369fb2a0a164f1a5b4013bae8d03d409c8d8e8a Mon Sep 17 00:00:00 2001 From: Morten Osvik Date: Tue, 24 Sep 2024 16:24:46 +0200 Subject: [PATCH 07/12] Legg til test for ferie --- .../OpplaeringspengerTests.kt | 96 +++++++++++-------- .../no/nav/k9punsj/util/LesFraFilUtil.kt | 4 + .../olp/med-ferie-s\303\270knad.json" | 63 ++++++++++++ 3 files changed, 122 insertions(+), 41 deletions(-) create mode 100644 "src/test/resources/olp/med-ferie-s\303\270knad.json" diff --git a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt index 0defb2f05..e93d5de7b 100644 --- a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt +++ b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt @@ -61,7 +61,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { @Test fun `Får tom liste når personen ikke har en eksisterende mappe`(): Unit = runBlocking { val norskIdent = "01110050053" - hentMappe(norskIdent) + hentMappeMedNorskIdent(norskIdent) .expectStatus().isEqualTo(HttpStatus.OK) .expectBody().jsonPath("$.søknader").isEmpty } @@ -91,7 +91,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { opprettSøknadOgHentSøknadId(opprettNySøknad) - hentMappe(norskIdent) + hentMappeMedNorskIdent(norskIdent) .expectStatus().isEqualTo(HttpStatus.OK) .expectBody() .consumeWith { response -> @@ -113,8 +113,9 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { val opprettNySøknad = lagOpprettNySøknadDto(norskIdent, journalpostid) val location = opprettSøknadOgHentSøknadId(opprettNySøknad) + val søknadId = hentSøknadId(location) - hentMappeGittSøknadFraLocation(location) + hentMappeForSøknadId(søknadId) .expectBody() .consumeWith { res -> val søknadOlpDto = objectMapper.readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) @@ -185,6 +186,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { .returnResult(URI::class.java) val location = opprettetSøknadResponse.responseHeaders.location + val søknadId = hentSøknadId(location) leggPåNySøknadId(søknadFraFrontend, location) val oppdatertSøknadResponse = webTestClient.put() @@ -211,7 +213,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { val oppdatertSøknad = objectMapper.readValue(oppdatertSøknadResponse.responseBody, OpplaeringspengerSøknadDto::class.java) - hentMappeGittSøknadFraLocation(location) + hentMappeForSøknadId(søknadId) .expectStatus().isEqualTo(HttpStatus.OK) .expectBody().consumeWith { res -> val søknad = objectMapper.readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) @@ -360,23 +362,25 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { assertEquals(HttpStatus.ACCEPTED, status) } -// @Test -// fun `Skal kunne lagre ned ferie fra søknad`(): Unit = runBlocking { -// val norskIdent = "02022352121" -// val soeknad: SøknadJson = LesFraFilUtil.ferieSøknad() -// tilpasserSøknadsMalTilTesten(soeknad, norskIdent) -// -// val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) -// -// val søknadViaGet = client.get() -// .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } -// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) -// .awaitBodyWithType() -// -// assertNotNull(søknadViaGet) -// assertEquals(søknadViaGet.lovbestemtFerie?.get(0)?.fom!!, LocalDate.of(2021, 4, 14)) -// } -// + @Test + fun `Skal kunne lagre ned ferie fra søknad`(): Unit = runBlocking { + val norskIdent = "02022352121" + val søknadJson: SøknadJson = LesFraFilUtil.ferieSøknadOlp() + val journalpostId = JournalpostIds.FerdigstiltMedSaksnummer + + val oppdatertSøknad = opprettOgLagreSoeknad(søknadJson = søknadJson, norskIdent = norskIdent, journalpostId = journalpostId) + + hentMappeForSøknadId(oppdatertSøknad?.soeknadId) + .expectStatus().isEqualTo(HttpStatus.OK) + .expectBody() + .consumeWith{ res -> + val søknad = objectMapper.readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) + assertNotNull(søknad) + assertEquals(søknad.lovbestemtFerie?.get(0)?.fom!!, LocalDate.of(2021, 4, 14)) + } + } + + // @Test // fun `Skal kunne lagre ned sn fra søknad`(): Unit = runBlocking { // val norskIdent = "02022352121" @@ -596,25 +600,13 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { norskIdent: String, journalpostId: String ): Triple { - val k9Saksnummer = "12345" + val oppdatertSøknad = opprettOgLagreSoeknad(norskIdent, journalpostId, søknadJson) - val søknad = OpprettNySøknad(norskIdent, journalpostId, k9Saksnummer, null) - val locationMedSøknadId = opprettSøknadOgHentSøknadId(søknad) + val søknadId = oppdatertSøknad?.soeknadId + assertNotNull(søknadId) + val sendSøknad = lagSendSøknadDto(norskIdent = norskIdent, søknadId = søknadId!!) - tilpassSøknadTilTest(søknadJson, norskIdent, journalpostId, locationMedSøknadId) - val oppdatertSøknadResponse = oppdaterSøknad(søknadJson) - .expectStatus().isOk - .expectBody() - .returnResult() - - val oppdatertSøknad = - objectMapper.readValue(oppdatertSøknadResponse.responseBody, OpplaeringspengerSøknadDto::class.java) - assertNotNull(oppdatertSøknad.soekerId) - - val søknadId = oppdatertSøknad.soeknadId - val sendSøknad = lagSendSøknadDto(norskIdent = norskIdent, søknadId = søknadId) - - val journalposter = oppdatertSøknad.journalposter!! + val journalposter = oppdatertSøknad?.journalposter!! val kanSendeInn = journalpostRepository.kanSendeInn(journalposter) assertThat(kanSendeInn).isTrue @@ -629,6 +621,28 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { return Triple(søknadId, httpstatus, oasSoknadsfeil) } + private fun opprettOgLagreSoeknad( + norskIdent: String, + journalpostId: String, + søknadJson: SøknadJson + ): OpplaeringspengerSøknadDto? { + val k9Saksnummer = "12345" + + val søknad = OpprettNySøknad(norskIdent, journalpostId, k9Saksnummer, null) + val locationMedSøknadId = opprettSøknadOgHentSøknadId(søknad) + + tilpassSøknadTilTest(søknadJson, norskIdent, journalpostId, locationMedSøknadId) + val oppdatertSøknadResponse = oppdaterSøknad(søknadJson) + .expectStatus().isOk + .expectBody() + .returnResult() + + val oppdatertSøknad = + objectMapper.readValue(oppdatertSøknadResponse.responseBody, OpplaeringspengerSøknadDto::class.java) + assertNotNull(oppdatertSøknad.soekerId) + return oppdatertSøknad + } + private fun sendSøknad(sendSøknad: SendSøknad) = webTestClient.post() .uri { it.pathSegment(api, søknadTypeUri, "send").build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) @@ -660,14 +674,14 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { .body(BodyInserters.fromValue(søknadJson)) .exchange() - private fun hentMappe(norskIdent: String) = webTestClient.get() + private fun hentMappeMedNorskIdent(norskIdent: String) = webTestClient.get() .uri { it.pathSegment(api, søknadTypeUri, "mappe").build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) .header("X-Nav-NorskIdent", norskIdent) .exchange() - private fun hentMappeGittSøknadFraLocation(location: URI?) = webTestClient.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", hentSøknadId(location)).build() } + private fun hentMappeForSøknadId(søknadId: String?) = webTestClient.get() + .uri { it.pathSegment(api, søknadTypeUri, "mappe", søknadId).build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) .exchange() } diff --git a/src/test/kotlin/no/nav/k9punsj/util/LesFraFilUtil.kt b/src/test/kotlin/no/nav/k9punsj/util/LesFraFilUtil.kt index 5e64d13b8..1bdce3bde 100644 --- a/src/test/kotlin/no/nav/k9punsj/util/LesFraFilUtil.kt +++ b/src/test/kotlin/no/nav/k9punsj/util/LesFraFilUtil.kt @@ -216,5 +216,9 @@ class LesFraFilUtil { fun tidSøknadOlp(): SøknadJson { return objectMapper().readValue(lesFraFilOlp("med-tid-søknad.json")) } + + fun ferieSøknadOlp(): SøknadJson { + return objectMapper().readValue(lesFraFilOlp("med-ferie-søknad.json")) + } } } diff --git "a/src/test/resources/olp/med-ferie-s\303\270knad.json" "b/src/test/resources/olp/med-ferie-s\303\270knad.json" new file mode 100644 index 000000000..12a3ab32b --- /dev/null +++ "b/src/test/resources/olp/med-ferie-s\303\270knad.json" @@ -0,0 +1,63 @@ +{ + "soeknadId": "0df10260-c763-47d2-a348-158738cbec99", + "soekerId": "", + "journalposter": [ + "200" + ], + "mottattDato": "2019-10-20", + "klokkeslett": "12:53", + "barn": { + "norskIdent": "22222222222", + "foedselsdato": "2018-10-30" + }, + "soeknadsperiode": [ + { + "fom": "2018-12-30", + "tom": "2019-10-20" + } + ], + "trekkKravPerioder": [], + "opptjeningAktivitet": { + "arbeidstaker": [], + "selvstendigNaeringsdrivende": null, + "frilanser": null + }, + "soknadsinfo": null, + "bosteder": [], + "utenlandsopphold": [], + "lovbestemtFerie": [ + { + "fom": "2021-04-14", + "tom": "2021-04-25" + } + ], + "arbeidstid": { + "arbeidstakerList": [], + "frilanserArbeidstidInfo": {}, + "selvstendigNæringsdrivendeArbeidstidInfo": null + }, + "uttak": [], + "omsorg": {}, + "kurs": { + "kursHolder": { + "holder": "Nav", + "institusjonsUuid": null + }, + "formaal": "test", + "kursperioder": [ + { + "periode": { + "fom": "2022-12-14", + "tom": "2023-01-14" + }, + "avreise": "2022-12-14", + "hjemkomst": "2023-01-14" + } + ] + }, + "harInfoSomIkkeKanPunsjes": false, + "harMedisinskeOpplysninger": false, + "begrunnelseForInnsending": null, + "metadata": null, + "k9saksnummer": null +} From bb706a7b598e179683df93cae3d2573d0c7a31ea Mon Sep 17 00:00:00 2001 From: Morten Osvik Date: Tue, 24 Sep 2024 16:33:19 +0200 Subject: [PATCH 08/12] Test for sn --- .../OpplaeringspengerTests.kt | 67 ++++++++------- .../no/nav/k9punsj/util/LesFraFilUtil.kt | 4 + .../test/resources/olp/sn-s\303\270knad.json" | 83 +++++++++++++++++++ 3 files changed, 122 insertions(+), 32 deletions(-) create mode 100644 "src/test/resources/olp/sn-s\303\270knad.json" diff --git a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt index e93d5de7b..72fe4ec11 100644 --- a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt +++ b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt @@ -381,38 +381,41 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { } -// @Test -// fun `Skal kunne lagre ned sn fra søknad`(): Unit = runBlocking { -// val norskIdent = "02022352121" -// val soeknad: SøknadJson = LesFraFilUtil.sn() -// tilpasserSøknadsMalTilTesten(soeknad, norskIdent) -// -// val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) -// -// val søknadViaGet = client.get() -// .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } -// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) -// .awaitBodyWithType() -// -// assertNotNull(søknadViaGet) -// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.virksomhetNavn).isEqualTo("FiskerAS") -// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.organisasjonsnummer).isEqualTo("890508087") -// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.periode?.fom).isEqualTo( -// LocalDate.of(2021, 5, 10) -// ) -// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.landkode).isEqualTo("") -// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.regnskapsførerNavn).isEqualTo("Regskapsfører") -// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.regnskapsførerTlf).isEqualTo("88888889") -// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.registrertIUtlandet).isEqualTo( -// false -// ) -// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.bruttoInntekt).isEqualTo("1200000") -// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.erNyoppstartet).isEqualTo(false) -// assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.virksomhetstyper).isEqualTo( -// listOf("Fiske", "Jordbruk", "Dagmamma i eget hjem/familiebarnehage", "Annen næringsvirksomhet") -// ) -// } -// + @Test + fun `Skal kunne lagre ned sn fra søknad`(): Unit = runBlocking { + val norskIdent = "02022352121" + val søknadJson: SøknadJson = LesFraFilUtil.snSøknadOlp() + val journalpostId = JournalpostIds.FerdigstiltMedSaksnummer + + val oppdatertSøknad = opprettOgLagreSoeknad(søknadJson = søknadJson, norskIdent = norskIdent, journalpostId = journalpostId) + + val søknadViaGet = hentMappeForSøknadId(oppdatertSøknad?.soeknadId) + .expectStatus().isEqualTo(HttpStatus.OK) + .expectBody() + .returnResult() + .responseBody + .let { objectMapper.readValue(it, OpplaeringspengerSøknadDto::class.java) } + + assertNotNull(søknadViaGet) + assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.virksomhetNavn).isEqualTo("FiskerAS") + assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.organisasjonsnummer).isEqualTo("890508087") + assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.periode?.fom).isEqualTo( + LocalDate.of(2021, 5, 10) + ) + assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.landkode).isEqualTo("") + assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.regnskapsførerNavn).isEqualTo("Regskapsfører") + assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.regnskapsførerTlf).isEqualTo("88888889") + assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.registrertIUtlandet).isEqualTo( + false + ) + assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.bruttoInntekt).isEqualTo("1200000") + assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.erNyoppstartet).isEqualTo(false) + assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.virksomhetstyper).isEqualTo( + listOf("Fiske", "Jordbruk", "Dagmamma i eget hjem/familiebarnehage", "Annen næringsvirksomhet") + ) + } + + // @Test // fun `Skal kunne lagre flagg om medisinske og punsjet`(): Unit = runBlocking { // val norskIdent = "02022352121" diff --git a/src/test/kotlin/no/nav/k9punsj/util/LesFraFilUtil.kt b/src/test/kotlin/no/nav/k9punsj/util/LesFraFilUtil.kt index 1bdce3bde..392d7376f 100644 --- a/src/test/kotlin/no/nav/k9punsj/util/LesFraFilUtil.kt +++ b/src/test/kotlin/no/nav/k9punsj/util/LesFraFilUtil.kt @@ -220,5 +220,9 @@ class LesFraFilUtil { fun ferieSøknadOlp(): SøknadJson { return objectMapper().readValue(lesFraFilOlp("med-ferie-søknad.json")) } + + fun snSøknadOlp(): SøknadJson { + return objectMapper().readValue(lesFraFilOlp("sn-søknad.json")) + } } } diff --git "a/src/test/resources/olp/sn-s\303\270knad.json" "b/src/test/resources/olp/sn-s\303\270knad.json" new file mode 100644 index 000000000..db148a6a9 --- /dev/null +++ "b/src/test/resources/olp/sn-s\303\270knad.json" @@ -0,0 +1,83 @@ +{ + "soeknadId": "0df10260-c763-47d2-a348-158738cbec99", + "soekerId": "", + "journalposter": [ + "200" + ], + "mottattDato": "2019-10-20", + "klokkeslett": "12:53", + "barn": { + "norskIdent": "22222222222", + "foedselsdato": "2018-10-30" + }, + "soeknadsperiode": [ + { + "fom": "2018-12-30", + "tom": "2019-10-20" + } + ], + "trekkKravPerioder": [], + "opptjeningAktivitet": { + "arbeidstaker": [], + "selvstendigNaeringsdrivende": { + "virksomhetNavn": "FiskerAS", + "organisasjonsnummer": "890508087", + "info": { + "periode": { + "fom": "2021-05-10", + "tom": null + }, + "virksomhetstyper": [ + "Fiske", + "Jordbruk", + "Dagmamma i eget hjem/familiebarnehage", + "Annen næringsvirksomhet" + ], + "erFiskerPåBladB": true, + "landkode": "", + "regnskapsførerNavn": "Regskapsfører", + "regnskapsførerTlf": "88888889", + "registrertIUtlandet": false, + "bruttoInntekt": "1200000", + "erNyoppstartet": false, + "erVarigEndring": true, + "endringInntekt": "74750000", + "endringDato": "2021-05-10" + } + }, + "frilanser": null + }, + "soknadsinfo": null, + "bosteder": [], + "utenlandsopphold": [], + "lovbestemtFerie": [], + "arbeidstid": { + "arbeidstakerList": [], + "frilanserArbeidstidInfo": {}, + "selvstendigNæringsdrivendeArbeidstidInfo": null + }, + "uttak": [], + "omsorg": {}, + "kurs": { + "kursHolder": { + "holder": "Nav", + "institusjonsUuid": null + }, + "formaal": "test", + "kursperioder": [ + { + "periode": { + "fom": "2022-12-14", + "tom": "2023-01-14" + }, + "avreise": "2022-12-14", + "hjemkomst": "2023-01-14" + } + ] + }, + "harInfoSomIkkeKanPunsjes": false, + "harMedisinskeOpplysninger": false, + "begrunnelseForInnsending": null, + "metadata": null, + "k9saksnummer": null +} From cbcff2dc52031c8804d7335f5383309a9bfcd2d0 Mon Sep 17 00:00:00 2001 From: Morten Osvik Date: Tue, 24 Sep 2024 16:37:13 +0200 Subject: [PATCH 09/12] Test for medisinske og punsjet flagg --- .../OpplaeringspengerTests.kt | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt index 72fe4ec11..aaa99eecb 100644 --- a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt +++ b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt @@ -416,24 +416,26 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { } -// @Test -// fun `Skal kunne lagre flagg om medisinske og punsjet`(): Unit = runBlocking { -// val norskIdent = "02022352121" -// val soeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() -// tilpasserSøknadsMalTilTesten(soeknad, norskIdent) -// -// val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) -// -// val søknadViaGet = client.get() -// .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } -// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) -// .awaitBodyWithType() -// -// assertNotNull(søknadViaGet) -// assertThat(søknadViaGet.harInfoSomIkkeKanPunsjes).isEqualTo(true) -// assertThat(søknadViaGet.harMedisinskeOpplysninger).isEqualTo(false) -// } -// + @Test + fun `Skal kunne lagre flagg om medisinske og punsjet`(): Unit = runBlocking { + val norskIdent = "02022352121" + val søknadJson: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() + val journalpostId = JournalpostIds.FerdigstiltMedSaksnummer + + val oppdatertSøknad = opprettOgLagreSoeknad(søknadJson = søknadJson, norskIdent = norskIdent, journalpostId = journalpostId) + + hentMappeForSøknadId(oppdatertSøknad?.soeknadId) + .expectStatus().isEqualTo(HttpStatus.OK) + .expectBody() + .consumeWith { res -> + val søknad = objectMapper.readValue(res.responseBody, OpplaeringspengerSøknadDto::class.java) + assertNotNull(søknad) + assertThat(søknad.harInfoSomIkkeKanPunsjes).isEqualTo(true) + assertThat(søknad.harMedisinskeOpplysninger).isEqualTo(false) + } + } + + // @Test // fun `Skal verifisere at søknad er ok`(): Unit = runBlocking { // val norskIdent = "02022352121" From 3d7d023587b4c5a4240c1f82aa37371708e062c6 Mon Sep 17 00:00:00 2001 From: Morten Osvik Date: Tue, 24 Sep 2024 16:40:38 +0200 Subject: [PATCH 10/12] Test for valider endepunkt --- .../OpplaeringspengerTests.kt | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt index aaa99eecb..1b358dc6c 100644 --- a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt +++ b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt @@ -436,22 +436,23 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { } -// @Test -// fun `Skal verifisere at søknad er ok`(): Unit = runBlocking { -// val norskIdent = "02022352121" -// val soeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() -// tilpasserSøknadsMalTilTesten(soeknad, norskIdent) -// opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) -// -// val httpStatus = client.post() -// .uri { it.pathSegment(api, søknadTypeUri, "valider").build() } -// .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) -// .body(BodyInserters.fromValue(soeknad)) -// .awaitStatuscode() -// -// assertEquals(HttpStatus.ACCEPTED, httpStatus) -// } -// + @Test + fun `Skal verifisere at søknad er ok`(): Unit = runBlocking { + val norskIdent = "02022352121" + val søknadJson: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() + val journalpostId = JournalpostIds.FerdigstiltMedSaksnummer + + opprettOgLagreSoeknad(søknadJson = søknadJson, norskIdent = norskIdent, journalpostId = journalpostId) + + webTestClient.post() + .uri { it.pathSegment(api, søknadTypeUri, "valider").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .body(BodyInserters.fromValue(søknadJson)) + .exchange() + .expectStatus().isEqualTo(HttpStatus.ACCEPTED) + } + + // @Test // fun `Skal verifisere at vi utvider men flere journalposter`(): Unit = runBlocking { // val norskIdent = "02022352121" From 7f6d4913cd82ea4c84478caae1251e5cd5f46fcf Mon Sep 17 00:00:00 2001 From: Morten Osvik Date: Tue, 24 Sep 2024 16:47:33 +0200 Subject: [PATCH 11/12] Rydde litt --- .../OpplaeringspengerTests.kt | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt index 1b358dc6c..1ff6addc1 100644 --- a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt +++ b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt @@ -109,7 +109,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { val norskIdent = "02030050163" val journalpostid = "21707da8-a13b-4927-8776-c53399727b29" - tilpassSøknadsMalTilTest(søknad, norskIdent, journalpostid) + leggPåNySøkerIdOgJournalpostId(søknad, norskIdent, journalpostid) val opprettNySøknad = lagOpprettNySøknadDto(norskIdent, journalpostid) val location = opprettSøknadOgHentSøknadId(opprettNySøknad) @@ -156,16 +156,6 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { } } - private fun tilpassSøknadTilTest( - søknadJson: SøknadJson, - norskIdent: String, - journalpostid: String, - location: URI? - ) { - tilpassSøknadsMalTilTest(søknadJson, norskIdent, journalpostid) - leggPåNySøknadId(søknadJson, location) - } - @Test fun `Oppdaterer en søknad med metadata`(): Unit = runBlocking { @@ -173,7 +163,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { val norskIdent = "02030050163" val journalpostid = "9999" - tilpassSøknadsMalTilTest(søknadFraFrontend, norskIdent, journalpostid) + leggPåNySøkerIdOgJournalpostId(søknadFraFrontend, norskIdent, journalpostid) val opprettNySøknad = lagOpprettNySøknadDto(norskIdent, journalpostid) val opprettetSøknadResponse = webTestClient.post() @@ -710,7 +700,17 @@ private fun settMottattDatoTilNull(søknad: SøknadJson) { søknad.replace("mottattDato", null) } -private fun tilpassSøknadsMalTilTest( +private fun tilpassSøknadTilTest( + søknadJson: SøknadJson, + norskIdent: String, + journalpostid: String, + location: URI? +) { + leggPåNySøkerIdOgJournalpostId(søknadJson, norskIdent, journalpostid) + leggPåNySøknadId(søknadJson, location) +} + +private fun leggPåNySøkerIdOgJournalpostId( søknad: SøknadJson, norskIdent: String, journalpostId: String? = null From 7ea129ea57ffcd520826df1ae9e885fae4154133 Mon Sep 17 00:00:00 2001 From: Morten Osvik Date: Tue, 24 Sep 2024 16:52:51 +0200 Subject: [PATCH 12/12] Rename --- .../opplaeringspenger/OpplaeringspengerTests.kt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt index 1ff6addc1..177f50000 100644 --- a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt +++ b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt @@ -358,7 +358,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { val søknadJson: SøknadJson = LesFraFilUtil.ferieSøknadOlp() val journalpostId = JournalpostIds.FerdigstiltMedSaksnummer - val oppdatertSøknad = opprettOgLagreSoeknad(søknadJson = søknadJson, norskIdent = norskIdent, journalpostId = journalpostId) + val oppdatertSøknad = opprettOgLagreSøknad(søknadJson = søknadJson, norskIdent = norskIdent, journalpostId = journalpostId) hentMappeForSøknadId(oppdatertSøknad?.soeknadId) .expectStatus().isEqualTo(HttpStatus.OK) @@ -377,7 +377,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { val søknadJson: SøknadJson = LesFraFilUtil.snSøknadOlp() val journalpostId = JournalpostIds.FerdigstiltMedSaksnummer - val oppdatertSøknad = opprettOgLagreSoeknad(søknadJson = søknadJson, norskIdent = norskIdent, journalpostId = journalpostId) + val oppdatertSøknad = opprettOgLagreSøknad(søknadJson = søknadJson, norskIdent = norskIdent, journalpostId = journalpostId) val søknadViaGet = hentMappeForSøknadId(oppdatertSøknad?.soeknadId) .expectStatus().isEqualTo(HttpStatus.OK) @@ -412,7 +412,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { val søknadJson: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() val journalpostId = JournalpostIds.FerdigstiltMedSaksnummer - val oppdatertSøknad = opprettOgLagreSoeknad(søknadJson = søknadJson, norskIdent = norskIdent, journalpostId = journalpostId) + val oppdatertSøknad = opprettOgLagreSøknad(søknadJson = søknadJson, norskIdent = norskIdent, journalpostId = journalpostId) hentMappeForSøknadId(oppdatertSøknad?.soeknadId) .expectStatus().isEqualTo(HttpStatus.OK) @@ -432,7 +432,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { val søknadJson: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() val journalpostId = JournalpostIds.FerdigstiltMedSaksnummer - opprettOgLagreSoeknad(søknadJson = søknadJson, norskIdent = norskIdent, journalpostId = journalpostId) + opprettOgLagreSøknad(søknadJson = søknadJson, norskIdent = norskIdent, journalpostId = journalpostId) webTestClient.post() .uri { it.pathSegment(api, søknadTypeUri, "valider").build() } @@ -486,7 +486,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { // val soeknad: SøknadJson = LesFraFilUtil.søknadFraFrontendOlpFull() // tilpasserSøknadsMalTilTesten(soeknad, norskIdent) // -// val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) +// val oppdatertSoeknadDto = opprettOgLagreSøknad(soeknadJson = soeknad, ident = norskIdent) // // val søknadViaGet = client.get() // .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } @@ -596,7 +596,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { norskIdent: String, journalpostId: String ): Triple { - val oppdatertSøknad = opprettOgLagreSoeknad(norskIdent, journalpostId, søknadJson) + val oppdatertSøknad = opprettOgLagreSøknad(norskIdent, journalpostId, søknadJson) val søknadId = oppdatertSøknad?.soeknadId assertNotNull(søknadId) @@ -617,7 +617,7 @@ class OpplaeringspengerTests : AbstractContainerBaseTest() { return Triple(søknadId, httpstatus, oasSoknadsfeil) } - private fun opprettOgLagreSoeknad( + private fun opprettOgLagreSøknad( norskIdent: String, journalpostId: String, søknadJson: SøknadJson