diff --git a/.github/workflows/dependabot.yaml b/.github/workflows/dependabot.yaml new file mode 100644 index 000000000..eb3310140 --- /dev/null +++ b/.github/workflows/dependabot.yaml @@ -0,0 +1,29 @@ +name: Run tests for dependabot PRs +on: + workflow_dispatch: + pull_request: + types: [ ready_for_review, opened, synchronize ] + branches: + - 'dependabot/**' + +env: + GITHUB_USERNAME: x-access-token + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + run-tests: + runs-on: ubuntu-latest + name: Run tests + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + - uses: actions/cache@v3 + with: + path: ~/.m2 + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + - run: mvn -B -e --settings .m2/maven-settings.xml clean test diff --git a/.github/workflows/deploy_feature.yaml b/.github/workflows/deploy_feature.yaml index 57e4cf1c6..7e769c55e 100644 --- a/.github/workflows/deploy_feature.yaml +++ b/.github/workflows/deploy_feature.yaml @@ -1,5 +1,6 @@ name: Deploy feature on: + workflow_dispatch: push: branches: - '**' @@ -29,7 +30,7 @@ jobs: key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven- - - run: mvn -Dmaven.test.skip=true -B -e --settings .m2/maven-settings.xml clean install + - run: mvn -B -e --settings .m2/maven-settings.xml clean install - uses: nais/docker-build-push@v0 id: docker-push with: @@ -58,11 +59,12 @@ jobs: ${{ runner.os }}-maven- - run: mvn -B -e --settings .m2/maven-settings.xml clean install + deploy-feature: runs-on: ubuntu-latest name: Deploy feature - needs: build - + needs: + - build steps: - uses: actions/checkout@v4 with: diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index bf6c24c00..777944bf3 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -1,7 +1,11 @@ name: Deploy to dev on: + workflow_dispatch: pull_request: types: [ ready_for_review, opened, synchronize ] + branches: + - '**' + - '!dependabot/**' env: GITHUB_USERNAME: x-access-token @@ -27,7 +31,7 @@ jobs: key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven- - - run: mvn -Dmaven.test.skip=true -B -e --settings .m2/maven-settings.xml clean install + - run: mvn -B -e --settings .m2/maven-settings.xml clean install - uses: nais/docker-build-push@v0 id: docker-push with: @@ -38,10 +42,11 @@ jobs: image: ${{ steps.docker-push.outputs.image }} tag: ${{ steps.docker-push.outputs.tag }} - run-tests: + deploy-dev: runs-on: ubuntu-latest - name: Run tests - needs: build + name: Deploy dev + needs: + - build steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v3 diff --git a/.gitignore b/.gitignore index 13dfa131d..1ca0ae4f8 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ target/ .settings .springBeans .sts4-cache +*nais-secrets* ### IntelliJ IDEA ### .idea @@ -30,4 +31,4 @@ build/ ### VS Code ### .vscode/ -*nais-secrets* + diff --git a/.nais/feature.yaml b/.nais/feature.yaml index 5fc817094..c38b26335 100644 --- a/.nais/feature.yaml +++ b/.nais/feature.yaml @@ -2,6 +2,8 @@ name: bidrag-behandling-feature ingresses: - https://bidrag-behandling-feature.intern.dev.nav.no env: + BIDRAG_PERSON_URL: https://bidrag-person-feature.dev-fss-pub.nais.io/bidrag-person + BIDRAG_PERSON_SCOPE: dev-fss.bidrag.bidrag-person-feature BIDRAG_BEREGN_FORSKUDD_URL: http://bidrag-beregn-forskudd-rest-feature BIDRAG_BEREGN_FORSKUDD_SCOPE: dev-gcp.bidrag.bidrag-beregn-forskudd-rest-feature BIDRAG_GRUNNLAG_URL: http://bidrag-grunnlag-feature @@ -11,6 +13,7 @@ env: BIDRAG_TILGANGSKONTROLL_URL: http://bidrag-tilgangskontroll-feature BIDRAG_TILGANGGSKONTROLL_SCOPE: dev-gcp.bidrag.bidrag-tilgangskontroll-feature TOPIC_VEDTAK: bidrag.vedtak-feature + JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 kafka: pool: nav-dev azure_access_inbound: @@ -34,4 +37,6 @@ outbound-access-apps: - bidrag-beregn-forskudd-rest-feature - bidrag-grunnlag-feature - bidrag-dokument-forsendelse-feature - - bidrag-tilgangskontroll-feature \ No newline at end of file + - bidrag-tilgangskontroll-feature +outbound-access-hosts: + - bidrag-person-feature.dev-fss-pub.nais.io \ No newline at end of file diff --git a/.nais/main.yaml b/.nais/main.yaml index 5d65b0803..3f9cbb996 100644 --- a/.nais/main.yaml +++ b/.nais/main.yaml @@ -2,6 +2,8 @@ name: bidrag-behandling ingresses: - https://bidrag-behandling.intern.dev.nav.no env: + BIDRAG_PERSON_URL: https://bidrag-person.dev-fss-pub.nais.io/bidrag-person + BIDRAG_PERSON_SCOPE: dev-fss.bidrag.bidrag-person BIDRAG_BEREGN_FORSKUDD_URL: http://bidrag-beregn-forskudd-rest BIDRAG_BEREGN_FORSKUDD_SCOPE: dev-gcp.bidrag.bidrag-beregn-forskudd-rest BIDRAG_GRUNNLAG_URL: http://bidrag-grunnlag @@ -11,6 +13,7 @@ env: BIDRAG_TILGANGSKONTROLL_URL: http://bidrag-tilgangskontroll BIDRAG_TILGANGGSKONTROLL_SCOPE: dev-gcp.bidrag.bidrag-tilgangskontroll TOPIC_VEDTAK: bidrag.vedtak-syntetisk + JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 kafka: pool: nav-dev azure_access_inbound: @@ -34,4 +37,6 @@ outbound-access-apps: - bidrag-beregn-forskudd-rest - bidrag-grunnlag - bidrag-dokument-forsendelse - - bidrag-tilgangskontroll \ No newline at end of file + - bidrag-tilgangskontroll +outbound-access-hosts: + - bidrag-person.dev-fss-pub.nais.io \ No newline at end of file diff --git a/.nais/prod.yaml b/.nais/prod.yaml index a9c3a9b7e..773b1874e 100644 --- a/.nais/prod.yaml +++ b/.nais/prod.yaml @@ -2,6 +2,8 @@ name: bidrag-behandling ingresses: - https://bidrag-behandling.intern.nav.no env: + BIDRAG_PERSON_URL: https://bidrag-person.prod-fss-pub.nais.io/bidrag-person + BIDRAG_PERSON_SCOPE: prod-fss.bidrag.bidrag-person BIDRAG_BEREGN_FORSKUDD_URL: http://bidrag-beregn-forskudd-rest BIDRAG_BEREGN_FORSKUDD_SCOPE: prod-gcp.bidrag.bidrag-beregn-forskudd-rest BIDRAG_GRUNNLAG_URL: http://bidrag-grunnlag @@ -34,4 +36,6 @@ outbound-access-apps: - bidrag-beregn-forskudd-rest - bidrag-grunnlag - bidrag-dokument-forsendelse - - bidrag-tilgangskontroll \ No newline at end of file + - bidrag-tilgangskontroll +outbound-access-hosts: + - bidrag-person.prod-fss-pub.nais.io \ No newline at end of file diff --git a/README.md b/README.md index 9bf9b5189..2b2ef0a92 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,19 @@ Legg til Github secret `NAIS_DEPLOY_APIKEY` hvor secret hentes fra [Api key](htt ## Kjøre applikasjonen lokalt +#### Dockermiljø +Et lokalt Dockermiljø må være tilgjengelig for lokal kjøring. Forebredelsessteg for lokal kjøring på Mac OS med Colima Docker: + +> colima start \ +> docker-compose build \ +> docker-compose up + +#### Starte applikasjon lokalt + +Profil: local (angis i program arguments) + Start opp applikasjonen ved å kjøre [BidragTemplateLocal.kt](src/test/kotlin/no/nav/bidrag/behandling/BidragSpringAppLocal.kt). + Dette starter applikasjonen med profil `local` og henter miljøvariabler for Q1 miljøet fra filen [application-local.yaml](src/test/resources/application-local.yaml). Her mangler det noen miljøvariabler som ikke bør committes til Git (Miljøvariabler for passord/secret osv).
@@ -23,14 +35,10 @@ Disse kan hentes ved å kjøre kan hentes ved å kjøre kubectl exec --tty deployment/bidrag-behandling-feature -- printenv | grep -e AZURE_APP_CLIENT_ID -e AZURE_APP_CLIENT_SECRET ``` -### Live reload -Med `spring-boot-devtools` har Spring støtte for live-reload av applikasjon. Dette betyr i praksis at Spring vil automatisk restarte applikasjonen når en fil endres. Du vil derfor slippe å restarte applikasjonen hver gang du gjør endringer. Dette er forklart i [dokumentasjonen](https://docs.spring.io/spring-boot/docs/1.5.16.RELEASE/reference/html/using-boot-devtools.html#using-boot-devtools-restart). -For at dette skal fungere må det gjøres noe endringer i Intellij instillingene slik at Intellij automatisk re-bygger filene som er endret: +#### Kjøre lokalt mot sky -* Gå til `Preference -> Compiler -> check "Build project automatically"` -* Gå til `Preference -> Advanced settings -> check "Allow auto-make to start even if developed application is currently running"` +Profil: local-nais (angis i program arguments) -#### Kjøre lokalt mot sky For å kunne kjøre lokalt mot sky må du gjøre følgende Åpne terminal på root mappen til `bidrag-behandling` @@ -51,4 +59,12 @@ Deretter kjør følgende kommando for å importere secrets. Viktig at filen som kubectl exec --tty deployment/bidrag-behandling printenv | grep -E 'AZURE_APP_CLIENT_ID|AZURE_APP_CLIENT_SECRET|TOKEN_X|AZURE_OPENID_CONFIG_TOKEN_ENDPOINT|AZURE_APP_TENANT_ID|AZURE_APP_WELL_KNOWN_URL|_URL|SCOPE' > src/test/resources/application-lokal-nais-secrets.properties ``` -Deretter kan tokenet brukes til å logge inn på swagger-ui http://localhost:8080/swagger-ui.html \ No newline at end of file +Deretter kan tokenet brukes til å logge inn på swagger-ui http://localhost:8990/swagger-ui.html + +### Live reload +Med `spring-boot-devtools` har Spring støtte for live-reload av applikasjon. Dette betyr i praksis at Spring vil automatisk restarte applikasjonen når en fil endres. Du vil derfor slippe å restarte applikasjonen hver gang du gjør endringer. Dette er forklart i [dokumentasjonen](https://docs.spring.io/spring-boot/docs/1.5.16.RELEASE/reference/html/using-boot-devtools.html#using-boot-devtools-restart). +For at dette skal fungere må det gjøres noe endringer i Intellij instillingene slik at Intellij automatisk re-bygger filene som er endret: + +* Gå til `Preference -> Compiler -> check "Build project automatically"` +* Gå til `Preference -> Advanced settings -> check "Allow auto-make to start even if developed application is currently running"` +* \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index 9eb6fa961..c13292289 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -10,6 +10,12 @@ services: POSTGRES_DB: bidrag-behandling volumes: - db:/var/lib/postgresql/data + zookeeper: + container_name: zookeeper + image: confluentinc/cp-zookeeper:7.1.2 + environment: + ZOOKEEPER_CLIENT_PORT: 2181 + ZOOKEEPER_TICK_TIME: 2000 kafka: image: confluentinc/cp-kafka:6.2.1 depends_on: diff --git a/pom.xml b/pom.xml index 5397aa251..20b0db90f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.1.3 + 3.1.4 no.nav @@ -18,15 +18,15 @@ 20230510130746_8b93e85 20230824131636_7aef062 7.4 - 3.1.5 + 3.1.7 2.2.0 4.0.4 LATEST - 5.6.2 + 5.7.2 4.0.2 3.0.5 - 9.22.0 - 1.19.0 + 9.22.3 + 1.19.1 @@ -46,12 +46,12 @@ org.xerial.snappy snappy-java - 1.1.10.3 + 1.1.10.5 org.springframework.kafka spring-kafka - 3.0.11 + 3.0.12 @@ -130,7 +130,7 @@ com.h2database h2 test - 2.2.220 + 2.2.224 org.flywaydb @@ -159,7 +159,7 @@ com.fasterxml.jackson.module jackson-module-kotlin - 2.15.2 + 2.15.3 @@ -198,7 +198,7 @@ no.nav.bidrag bidrag-transport - 20230821134807_d0642b9 + 20230918144946_1e1bc33 @@ -423,7 +423,7 @@ com.pinterest ktlint - 0.48.2 + 0.50.0 diff --git a/src/main/kotlin/no/nav/bidrag/behandling/Exceptions.kt b/src/main/kotlin/no/nav/bidrag/behandling/Exceptions.kt index 0167cb392..c0c3a4298 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/Exceptions.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/Exceptions.kt @@ -3,7 +3,13 @@ package no.nav.bidrag.behandling import org.springframework.http.HttpStatus import org.springframework.web.client.HttpClientErrorException -fun `404`(behandlingId: Long): Nothing = +fun behandlingNotFoundException(behandlingId: Long): Nothing = throw HttpClientErrorException(HttpStatus.NOT_FOUND, "Fant ikke behandling med id $behandlingId") + class KunneIkkeLeseMeldingFraHendelse(melding: String?, throwable: Throwable) : RuntimeException(melding, throwable) -fun fantIkkeSak(saksnummer: String): Nothing = throw HttpClientErrorException(HttpStatus.BAD_REQUEST, "Sak med saksnummer $saksnummer finnes ikke") + +fun fantIkkeSak(saksnummer: String): Nothing = + throw HttpClientErrorException( + HttpStatus.BAD_REQUEST, + "Sak med saksnummer $saksnummer finnes ikke", + ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/aop/DefaultRestControllerAdvice.kt b/src/main/kotlin/no/nav/bidrag/behandling/aop/DefaultRestControllerAdvice.kt index ca971f662..e9a6e057e 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/aop/DefaultRestControllerAdvice.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/aop/DefaultRestControllerAdvice.kt @@ -22,7 +22,9 @@ class DefaultRestControllerAdvice { } @ResponseBody - @ExceptionHandler(value = [MethodArgumentNotValidException::class, IllegalArgumentException::class, MethodArgumentTypeMismatchException::class, ConversionFailedException::class, HttpMessageNotReadableException::class]) + @ExceptionHandler( + value = [MethodArgumentNotValidException::class, IllegalArgumentException::class, MethodArgumentTypeMismatchException::class, ConversionFailedException::class, HttpMessageNotReadableException::class], + ) fun handleInvalidValueExceptions(exception: Exception): ResponseEntity<*> { val cause = exception.cause val valideringsFeil = @@ -91,10 +93,11 @@ class DefaultRestControllerAdvice { private fun createMissingKotlinParameterViolation(ex: MissingKotlinParameterException): String { val errorFieldRegex = Regex("\\.([^.]*)\\[\\\"(.*)\"\\]\$") - val paths = ex.path.map { errorFieldRegex.find(it.description)!! }.map { - val (objectName, field) = it.destructured - "$objectName.$field" - } - return "${paths.joinToString("->")} kan ikke være null" + val paths = + ex.path.map { errorFieldRegex.find(it.description)!! }.map { + val (objectName, field) = it.destructured + "$objectName.$field" + } + return "${paths.joinToString("->")} må fylles ut" } } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/aop/HendelseCorrelationAspect.kt b/src/main/kotlin/no/nav/bidrag/behandling/aop/HendelseCorrelationAspect.kt index 38c6ff256..33a41ef7e 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/aop/HendelseCorrelationAspect.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/aop/HendelseCorrelationAspect.kt @@ -19,9 +19,11 @@ private val log = KotlinLogging.logger {} @Component @Aspect class HendelseCorrelationAspect(private val objectMapper: ObjectMapper) { - @Before(value = "execution(* no.nav.bidrag.behandling.kafka.VedtakHendelseListener.prossesserVedtakHendelse(..)) && args(hendelse)") - fun leggSporingFraVedtakHendelseTilMDC(joinPoint: JoinPoint, hendelse: ConsumerRecord) { + fun leggSporingFraVedtakHendelseTilMDC( + joinPoint: JoinPoint, + hendelse: ConsumerRecord, + ) { hentSporingFraHendelse(hendelse)?.let { val correlationId = CorrelationId.existing(it) MDC.put(CORRELATION_ID_HEADER, correlationId.get()) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/beregning/ForskuddBeregning.kt b/src/main/kotlin/no/nav/bidrag/behandling/beregning/ForskuddBeregning.kt index 6309da99a..91dfa9827 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/beregning/ForskuddBeregning.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/beregning/ForskuddBeregning.kt @@ -15,28 +15,27 @@ import no.nav.bidrag.behandling.database.datamodell.Rolle import no.nav.bidrag.behandling.database.datamodell.SivilstandType import no.nav.bidrag.behandling.transformers.INFINITY import no.nav.bidrag.behandling.transformers.toCompactString -import no.nav.bidrag.behandling.transformers.toLocalDate import no.nav.bidrag.behandling.transformers.toNoString import no.nav.bidrag.beregn.felles.enums.BostatusKode import no.nav.bidrag.beregn.felles.enums.SivilstandKode import no.nav.bidrag.domain.enums.GrunnlagType -import no.nav.bidrag.transport.beregning.forskudd.rest.request.BeregnForskuddGrunnlag -import no.nav.bidrag.transport.beregning.forskudd.rest.request.Grunnlag +import no.nav.bidrag.transport.beregning.felles.BeregnGrunnlag +import no.nav.bidrag.transport.beregning.felles.Grunnlag import org.springframework.stereotype.Service import java.math.BigDecimal import java.time.LocalDate + @Service class ForskuddBeregning { - - private fun prepareSoknadsBarn(soknadBarn: Rolle): List = + private fun prepareSoknadsBarn(soknadBarn: Rolle, fDato: String): List = listOf( Grunnlag( referanse = "Mottatt_SoknadsbarnInfo_SB" + soknadBarn.id, - type = GrunnlagType.SOKNADSBARN_INFO.toString(), + type = GrunnlagType.SOKNADSBARN_INFO, innhold = POJONode( SoknadsBarnNode( soknadsbarnId = soknadBarn.id!!.toInt(), - fodselsdato = soknadBarn.fodtDato?.toLocalDate()?.toNoString(), + fodselsdato = fDato, ), ), ), @@ -51,13 +50,17 @@ class ForskuddBeregning { BostatusKode.BOR_IKKE_MED_FORELDRE } - private fun prepareBostatus(husstandsBarnPerioder: List, soknadsBarnIdent: String, soknadBarn: Rolle): List = + private fun prepareBostatus( + husstandsBarnPerioder: List, + soknadsBarnIdent: String, + soknadBarn: Rolle + ): List = husstandsBarnPerioder .filter { soknadsBarnIdent == it.ident } .map { Grunnlag( referanse = "Mottatt_Bostatus_" + it.datoFom.toCompactString(), - type = GrunnlagType.BOSTATUS.toString(), + type = GrunnlagType.BOSTATUS, innhold = POJONode( BostatusNode( datoFom = it.datoFom.toNoString(), @@ -75,7 +78,7 @@ class ForskuddBeregning { .map { Grunnlag( referanse = "Mottatt_BarnIHusstand_" + it.datoFom.replace("-", ""), - type = GrunnlagType.BARN_I_HUSSTAND.toString(), + type = GrunnlagType.BARN_I_HUSSTAND, innhold = POJONode(it), ) } @@ -89,7 +92,7 @@ class ForskuddBeregning { .map { Grunnlag( referanse = "Mottatt_Inntekt_${it.inntektType}_${it.rolle}_${it.datoFom.toCompactString()}", - type = GrunnlagType.INNTEKT.toString(), + type = GrunnlagType.INNTEKT, innhold = POJONode( InntektNode( datoFom = it.datoFom.toNoString(), @@ -104,7 +107,7 @@ class ForskuddBeregning { .map { Grunnlag( referanse = "Mottatt_Inntekt_TG" + it.datoFom.toCompactString(), - type = GrunnlagType.INNTEKT.toString(), + type = GrunnlagType.INNTEKT, innhold = POJONode( InntektNode( datoFom = it.datoFom.toNoString(), @@ -119,7 +122,7 @@ class ForskuddBeregning { .map { Grunnlag( referanse = "Mottatt_Inntekt_UB" + it.datoFom.toCompactString(), - type = GrunnlagType.INNTEKT.toString(), + type = GrunnlagType.INNTEKT, innhold = POJONode( InntektNode( datoFom = it.datoFom.toNoString(), @@ -144,7 +147,7 @@ class ForskuddBeregning { sivilstand.map { Grunnlag( referanse = "Mottatt_Sivilstand_" + it.datoFom.toCompactString(), - type = GrunnlagType.SIVILSTAND.toString(), + type = GrunnlagType.SIVILSTAND, innhold = POJONode( SivilstandNode( datoFom = it.datoFom.toNoString(), @@ -194,7 +197,7 @@ class ForskuddBeregning { currentPeriods = currentPeriods + list[i].info.heads - list[i].info.tails } - return r + return r.filter { it.antall != 0.0 } } fun toBehandlingBeregningModel(behandling: Behandling): Either, BehandlingBeregningModel> = @@ -210,20 +213,19 @@ class ForskuddBeregning { roller = behandling.roller, ) - fun toPayload(b: BehandlingBeregningModel, soknadsBarn: Rolle): BeregnForskuddGrunnlag = - BeregnForskuddGrunnlag( + fun toPayload(b: BehandlingBeregningModel, soknadsBarn: Rolle, fDato: String): BeregnGrunnlag = + BeregnGrunnlag( beregnDatoFra = b.virkningsDato, beregnDatoTil = b.datoTom, - grunnlagListe = prepareSoknadsBarn(soknadsBarn) + - prepareBarnIHusstand(b) + - prepareBostatus(b.husstandsBarnPerioder, soknadsBarn.ident, soknadsBarn) + - prepareInntekterForBeregning( - b.inntekter, - b.barnetillegg, - b.utvidetbarnetrygd, - ) + - prepareSivilstand(b.sivilstand), - + grunnlagListe = prepareSoknadsBarn(soknadsBarn, fDato) + + prepareBarnIHusstand(b) + + prepareBostatus(b.husstandsBarnPerioder, soknadsBarn.ident, soknadsBarn) + + prepareInntekterForBeregning( + b.inntekter, + b.barnetillegg, + b.utvidetbarnetrygd, + ) + + prepareSivilstand(b.sivilstand), ) } @@ -253,7 +255,7 @@ data class BostatusNode( data class SoknadsBarnNode( val soknadsbarnId: Int, - val fodselsdato: String?, + val fodselsdato: String, ) data class InntektNode( diff --git a/src/main/kotlin/no/nav/bidrag/behandling/beregning/model/BehandlingBeregningModel.kt b/src/main/kotlin/no/nav/bidrag/behandling/beregning/model/BehandlingBeregningModel.kt index adf36fe7d..d999e8b20 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/beregning/model/BehandlingBeregningModel.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/beregning/model/BehandlingBeregningModel.kt @@ -27,6 +27,7 @@ fun Set.rolleType(ident: String): String { else -> rolleType?.name ?: "BIDRAGSMOTTAKER" } } + data class BehandlingBeregningModel private constructor( val behandlingId: Long, val virkningsDato: LocalDate, @@ -48,85 +49,85 @@ data class BehandlingBeregningModel private constructor( utvidetbarnetrygd: Set, husstandsBarn: Set, roller: Set, - ): Either, BehandlingBeregningModel> = either { - zipOrAccumulate( - { - ensure(behandlingId != null) { raise("Behandling id kan ikke være null") } - behandlingId - }, - { - ensure(virkningsDato != null) { raise("Behandling virkningsDato kan ikke være null") } - virkningsDato.toLocalDate() - }, - { - ensure(datoTom != null) { raise("Behandling datoTom kan ikke være null") } - datoTom.toLocalDate() - }, - { - mapOrAccumulate(sivilstand) { - SivilstandModel( - it.datoFom?.toLocalDate() ?: raise("Sivilstands datoFom kan ikke være null"), - it.datoTom?.toLocalDate(), - it.sivilstandType, - ) - } - }, - { - mapOrAccumulate(inntekter.filter { it.taMed }) { - InntektModel( - inntektType = it.inntektType ?: "INNTEKTSOPPLYSNINGER_ARBEIDSGIVER", // TODO -> DETTE ER KUN MIDLERTIDIG -// inntektType = it.inntektType ?: raise("InntektType kan ikke være null"), - belop = it.belop, - rolle = roller.rolleType(it.ident), - datoFom = it.datoFom?.toLocalDate() ?: raise("Inntekts datoFom kan ikke være null"), - datoTom = it.datoTom?.toLocalDate(), - ) - } - }, - { - mapOrAccumulate(barnetillegg) { - BarnetilleggModel( - datoFom = it.datoFom?.toLocalDate() ?: raise("Barnetillegg datoFom kan ikke være null"), - datoTom = it.datoTom?.toLocalDate(), - belop = it.barnetillegg, - ) - } - }, - { - mapOrAccumulate(utvidetbarnetrygd) { - UtvidetbarnetrygdModel( - datoFom = it.datoFom?.toLocalDate() ?: raise("Utvidetbarnetrygd datoFom kan ikke være null"), - datoTom = it.datoTom?.toLocalDate(), - belop = it.belop, - ) - } - }, - { - mapOrAccumulate( - husstandsBarn.filter { it.medISaken } - .flatMap { it.perioder }, - ) { - HusstandsBarnPeriodeModel( - datoFom = it.datoFom?.toLocalDate() ?: raise("HusstandsBarnPeriode datoFom kan ikke være null"), - datoTom = it.datoTom?.toLocalDate(), - ident = it.husstandsBarn.ident, - boStatus = it.boStatus, - ) - } - }, - ) { behandlingId, virkningsDato, datoTom, sivilstand, inntekter, barnetillegg, utvidetbarnetrygd, husstandsBarnPerioder -> - BehandlingBeregningModel( - behandlingId, - virkningsDato, - datoTom, - sivilstand, - inntekter, - barnetillegg, - utvidetbarnetrygd, - husstandsBarnPerioder, - ) + ): Either, BehandlingBeregningModel> = + either { + zipOrAccumulate( + { + ensure(behandlingId != null) { raise("Behandling id kan ikke være null") } + behandlingId + }, + { + ensure(virkningsDato != null) { raise("Behandling virkningsDato må fylles ut") } + virkningsDato.toLocalDate() + }, + { + ensure(datoTom != null) { raise("Behandling Dato Til må fylles ut") } + datoTom.toLocalDate() + }, + { + mapOrAccumulate(sivilstand) { + SivilstandModel( + it.datoFom?.toLocalDate() ?: raise("Sivilstand Dato Fra må fylles ut"), + it.datoTom?.toLocalDate(), + it.sivilstandType, + ) + } + }, + { + mapOrAccumulate(inntekter.filter { it.taMed }) { + InntektModel( + inntektType = it.inntektType ?: raise("InntektType kan ikke være null"), + belop = it.belop, + rolle = roller.rolleType(it.ident), + datoFom = it.datoFom?.toLocalDate() ?: raise("Inntekts Dato Fra må fylles ut"), + datoTom = it.datoTom?.toLocalDate(), + ) + } + }, + { + mapOrAccumulate(barnetillegg) { + BarnetilleggModel( + datoFom = it.datoFom?.toLocalDate() ?: raise("Barnetillegg Dato Fra må fylles ut"), + datoTom = it.datoTom?.toLocalDate(), + belop = it.barnetillegg, + ) + } + }, + { + mapOrAccumulate(utvidetbarnetrygd) { + UtvidetbarnetrygdModel( + datoFom = it.datoFom?.toLocalDate() ?: raise("Utvidetbarnetrygd Dato Fra må fylles ut"), + datoTom = it.datoTom?.toLocalDate(), + belop = it.belop, + ) + } + }, + { + mapOrAccumulate( + husstandsBarn.filter { it.medISaken } + .flatMap { it.perioder }, + ) { + HusstandsBarnPeriodeModel( + datoFom = it.datoFom?.toLocalDate() ?: raise("HusstandsBarnPeriode Dato Fra må fylles ut"), + datoTom = it.datoTom?.toLocalDate(), + ident = it.husstandsBarn.ident, + boStatus = it.boStatus, + ) + } + }, + ) { behandlingId, virkningsDato, datoTom, sivilstand, inntekter, barnetillegg, utvidetbarnetrygd, husstandsBarnPerioder -> + BehandlingBeregningModel( + behandlingId, + virkningsDato, + datoTom, + sivilstand, + inntekter, + barnetillegg, + utvidetbarnetrygd, + husstandsBarnPerioder, + ) + } } - } } } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/config/CacheConfig.kt b/src/main/kotlin/no/nav/bidrag/behandling/config/CacheConfig.kt index 8009919e0..af7a31bc5 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/config/CacheConfig.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/config/CacheConfig.kt @@ -17,6 +17,7 @@ import java.util.concurrent.TimeUnit @EnableUserCache class CacheConfig { companion object { + const val PERSON_CACHE = "PERSON_CACHE" const val SAK_CACHE = "SAK_CACHE" const val TILGANG_TEMA_CACHE = "TILGANG_TEMA_CACHE" const val TILGANG_PERSON_CACHE = "TILGANG_PERSON_CACHE" @@ -26,10 +27,14 @@ class CacheConfig { @Bean fun cacheManager(): CacheManager { val caffeineCacheManager = CaffeineCacheManager() + caffeineCacheManager.registerCustomCache(PERSON_CACHE, Caffeine.newBuilder().expireAfter(InvaliderCacheFørStartenAvArbeidsdag()).build()) caffeineCacheManager.registerCustomCache(TILGANG_TEMA_CACHE, Caffeine.newBuilder().expireAfterWrite(1, TimeUnit.HOURS).build()) caffeineCacheManager.registerCustomCache(TILGANG_PERSON_CACHE, Caffeine.newBuilder().expireAfterWrite(1, TimeUnit.HOURS).build()) caffeineCacheManager.registerCustomCache(TILGANG_SAK_CACHE, Caffeine.newBuilder().expireAfterWrite(1, TimeUnit.HOURS).build()) - caffeineCacheManager.registerCustomCache(SAK_CACHE, Caffeine.newBuilder().expireAfter(InvaliderCacheFørStartenAvArbeidsdag()).build()) + caffeineCacheManager.registerCustomCache( + SAK_CACHE, + Caffeine.newBuilder().expireAfter(InvaliderCacheFørStartenAvArbeidsdag()).build(), + ) return caffeineCacheManager } } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/config/DefaultConfiguration.kt b/src/main/kotlin/no/nav/bidrag/behandling/config/DefaultConfiguration.kt index 31b18b049..9880a86b6 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/config/DefaultConfiguration.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/config/DefaultConfiguration.kt @@ -15,7 +15,10 @@ import org.springframework.context.annotation.EnableAspectJAutoProxy import org.springframework.context.annotation.Import @EnableAspectJAutoProxy -@OpenAPIDefinition(info = Info(title = "bidrag-behandling", version = "v1"), security = [SecurityRequirement(name = "bearer-key")]) +@OpenAPIDefinition( + info = Info(title = "bidrag-behandling", version = "v1"), + security = [SecurityRequirement(name = "bearer-key")], +) @SecurityScheme(bearerFormat = "JWT", name = "bearer-key", scheme = "bearer", type = SecuritySchemeType.HTTP) @Configuration @EnableJwtTokenValidation diff --git a/src/main/kotlin/no/nav/bidrag/behandling/config/RestConfig.kt b/src/main/kotlin/no/nav/bidrag/behandling/config/RestConfig.kt index f315c0c97..f67e701dc 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/config/RestConfig.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/config/RestConfig.kt @@ -18,7 +18,6 @@ import java.time.format.DateTimeFormatter @EnableSecurityConfiguration @Import(RestOperationsAzure::class) class RestConfig { - @Bean fun jackson2ObjectMapperBuilder(): Jackson2ObjectMapperBuilder { return Jackson2ObjectMapperBuilder() diff --git a/src/main/kotlin/no/nav/bidrag/behandling/consumer/BidragBeregnForskuddConsumer.kt b/src/main/kotlin/no/nav/bidrag/behandling/consumer/BidragBeregnForskuddConsumer.kt index d0b576d51..57f60bd27 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/consumer/BidragBeregnForskuddConsumer.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/consumer/BidragBeregnForskuddConsumer.kt @@ -2,7 +2,7 @@ package no.nav.bidrag.behandling.consumer import no.nav.bidrag.behandling.dto.behandling.ForskuddDto import no.nav.bidrag.commons.web.client.AbstractRestClient -import no.nav.bidrag.transport.beregning.forskudd.rest.request.BeregnForskuddGrunnlag +import no.nav.bidrag.transport.beregning.felles.BeregnGrunnlag import org.springframework.beans.factory.annotation.Qualifier import org.springframework.beans.factory.annotation.Value import org.springframework.stereotype.Service @@ -15,10 +15,8 @@ class BidragBeregnForskuddConsumer( @Value("\${BIDRAG_BEREGN_FORSKUDD_URL}") bidragBeregnForskuddUrl: URI, @Qualifier("azure") restTemplate: RestTemplate, ) : AbstractRestClient(restTemplate, "bidrag-beregn-forskudd-rest") { - private val beregnForskuddUri = UriComponentsBuilder.fromUri(bidragBeregnForskuddUrl).pathSegment("beregn").pathSegment("forskudd").build().toUri() - fun beregnForskudd(payload: BeregnForskuddGrunnlag): ForskuddDto = - postForNonNullEntity(beregnForskuddUri, payload) + fun beregnForskudd(payload: BeregnGrunnlag): ForskuddDto = postForNonNullEntity(beregnForskuddUri, payload) } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/consumer/BidragForsendelseConsumer.kt b/src/main/kotlin/no/nav/bidrag/behandling/consumer/BidragForsendelseConsumer.kt index 87008ed65..77188ef9c 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/consumer/BidragForsendelseConsumer.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/consumer/BidragForsendelseConsumer.kt @@ -16,7 +16,6 @@ class BidragForsendelseConsumer( @Value("\${BIDRAG_FORSENDELSE_URL}") private val bidragForsnendelseUrl: URI, @Qualifier("azure") restTemplate: RestTemplate, ) : AbstractRestClient(restTemplate, "bidrag-dokument-forsendelse") { - private val bidragForsendelsedUri get() = UriComponentsBuilder.fromUri(bidragForsnendelseUrl).pathSegment("api").pathSegment("forsendelse") @@ -27,7 +26,10 @@ class BidragForsendelseConsumer( getForNonNullEntity(bidragForsendelsedUri.pathSegment("sak").pathSegment(saksnummer).pathSegment("forsendelser").build().toUri()) fun slettForsendelse(forsendelseId: Long) { - postForEntity(bidragForsendelsedUri.pathSegment("journal").pathSegment(forsendelseId.toString()).pathSegment("avvik").build().toUri(), Avvikshendelse(AvvikType.SLETT_JOURNALPOST)) + postForEntity( + bidragForsendelsedUri.pathSegment("journal").pathSegment(forsendelseId.toString()).pathSegment("avvik").build().toUri(), + Avvikshendelse(AvvikType.SLETT_JOURNALPOST), + ) } } @@ -42,6 +44,7 @@ data class ForsendelseResponsTo( val forsendelseType: ForsendelseTypeTo? = null, val status: ForsendelseStatusTo? = null, ) + data class BehandlingInfoResponseDto( val soknadId: String? = null, val erFattet: Boolean, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/consumer/BidragPersonConsumer.kt b/src/main/kotlin/no/nav/bidrag/behandling/consumer/BidragPersonConsumer.kt new file mode 100644 index 000000000..aba70bd8e --- /dev/null +++ b/src/main/kotlin/no/nav/bidrag/behandling/consumer/BidragPersonConsumer.kt @@ -0,0 +1,28 @@ +package no.nav.bidrag.behandling.consumer + +import no.nav.bidrag.behandling.config.CacheConfig.Companion.PERSON_CACHE +import no.nav.bidrag.behandling.dto.HentPersonRequest +import no.nav.bidrag.behandling.dto.HentPersonResponse +import no.nav.bidrag.commons.cache.BrukerCacheable +import no.nav.bidrag.commons.web.client.AbstractRestClient +import org.springframework.beans.factory.annotation.Qualifier +import org.springframework.beans.factory.annotation.Value +import org.springframework.stereotype.Service +import org.springframework.web.client.RestTemplate +import org.springframework.web.util.UriComponentsBuilder +import java.net.URI + +@Service +class BidragPersonConsumer( + @Value("\${BIDRAG_PERSON_URL}") bidragPersonUrl: URI, + @Qualifier("azure") restTemplate: RestTemplate, +) : AbstractRestClient(restTemplate, "bidrag-person") { + + private val hentPersonUri = + UriComponentsBuilder.fromUri(bidragPersonUrl).pathSegment("informasjon").build().toUri() + + @BrukerCacheable(PERSON_CACHE) + fun hentPerson(ident: String): HentPersonResponse { + return postForNonNullEntity(hentPersonUri, HentPersonRequest(ident)) + } +} \ No newline at end of file diff --git a/src/main/kotlin/no/nav/bidrag/behandling/consumer/BidragTilgangskontrollConsumer.kt b/src/main/kotlin/no/nav/bidrag/behandling/consumer/BidragTilgangskontrollConsumer.kt index e31152b18..21a40e56b 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/consumer/BidragTilgangskontrollConsumer.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/consumer/BidragTilgangskontrollConsumer.kt @@ -22,9 +22,9 @@ class BidragTilgangskontrollConsumer( @Value("\${BIDRAG_TILGANGSKONTROLL_URL}") val url: URI, @Qualifier("azure") private val restTemplate: RestOperations, ) : AbstractRestClient(restTemplate, "bidrag-tilgangskontroll") { - - private fun createUri(path: String?) = UriComponentsBuilder.fromUri(url) - .path(path ?: "").build().toUri() + private fun createUri(path: String?) = + UriComponentsBuilder.fromUri(url) + .path(path ?: "").build().toUri() // TODO: Bruk dette for å sjekke om saksbehandler har tilgang til behandling (sak) @Retryable(value = [Exception::class], maxAttempts = 3, backoff = Backoff(delay = 200, maxDelay = 1000, multiplier = 2.0)) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/controller/BehandlingBeregnForskuddController.kt b/src/main/kotlin/no/nav/bidrag/behandling/controller/BehandlingBeregnForskuddController.kt index 4547b0417..fd9ecdada 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/controller/BehandlingBeregnForskuddController.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/controller/BehandlingBeregnForskuddController.kt @@ -2,18 +2,17 @@ package no.nav.bidrag.behandling.controller import arrow.core.mapOrAccumulate import arrow.core.raise.either -import com.fasterxml.jackson.databind.ObjectMapper import io.swagger.v3.oas.annotations.Operation import io.swagger.v3.oas.annotations.security.SecurityRequirement import mu.KotlinLogging import no.nav.bidrag.behandling.beregning.ForskuddBeregning import no.nav.bidrag.behandling.consumer.BidragBeregnForskuddConsumer +import no.nav.bidrag.behandling.consumer.BidragPersonConsumer import no.nav.bidrag.behandling.dto.beregning.ForskuddBeregningPerBarn import no.nav.bidrag.behandling.dto.beregning.ForskuddBeregningRespons import no.nav.bidrag.behandling.service.BehandlingService -import no.nav.bidrag.domain.enums.Rolletype -import no.nav.bidrag.transport.beregning.forskudd.rest.request.BeregnForskuddGrunnlag -import org.springframework.http.HttpEntity +import no.nav.bidrag.behandling.transformers.toLocalDate +import no.nav.bidrag.behandling.transformers.toNoString import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.client.HttpClientErrorException @@ -26,13 +25,17 @@ class BehandlingBeregnForskuddController( private val behandlingService: BehandlingService, private val bidragBeregnForskuddConsumer: BidragBeregnForskuddConsumer, private val forskuddBeregning: ForskuddBeregning, + private val bidragPersonConsumer: BidragPersonConsumer ) { - - private fun isPeriodOneWithinPeriodTwo(datoFom1: LocalDate?, datoTom1: LocalDate?, datoFom2: LocalDate, datoTom2: LocalDate?) = - (datoFom1 === null || datoFom1 > datoFom2 || datoFom1.isEqual(datoFom2)) && ( - (datoTom2 == null && datoTom1 == null) || - (datoTom1 != null && (datoTom2 == null || datoTom1 < datoTom2 || datoTom1.isEqual(datoTom2))) - ) + private fun isPeriodOneWithinPeriodTwo( + datoFom1: LocalDate?, + datoTom1: LocalDate?, + datoFom2: LocalDate, + datoTom2: LocalDate?, + ) = (datoFom1 === null || datoFom1 > datoFom2 || datoFom1.isEqual(datoFom2)) && ( + (datoTom2 == null && datoTom1 == null) || + (datoTom1 != null && (datoTom2 == null || datoTom1 < datoTom2 || datoTom1.isEqual(datoTom2))) + ) @Suppress("unused") @PostMapping("/behandling/{behandlingId}/beregn") @@ -40,50 +43,52 @@ class BehandlingBeregnForskuddController( description = "Beregn forskudd", security = [SecurityRequirement(name = "bearer-key")], ) - fun beregnForskudd(@PathVariable behandlingId: Long): ForskuddBeregningRespons { + fun beregnForskudd( + @PathVariable behandlingId: Long, + ): ForskuddBeregningRespons { val behandling = behandlingService.hentBehandlingById(behandlingId) - val result = either { - val behandlingModel = forskuddBeregning.toBehandlingBeregningModel(behandling).bind() - val results = behandling - .roller - .filter { Rolletype.BARN == it.rolleType } - .mapOrAccumulate { - val payload = forskuddBeregning.toPayload(behandlingModel, it) + val result = + either { + val behandlingModel = forskuddBeregning.toBehandlingBeregningModel(behandling).bind() + val results = + behandling + .getSøknadsBarn() + .mapOrAccumulate { + val fDato = if (it.fodtDato == null) { + bidragPersonConsumer.hentPerson(it.ident).fødselsdato + } else it.fodtDato.toLocalDate().toNoString() - if (false) printDebugPayload(payload) + val payload = forskuddBeregning.toPayload(behandlingModel, it, fDato) - try { - val respons = - bidragBeregnForskuddConsumer.beregnForskudd(payload) - val beregnetForskuddPeriodeListe = respons.beregnetForskuddPeriodeListe - beregnetForskuddPeriodeListe.forEach { r -> - r.sivilstandType = behandlingModel.sivilstand.find { sivilstand -> isPeriodOneWithinPeriodTwo(r.periode.datoFom, r.periode.datoTil, sivilstand.datoFom, sivilstand.datoTom) }?.sivilstandType - } - ForskuddBeregningPerBarn( - ident = it.ident, - beregnetForskuddPeriodeListe = beregnetForskuddPeriodeListe, - grunnlagListe = respons.grunnlagListe, - ) - } catch (e: HttpClientErrorException) { - LOGGER.warn { e } - val errors = e.responseHeaders?.get("error")?.joinToString("\r\n") - raise(errors ?: e.message!!) - } catch (e: Exception) { - LOGGER.warn { e } - raise(e.message!!) - } - }.bind() + try { + val respons = + bidragBeregnForskuddConsumer.beregnForskudd(payload) + val beregnetForskuddPeriodeListe = respons.beregnetForskuddPeriodeListe + beregnetForskuddPeriodeListe.forEach { r -> + r.sivilstandType = + behandlingModel.sivilstand.find { + sivilstand -> + isPeriodOneWithinPeriodTwo(r.periode.datoFom, r.periode.datoTil, sivilstand.datoFom, sivilstand.datoTom) + }?.sivilstandType + } + ForskuddBeregningPerBarn( + ident = it.ident, + beregnetForskuddPeriodeListe = beregnetForskuddPeriodeListe, + grunnlagListe = respons.grunnlagListe, + ) + } catch (e: HttpClientErrorException) { + LOGGER.warn { e } + val errors = e.responseHeaders?.get("error")?.joinToString("\r\n") + raise(errors ?: e.message!!) + } catch (e: Exception) { + LOGGER.warn { e } + raise(e.message!!) + } + }.bind() - return@either results - } + return@either results + } return ForskuddBeregningRespons(result.getOrNull(), result.leftOrNull()) } - - private fun printDebugPayload(payload: BeregnForskuddGrunnlag) { - val message = HttpEntity(payload) - val objectMapper = ObjectMapper() - - objectMapper.writeValue(System.out, message.body) - } } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/controller/BehandlingController.kt b/src/main/kotlin/no/nav/bidrag/behandling/controller/BehandlingController.kt index ea91d69c5..7f5092b08 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/controller/BehandlingController.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/controller/BehandlingController.kt @@ -7,28 +7,28 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement import jakarta.validation.Valid import mu.KotlinLogging import no.nav.bidrag.behandling.database.datamodell.Behandling -import no.nav.bidrag.behandling.database.datamodell.Rolle import no.nav.bidrag.behandling.dto.behandling.BehandlingDto import no.nav.bidrag.behandling.dto.behandling.CreateBehandlingRequest import no.nav.bidrag.behandling.dto.behandling.CreateBehandlingResponse -import no.nav.bidrag.behandling.dto.behandling.CreateRolleRolleType import no.nav.bidrag.behandling.dto.behandling.RolleDto +import no.nav.bidrag.behandling.dto.behandling.SyncRollerRequest +import no.nav.bidrag.behandling.dto.behandling.UpdateBehandlingRequest import no.nav.bidrag.behandling.service.BehandlingService import no.nav.bidrag.behandling.transformers.toHusstandsBarnDto import no.nav.bidrag.behandling.transformers.toLocalDate +import no.nav.bidrag.behandling.transformers.toRolle import no.nav.bidrag.behandling.transformers.toRolleTypeDto import no.nav.bidrag.behandling.transformers.toSivilstandDto -import no.nav.bidrag.domain.enums.Rolletype import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PathVariable import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.PutMapping import org.springframework.web.bind.annotation.RequestBody + private val LOGGER = KotlinLogging.logger {} @BehandlingRestController class BehandlingController(private val behandlingService: BehandlingService) { - @Suppress("unused") @PostMapping("/behandling") @Operation( @@ -51,37 +51,27 @@ class BehandlingController(private val behandlingService: BehandlingService) { @RequestBody(required = true) createBehandling: CreateBehandlingRequest, ): CreateBehandlingResponse { - val behandling = Behandling( - createBehandling.behandlingType, - createBehandling.soknadType, - createBehandling.datoFom, - createBehandling.datoTom, - createBehandling.mottatDato, - createBehandling.saksnummer, - createBehandling.soknadId, - createBehandling.soknadRefId, - createBehandling.behandlerEnhet, - createBehandling.soknadFra, - createBehandling.stonadType, - createBehandling.engangsbelopType, - ) - val roller = HashSet( - createBehandling.roller.map { - Rolle( - behandling, - rolleType = when (it.rolleType) { - CreateRolleRolleType.BIDRAGS_MOTTAKER -> Rolletype.BIDRAGSMOTTAKER - CreateRolleRolleType.BIDRAGS_PLIKTIG -> Rolletype.BIDRAGSPLIKTIG - CreateRolleRolleType.REELL_MOTTAKER -> Rolletype.REELMOTTAKER - CreateRolleRolleType.BARN -> Rolletype.BARN - CreateRolleRolleType.FEILREGISTRERT -> Rolletype.FEILREGISTRERT - }, - it.ident, - it.fodtDato, - it.opprettetDato, - ) - }, - ) + val behandling = + Behandling( + createBehandling.behandlingType, + createBehandling.soknadType, + createBehandling.datoFom, + createBehandling.datoTom, + createBehandling.mottatDato, + createBehandling.saksnummer, + createBehandling.soknadId, + createBehandling.soknadRefId, + createBehandling.behandlerEnhet, + createBehandling.soknadFra, + createBehandling.stonadType, + createBehandling.engangsbelopType, + ) + val roller = + HashSet( + createBehandling.roller.map { + it.toRolle(behandling) + }, + ) behandling.roller.addAll(roller) @@ -95,6 +85,30 @@ class BehandlingController(private val behandlingService: BehandlingService) { return CreateBehandlingResponse(behandlingDo.id!!) } + @Suppress("unused") + @PutMapping("/behandling/{behandlingId}") + @Operation( + description = "Oppdatere behandling", + security = [SecurityRequirement(name = "bearer-key")], + ) + fun updateBehandling( + @PathVariable behandlingId: Long, + @Valid @RequestBody(required = true) request: UpdateBehandlingRequest, + ) { + behandlingService.updateBehandling(behandlingId, request.grunnlagspakkeId) + } + + @Suppress("unused") + @PutMapping("/behandling/{behandlingId}/roller/sync") + @Operation( + description = "Sync fra behandling", + security = [SecurityRequirement(name = "bearer-key")], + ) + fun syncRoller( + @PathVariable behandlingId: Long, + @Valid @RequestBody(required = true) request: SyncRollerRequest, + ) = behandlingService.syncRoller(behandlingId, request.roller) + @Suppress("unused") @PutMapping("/behandling/{behandlingId}/vedtak/{vedtakId}") @Operation( @@ -112,7 +126,10 @@ class BehandlingController(private val behandlingService: BehandlingService) { ), ], ) - fun oppdaterVedtakId(@PathVariable behandlingId: Long, @PathVariable vedtakId: Long) { + fun oppdaterVedtakId( + @PathVariable behandlingId: Long, + @PathVariable vedtakId: Long, + ) { behandlingService.oppdaterVedtakId(behandlingId, vedtakId) } @@ -133,7 +150,9 @@ class BehandlingController(private val behandlingService: BehandlingService) { ), ], ) - fun hentBehandling(@PathVariable behandlingId: Long): BehandlingDto { + fun hentBehandling( + @PathVariable behandlingId: Long, + ): BehandlingDto { return findBehandlingById(behandlingId) } @@ -142,34 +161,37 @@ class BehandlingController(private val behandlingService: BehandlingService) { return behandlingDto(behandlingId, behandling) } - private fun behandlingDto(behandlingId: Long, behandling: Behandling) = - BehandlingDto( - behandlingId, - behandling.behandlingType, - behandling.soknadType, - behandling.vedtakId != null, - behandling.datoFom.toLocalDate(), - behandling.datoTom.toLocalDate(), - behandling.mottatDato.toLocalDate(), - behandling.soknadFra, - behandling.saksnummer, - behandling.soknadId, - behandling.behandlerEnhet, - behandling.roller.map { - RolleDto(it.id!!, it.rolleType.toRolleTypeDto(), it.ident, it.fodtDato, it.opprettetDato) - }.toSet(), - behandling.husstandsBarn.toHusstandsBarnDto(), - behandling.sivilstand.toSivilstandDto(), - behandling.virkningsDato?.toLocalDate(), - behandling.soknadRefId, - behandling.aarsak, - behandling.virkningsTidspunktBegrunnelseMedIVedtakNotat, - behandling.virkningsTidspunktBegrunnelseKunINotat, - behandling.boforholdBegrunnelseMedIVedtakNotat, - behandling.boforholdBegrunnelseKunINotat, - behandling.inntektBegrunnelseMedIVedtakNotat, - behandling.inntektBegrunnelseKunINotat, - ) + private fun behandlingDto( + behandlingId: Long, + behandling: Behandling, + ) = BehandlingDto( + behandlingId, + behandling.behandlingType, + behandling.soknadType, + behandling.vedtakId != null, + behandling.datoFom.toLocalDate(), + behandling.datoTom.toLocalDate(), + behandling.mottatDato.toLocalDate(), + behandling.soknadFra, + behandling.saksnummer, + behandling.soknadId, + behandling.behandlerEnhet, + behandling.roller.map { + RolleDto(it.id!!, it.rolleType.toRolleTypeDto(), it.ident, it.fodtDato, it.opprettetDato) + }.toSet(), + behandling.husstandsBarn.toHusstandsBarnDto(), + behandling.sivilstand.toSivilstandDto(), + behandling.virkningsDato?.toLocalDate(), + behandling.soknadRefId, + behandling.grunnlagspakkeId, + behandling.aarsak, + behandling.virkningsTidspunktBegrunnelseMedIVedtakNotat, + behandling.virkningsTidspunktBegrunnelseKunINotat, + behandling.boforholdBegrunnelseMedIVedtakNotat, + behandling.boforholdBegrunnelseKunINotat, + behandling.inntektBegrunnelseMedIVedtakNotat, + behandling.inntektBegrunnelseKunINotat, + ) @Suppress("unused") @GetMapping("/behandling") diff --git a/src/main/kotlin/no/nav/bidrag/behandling/controller/BoforholdController.kt b/src/main/kotlin/no/nav/bidrag/behandling/controller/BoforholdController.kt index 48aa3518a..64ad5f27f 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/controller/BoforholdController.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/controller/BoforholdController.kt @@ -16,7 +16,6 @@ import org.springframework.web.bind.annotation.RequestBody @BehandlingRestController class BoforholdController(private val behandlingService: BehandlingService) { - @Suppress("unused") @PutMapping("/behandling/{behandlingId}/boforhold") @Operation( diff --git a/src/main/kotlin/no/nav/bidrag/behandling/controller/ExceptionHandler.kt b/src/main/kotlin/no/nav/bidrag/behandling/controller/ExceptionHandler.kt index db52a7a9c..fbba0ba1a 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/controller/ExceptionHandler.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/controller/ExceptionHandler.kt @@ -2,7 +2,6 @@ package no.nav.bidrag.behandling.controller import com.fasterxml.jackson.databind.JsonMappingException import com.fasterxml.jackson.databind.exc.InvalidFormatException -import mu.KotlinLogging import org.springframework.core.Ordered import org.springframework.core.annotation.Order import org.springframework.core.convert.ConversionFailedException @@ -17,21 +16,22 @@ import org.springframework.web.bind.annotation.ResponseBody import org.springframework.web.client.HttpStatusCodeException import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException -private val log = KotlinLogging.logger {} - @Order(Ordered.HIGHEST_PRECEDENCE) @ControllerAdvice @Suppress("unused") class ExceptionHandler { @ResponseBody - @ExceptionHandler(value = [MethodArgumentNotValidException::class, InvalidFormatException::class, IllegalArgumentException::class, MethodArgumentTypeMismatchException::class, ConversionFailedException::class, HttpMessageNotReadableException::class]) + @ExceptionHandler( + value = [MethodArgumentNotValidException::class, InvalidFormatException::class, IllegalArgumentException::class, MethodArgumentTypeMismatchException::class, ConversionFailedException::class, HttpMessageNotReadableException::class], + ) fun handleInvalidValueExceptions(exception: Exception): ResponseEntity<*> { val cause = exception.cause ?: exception - val validationError = when (cause) { - is JsonMappingException -> createMissingKotlinParameterViolation(cause) - is MethodArgumentNotValidException -> parseMethodArgumentNotValidException(cause) - else -> null - } + val validationError = + when (cause) { + is JsonMappingException -> createMissingKotlinParameterViolation(cause) + is MethodArgumentNotValidException -> parseMethodArgumentNotValidException(cause) + else -> null + } val errorMessage = validationError?.fieldErrors?.joinToString(", ") { "${it.field}: ${it.message}" } ?: "ukjent feil" @@ -55,16 +55,6 @@ class ExceptionHandler { .build() } - @ResponseBody - @ExceptionHandler(Exception::class) - fun handleOtherExceptions(exception: Exception): ResponseEntity<*> { - log.warn("Det skjedde en ukjent feil", exception) - return ResponseEntity - .status(HttpStatus.INTERNAL_SERVER_ERROR) - .header(HttpHeaders.WARNING, "Det skjedde en ukjent feil: ${exception.message}") - .build() - } - private fun getErrorMessage(exception: HttpStatusCodeException): String { val errorMessage = StringBuilder() errorMessage.append("Det skjedde en feil ved kall mot ekstern tjeneste: ") @@ -93,8 +83,16 @@ class ExceptionHandler { return error } - data class Error(val status: Int, val message: String, val fieldErrors: MutableList = mutableListOf()) { - fun addFieldError(objectName: String, field: String, message: String) { + data class Error( + val status: Int, + val message: String, + val fieldErrors: MutableList = mutableListOf(), + ) { + fun addFieldError( + objectName: String, + field: String, + message: String, + ) { val error = CustomFieldError(objectName, field, message) fieldErrors.add(error) } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/controller/ForsendelseController.kt b/src/main/kotlin/no/nav/bidrag/behandling/controller/ForsendelseController.kt index 4ce162a93..ddeb42525 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/controller/ForsendelseController.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/controller/ForsendelseController.kt @@ -10,7 +10,6 @@ import org.springframework.web.bind.annotation.RequestBody @BehandlingRestController class ForsendelseController(private val forsendelseService: ForsendelseService) { - @Suppress("unused") @PostMapping("/forsendelse/init") @Operation( diff --git a/src/main/kotlin/no/nav/bidrag/behandling/controller/InntekterController.kt b/src/main/kotlin/no/nav/bidrag/behandling/controller/InntekterController.kt index 2e9a56180..5829990c6 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/controller/InntekterController.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/controller/InntekterController.kt @@ -20,7 +20,6 @@ import org.springframework.web.bind.annotation.RequestBody @BehandlingRestController class InntekterController(private val behandlingService: BehandlingService) { - @Suppress("unused") @PutMapping("/behandling/{behandlingId}/inntekter") @Operation( @@ -42,16 +41,15 @@ class InntekterController(private val behandlingService: BehandlingService) { @PathVariable behandlingId: Long, @RequestBody request: UpdateInntekterRequest, ): InntekterResponse { - val behandling = behandlingService.hentBehandlingById(behandlingId) + var behandling = behandlingService.hentBehandlingById(behandlingId) behandlingService.oppdaterInntekter( behandlingId, - request.inntekter.toInntektDomain(behandling), + request.inntekter.toInntektDomain(behandling!!), request.barnetillegg.toBarnetilleggDomain(behandling), request.utvidetbarnetrygd.toUtvidetbarnetrygdDomain(behandling), request.inntektBegrunnelseMedIVedtakNotat, request.inntektBegrunnelseKunINotat, - ) val newBehandling = behandlingService.hentBehandlingById(behandlingId) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/controller/OpplysningerController.kt b/src/main/kotlin/no/nav/bidrag/behandling/controller/OpplysningerController.kt index 7ca5e3a0b..5ce4aea95 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/controller/OpplysningerController.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/controller/OpplysningerController.kt @@ -4,7 +4,7 @@ import io.swagger.v3.oas.annotations.Operation import io.swagger.v3.oas.annotations.responses.ApiResponse import io.swagger.v3.oas.annotations.responses.ApiResponses import io.swagger.v3.oas.annotations.security.SecurityRequirement -import no.nav.bidrag.behandling.`404` +import no.nav.bidrag.behandling.behandlingNotFoundException import no.nav.bidrag.behandling.database.datamodell.OpplysningerType import no.nav.bidrag.behandling.dto.opplysninger.AddOpplysningerRequest import no.nav.bidrag.behandling.dto.opplysninger.OpplysningerDto @@ -18,7 +18,6 @@ import org.springframework.web.bind.annotation.RequestBody @BehandlingRestController class OpplysningerController(val opplysningerService: OpplysningerService) { - @Suppress("unused") @PostMapping("/behandling/{behandlingId}/opplysninger") @Operation( @@ -62,7 +61,13 @@ class OpplysningerController(val opplysningerService: OpplysningerService) { ), ], ) - fun hentAktiv(@PathVariable behandlingId: Long, @PathVariable opplysningerType: OpplysningerType): OpplysningerDto { - return opplysningerService.hentSistAktiv(behandlingId, opplysningerType).orElseThrow { `404`(behandlingId) }.toDto() + fun hentAktiv( + @PathVariable behandlingId: Long, + @PathVariable opplysningerType: OpplysningerType, + ): OpplysningerDto { + return opplysningerService.hentSistAktiv( + behandlingId, + opplysningerType, + ).orElseThrow { behandlingNotFoundException(behandlingId) }.toDto() } } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/controller/VirkningsTidspunktController.kt b/src/main/kotlin/no/nav/bidrag/behandling/controller/VirkningsTidspunktController.kt index 69878291e..b2434a38e 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/controller/VirkningsTidspunktController.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/controller/VirkningsTidspunktController.kt @@ -16,7 +16,6 @@ import org.springframework.web.bind.annotation.RequestBody @BehandlingRestController class VirkningsTidspunktController(private val behandlingService: BehandlingService) { - @Suppress("unused") @PutMapping("/behandling/{behandlingId}/virkningstidspunkt") @Operation( diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Barnetillegg.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Barnetillegg.kt index a74b35652..03f3f9d17 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Barnetillegg.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Barnetillegg.kt @@ -15,12 +15,10 @@ class Barnetillegg( @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "behandling_id", nullable = false) val behandling: Behandling, - val ident: String, val barnetillegg: BigDecimal, val datoFom: Date?, val datoTom: Date?, - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Behandling.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Behandling.kt index 2b5778473..2b608221d 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Behandling.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Behandling.kt @@ -11,82 +11,66 @@ import jakarta.persistence.GenerationType import jakarta.persistence.Id import jakarta.persistence.OneToMany import no.nav.bidrag.domain.enums.EngangsbelopType +import no.nav.bidrag.domain.enums.Rolletype import no.nav.bidrag.domain.enums.StonadType +import org.hibernate.annotations.SQLDelete +import org.hibernate.annotations.Where import java.util.Date @Entity(name = "behandling") +@SQLDelete(sql = "UPDATE behandling SET deleted = true WHERE id=?") +@Where(clause = "deleted=false") class Behandling( @Enumerated(EnumType.STRING) val behandlingType: BehandlingType, - @Enumerated(EnumType.STRING) val soknadType: SoknadType, // TODO Endre til VedtakType - val datoFom: Date, - val datoTom: Date, - val mottatDato: Date, - val saksnummer: String, val soknadId: Long, val soknadRefId: Long? = null, - val behandlerEnhet: String, - @Enumerated(EnumType.STRING) val soknadFra: SoknadFraType, - @Enumerated(EnumType.STRING) var stonadType: StonadType?, - @Enumerated(EnumType.STRING) var engangsbelopType: EngangsbelopType?, - var vedtakId: Long? = null, - var virkningsDato: Date? = null, - @Enumerated(EnumType.STRING) var aarsak: ForskuddAarsakType? = null, - @Column(name = "VIRKNINGS_TIDSPUNKT_BEGRUNNELSE_MED_I_VEDTAK_NOTAT") var virkningsTidspunktBegrunnelseMedIVedtakNotat: String? = null, - @Column(name = "VIRKNINGS_TIDSPUNKT_BEGRUNNELSE_KUN_I_NOTAT") var virkningsTidspunktBegrunnelseKunINotat: String? = null, - @Column(name = "BOFORHOLD_BEGRUNNELSE_MED_I_VEDTAK_NOTAT") var boforholdBegrunnelseMedIVedtakNotat: String? = null, - @Column(name = "BOFORHOLD_BEGRUNNELSE_KUN_I_NOTAT") var boforholdBegrunnelseKunINotat: String? = null, - @Column(name = "INNTEKT_BEGRUNNELSE_MED_I_VEDTAK_NOTAT") var inntektBegrunnelseMedIVedtakNotat: String? = null, - @Column(name = "INNTEKT_BEGRUNNELSE_KUN_I_NOTAT") var inntektBegrunnelseKunINotat: String? = null, - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, - + var grunnlagspakkeId: Long? = null, @OneToMany(fetch = FetchType.EAGER, mappedBy = "behandling", cascade = [CascadeType.ALL], orphanRemoval = true) var roller: MutableSet = mutableSetOf(), - @OneToMany(fetch = FetchType.EAGER, mappedBy = "behandling", cascade = [CascadeType.ALL], orphanRemoval = true) var husstandsBarn: MutableSet = mutableSetOf(), - @OneToMany(fetch = FetchType.EAGER, mappedBy = "behandling", cascade = [CascadeType.ALL], orphanRemoval = true) var inntekter: MutableSet = mutableSetOf(), - @OneToMany(fetch = FetchType.EAGER, mappedBy = "behandling", cascade = [CascadeType.ALL], orphanRemoval = true) var sivilstand: MutableSet = mutableSetOf(), - @OneToMany(fetch = FetchType.EAGER, mappedBy = "behandling", cascade = [CascadeType.ALL], orphanRemoval = true) var barnetillegg: MutableSet = mutableSetOf(), - @OneToMany(fetch = FetchType.EAGER, mappedBy = "behandling", cascade = [CascadeType.ALL], orphanRemoval = true) var utvidetbarnetrygd: MutableSet = mutableSetOf(), -) + var deleted: Boolean = false, +) { + fun getSøknadsBarn() = roller.filter { it.rolleType == Rolletype.BARN } +} diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/HusstandsBarn.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/HusstandsBarn.kt index 6774be632..63b264753 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/HusstandsBarn.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/HusstandsBarn.kt @@ -17,10 +17,8 @@ class HusstandsBarn( @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "behandling_id", nullable = false) val behandling: Behandling, - @Column(name = "med_i_saken") val medISaken: Boolean, - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/HusstandsBarnPeriode.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/HusstandsBarnPeriode.kt index 4f73dae72..6e7ccb31e 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/HusstandsBarnPeriode.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/HusstandsBarnPeriode.kt @@ -16,16 +16,11 @@ class HusstandsBarnPeriode( @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "barn_i_husstand_id", nullable = false) val husstandsBarn: HusstandsBarn, - val datoFom: Date?, - val datoTom: Date?, - @Enumerated(EnumType.STRING) val boStatus: BoStatusType?, - val kilde: String, - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Inntekt.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Inntekt.kt index bbb1d2151..1944608e0 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Inntekt.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Inntekt.kt @@ -14,22 +14,19 @@ import java.util.Date @Entity(name = "inntekt") class Inntekt( - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "behandling_id", nullable = false) - val behandling: Behandling, - - val taMed: Boolean, val inntektType: String?, val belop: BigDecimal, val datoFom: Date?, val datoTom: Date?, val ident: String, val fraGrunnlag: Boolean, - + val taMed: Boolean, @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, - + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "behandling_id", nullable = false) + val behandling: Behandling? = null, @OneToMany(fetch = FetchType.EAGER, mappedBy = "inntekt", cascade = [CascadeType.ALL], orphanRemoval = true) var inntektPostListe: MutableSet = mutableSetOf(), ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/InntektPostDomain.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/InntektPostDomain.kt index aedbe2af4..729b656ac 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/InntektPostDomain.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/InntektPostDomain.kt @@ -12,18 +12,14 @@ import java.math.BigDecimal @Entity(name = "inntekt_post") class InntektPostDomain( - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "inntekt_id", nullable = false) - val inntekt: Inntekt, - @Column(name = "belop") val beløp: BigDecimal, - val kode: String, - val visningsnavn: String, - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "inntekt_id", nullable = false) + val inntekt: Inntekt? = null, ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Opplysninger.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Opplysninger.kt index fd9b14f2f..5d4073892 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Opplysninger.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Opplysninger.kt @@ -14,21 +14,15 @@ import java.util.Date @Entity(name = "opplysninger") class Opplysninger( - @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "behandling_id", nullable = false) val behandling: Behandling, - @Enumerated(EnumType.STRING) val opplysningerType: OpplysningerType, - val data: String, - val hentetDato: Date, - @Column(insertable = false, updatable = false) val ts: Date? = null, - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt index 714a59b6e..eb9bdb731 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Rolle.kt @@ -10,26 +10,26 @@ import jakarta.persistence.Id import jakarta.persistence.JoinColumn import jakarta.persistence.ManyToOne import no.nav.bidrag.domain.enums.Rolletype +import org.hibernate.annotations.SQLDelete +import org.hibernate.annotations.Where import java.util.Date @Entity(name = "rolle") +@SQLDelete(sql = "UPDATE rolle SET deleted = true WHERE id=?") +@Where(clause = "deleted=false") class Rolle( @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "behandling_id", nullable = false) val behandling: Behandling, - @Enumerated(EnumType.STRING) val rolleType: Rolletype, - val ident: String, - val fodtDato: Date?, val opprettetDato: Date?, - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, - + val deleted: Boolean = false, @Transient val soknadsLinje: Int = 1, ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Sivilstand.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Sivilstand.kt index 0431ad104..96b9edca5 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Sivilstand.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Sivilstand.kt @@ -16,14 +16,10 @@ class Sivilstand( @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "behandling_id", nullable = false) val behandling: Behandling, - val datoFom: Date?, - val datoTom: Date?, - @Enumerated(EnumType.STRING) val sivilstandType: SivilstandType, - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/SoknadType.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/SoknadType.kt index 543ccc483..8c98b2865 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/SoknadType.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/SoknadType.kt @@ -4,7 +4,6 @@ import io.swagger.v3.oas.annotations.media.Schema @Schema(enumAsRef = true) enum class SoknadType { - INDEKSREGULERING, ALDERSJUSTERING, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Utvidetbarnetrygd.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Utvidetbarnetrygd.kt index ac77679a0..460003ba0 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Utvidetbarnetrygd.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/datamodell/Utvidetbarnetrygd.kt @@ -15,13 +15,10 @@ class Utvidetbarnetrygd( @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "behandling_id", nullable = false) val behandling: Behandling, - val deltBoSted: Boolean, - val belop: BigDecimal, val datoFom: Date?, val datoTom: Date?, - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/repository/BehandlingRepository.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/repository/BehandlingRepository.kt index 006ac80ba..fea2d101e 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/repository/BehandlingRepository.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/repository/BehandlingRepository.kt @@ -10,7 +10,6 @@ import java.util.Date import java.util.Optional interface BehandlingRepository : CrudRepository { - fun findBehandlingById(id: Long): Optional @Query("select b from behandling b") @@ -40,5 +39,8 @@ interface BehandlingRepository : CrudRepository { "b.vedtakId = :vedtakId " + "where b.id = :behandlingId", ) - fun oppdaterVedtakId(behandlingId: Long, vedtakId: Long) + fun oppdaterVedtakId( + behandlingId: Long, + vedtakId: Long, + ) } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/repository/OpplysningerRepository.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/repository/OpplysningerRepository.kt index b09977c53..9d5910ee4 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/database/repository/OpplysningerRepository.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/repository/OpplysningerRepository.kt @@ -6,5 +6,8 @@ import org.springframework.data.repository.CrudRepository import java.util.Optional interface OpplysningerRepository : CrudRepository { - fun findTopByBehandlingIdAndOpplysningerTypeOrderByTsDescIdDesc(behandlingId: Long, opplysningerType: OpplysningerType): Optional + fun findTopByBehandlingIdAndOpplysningerTypeOrderByTsDescIdDesc( + behandlingId: Long, + opplysningerType: OpplysningerType, + ): Optional } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/database/repository/RolleRepository.kt b/src/main/kotlin/no/nav/bidrag/behandling/database/repository/RolleRepository.kt new file mode 100644 index 000000000..9c3dd0cf3 --- /dev/null +++ b/src/main/kotlin/no/nav/bidrag/behandling/database/repository/RolleRepository.kt @@ -0,0 +1,10 @@ +package no.nav.bidrag.behandling.database.repository + +import no.nav.bidrag.behandling.database.datamodell.Rolle +import org.springframework.data.jpa.repository.Query +import org.springframework.data.repository.CrudRepository + +interface RolleRepository : CrudRepository { + @Query("select r from rolle r where r.behandling.id = :behandlingId") + fun findRollerByBehandlingId(behandlingId: Long): List +} diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/HentPersonRequest.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/HentPersonRequest.kt new file mode 100644 index 000000000..59ae8ed3e --- /dev/null +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/HentPersonRequest.kt @@ -0,0 +1,3 @@ +package no.nav.bidrag.behandling.dto + +data class HentPersonRequest(val ident: String) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/HentPersonResponse.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/HentPersonResponse.kt new file mode 100644 index 000000000..49bd99bd8 --- /dev/null +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/HentPersonResponse.kt @@ -0,0 +1,6 @@ +package no.nav.bidrag.behandling.dto + +data class HentPersonResponse( + val ident: String, + val fødselsdato: String, +) \ No newline at end of file diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/IngenTilgang.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/IngenTilgang.kt index f0a111954..dc94812a5 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/IngenTilgang.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/IngenTilgang.kt @@ -2,4 +2,5 @@ package no.nav.bidrag.behandling.dto import org.springframework.http.HttpStatus import org.springframework.web.client.HttpClientErrorException + fun ingenTilgang(message: String): Nothing = throw HttpClientErrorException(HttpStatus.FORBIDDEN, message) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/BehandlingDto.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/BehandlingDto.kt index 08d48c6a4..81e3254df 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/BehandlingDto.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/BehandlingDto.kt @@ -15,19 +15,15 @@ data class BehandlingDto( val behandlingType: BehandlingType, // Union av StonadType og EngangsbelopType val soknadType: SoknadType, // TODO Bruk VedtakType istedenfor val erVedtakFattet: Boolean, - @Schema(type = "string", format = "date", example = "01.12.2025") @JsonFormat(pattern = "yyyy-MM-dd") val datoFom: LocalDate, - @Schema(type = "string", format = "date", example = "01.12.2025") @JsonFormat(pattern = "yyyy-MM-dd") val datoTom: LocalDate, - @Schema(type = "string", format = "date", example = "01.12.2025") @JsonFormat(pattern = "yyyy-MM-dd") val mottatDato: LocalDate, - val soknadFraType: SoknadFraType, val saksnummer: String, val soknadId: Long, @@ -35,11 +31,11 @@ data class BehandlingDto( val roller: Set, val husstandsBarn: Set, val sivilstand: Set, - @Schema(type = "string", format = "date", example = "01.12.2025") @JsonFormat(pattern = "yyyy-MM-dd") val virkningsDato: LocalDate? = null, val soknadRefId: Long? = null, + val grunnlagspakkeId: Long? = null, val aarsak: ForskuddAarsakType? = null, val virkningsTidspunktBegrunnelseMedIVedtakNotat: String? = null, val virkningsTidspunktBegrunnelseKunINotat: String? = null, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/CreateBehandlingRequest.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/CreateBehandlingRequest.kt index 5f7a5d994..600b8c81c 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/CreateBehandlingRequest.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/CreateBehandlingRequest.kt @@ -14,36 +14,26 @@ import java.util.Date data class CreateBehandlingRequest( @Schema(required = true) val behandlingType: BehandlingType, - @Schema(required = true) val soknadType: SoknadType, - @Schema(required = true) val datoFom: Date, - @Schema(required = true) val datoTom: Date, - @Schema(required = true) val mottatDato: Date, - @Schema(required = true) val soknadFra: SoknadFraType, - @field:NotBlank(message = "Saksnummer kan ikke være blank") @field:Size(max = 7, message = "Saks nummer kan ikke være lengre enn 7 tegn") val saksnummer: String, - @field:NotBlank(message = "Enhet kan ikke være blank") @field:Size(min = 4, max = 4, message = "Enhet må være 4 tegn") val behandlerEnhet: String, - @field:Size(min = 2, message = "Sak må ha minst to roller involvert") val roller: Set<@Valid CreateRolleDto>, - @Schema(required = true) var stonadType: StonadType?, - @Schema(required = true) var engangsbelopType: EngangsbelopType?, @Schema(required = true) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/CreateRolleDto.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/CreateRolleDto.kt index d14d63a5c..70f03f51d 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/CreateRolleDto.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/CreateRolleDto.kt @@ -16,14 +16,12 @@ enum class CreateRolleRolleType { data class CreateRolleDto( @Schema(required = true, enumAsRef = true) val rolleType: CreateRolleRolleType, - @Schema(type = "string", description = "F.eks fødselsnummer", required = true, nullable = false) @field:NotBlank val ident: String, - @Schema(type = "string", format = "date", description = "F.eks fødselsdato") val fodtDato: Date?, - @Schema(type = "string", format = "date", description = "Opprettet dato") val opprettetDato: Date?, + val erSlettet: Boolean = false, ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/ForskuddDto.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/ForskuddDto.kt index b736f7e7c..33a9208c8 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/ForskuddDto.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/ForskuddDto.kt @@ -2,13 +2,14 @@ package no.nav.bidrag.behandling.dto.behandling import io.swagger.v3.oas.annotations.media.Schema import no.nav.bidrag.behandling.database.datamodell.SivilstandType -import no.nav.bidrag.transport.beregning.forskudd.rest.request.Grunnlag +import no.nav.bidrag.transport.beregning.felles.Grunnlag import java.math.BigDecimal import java.time.LocalDate @Schema(description = "Beregnet forskudd") data class ForskuddDto( - @Schema(description = "Periodisert liste over resultat av forskuddsberegning") var beregnetForskuddPeriodeListe: List = emptyList(), + @Schema(description = "Periodisert liste over resultat av forskuddsberegning") var beregnetForskuddPeriodeListe: List = + emptyList(), @Schema(description = "Grunnlagsliste") val grunnlagListe: List, ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/SivilstandDto.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/SivilstandDto.kt index 1b7f24ada..bb181ad9c 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/SivilstandDto.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/SivilstandDto.kt @@ -7,14 +7,11 @@ import java.time.LocalDate data class SivilstandDto( val id: Long? = null, - @Schema(type = "string", format = "date", example = "2025-01-25") @JsonFormat(pattern = "yyyy-MM-dd") val datoFom: LocalDate?, - @Schema(type = "string", format = "date", example = "2025-01-25") @JsonFormat(pattern = "yyyy-MM-dd") val datoTom: LocalDate?, - val sivilstandType: SivilstandType, ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/SyncRollerRequest.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/SyncRollerRequest.kt new file mode 100644 index 000000000..b1412dd02 --- /dev/null +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/SyncRollerRequest.kt @@ -0,0 +1,7 @@ +package no.nav.bidrag.behandling.dto.behandling + +import io.swagger.v3.oas.annotations.media.Schema + +data class SyncRollerRequest( + @Schema(required = true) val roller: List, +) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/UpdateBehandlingRequest.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/UpdateBehandlingRequest.kt new file mode 100644 index 000000000..6cf34d1f1 --- /dev/null +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/UpdateBehandlingRequest.kt @@ -0,0 +1,5 @@ +package no.nav.bidrag.behandling.dto.behandling + +data class UpdateBehandlingRequest( + val grunnlagspakkeId: Long? = null, +) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/UpdateBehandlingRequestExtended.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/UpdateBehandlingRequestExtended.kt deleted file mode 100644 index eeb07ca1c..000000000 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/behandling/UpdateBehandlingRequestExtended.kt +++ /dev/null @@ -1,26 +0,0 @@ -package no.nav.bidrag.behandling.dto.behandling - -import com.fasterxml.jackson.annotation.JsonFormat -import io.swagger.v3.oas.annotations.media.Schema -import jakarta.persistence.EnumType -import jakarta.persistence.Enumerated -import no.nav.bidrag.behandling.database.datamodell.SoknadFraType -import no.nav.bidrag.behandling.database.datamodell.SoknadType -import java.util.Date - -data class UpdateBehandlingRequestExtended( - - @Enumerated(EnumType.STRING) - val soknadType: SoknadType, - - @Enumerated(EnumType.STRING) - val soknadFraType: SoknadFraType, - - @Schema(type = "string", format = "date", example = "2025-01-25") - @JsonFormat(pattern = "yyyy-MM-dd") - val datoFom: Date, - - @Schema(type = "string", format = "date", example = "2025-01-25") - @JsonFormat(pattern = "yyyy-MM-dd") - val mottatDato: Date, -) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/beregning/ForskuddBeregningRespons.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/beregning/ForskuddBeregningRespons.kt index 8020f5a2c..1067bd35f 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/beregning/ForskuddBeregningRespons.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/beregning/ForskuddBeregningRespons.kt @@ -1,7 +1,7 @@ package no.nav.bidrag.behandling.dto.beregning import no.nav.bidrag.behandling.dto.behandling.ResultatPeriode -import no.nav.bidrag.transport.beregning.forskudd.rest.request.Grunnlag +import no.nav.bidrag.transport.beregning.felles.Grunnlag data class ForskuddBeregningRespons( val resultat: List?, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/boforhold/UpdateBoforholdRequest.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/boforhold/UpdateBoforholdRequest.kt index eef1c12f3..66eb5a506 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/boforhold/UpdateBoforholdRequest.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/boforhold/UpdateBoforholdRequest.kt @@ -9,7 +9,6 @@ data class UpdateBoforholdRequest( val husstandsBarn: Set, @Schema(required = true) val sivilstand: Set, - val boforholdBegrunnelseMedIVedtakNotat: String? = null, val boforholdBegrunnelseKunINotat: String? = null, ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/forsendelse/ForsendelseTyper.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/forsendelse/ForsendelseTyper.kt index 7ca7c1dd0..4636b427a 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/forsendelse/ForsendelseTyper.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/forsendelse/ForsendelseTyper.kt @@ -20,13 +20,13 @@ data class BehandlingInfoDto( val barnIBehandling: List = emptyList(), ) { fun erBehandlingType(stonadType: StonadType?) = this.stonadType == stonadType - fun erBehandlingType(engangsBelopType: EngangsbelopType?) = - this.engangsBelopType == engangsBelopType - fun erGebyr() = - erBehandlingType(EngangsbelopType.GEBYR_SKYLDNER) || erBehandlingType(EngangsbelopType.GEBYR_MOTTAKER) + fun erBehandlingType(engangsBelopType: EngangsbelopType?) = this.engangsBelopType == engangsBelopType + + fun erGebyr() = erBehandlingType(EngangsbelopType.GEBYR_SKYLDNER) || erBehandlingType(EngangsbelopType.GEBYR_MOTTAKER) fun erBehandlingType(behandlingType: String?) = this.behandlingType == behandlingType + fun erVedtakFattet() = erFattetBeregnet != null || vedtakId != null } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/forsendelse/InitalizeForsendelseRequest.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/forsendelse/InitalizeForsendelseRequest.kt index 49006f019..5b85ada98 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/forsendelse/InitalizeForsendelseRequest.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/forsendelse/InitalizeForsendelseRequest.kt @@ -17,7 +17,7 @@ data class InitalizeForsendelseRequest( ) data class ForsendelseRolleDto( - val fødselsnummer: PersonIdent, + val fødselsnummer: PersonIdent?, val type: Rolletype, ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/husstandsbarn/HusstandsBarnDto.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/husstandsbarn/HusstandsBarnDto.kt index 5bd12fd79..4e10d309c 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/husstandsbarn/HusstandsBarnDto.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/husstandsbarn/HusstandsBarnDto.kt @@ -6,16 +6,12 @@ import java.time.LocalDate data class HusstandsBarnDto( val id: Long?, - @Schema(required = true) val medISaken: Boolean, - @Schema(required = true) val perioder: Set, - val ident: String? = null, val navn: String? = null, - @Schema(type = "string", format = "date", example = "2025-01-25") @JsonFormat(pattern = "yyyy-MM-dd") val foedselsDato: LocalDate? = null, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/husstandsbarn/HusstandsBarnPeriodeDto.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/husstandsbarn/HusstandsBarnPeriodeDto.kt index 0c4a99dea..e6a1c9347 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/husstandsbarn/HusstandsBarnPeriodeDto.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/husstandsbarn/HusstandsBarnPeriodeDto.kt @@ -7,18 +7,14 @@ import java.time.LocalDate data class HusstandsBarnPeriodeDto( val id: Long?, - @Schema(type = "string", format = "date", example = "2025-01-25") @JsonFormat(pattern = "yyyy-MM-dd") val datoFom: LocalDate?, - @Schema(type = "string", format = "date", example = "2025-01-25") @JsonFormat(pattern = "yyyy-MM-dd") val datoTom: LocalDate?, - @Schema(required = true) val boStatus: BoStatusType?, - @Schema(required = true) val kilde: String, ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/BarnetilleggDto.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/BarnetilleggDto.kt index 9d723502a..a4c7d7903 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/BarnetilleggDto.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/BarnetilleggDto.kt @@ -7,17 +7,13 @@ import java.time.LocalDate data class BarnetilleggDto( val id: Long? = null, - @Schema(required = true) val ident: String, - @Schema(required = true) val barnetillegg: BigDecimal, - @Schema(type = "string", format = "date", example = "2025-01-25") @JsonFormat(pattern = "yyyy-MM-dd") val datoFom: LocalDate?, - @Schema(type = "string", format = "date", example = "2025-01-25") @JsonFormat(pattern = "yyyy-MM-dd") val datoTom: LocalDate?, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/InntektDto.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/InntektDto.kt index ce9e8b951..f40bea289 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/InntektDto.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/InntektDto.kt @@ -8,29 +8,21 @@ import java.time.LocalDate data class InntektDto( val id: Long? = null, - @Schema(required = true) val taMed: Boolean, - val inntektType: String?, - @Schema(required = true) val belop: BigDecimal, - @Schema(type = "string", format = "date", example = "2025-01-25") @JsonFormat(pattern = "yyyy-MM-dd") val datoFom: LocalDate?, - @Schema(type = "string", format = "date", example = "2025-01-25") @JsonFormat(pattern = "yyyy-MM-dd") val datoTom: LocalDate?, - @Schema(required = true) val ident: String, - @Schema(required = true) val fraGrunnlag: Boolean, - @Schema(required = true) val inntektPostListe: Set, ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/UpdateInntekterRequest.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/UpdateInntekterRequest.kt index 7336655fe..ab3f4a1a6 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/UpdateInntekterRequest.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/UpdateInntekterRequest.kt @@ -5,13 +5,10 @@ import io.swagger.v3.oas.annotations.media.Schema data class UpdateInntekterRequest( @Schema(required = true) val inntekter: Set, - @Schema(required = true) val barnetillegg: Set, - @Schema(required = true) val utvidetbarnetrygd: Set, - val inntektBegrunnelseMedIVedtakNotat: String? = null, val inntektBegrunnelseKunINotat: String? = null, ) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/UtvidetbarnetrygdDto.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/UtvidetbarnetrygdDto.kt index db3fc749c..fbfda68f8 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/UtvidetbarnetrygdDto.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/inntekt/UtvidetbarnetrygdDto.kt @@ -7,17 +7,13 @@ import java.time.LocalDate data class UtvidetbarnetrygdDto( val id: Long? = null, - @Schema(required = true) val deltBoSted: Boolean, - @Schema(required = true) val belop: BigDecimal, - @Schema(type = "string", format = "date", example = "2025-01-25") @JsonFormat(pattern = "yyyy-MM-dd") val datoFom: LocalDate?, - @Schema(type = "string", format = "date", example = "2025-01-25") @JsonFormat(pattern = "yyyy-MM-dd") val datoTom: LocalDate?, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/opplysninger/AddOpplysningerRequest.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/opplysninger/AddOpplysningerRequest.kt index cce1bc194..232223dc3 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/opplysninger/AddOpplysningerRequest.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/opplysninger/AddOpplysningerRequest.kt @@ -9,17 +9,13 @@ import java.time.LocalDate data class AddOpplysningerRequest( @Schema(required = true, nullable = false) val behandlingId: Long, - @Schema(required = true, nullable = false) val aktiv: Boolean, - @Schema(required = true, nullable = false) val opplysningerType: OpplysningerType, - @Schema(type = "string", description = "data", required = true, nullable = false) @field:NotBlank val data: String, - @Schema(type = "string", format = "date", example = "2025-01-25") @JsonFormat(pattern = "yyyy-MM-dd") val hentetDato: LocalDate, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/opplysninger/OpplysningerDto.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/opplysninger/OpplysningerDto.kt index 44d644905..2bad88dc0 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/opplysninger/OpplysningerDto.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/opplysninger/OpplysningerDto.kt @@ -10,7 +10,6 @@ data class OpplysningerDto( val behandlingId: Long, val opplysningerType: OpplysningerType, val data: String, - @Schema(type = "string", format = "date", example = "01.12.2025") @JsonFormat(pattern = "yyyy-MM-dd") val hentetDato: LocalDate, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/virkningstidspunkt/UpdateVirkningsTidspunktRequest.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/virkningstidspunkt/UpdateVirkningsTidspunktRequest.kt index 7d070cdc5..b7b048d84 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/virkningstidspunkt/UpdateVirkningsTidspunktRequest.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/virkningstidspunkt/UpdateVirkningsTidspunktRequest.kt @@ -8,9 +8,7 @@ import java.time.LocalDate data class UpdateVirkningsTidspunktRequest( val virkningsTidspunktBegrunnelseMedIVedtakNotat: String? = null, val virkningsTidspunktBegrunnelseKunINotat: String? = null, - val aarsak: ForskuddAarsakType? = null, - @Schema(type = "string", format = "date", example = "2025-01-25") @JsonFormat(pattern = "yyyy-MM-dd") val virkningsDato: LocalDate? = null, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/dto/virkningstidspunkt/VirkningsTidspunktResponse.kt b/src/main/kotlin/no/nav/bidrag/behandling/dto/virkningstidspunkt/VirkningsTidspunktResponse.kt index 950250ff3..069ebca65 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/dto/virkningstidspunkt/VirkningsTidspunktResponse.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/dto/virkningstidspunkt/VirkningsTidspunktResponse.kt @@ -8,9 +8,7 @@ import java.time.LocalDate data class VirkningsTidspunktResponse( val virkningsTidspunktBegrunnelseMedIVedtakNotat: String? = null, val virkningsTidspunktBegrunnelseKunINotat: String? = null, - val aarsak: ForskuddAarsakType? = null, - @Schema(type = "string", format = "date", example = "2025-01-25") @JsonFormat(pattern = "yyyy-MM-dd") val virkningsDato: LocalDate? = null, diff --git a/src/main/kotlin/no/nav/bidrag/behandling/kafka/VedtakHendelseListener.kt b/src/main/kotlin/no/nav/bidrag/behandling/kafka/VedtakHendelseListener.kt index 20631c0f3..30325f0b6 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/kafka/VedtakHendelseListener.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/kafka/VedtakHendelseListener.kt @@ -23,7 +23,6 @@ class VedtakHendelseListener( val forsendelseService: ForsendelseService, val behandlingService: BehandlingService, ) { - @KafkaListener(groupId = "bidrag-behandling", topics = ["\${TOPIC_VEDTAK}"]) fun prossesserVedtakHendelse(melding: ConsumerRecord) { val vedtak = parseVedtakHendelse(melding) @@ -32,7 +31,9 @@ class VedtakHendelseListener( if (!vedtak.erFattetFraBidragBehandling()) return val behandling = behandlingService.hentBehandlingById(vedtak.behandlingId!!) - log.info { "Mottok hendelse for vedtak ${vedtak.id} med type ${vedtak.type}. Lagrer vedtakId på behandling og oppretter forsendelser for vedtaket" } + log.info { + "Mottok hendelse for vedtak ${vedtak.id} med type ${vedtak.type}. Lagrer vedtakId på behandling og oppretter forsendelser for vedtaket" + } behandlingService.oppdaterVedtakId( vedtak.behandlingId!!, @@ -46,7 +47,8 @@ class VedtakHendelseListener( InitalizeForsendelseRequest( saksnummer = vedtak.saksnummer, enhet = vedtak.enhetId, - behandlingInfo = BehandlingInfoDto( + behandlingInfo = + BehandlingInfoDto( soknadId = vedtak.soknadId ?: behandling.soknadId, vedtakId = vedtak.id.toLong(), soknadFra = behandling.soknadFra, @@ -72,10 +74,19 @@ class VedtakHendelseListener( val VedtakHendelse.stonadType get() = this.stonadsendringListe?.firstOrNull()?.type val VedtakHendelse.engangsbelopType get() = this.engangsbelopListe?.firstOrNull()?.type -val VedtakHendelse.soknadId get() = this.behandlingsreferanseListe?.find { it.kilde == BehandlingsrefKilde.BISYS_SOKNAD.name }?.referanse?.toLong() -val VedtakHendelse.behandlingId get() = this.behandlingsreferanseListe?.find { it.kilde == BehandlingsrefKilde.BEHANDLING_ID.name }?.referanse?.toLong() +val VedtakHendelse.soknadId get() = + this.behandlingsreferanseListe?.find { + it.kilde == BehandlingsrefKilde.BISYS_SOKNAD.name + }?.referanse?.toLong() +val VedtakHendelse.behandlingId get() = + this.behandlingsreferanseListe?.find { + it.kilde == BehandlingsrefKilde.BEHANDLING_ID.name + }?.referanse?.toLong() + fun VedtakHendelse.erFattetFraBidragBehandling() = behandlingId != null + val VedtakHendelse.saksnummer - get(): String = stonadsendringListe?.firstOrNull()?.sakId - ?: engangsbelopListe?.firstOrNull()?.sakId - ?: throw RuntimeException("Vedtak hendelse med id $id mangler saksnummer") + get(): String = + stonadsendringListe?.firstOrNull()?.sakId + ?: engangsbelopListe?.firstOrNull()?.sakId + ?: throw RuntimeException("Vedtak hendelse med id $id mangler saksnummer") diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/BehandlingService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/BehandlingService.kt index 27ed8e719..fcfef54d5 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/BehandlingService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/BehandlingService.kt @@ -1,6 +1,7 @@ package no.nav.bidrag.behandling.service -import no.nav.bidrag.behandling.`404` +import mu.KotlinLogging +import no.nav.bidrag.behandling.behandlingNotFoundException import no.nav.bidrag.behandling.database.datamodell.Barnetillegg import no.nav.bidrag.behandling.database.datamodell.Behandling import no.nav.bidrag.behandling.database.datamodell.ForskuddAarsakType @@ -9,17 +10,24 @@ import no.nav.bidrag.behandling.database.datamodell.Inntekt import no.nav.bidrag.behandling.database.datamodell.Sivilstand import no.nav.bidrag.behandling.database.datamodell.Utvidetbarnetrygd import no.nav.bidrag.behandling.database.repository.BehandlingRepository +import no.nav.bidrag.behandling.database.repository.RolleRepository +import no.nav.bidrag.behandling.dto.behandling.CreateRolleDto import no.nav.bidrag.behandling.dto.forsendelse.BehandlingInfoDto import no.nav.bidrag.behandling.dto.forsendelse.InitalizeForsendelseRequest import no.nav.bidrag.behandling.transformers.tilForsendelseRolleDto import no.nav.bidrag.behandling.transformers.tilVedtakType +import no.nav.bidrag.behandling.transformers.toRolle +import no.nav.bidrag.domain.enums.Rolletype import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional -import java.util.Date +import java.util.* + +private val log = KotlinLogging.logger {} @Service class BehandlingService( private val behandlingRepository: BehandlingRepository, + private val rolleRepository: RolleRepository, private val forsendelseService: ForsendelseService, ) { fun createBehandling(behandling: Behandling): Behandling = @@ -35,7 +43,8 @@ class BehandlingService( saksnummer = behandling.saksnummer, enhet = behandling.behandlerEnhet, roller = behandling.tilForsendelseRolleDto(), - behandlingInfo = BehandlingInfoDto( + behandlingInfo = + BehandlingInfoDto( behandlingId = behandling.id, soknadId = behandling.soknadId, soknadFra = behandling.soknadFra, @@ -48,6 +57,8 @@ class BehandlingService( ) } + fun deleteBehandlingById(behandlingId: Long) = behandlingRepository.deleteById(behandlingId) + fun oppdaterBehandling( behandlingId: Long, virkningsTidspunktBegrunnelseMedIVedtakNotat: String? = null, @@ -58,28 +69,29 @@ class BehandlingService( inntektBegrunnelseKunINotat: String? = null, aarsak: ForskuddAarsakType? = null, virkningsDato: Date? = null, - ): Behandling = behandlingRepository.save( - behandlingRepository.findBehandlingById(behandlingId) - .orElseThrow { `404`(behandlingId) } - .let { - it.virkningsTidspunktBegrunnelseMedIVedtakNotat = - virkningsTidspunktBegrunnelseMedIVedtakNotat - it.virkningsTidspunktBegrunnelseKunINotat = virkningsTidspunktBegrunnelseKunINotat - it.boforholdBegrunnelseMedIVedtakNotat = boforholdBegrunnelseMedIVedtakNotat - it.boforholdBegrunnelseKunINotat = boforholdBegrunnelseKunINotat - it.inntektBegrunnelseMedIVedtakNotat = inntektBegrunnelseMedIVedtakNotat - it.inntektBegrunnelseKunINotat = inntektBegrunnelseKunINotat - it.aarsak = aarsak - it.virkningsDato = virkningsDato - it - }, - ) + ): Behandling = + behandlingRepository.save( + behandlingRepository.findBehandlingById(behandlingId) + .orElseThrow { behandlingNotFoundException(behandlingId) } + .let { + it.virkningsTidspunktBegrunnelseMedIVedtakNotat = virkningsTidspunktBegrunnelseMedIVedtakNotat + it.virkningsTidspunktBegrunnelseKunINotat = virkningsTidspunktBegrunnelseKunINotat + it.boforholdBegrunnelseMedIVedtakNotat = boforholdBegrunnelseMedIVedtakNotat + it.boforholdBegrunnelseKunINotat = boforholdBegrunnelseKunINotat + it.inntektBegrunnelseMedIVedtakNotat = inntektBegrunnelseMedIVedtakNotat + it.inntektBegrunnelseKunINotat = inntektBegrunnelseKunINotat + it.aarsak = aarsak + it.virkningsDato = virkningsDato + it + }, + ) fun hentBehandlingById(behandlingId: Long): Behandling = - behandlingRepository.findBehandlingById(behandlingId).orElseThrow { `404`(behandlingId) } + behandlingRepository.findBehandlingById(behandlingId).orElseThrow { behandlingNotFoundException(behandlingId) } fun hentBehandlinger(): List = behandlingRepository.hentBehandlinger() + @Transactional fun oppdaterInntekter( behandlingId: Long, inntekter: MutableSet, @@ -87,26 +99,31 @@ class BehandlingService( utvidetbarnetrygd: MutableSet, inntektBegrunnelseMedIVedtakNotat: String?, inntektBegrunnelseKunINotat: String?, - ) = - behandlingRepository.save( - behandlingRepository.findBehandlingById(behandlingId) - .orElseThrow { `404`(behandlingId) } - .let { - it.inntektBegrunnelseMedIVedtakNotat = inntektBegrunnelseMedIVedtakNotat - it.inntektBegrunnelseKunINotat = inntektBegrunnelseKunINotat - - it.inntekter.clear() - it.inntekter.addAll(inntekter) - - it.barnetillegg.clear() - it.barnetillegg.addAll(barnetillegg) - - it.utvidetbarnetrygd.clear() - it.utvidetbarnetrygd.addAll(utvidetbarnetrygd) - - it - }, - ) + ) { + var behandling = behandlingRepository.findBehandlingById(behandlingId) + .orElseThrow { behandlingNotFoundException(behandlingId) } + + behandling.inntektBegrunnelseMedIVedtakNotat = inntektBegrunnelseMedIVedtakNotat + behandling.inntektBegrunnelseKunINotat = inntektBegrunnelseKunINotat + + if (behandling.inntekter != inntekter) { + log.info("Oppdaterer inntekter for behandlingsid $behandlingId") + behandling.inntekter.clear() + behandling.inntekter.addAll(inntekter) + } + + if (behandling.barnetillegg != barnetillegg) { + log.info("Oppdaterer barnetillegg for behandlingsid $behandlingId") + behandling.barnetillegg.clear() + behandling.barnetillegg.addAll(barnetillegg) + } + + if (behandling.utvidetbarnetrygd != utvidetbarnetrygd) { + log.info("Oppdaterer utvidet barnetrygd for behandlingsid $behandlingId") + behandling.utvidetbarnetrygd.clear() + behandling.utvidetbarnetrygd.addAll(utvidetbarnetrygd) + } + } fun updateVirkningsTidspunkt( behandlingId: Long, @@ -114,14 +131,13 @@ class BehandlingService( virkningsDato: Date?, virkningsTidspunktBegrunnelseKunINotat: String?, virkningsTidspunktBegrunnelseMedIVedtakNotat: String?, - ) = - behandlingRepository.updateVirkningsTidspunkt( - behandlingId, - aarsak, - virkningsDato, - virkningsTidspunktBegrunnelseKunINotat, - virkningsTidspunktBegrunnelseMedIVedtakNotat - ) + ) = behandlingRepository.updateVirkningsTidspunkt( + behandlingId, + aarsak, + virkningsDato, + virkningsTidspunktBegrunnelseKunINotat, + virkningsTidspunktBegrunnelseMedIVedtakNotat, + ) fun updateBoforhold( behandlingId: Long, @@ -129,25 +145,61 @@ class BehandlingService( sivilstand: MutableSet, boforholdBegrunnelseKunINotat: String?, boforholdBegrunnelseMedIVedtakNotat: String?, - ) = - behandlingRepository.save( - behandlingRepository.findBehandlingById(behandlingId) - .orElseThrow { `404`(behandlingId) } - .let { - it.boforholdBegrunnelseKunINotat = boforholdBegrunnelseKunINotat - it.boforholdBegrunnelseMedIVedtakNotat = boforholdBegrunnelseMedIVedtakNotat + ) = behandlingRepository.save( + behandlingRepository.findBehandlingById(behandlingId) + .orElseThrow { behandlingNotFoundException(behandlingId) } + .let { + it.boforholdBegrunnelseKunINotat = boforholdBegrunnelseKunINotat + it.boforholdBegrunnelseMedIVedtakNotat = boforholdBegrunnelseMedIVedtakNotat - it.husstandsBarn.clear() - it.husstandsBarn.addAll(husstandsBarn) + it.husstandsBarn.clear() + it.husstandsBarn.addAll(husstandsBarn) - it.sivilstand.clear() - it.sivilstand.addAll(sivilstand) + it.sivilstand.clear() + it.sivilstand.addAll(sivilstand) - it - }, - ) + it + }, + ) @Transactional fun oppdaterVedtakId(behandlingId: Long, vedtakId: Long) = behandlingRepository.oppdaterVedtakId(behandlingId, vedtakId) + + @Transactional + fun syncRoller( + behandlingId: Long, + roller: List, + ) { + val existingRoller = rolleRepository.findRollerByBehandlingId(behandlingId) + + val behandling = behandlingRepository.findById(behandlingId).get() + + val rollerSomLeggesTil = + roller.filter { r -> + // not deleted and behandling.roller doesn't contain it yet + !r.erSlettet && !existingRoller.any { br -> br.ident == r.ident } + } + + behandling.roller.addAll(rollerSomLeggesTil.map { it.toRolle(behandling) }) + + val identsSomSkalSlettes = roller.filter { r -> r.erSlettet }.map { it.ident } + behandling.roller.removeIf { r -> identsSomSkalSlettes.contains(r.ident) } + + behandlingRepository.save(behandling) + + if (behandling.roller.none { r -> r.rolleType == Rolletype.BARN }) { + behandlingRepository.delete(behandling) + } + } + + fun updateBehandling( + behandlingId: Long, + grunnlagspakkeId: Long?, + ) { + hentBehandlingById(behandlingId).let { + it.grunnlagspakkeId = grunnlagspakkeId + behandlingRepository.save(it) + } + } } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/ForsendelseService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/ForsendelseService.kt index f36d659b8..324d14a62 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/ForsendelseService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/ForsendelseService.kt @@ -49,8 +49,8 @@ class ForsendelseService( behandlingInfo = request.behandlingInfo .copy( barnIBehandling = request.roller - .filter { it.type == Rolletype.BARN && it.fødselsnummer.verdi.isNotEmpty() } - .map { it.fødselsnummer.verdi }, + .filter { it.type == Rolletype.BARN && !it.fødselsnummer?.verdi.isNullOrEmpty() } + .map { it.fødselsnummer!!.verdi }, ), saksnummer = request.saksnummer, enhet = request.enhet, @@ -68,7 +68,7 @@ class ForsendelseService( try { val response = bidragForsendelseConsumer.opprettForsendelse( opprettRequestTemplate.copy( - mottaker = MottakerDto(ident = it.fødselsnummer.verdi), + mottaker = MottakerDto(ident = it.fødselsnummer!!.verdi), gjelderIdent = it.fødselsnummer.verdi, ), ) @@ -140,7 +140,7 @@ class ForsendelseService( class OpprettForsendelseForRollerListe : MutableList by mutableListOf() { fun leggTil(rolle: ForsendelseRolleDto?) { - if (rolle == null) return + if (rolle?.fødselsnummer == null) return val fødselsnummer = rolle.fødselsnummer if (fødselsnummer.verdi.isNotEmpty()) this.add(rolle) } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/service/OpplysningerService.kt b/src/main/kotlin/no/nav/bidrag/behandling/service/OpplysningerService.kt index b6f54db33..18ad8e28d 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/service/OpplysningerService.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/service/OpplysningerService.kt @@ -1,6 +1,6 @@ package no.nav.bidrag.behandling.service -import no.nav.bidrag.behandling.`404` +import no.nav.bidrag.behandling.behandlingNotFoundException import no.nav.bidrag.behandling.database.datamodell.Opplysninger import no.nav.bidrag.behandling.database.datamodell.OpplysningerType import no.nav.bidrag.behandling.database.repository.BehandlingRepository @@ -15,16 +15,23 @@ class OpplysningerService( private val opplysningerRepository: OpplysningerRepository, private val behandlingRepository: BehandlingRepository, ) { - @Transactional - fun opprett(behandlingId: Long, opplysningerType: OpplysningerType, data: String, hentetDato: Date): Opplysninger { + fun opprett( + behandlingId: Long, + opplysningerType: OpplysningerType, + data: String, + hentetDato: Date, + ): Opplysninger { behandlingRepository - .findBehandlingById(behandlingId).orElseThrow { `404`(behandlingId) } + .findBehandlingById(behandlingId).orElseThrow { behandlingNotFoundException(behandlingId) } .let { return opplysningerRepository.save(Opplysninger(it, opplysningerType, data, hentetDato)) } } - fun hentSistAktiv(behandlingId: Long, opplysningerType: OpplysningerType): Optional = + fun hentSistAktiv( + behandlingId: Long, + opplysningerType: OpplysningerType, + ): Optional = opplysningerRepository.findTopByBehandlingIdAndOpplysningerTypeOrderByTsDescIdDesc(behandlingId, opplysningerType) } diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/DateUtils.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/DateUtils.kt index 9d8f2bf88..71cbadb2c 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/DateUtils.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/DateUtils.kt @@ -18,4 +18,5 @@ fun LocalDate.toDate(): Date { } fun LocalDate.toNoString(): String = this.format(formatter) + fun LocalDate.toCompactString(): String = this.format(formatterCommpact) diff --git a/src/main/kotlin/no/nav/bidrag/behandling/transformers/DtoExtensions.kt b/src/main/kotlin/no/nav/bidrag/behandling/transformers/DtoExtensions.kt index f724f0bf4..520f850c4 100644 --- a/src/main/kotlin/no/nav/bidrag/behandling/transformers/DtoExtensions.kt +++ b/src/main/kotlin/no/nav/bidrag/behandling/transformers/DtoExtensions.kt @@ -7,9 +7,12 @@ import no.nav.bidrag.behandling.database.datamodell.HusstandsBarnPeriode import no.nav.bidrag.behandling.database.datamodell.Inntekt import no.nav.bidrag.behandling.database.datamodell.InntektPostDomain import no.nav.bidrag.behandling.database.datamodell.Opplysninger +import no.nav.bidrag.behandling.database.datamodell.Rolle import no.nav.bidrag.behandling.database.datamodell.Sivilstand import no.nav.bidrag.behandling.database.datamodell.SoknadType import no.nav.bidrag.behandling.database.datamodell.Utvidetbarnetrygd +import no.nav.bidrag.behandling.dto.behandling.CreateRolleDto +import no.nav.bidrag.behandling.dto.behandling.CreateRolleRolleType import no.nav.bidrag.behandling.dto.behandling.RolleTypeDto import no.nav.bidrag.behandling.dto.behandling.SivilstandDto import no.nav.bidrag.behandling.dto.forsendelse.ForsendelseRolleDto @@ -24,104 +27,169 @@ import no.nav.bidrag.domain.enums.VedtakType import no.nav.bidrag.domain.ident.PersonIdent import no.nav.bidrag.transport.behandling.inntekt.response.InntektPost -fun Set.toSivilstandDto() = this.map { - SivilstandDto(it.id, it.datoFom?.toLocalDate(), it.datoTom?.toLocalDate(), it.sivilstandType) -}.toSet() - -fun Set.toSivilstandDomain(behandling: Behandling) = this.map { - Sivilstand(behandling, it.datoFom?.toDate(), it.datoTom?.toDate(), it.sivilstandType, it.id) -}.toMutableSet() - -fun Set.toBarnetilleggDto() = this.map { - BarnetilleggDto(it.id, it.ident, it.barnetillegg, it.datoFom?.toLocalDate(), it.datoTom?.toLocalDate()) -}.toSet() - -fun Set.toUtvidetbarnetrygdDomain(behandling: Behandling) = this.map { - Utvidetbarnetrygd(behandling, it.deltBoSted, it.belop, it.datoFom?.toDate(), it.datoTom?.toDate()) -}.toMutableSet() - -fun Set.toUtvidetbarnetrygdDto() = this.map { - UtvidetbarnetrygdDto(it.id, it.deltBoSted, it.belop, it.datoFom?.toLocalDate(), it.datoTom?.toLocalDate()) -}.toSet() - -fun Set.toBarnetilleggDomain(behandling: Behandling) = this.map { - Barnetillegg(behandling, it.ident, it.barnetillegg, it.datoFom?.toDate(), it.datoTom?.toDate(), it.id) -}.toMutableSet() - -fun Set.toHusstandsBarnPeriodeDto() = this.map { - HusstandsBarnPeriodeDto(it.id, it.datoFom?.toLocalDate(), it.datoTom?.toLocalDate(), it.boStatus, it.kilde) -}.toSet() - -fun Set.toDomain(husstandsBarn: HusstandsBarn) = this.map { - HusstandsBarnPeriode(husstandsBarn, it.datoFom?.toDate(), it.datoTom?.toDate(), it.boStatus, it.kilde) -}.toSet() - -fun Set.toHusstandsBarnDto() = this.map { - HusstandsBarnDto(it.id!!, it.medISaken, it.perioder.toHusstandsBarnPeriodeDto(), it.ident, it.navn, it.foedselsDato?.toLocalDate()) -}.toSet() - -fun Set.toDomain(behandling: Behandling) = this.map { - val barn = HusstandsBarn( - behandling, - it.medISaken, - it.id, - it.ident, - it.navn, - it.foedselsDato?.toDate(), - ) - barn.perioder = it.perioder.toDomain(barn).toMutableSet() - barn -}.toMutableSet() - -fun Set.toInntektDomain(behandling: Behandling) = this.map { - val inntekt = Inntekt( - behandling, it.taMed, it.inntektType, it.belop, - it.datoFom?.toDate(), it.datoTom?.toDate(), it.ident, it.fraGrunnlag, it.id, - ) - inntekt.inntektPostListe = it.inntektPostListe.toInntektPostDomain(inntekt).toMutableSet() - inntekt -}.toMutableSet() - -fun Set.toInntektPostDomain(inntekt: Inntekt) = this.map { - InntektPostDomain(inntekt, it.beløp, it.kode, it.visningsnavn) -}.toSet() - -fun Set.toInntektPost() = this.map { - InntektPost(it.kode, it.visningsnavn, it.beløp) -}.toSet() - -fun Set.toInntektDto() = this.map { - InntektDto(it.id, it.taMed, it.inntektType, it.belop, it.datoFom?.toLocalDate(), it.datoTom?.toLocalDate(), it.ident, it.fraGrunnlag, it.inntektPostListe.toInntektPost()) -}.toSet() +fun Set.toSivilstandDto() = + this.map { + SivilstandDto(it.id, it.datoFom?.toLocalDate(), it.datoTom?.toLocalDate(), it.sivilstandType) + }.toSet() + +fun Set.toSivilstandDomain(behandling: Behandling) = + this.map { + Sivilstand(behandling, it.datoFom?.toDate(), it.datoTom?.toDate(), it.sivilstandType, it.id) + }.toMutableSet() + +fun Set.toBarnetilleggDto() = + this.map { + BarnetilleggDto(it.id, it.ident, it.barnetillegg, it.datoFom?.toLocalDate(), it.datoTom?.toLocalDate()) + }.toSet() + +fun Set.toUtvidetbarnetrygdDomain(behandling: Behandling) = + this.map { + Utvidetbarnetrygd(behandling, it.deltBoSted, it.belop, it.datoFom?.toDate(), it.datoTom?.toDate()) + }.toMutableSet() + +fun Set.toUtvidetbarnetrygdDto() = + this.map { + UtvidetbarnetrygdDto(it.id, it.deltBoSted, it.belop, it.datoFom?.toLocalDate(), it.datoTom?.toLocalDate()) + }.toSet() + +fun Set.toBarnetilleggDomain(behandling: Behandling) = + this.map { + Barnetillegg(behandling, it.ident, it.barnetillegg, it.datoFom?.toDate(), it.datoTom?.toDate(), it.id) + }.toMutableSet() + +fun Set.toHusstandsBarnPeriodeDto() = + this.map { + HusstandsBarnPeriodeDto(it.id, it.datoFom?.toLocalDate(), it.datoTom?.toLocalDate(), it.boStatus, it.kilde) + }.toSet() + +fun Set.toDomain(husstandsBarn: HusstandsBarn) = + this.map { + HusstandsBarnPeriode(husstandsBarn, it.datoFom?.toDate(), it.datoTom?.toDate(), it.boStatus, it.kilde) + }.toSet() + +fun Set.toHusstandsBarnDto() = + this.map { + HusstandsBarnDto( + it.id!!, + it.medISaken, + it.perioder.toHusstandsBarnPeriodeDto(), + it.ident, + it.navn, + it.foedselsDato?.toLocalDate(), + ) + }.toSet() + +fun Set.toDomain(behandling: Behandling) = + this.map { + val barn = + HusstandsBarn( + behandling, + it.medISaken, + it.id, + it.ident, + it.navn, + it.foedselsDato?.toDate(), + ) + barn.perioder = it.perioder.toDomain(barn).toMutableSet() + barn + }.toMutableSet() + +fun Set.toInntektDomain(behandling: Behandling) = + this.map { + val inntekt = + Inntekt( + it.inntektType, + it.belop, + it.datoFom?.toDate(), + it.datoTom?.toDate(), + it.ident, + it.fraGrunnlag, + it.taMed, + it.id, + behandling, + ) + inntekt.inntektPostListe = it.inntektPostListe.toInntektPostDomain(inntekt).toMutableSet() + inntekt + }.toMutableSet() + +fun Set.toInntektPostDomain(inntekt: Inntekt) = + this.map { + InntektPostDomain(it.beløp, it.kode, it.visningsnavn, inntekt = inntekt) + }.toSet() + +fun Set.toInntektPost() = + this.map { + InntektPost(it.kode, it.visningsnavn, it.beløp) + }.toSet() + +fun Set.toInntektDto() = + this.map { + InntektDto( + it.id, + it.taMed, + it.inntektType, + it.belop, + it.datoFom?.toLocalDate(), + it.datoTom?.toLocalDate(), + it.ident, + it.fraGrunnlag, + it.inntektPostListe.toInntektPost(), + ) + }.toSet() fun Opplysninger.toDto(): OpplysningerDto { - return OpplysningerDto(this.id!!, this.behandling.id!!, this.opplysningerType, this.data, this.hentetDato.toLocalDate()) -} - -fun Behandling.tilForsendelseRolleDto() = roller.map { - ForsendelseRolleDto( - fødselsnummer = PersonIdent(it.ident), - type = it.rolleType, + return OpplysningerDto( + this.id!!, + this.behandling.id!!, + this.opplysningerType, + this.data, + this.hentetDato.toLocalDate(), ) } -fun SoknadType.tilVedtakType(): VedtakType = when (this) { - SoknadType.FASTSETTELSE -> VedtakType.FASTSETTELSE - SoknadType.REVURDERING -> VedtakType.REVURDERING - SoknadType.ALDERSJUSTERING -> VedtakType.ALDERSJUSTERING - SoknadType.ALDERSOPPHØR -> VedtakType.ALDERSOPPHØR - SoknadType.ENDRING -> VedtakType.ENDRING - SoknadType.ENDRING_MOTTAKER -> VedtakType.ENDRING_MOTTAKER - SoknadType.KLAGE -> VedtakType.KLAGE - SoknadType.OPPHØR -> VedtakType.OPPHØR - SoknadType.INDEKSREGULERING -> VedtakType.INDEKSREGULERING - SoknadType.INNKREVING -> VedtakType.INNKREVING -} +fun Behandling.tilForsendelseRolleDto() = + roller.map { + ForsendelseRolleDto( + fødselsnummer = PersonIdent(it.ident), + type = it.rolleType, + ) + } -fun Rolletype.toRolleTypeDto(): RolleTypeDto = when (this) { - Rolletype.BARN -> RolleTypeDto.BARN - Rolletype.BIDRAGSMOTTAKER -> RolleTypeDto.BIDRAGSMOTTAKER - Rolletype.BIDRAGSPLIKTIG -> RolleTypeDto.BIDRAGSPLIKTIG - Rolletype.FEILREGISTRERT -> RolleTypeDto.FEILREGISTRERT - Rolletype.REELMOTTAKER -> RolleTypeDto.REELMOTTAKER -} +fun CreateRolleDto.toRolle(behandling: Behandling): Rolle = + Rolle( + behandling, + rolleType = + when (this.rolleType) { + CreateRolleRolleType.BIDRAGS_MOTTAKER -> Rolletype.BIDRAGSMOTTAKER + CreateRolleRolleType.BIDRAGS_PLIKTIG -> Rolletype.BIDRAGSPLIKTIG + CreateRolleRolleType.REELL_MOTTAKER -> Rolletype.REELMOTTAKER + CreateRolleRolleType.BARN -> Rolletype.BARN + CreateRolleRolleType.FEILREGISTRERT -> Rolletype.FEILREGISTRERT + }, + this.ident, + this.fodtDato, + this.opprettetDato, + ) + +fun SoknadType.tilVedtakType(): VedtakType = + when (this) { + SoknadType.FASTSETTELSE -> VedtakType.FASTSETTELSE + SoknadType.REVURDERING -> VedtakType.REVURDERING + SoknadType.ALDERSJUSTERING -> VedtakType.ALDERSJUSTERING + SoknadType.ALDERSOPPHØR -> VedtakType.ALDERSOPPHØR + SoknadType.ENDRING -> VedtakType.ENDRING + SoknadType.ENDRING_MOTTAKER -> VedtakType.ENDRING_MOTTAKER + SoknadType.KLAGE -> VedtakType.KLAGE + SoknadType.OPPHØR -> VedtakType.OPPHØR + SoknadType.INDEKSREGULERING -> VedtakType.INDEKSREGULERING + SoknadType.INNKREVING -> VedtakType.INNKREVING + } + +fun Rolletype.toRolleTypeDto(): RolleTypeDto = + when (this) { + Rolletype.BARN -> RolleTypeDto.BARN + Rolletype.BIDRAGSMOTTAKER -> RolleTypeDto.BIDRAGSMOTTAKER + Rolletype.BIDRAGSPLIKTIG -> RolleTypeDto.BIDRAGSPLIKTIG + Rolletype.FEILREGISTRERT -> RolleTypeDto.FEILREGISTRERT + Rolletype.REELMOTTAKER -> RolleTypeDto.REELMOTTAKER + } diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index c356ea3df..ed95e26b2 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -6,6 +6,8 @@ management: springdoc: packages-to-scan: no.nav.bidrag.behandling.controller + paths-to-match: "/api/**" + spring.main.banner-mode: off --- spring.config.activate.on-profile: nais,lokal-nais @@ -13,6 +15,15 @@ spring.config.activate.on-profile: nais,lokal-nais no.nav.security.jwt: client: registration: + bidrag-person: + resource-url: ${BIDRAG_PERSON_URL} + token-endpoint-url: https://login.microsoftonline.com/${AZURE_APP_TENANT_ID}/oauth2/v2.0/token + grant-type: urn:ietf:params:oauth:grant-type:jwt-bearer + scope: api://${BIDRAG_PERSON_SCOPE}/.default + authentication: + client-id: ${AZURE_APP_CLIENT_ID} + client-secret: ${AZURE_APP_CLIENT_SECRET} + client-auth-method: client_secret_post bidrag-beregn-forskudd-rest: resource-url: ${BIDRAG_BEREGN_FORSKUDD_URL} token-endpoint-url: https://login.microsoftonline.com/${AZURE_APP_TENANT_ID}/oauth2/v2.0/token diff --git a/src/main/resources/db/migration/V1.0.28__delete_behandling.sql b/src/main/resources/db/migration/V1.0.28__delete_behandling.sql new file mode 100644 index 000000000..db861ef27 --- /dev/null +++ b/src/main/resources/db/migration/V1.0.28__delete_behandling.sql @@ -0,0 +1,8 @@ +ALTER TABLE BEHANDLING + ADD COLUMN IF NOT EXISTS deleted BOOLEAN DEFAULT FALSE NOT NULL; + +ALTER TABLE ROLLE + ADD COLUMN IF NOT EXISTS deleted BOOLEAN DEFAULT FALSE NOT NULL; + +CREATE RULE BEHANDLING_PROTECT AS ON DELETE TO BEHANDLING DO INSTEAD NOTHING; +CREATE RULE ROLLE_PROTECT AS ON DELETE TO ROLLE DO INSTEAD NOTHING; \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.0.29__grunnlagspakke_id.sql b/src/main/resources/db/migration/V1.0.29__grunnlagspakke_id.sql new file mode 100644 index 000000000..f5e27de95 --- /dev/null +++ b/src/main/resources/db/migration/V1.0.29__grunnlagspakke_id.sql @@ -0,0 +1,2 @@ +ALTER TABLE BEHANDLING + ADD COLUMN GRUNNLAGSPAKKE_ID INT DEFAULT NULL; \ No newline at end of file diff --git a/src/test/kotlin/no/nav/bidrag/behandling/SpringTestRunner.kt b/src/test/kotlin/no/nav/bidrag/behandling/SpringTestRunner.kt index af0d37a77..a843d2c14 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/SpringTestRunner.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/SpringTestRunner.kt @@ -22,7 +22,6 @@ import org.springframework.test.context.junit.jupiter.SpringExtension @ActiveProfiles("test") @EnableMockOAuth2Server class SpringTestRunner { - @LocalServerPort protected var port: Int = 0 @@ -55,7 +54,6 @@ class SpringTestRunner { } companion object { - private const val LOCALHOST = "http://localhost:" } } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/TestContainerRunner.kt b/src/test/kotlin/no/nav/bidrag/behandling/TestContainerRunner.kt index 76407c798..463861337 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/TestContainerRunner.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/TestContainerRunner.kt @@ -12,16 +12,16 @@ import org.testcontainers.junit.jupiter.Testcontainers @ActiveProfiles(value = ["test", "testcontainer"]) @DirtiesContext class TestContainerRunner : SpringTestRunner() { - companion object { @Container - protected val postgreSqlDb = PostgreSQLContainer("postgres:14.5").apply { - withDatabaseName("bidrag-behandling") - withUsername("cloudsqliamuser") - withPassword("admin") - portBindings = listOf("7777:5432") - start() - } + protected val postgreSqlDb = + PostgreSQLContainer("postgres:14.5").apply { + withDatabaseName("bidrag-behandling") + withUsername("cloudsqliamuser") + withPassword("admin") + portBindings = listOf("7777:5432") + start() + } @Suppress("unused") @JvmStatic diff --git a/src/test/kotlin/no/nav/bidrag/behandling/TestRestTemplateConfiguration.kt b/src/test/kotlin/no/nav/bidrag/behandling/TestRestTemplateConfiguration.kt index 4a7cddcda..6ce0b8a3d 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/TestRestTemplateConfiguration.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/TestRestTemplateConfiguration.kt @@ -16,7 +16,6 @@ import org.springframework.http.HttpHeaders @Configuration @Profile("test") class TestRestTemplateConfiguration { - @Autowired private lateinit var mockOAuth2Server: MockOAuth2Server @@ -34,18 +33,19 @@ class TestRestTemplateConfiguration { protected fun generateBearerToken(): String { val iss = mockOAuth2Server.issuerUrl("aad") val newIssuer = iss.newBuilder().host("localhost").build() - val token = mockOAuth2Server.issueToken( - "aad", - "aud-localhost", - DefaultOAuth2TokenCallback( - issuerId = "aad", - subject = "aud-localhost", - typeHeader = JOSEObjectType.JWT.type, - audience = listOf("aud-localhost"), - claims = mapOf("iss" to newIssuer.toString()), - 3600, - ), - ) + val token = + mockOAuth2Server.issueToken( + "aad", + "aud-localhost", + DefaultOAuth2TokenCallback( + issuerId = "aad", + subject = "aud-localhost", + typeHeader = JOSEObjectType.JWT.type, + audience = listOf("aud-localhost"), + claims = mapOf("iss" to newIssuer.toString()), + 3600, + ), + ) return "Bearer " + token.serialize() } } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/beregning/ForskuddBeregningTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/beregning/ForskuddBeregningTest.kt index 129d28a30..627ec37a8 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/beregning/ForskuddBeregningTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/beregning/ForskuddBeregningTest.kt @@ -1,14 +1,13 @@ package no.nav.bidrag.behandling.beregning +import io.kotest.matchers.shouldBe import no.nav.bidrag.behandling.beregning.model.HusstandsBarnPeriodeModel import no.nav.bidrag.behandling.database.datamodell.BoStatusType import no.nav.bidrag.behandling.transformers.toLocalDate -import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test import java.util.Calendar class ForskuddBeregningTest { - @Test fun `split periods just one period`() { val forskuddBeregning = ForskuddBeregning() @@ -21,17 +20,18 @@ class ForskuddBeregningTest { val fraDato2 = cal2.time cal1.add(Calendar.MONTH, 1) cal2.add(Calendar.MONTH, 1) - val tilDao = cal1.time - val tilDao2 = cal2.time + val tilDato = cal1.time + val tilDato2 = cal2.time - val splitPeriods1 = forskuddBeregning.splitPeriods( - listOf( - HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDao.toLocalDate(), "ident1", BoStatusType.REGISTRERT_PA_ADRESSE), - HusstandsBarnPeriodeModel(fraDato2.toLocalDate(), tilDao2.toLocalDate(), "ident2", BoStatusType.REGISTRERT_PA_ADRESSE), - ), - ) + val splitPeriods1 = + forskuddBeregning.splitPeriods( + listOf( + HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDato.toLocalDate(), "ident1", BoStatusType.REGISTRERT_PA_ADRESSE), + HusstandsBarnPeriodeModel(fraDato2.toLocalDate(), tilDato2.toLocalDate(), "ident2", BoStatusType.REGISTRERT_PA_ADRESSE), + ), + ) - assertEquals(3, splitPeriods1.size) + splitPeriods1.size shouldBe 3 } @Test @@ -42,36 +42,106 @@ class ForskuddBeregningTest { val fraDato = cal1.time cal1.add(Calendar.MONTH, 1) - val tilDao = cal1.time + val tilDato = cal1.time - val splitPeriods = forskuddBeregning.splitPeriods( - listOf( - HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDao.toLocalDate(), "ident", BoStatusType.REGISTRERT_PA_ADRESSE), - ), - ) + val splitPeriods = + forskuddBeregning.splitPeriods( + listOf( + HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDato.toLocalDate(), "ident", BoStatusType.REGISTRERT_PA_ADRESSE), + ), + ) - assertEquals(1, splitPeriods.size) + splitPeriods.size shouldBe 1 } @Test - fun `tre barn i samtidig`() { + fun `tre barn samtidig`() { val forskuddBeregning = ForskuddBeregning() val cal1 = Calendar.getInstance() cal1.set(Calendar.DAY_OF_MONTH, 1) val fraDato = cal1.time cal1.add(Calendar.MONTH, 1) - val tilDao = cal1.time - - val splitPeriods = forskuddBeregning.splitPeriods( - listOf( - HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDao.toLocalDate(), "ident", BoStatusType.REGISTRERT_PA_ADRESSE), - HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDao.toLocalDate(), "ident1", BoStatusType.REGISTRERT_PA_ADRESSE), - HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDao.toLocalDate(), "ident2", BoStatusType.REGISTRERT_PA_ADRESSE), - ), - ) - - assertEquals(1, splitPeriods.size) - assertEquals(3.0, splitPeriods.get(0).antall) + val tilDato = cal1.time + + val splitPeriods = + forskuddBeregning.splitPeriods( + listOf( + HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDato.toLocalDate(), "ident", BoStatusType.REGISTRERT_PA_ADRESSE), + HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDato.toLocalDate(), "ident1", BoStatusType.REGISTRERT_PA_ADRESSE), + HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDato.toLocalDate(), "ident2", BoStatusType.REGISTRERT_PA_ADRESSE), + ), + ) + + splitPeriods.size shouldBe 1 + splitPeriods[0].antall shouldBe 3.0 + } + + @Test + fun `tre barn men bare to barn samtidig`() { + val forskuddBeregning = ForskuddBeregning() + + val cal1 = Calendar.getInstance() + cal1.set(Calendar.DAY_OF_MONTH, 1) + + val fraDato1 = cal1.time + cal1.add(Calendar.YEAR, 1) + val tilDato1 = cal1.time + + val cal2 = Calendar.getInstance() + cal2.set(Calendar.DAY_OF_MONTH, 20) + + val fraDato2 = cal2.time + cal2.add(Calendar.MONTH, 1) + val tilDato2 = cal2.time + + cal2.add(Calendar.MONTH, 1) + val fraDato3 = cal2.time + + cal2.add(Calendar.MONTH, 1) + val tilDato3 = cal2.time + + val splitPeriods = + forskuddBeregning.splitPeriods( + listOf( + HusstandsBarnPeriodeModel(fraDato1.toLocalDate(), tilDato1.toLocalDate(), "ident", BoStatusType.REGISTRERT_PA_ADRESSE), + HusstandsBarnPeriodeModel(fraDato2.toLocalDate(), tilDato2.toLocalDate(), "ident1", BoStatusType.REGISTRERT_PA_ADRESSE), + HusstandsBarnPeriodeModel(fraDato3.toLocalDate(), tilDato3.toLocalDate(), "ident2", BoStatusType.REGISTRERT_PA_ADRESSE), + ), + ) + + splitPeriods.size shouldBe 5 + splitPeriods[0].antall shouldBe 1.0 + splitPeriods[1].antall shouldBe 2.0 + splitPeriods[2].antall shouldBe 1.0 + splitPeriods[3].antall shouldBe 2.0 + splitPeriods[4].antall shouldBe 1.0 + } + + @Test + fun `to barn ikke samtidig`() { + val forskuddBeregning = ForskuddBeregning() + val cal1 = Calendar.getInstance() + cal1.set(Calendar.DAY_OF_MONTH, 1) + + val fraDato = cal1.time + cal1.add(Calendar.MONTH, 1) + val tilDato = cal1.time + + cal1.add(Calendar.MONTH, 1) + val fraDato1 = cal1.time + + cal1.add(Calendar.MONTH, 1) + val tilDato1 = cal1.time + + val splitPeriods = + forskuddBeregning.splitPeriods( + listOf( + HusstandsBarnPeriodeModel(fraDato.toLocalDate(), tilDato.toLocalDate(), "ident", BoStatusType.REGISTRERT_PA_ADRESSE), + HusstandsBarnPeriodeModel(fraDato1.toLocalDate(), tilDato1.toLocalDate(), "ident1", BoStatusType.REGISTRERT_PA_ADRESSE), + ), + ) + + splitPeriods.size shouldBe 2 } } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/controller/BehandlingBeregnForskuddControllerTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/controller/BehandlingBeregnForskuddControllerTest.kt index 11a250805..9c6e111c5 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/controller/BehandlingBeregnForskuddControllerTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/controller/BehandlingBeregnForskuddControllerTest.kt @@ -40,68 +40,77 @@ class BehandlingBeregnForskuddControllerTest : KontrollerTestRunner() { cal.add(Calendar.MONTH, 2) val datoTom = cal.time - val b = Behandling( - BehandlingType.FORSKUDD, - SoknadType.FASTSETTELSE, - datoFom, - datoTom, - datoFom, - "1234", - 123213L, - 123213L, - "ENHE", - SoknadFraType.BIDRAGSMOTTAKER, - null, - null, - null, - datoFom, - null, - null, - null, - null, - null, - null, - null, - 1, - ) - - val husstandsBarn = HusstandsBarn( - behandling = b, - medISaken = true, - null, - "123", - null, - datoFom, - ) - husstandsBarn.perioder = mutableSetOf( - HusstandsBarnPeriode( - husstandsBarn, + val b = + Behandling( + BehandlingType.FORSKUDD, + SoknadType.FASTSETTELSE, datoFom, datoTom, - BoStatusType.REGISTRERT_PA_ADRESSE, - "", - ), - ) + datoFom, + "1234", + 123213L, + 123213L, + "ENHE", + SoknadFraType.BIDRAGSMOTTAKER, + null, + null, + null, + datoFom, + null, + null, + null, + null, + null, + null, + null, + 1, + ) - b.husstandsBarn = mutableSetOf( - husstandsBarn, - ) - b.roller = mutableSetOf( - Rolle(b, Rolletype.BIDRAGSMOTTAKER, "123", datoFom, null, null), - Rolle(b, Rolletype.BARN, "123", datoFom, null, null), - ) - b.inntekter = mutableSetOf( - Inntekt(b, true, "beskrivelse", BigDecimal.TEN, datoFom, datoTom, "ident", true), - ) - b.barnetillegg = mutableSetOf( - Barnetillegg(b, "ident", BigDecimal.TEN, datoFom, datoTom), - ) - b.utvidetbarnetrygd = mutableSetOf( - Utvidetbarnetrygd(b, true, BigDecimal.TEN, datoFom, datoTom), - ) - b.sivilstand = mutableSetOf( - Sivilstand(b, datoFom, datoTom, SivilstandType.GIFT), - ) + val husstandsBarn = + HusstandsBarn( + behandling = b, + medISaken = true, + null, + "123", + null, + datoFom, + ) + husstandsBarn.perioder = + mutableSetOf( + HusstandsBarnPeriode( + husstandsBarn, + datoFom, + datoTom, + BoStatusType.REGISTRERT_PA_ADRESSE, + "", + ), + ) + + b.husstandsBarn = + mutableSetOf( + husstandsBarn, + ) + b.roller = + mutableSetOf( + Rolle(b, Rolletype.BIDRAGSMOTTAKER, "123", datoFom, null, null), + Rolle(b, Rolletype.BARN, "123", datoFom, null, null), + ) + b.inntekter = + mutableSetOf( + Inntekt("lønn", BigDecimal.TEN, datoFom, datoTom, "ident", true, true), + ) + b.barnetillegg = + mutableSetOf( + Barnetillegg(b, "ident", BigDecimal.TEN, datoFom, datoTom), + ) + b.utvidetbarnetrygd = + mutableSetOf( + Utvidetbarnetrygd(b, true, BigDecimal.TEN, datoFom, datoTom), + ) + b.sivilstand = + mutableSetOf( + Sivilstand(b, datoFom, datoTom, SivilstandType.GIFT), + ) return b } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/controller/BehandlingControllerTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/controller/BehandlingControllerTest.kt index fc43a3098..d8b0a1aea 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/controller/BehandlingControllerTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/controller/BehandlingControllerTest.kt @@ -7,7 +7,9 @@ import no.nav.bidrag.behandling.database.datamodell.SoknadType import no.nav.bidrag.behandling.dto.behandling.BehandlingDto import no.nav.bidrag.behandling.dto.behandling.CreateBehandlingResponse import no.nav.bidrag.behandling.dto.behandling.CreateRolleRolleType +import no.nav.bidrag.behandling.dto.behandling.UpdateBehandlingRequest import no.nav.bidrag.behandling.service.BehandlingService +import no.nav.bidrag.behandling.service.BehandlingServiceTest import no.nav.bidrag.domain.enums.StonadType import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test @@ -40,88 +42,121 @@ data class CreateRolleDtoTest( @Suppress("NonAsciiCharacters") class BehandlingControllerTest() : KontrollerTestRunner() { - @Autowired lateinit var behandlingService: BehandlingService @Test fun `skal opprette en behandling med null opprettetDato`() { - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BARN, "1234", null), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BARN, "1234", null), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val behandlingReq = createBehandlingRequestTest("sak123", "en12", roller) - val behandlingRes = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling", - HttpMethod.POST, - HttpEntity(behandlingReq), - Void::class.java, - ) + val behandlingRes = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(behandlingReq), + Void::class.java, + ) assertEquals(HttpStatus.OK, behandlingRes.statusCode) } @Test fun `skal opprette en behandling med null opprettetDato og så hente den`() { - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BARN, "1234", null), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BARN, "1234", null), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val behandlingReq = createBehandlingRequestTest("sak123", "en12", roller) - val behandlingRes = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling", - HttpMethod.POST, - HttpEntity(behandlingReq), - CreateBehandlingResponse::class.java, - ) + val behandlingRes = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(behandlingReq), + CreateBehandlingResponse::class.java, + ) assertEquals(HttpStatus.OK, behandlingRes.statusCode) - val behandling = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling/${behandlingRes.body!!.id}", - HttpMethod.GET, - HttpEntity.EMPTY, - BehandlingDto::class.java, - ) + val behandling = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/${behandlingRes.body!!.id}", + HttpMethod.GET, + HttpEntity.EMPTY, + BehandlingDto::class.java, + ) assertNotNull(behandling.body) assertEquals(3, behandling.body!!.roller.size) } + @Test + fun `skal oppdatere behandling`() { + val b = behandlingService.createBehandling(BehandlingServiceTest.prepareBehandling()) + + val behandlingRes = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/" + b.id, + HttpMethod.PUT, + HttpEntity(UpdateBehandlingRequest(123L)), + Void::class.java, + ) + assertEquals(HttpStatus.OK, behandlingRes.statusCode) + + val updatedBehandling = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/${b!!.id}", + HttpMethod.GET, + HttpEntity.EMPTY, + BehandlingDto::class.java, + ) + + assertNotNull(updatedBehandling.body) + assertEquals(123L, updatedBehandling.body!!.grunnlagspakkeId) + } + @Test fun `skal opprette en behandling`() { - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val testBehandlingMedNull = createBehandlingRequestTest("sak123", "en12", roller) - val responseMedNull = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling", - HttpMethod.POST, - HttpEntity(testBehandlingMedNull), - Void::class.java, - ) + val responseMedNull = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedNull), + Void::class.java, + ) assertEquals(HttpStatus.OK, responseMedNull.statusCode) } @Test fun `skal opprette en behandling og ikke opprette forsendelse for forskudd`() { stubUtils.stubOpprettForsendelse() - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val testBehandlingMedNull = createBehandlingRequestTest("sak123", "en12", roller) - val responseMedNull = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling", - HttpMethod.POST, - HttpEntity(testBehandlingMedNull), - Void::class.java, - ) + val responseMedNull = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedNull), + Void::class.java, + ) assertEquals(HttpStatus.OK, responseMedNull.statusCode) stubUtils.Verify().opprettForsendelseIkkeKalt() } @@ -129,22 +164,25 @@ class BehandlingControllerTest() : KontrollerTestRunner() { @Test fun `skal opprette en behandling og forsendelse for stonadType BIDRAG`() { stubUtils.stubOpprettForsendelse() - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) - val testBehandlingMedNull = createBehandlingRequestTest( - "sak123", - "en12", - roller, - ).copy(stonadType = StonadType.BIDRAG) - - val responseMedNull = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling", - HttpMethod.POST, - HttpEntity(testBehandlingMedNull), - Void::class.java, - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) + val testBehandlingMedNull = + createBehandlingRequestTest( + "sak123", + "en12", + roller, + ).copy(stonadType = StonadType.BIDRAG) + + val responseMedNull = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedNull), + Void::class.java, + ) assertEquals(HttpStatus.OK, responseMedNull.statusCode) stubUtils.Verify() .opprettForsendelseKaltMed("\"gjelderIdent\":\"123\"") @@ -155,65 +193,71 @@ class BehandlingControllerTest() : KontrollerTestRunner() { @Test fun `skal opprette en behandling og ignorere feil hvis opprett forsendelse feiler`() { stubUtils.stubOpprettForsendelse(status = HttpStatus.BAD_REQUEST) - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val testBehandlingMedNull = createBehandlingRequestTest("sak123", "en12", roller) - val responseMedNull = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling", - HttpMethod.POST, - HttpEntity(testBehandlingMedNull), - Void::class.java, - ) + val responseMedNull = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedNull), + Void::class.java, + ) assertEquals(HttpStatus.OK, responseMedNull.statusCode) } @Test fun `skal opprette en behandling og oppdatere vedtak id`() { - val behandling = behandlingService.createBehandling( - Behandling( - BehandlingType.FORSKUDD, - SoknadType.FASTSETTELSE, - Date(1), - Date(2), - Date(1), - "123", - 123213L, - null, - "EN123", - SoknadFraType.VERGE, - null, - null, - ), - ) + val behandling = + behandlingService.createBehandling( + Behandling( + BehandlingType.FORSKUDD, + SoknadType.FASTSETTELSE, + Date(1), + Date(2), + Date(1), + "123", + 123213L, + null, + "EN123", + SoknadFraType.VERGE, + null, + null, + ), + ) val VEDTAK_ID: Long = 1 - val responseMedNull = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling/${behandling.id}/vedtak/$VEDTAK_ID", - HttpMethod.PUT, - HttpEntity.EMPTY, - Void::class.java, - ) + val responseMedNull = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/${behandling.id}/vedtak/$VEDTAK_ID", + HttpMethod.PUT, + HttpEntity.EMPTY, + Void::class.java, + ) assertEquals(HttpStatus.OK, responseMedNull.statusCode) assertEquals(VEDTAK_ID, behandlingService.hentBehandlingById(behandling.id!!).vedtakId) } @Test fun `skal ikke opprette en behandling med bare én rolle`() { - val testBehandlingMedNull = createBehandlingRequestTest( - "sak123", - "en12", - setOf(CreateRolleDtoTest(CreateRolleRolleType.BARN, "abc1s", Date(1))), - ) - - val responseMedNull = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling", - HttpMethod.POST, - HttpEntity(testBehandlingMedNull), - Void::class.java, - ) + val testBehandlingMedNull = + createBehandlingRequestTest( + "sak123", + "en12", + setOf(CreateRolleDtoTest(CreateRolleRolleType.BARN, "abc1s", Date(1))), + ) + + val responseMedNull = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedNull), + Void::class.java, + ) assertEquals(HttpStatus.BAD_REQUEST, responseMedNull.statusCode) } @@ -221,111 +265,124 @@ class BehandlingControllerTest() : KontrollerTestRunner() { fun `skal ikke opprette en behandling uten roller`() { val testBehandlingMedNull = createBehandlingRequestTest("sak123", "en12", setOf()) - val responseMedNull = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling", - HttpMethod.POST, - HttpEntity(testBehandlingMedNull), - Void::class.java, - ) + val responseMedNull = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedNull), + Void::class.java, + ) assertEquals(HttpStatus.BAD_REQUEST, responseMedNull.statusCode) } @Test fun `skal ikke opprette en behandling med rolle med null ident`() { - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, null, Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, null, Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val testBehandlingMedNull = createBehandlingRequestTest("sak123", "en12", roller) - val responseMedNull = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling", - HttpMethod.POST, - HttpEntity(testBehandlingMedNull), - Void::class.java, - ) + val responseMedNull = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedNull), + Void::class.java, + ) assertEquals(HttpStatus.BAD_REQUEST, responseMedNull.statusCode) } @Ignore @Test fun `skal ikke opprette en behandling med rolle med blank ident`() { - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, " ", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, " ", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val testBehandlingMedNull = createBehandlingRequestTest("sak123", "en12", roller) - val responseMedNull = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling", - HttpMethod.POST, - HttpEntity(testBehandlingMedNull), - Void::class.java, - ) + val responseMedNull = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedNull), + Void::class.java, + ) assertEquals(HttpStatus.BAD_REQUEST, responseMedNull.statusCode) } @Test fun `skal ikke opprette en behandling med blank sak`() { - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val testBehandlingMedBlank = createBehandlingRequestTest(" ", "en12", roller) - val responseMedBlank = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling", - HttpMethod.POST, - HttpEntity(testBehandlingMedBlank), - Void::class.java, - ) + val responseMedBlank = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedBlank), + Void::class.java, + ) assertEquals(HttpStatus.BAD_REQUEST, responseMedBlank.statusCode) } @Test fun `skal ikke opprette en behandling med blank sak1`() { - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val testBehandlingMedBlank = createBehandlingRequestTest("", "en12", roller) - val responseMedBlank = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling", - HttpMethod.POST, - HttpEntity(testBehandlingMedBlank), - Void::class.java, - ) + val responseMedBlank = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedBlank), + Void::class.java, + ) assertEquals(HttpStatus.BAD_REQUEST, responseMedBlank.statusCode) } @Test fun `skal ikke opprette en behandling med lang sak`() { - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val testBehandlingMedBlank = createBehandlingRequestTest("123456789", "en12", roller) - val responseMedBlank = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling", - HttpMethod.POST, - HttpEntity(testBehandlingMedBlank), - Void::class.java, - ) + val responseMedBlank = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedBlank), + Void::class.java, + ) assertEquals(HttpStatus.BAD_REQUEST, responseMedBlank.statusCode) } @Test fun `skal ikke opprette en behandling med ugyldig enhet`() { - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val b = createBehandlingRequestTest(null, "12312312312", roller) - val r = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling", - HttpMethod.POST, - HttpEntity(b), - Void::class.java, - ) + val r = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(b), + Void::class.java, + ) assertEquals(HttpStatus.BAD_REQUEST, r.statusCode) } @@ -335,18 +392,19 @@ class BehandlingControllerTest() : KontrollerTestRunner() { enhet: String, roller: Set, ): CreateBehandlingRequestTest { - val testBehandling = CreateBehandlingRequestTest( - BehandlingType.FORSKUDD, - StonadType.FORSKUDD, - SoknadType.FASTSETTELSE, - Date(1), - Date(1), - Date(1), - SoknadFraType.BIDRAGSMOTTAKER, - saksnummer, - enhet, - roller, - ) + val testBehandling = + CreateBehandlingRequestTest( + BehandlingType.FORSKUDD, + StonadType.FORSKUDD, + SoknadType.FASTSETTELSE, + Date(1), + Date(1), + Date(1), + SoknadFraType.BIDRAGSMOTTAKER, + saksnummer, + enhet, + roller, + ) return testBehandling } } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/controller/BoforholdControllerTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/controller/BoforholdControllerTest.kt index 3f18eba58..cfd7fed75 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/controller/BoforholdControllerTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/controller/BoforholdControllerTest.kt @@ -16,22 +16,23 @@ import java.util.Date import kotlin.test.assertEquals class BoforholdControllerTest : KontrollerTestRunner() { - @Test fun `skal lagre boforhold data`() { - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val testBehandlingMedNull = BehandlingControllerTest.createBehandlingRequestTest("sak123", "en12", roller) // 1. Create new behandling - val behandling = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling", - HttpMethod.POST, - HttpEntity(testBehandlingMedNull), - CreateBehandlingResponse::class.java, - ) + val behandling = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedNull), + CreateBehandlingResponse::class.java, + ) Assertions.assertEquals(HttpStatus.OK, behandling.statusCode) // 2.1 Prepare husstandsBarn @@ -41,12 +42,13 @@ class BoforholdControllerTest : KontrollerTestRunner() { // 2.2 val boforholdData = UpdateBoforholdRequest(husstandsBarn, emptySet(), "med i vedtak", "kun i notat") // - val boforholdResponse = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling/${behandling.body!!.id}/boforhold", - HttpMethod.PUT, - HttpEntity(boforholdData), - BoforholdResponse::class.java, - ) + val boforholdResponse = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/${behandling.body!!.id}/boforhold", + HttpMethod.PUT, + HttpEntity(boforholdData), + BoforholdResponse::class.java, + ) assertEquals(1, boforholdResponse.body!!.husstandsBarn.size) val husstandsBarnDto = boforholdResponse.body!!.husstandsBarn.iterator().next() diff --git a/src/test/kotlin/no/nav/bidrag/behandling/controller/ForsendelseControllerTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/controller/ForsendelseControllerTest.kt index 70d6b0976..61a3bbbf3 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/controller/ForsendelseControllerTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/controller/ForsendelseControllerTest.kt @@ -23,42 +23,45 @@ import org.springframework.http.HttpStatus import org.springframework.http.MediaType class ForsendelseControllerTest : KontrollerTestRunner() { - @Test fun `Skal opprette forsendelse`() { val forsendelseId = "213123213123" stubUtils.stubOpprettForsendelse(forsendelseId) stubUtils.stubTilgangskontrollTema() - val response = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/forsendelse/init", - HttpMethod.POST, - HttpEntity( - InitalizeForsendelseRequest( - saksnummer = SAKSNUMMER, - enhet = BidragEnhet.ENHET_FARSKAP, - behandlingInfo = BehandlingInfoDto( - soknadId = SOKNAD_ID, - stonadType = StonadType.FORSKUDD, - ), - roller = listOf( - ROLLE_BM, - ROLLE_BP, - ROLLE_BA_1, + val response = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/forsendelse/init", + HttpMethod.POST, + HttpEntity( + InitalizeForsendelseRequest( + saksnummer = SAKSNUMMER, + enhet = BidragEnhet.ENHET_FARSKAP, + behandlingInfo = + BehandlingInfoDto( + soknadId = SOKNAD_ID, + stonadType = StonadType.FORSKUDD, + ), + roller = + listOf( + ROLLE_BM, + ROLLE_BP, + ROLLE_BA_1, + ), ), ), - ), - List::class.java, - ) + List::class.java, + ) response.statusCode shouldBe HttpStatus.OK response.body shouldBe listOf(forsendelseId) @Language("Json") - val expectedRequest = """ + val expectedRequest = + """ { "mottaker": { - "ident": "${ROLLE_BM.fødselsnummer.verdi}" + "ident": "${ROLLE_BM.fødselsnummer?.verdi}" }, - "gjelderIdent": "${ROLLE_BM.fødselsnummer.verdi}", + "gjelderIdent": "${ROLLE_BM.fødselsnummer?.verdi}", "saksnummer": "$SAKSNUMMER", "enhet": "${BidragEnhet.ENHET_FARSKAP}", "språk": "NB", @@ -79,7 +82,7 @@ class ForsendelseControllerTest : KontrollerTestRunner() { }, "opprettTittel": true } - """.trimIndent().replace("\n", "").replace(" ", "") + """.trimIndent().replace("\n", "").replace(" ", "") stubUtils.Verify().opprettForsendelseKaltMed(expectedRequest) stubUtils.Verify().forsendelseHentetForSak(SAKSNUMMER, 0) stubUtils.Verify().forsendelseSlettet(antall = 0) @@ -92,11 +95,13 @@ class ForsendelseControllerTest : KontrollerTestRunner() { stubUtils.stubTilgangskontrollTema() val header = HttpHeaders() header.contentType = MediaType.APPLICATION_JSON - val response = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/forsendelse/init", - HttpMethod.POST, - HttpEntity( - """{ + val response = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/forsendelse/init", + HttpMethod.POST, + HttpEntity( + """ + { "saksnummer": "$SAKSNUMMER", "behandlingInfo": { "vedtakId": null, @@ -116,34 +121,35 @@ class ForsendelseControllerTest : KontrollerTestRunner() { "tema": null, "roller": [ { - "fødselsnummer": "${ROLLE_BM.fødselsnummer.verdi}", + "fødselsnummer": "${ROLLE_BM.fødselsnummer?.verdi}", "type": "BM" }, { - "fødselsnummer": "${ROLLE_BP.fødselsnummer.verdi}", + "fødselsnummer": "${ROLLE_BP.fødselsnummer?.verdi}", "type": "BP" }, { - "fødselsnummer": "${ROLLE_BA_1.fødselsnummer.verdi}", + "fødselsnummer": "${ROLLE_BA_1.fødselsnummer?.verdi}", "type": "BA" } ] } - """.trimIndent(), - header, - ), - List::class.java, - ) + """.trimIndent(), + header, + ), + List::class.java, + ) response.statusCode shouldBe HttpStatus.OK response.body shouldBe listOf(forsendelseId) @Language("Json") - val expectedRequest = """ + val expectedRequest = + """ { "mottaker": { - "ident": "${ROLLE_BM.fødselsnummer.verdi}" + "ident": "${ROLLE_BM.fødselsnummer?.verdi}" }, - "gjelderIdent": "${ROLLE_BM.fødselsnummer.verdi}", + "gjelderIdent": "${ROLLE_BM.fødselsnummer?.verdi}", "saksnummer": "$SAKSNUMMER", "enhet": "${BidragEnhet.ENHET_FARSKAP}", "språk": "NB", @@ -164,7 +170,7 @@ class ForsendelseControllerTest : KontrollerTestRunner() { }, "opprettTittel": true } - """.trimIndent().replace("\n", "").replace(" ", "") + """.trimIndent().replace("\n", "").replace(" ", "") stubUtils.Verify().opprettForsendelseKaltMed(expectedRequest) stubUtils.Verify().forsendelseHentetForSak(SAKSNUMMER, 0) stubUtils.Verify().forsendelseSlettet(antall = 0) @@ -185,27 +191,30 @@ class ForsendelseControllerTest : KontrollerTestRunner() { ), ) stubUtils.stubTilgangskontrollTema() - val response = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/forsendelse/init", - HttpMethod.POST, - HttpEntity( - InitalizeForsendelseRequest( - saksnummer = SAKSNUMMER, - enhet = BidragEnhet.ENHET_FARSKAP, - behandlingInfo = BehandlingInfoDto( - soknadId = SOKNAD_ID, - stonadType = StonadType.FORSKUDD, - vedtakId = 1, - ), - roller = listOf( - ROLLE_BM, - ROLLE_BP, - ROLLE_BA_1, + val response = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/forsendelse/init", + HttpMethod.POST, + HttpEntity( + InitalizeForsendelseRequest( + saksnummer = SAKSNUMMER, + enhet = BidragEnhet.ENHET_FARSKAP, + behandlingInfo = + BehandlingInfoDto( + soknadId = SOKNAD_ID, + stonadType = StonadType.FORSKUDD, + vedtakId = 1, + ), + roller = + listOf( + ROLLE_BM, + ROLLE_BP, + ROLLE_BA_1, + ), ), ), - ), - List::class.java, - ) + List::class.java, + ) response.statusCode shouldBe HttpStatus.OK response.body shouldBe listOf(forsendelseId) diff --git a/src/test/kotlin/no/nav/bidrag/behandling/controller/InntekterControllerTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/controller/InntekterControllerTest.kt index 4061a3f48..b6ae8056b 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/controller/InntekterControllerTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/controller/InntekterControllerTest.kt @@ -1,21 +1,37 @@ package no.nav.bidrag.behandling.controller +import io.kotest.assertions.assertSoftly +import io.kotest.matchers.ints.shouldBeExactly +import io.kotest.matchers.shouldBe +import io.kotest.matchers.shouldNotBe +import jakarta.persistence.EntityManager import no.nav.bidrag.behandling.database.datamodell.Behandling import no.nav.bidrag.behandling.database.datamodell.BehandlingType +import no.nav.bidrag.behandling.database.datamodell.Inntekt +import no.nav.bidrag.behandling.database.datamodell.InntektPostDomain import no.nav.bidrag.behandling.database.datamodell.SoknadFraType import no.nav.bidrag.behandling.database.datamodell.SoknadType import no.nav.bidrag.behandling.database.repository.BehandlingRepository import no.nav.bidrag.behandling.dto.inntekt.BarnetilleggDto import no.nav.bidrag.behandling.dto.inntekt.InntekterResponse import no.nav.bidrag.behandling.dto.inntekt.UtvidetbarnetrygdDto +import no.nav.bidrag.behandling.service.BehandlingService +import no.nav.bidrag.behandling.transformers.toDate import no.nav.bidrag.transport.behandling.inntekt.response.InntektPost +import org.hibernate.engine.spi.SessionImplementor +import org.hibernate.resource.transaction.spi.TransactionStatus +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.HttpEntity import org.springframework.http.HttpMethod import org.springframework.http.HttpStatus +import org.springframework.transaction.annotation.Transactional import java.math.BigDecimal -import java.util.Date +import java.time.LocalDate +import java.util.* import kotlin.test.assertEquals import kotlin.test.assertNotNull @@ -40,9 +56,215 @@ class InntekterControllerTest : KontrollerTestRunner() { @Autowired lateinit var behandlingRepository: BehandlingRepository - @Test - fun `skal opprette og oppdatere inntekter`() { - // 1. Create new behandling + @Autowired + lateinit var behandlingService: BehandlingService + + @Autowired + lateinit var entityManager: EntityManager + + @BeforeEach + fun oppsett() { + behandlingRepository.deleteAll() + } + + @Nested + @DisplayName("Tester endepunkt for henting av inntekter") + open inner class HenteInntekter { + + @Test + fun `skal hente inntekter for behandling`() { + // given + var behandling = behandling() + + var inntekt = inntekt(behandling) + inntekt.inntektPostListe = inntektsposter(inntekt) + behandling.inntekter = setOf(inntekt).toMutableSet() + behandlingRepository.save(behandling) + + var lagretBehandlingMedInntekter = behandlingRepository.findAll().iterator().next() + + // when + val r1 = httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/${lagretBehandlingMedInntekter.id}/inntekter", + HttpMethod.GET, + HttpEntity.EMPTY, + InntekterResponse::class.java, + ) + + // then + assertSoftly { + r1 shouldNotBe null + r1.statusCode shouldBe HttpStatus.OK + r1.body shouldNotBe null + r1.body!!.inntekter.size shouldBeExactly 1 + } + } + + @Test + fun `skal returnere tom liste av inntekter for behandling som mangler inntekter`() { + // given + var behandling = behandling() + + behandlingRepository.save(behandling) + + var lagretBehandlingUtenInntekter = behandlingRepository.findAll().iterator().next() + + // when + val r1 = httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/${lagretBehandlingUtenInntekter.id}/inntekter", + HttpMethod.GET, + HttpEntity.EMPTY, + InntekterResponse::class.java, + ) + + // then + assertSoftly { + r1 shouldNotBe null + r1.statusCode shouldBe HttpStatus.OK + r1.body shouldNotBe null + r1.body!!.inntekter.size shouldBeExactly 0 + } + } + } + + @Nested + @DisplayName("Tester endepunkt for oppdatering av inntekter") + open inner class OppdatereInntekter { + + @Test + @Transactional + open fun `skal opprette inntekter`() { + // given + lagreBehandlingIEgenTransaksjon(false) + var lagretBehandlingUtenInntekter = behandlingRepository.findAll().iterator().next() + + assert(lagretBehandlingUtenInntekter.inntekter.size == 0) + + val inn = testInntektDto() + + // when + val r = httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/${lagretBehandlingUtenInntekter.id}/inntekter", + HttpMethod.PUT, + HttpEntity(TestInntektRequest(setOf(inn), emptySet(), emptySet())), + InntekterResponse::class.java, + ) + + // then + assertEquals(HttpStatus.OK, r.statusCode) + assertEquals(1, r.body!!.inntekter.size) + } + + @Test + @Transactional + open fun `skal oppdatere eksisterende inntekter`() { + // given + lagreBehandlingIEgenTransaksjon(true) + var lagretBehandlingMedInntekter = behandlingRepository.findAll().iterator().next() + + assert(lagretBehandlingMedInntekter.inntekter.size > 0) + + // when + val inntekt1 = testInntektDto().copy( + id = null, + inntektPostListe = setOf( + InntektPost("ABC1", "ABC1", BigDecimal.TEN), + InntektPost("ABC2", "ABC2", BigDecimal.TEN), + ), + ) + + val inntekt2 = testInntektDto().copy(datoFom = null, inntektType = "null") + + val r1 = httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/${lagretBehandlingMedInntekter.id}/inntekter", + HttpMethod.PUT, + HttpEntity(TestInntektRequest(setOf(inntekt1, inntekt2), setOf(), setOf())), + InntekterResponse::class.java, + ) + + // then + assertEquals(HttpStatus.OK, r1.statusCode) + assertEquals(2, r1.body!!.inntekter.size) + assertNotNull(r1.body!!.inntekter.find { it.inntektType == "some0" && it.inntektPostListe.size == 2 }) + assertNotNull(r1.body!!.inntekter.find { it.inntektType == "null" && it.inntektPostListe.size == 1 }) + } + + @Test + @Transactional + open fun `skal slette inntekter`() { + // given + lagreBehandlingIEgenTransaksjon(true) + var lagretBehandlingMedInntekter = behandlingRepository.findAll().iterator().next() + + assert(lagretBehandlingMedInntekter.inntekter.size > 0) + + // when + val r = httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/${lagretBehandlingMedInntekter.id}/inntekter", + HttpMethod.PUT, + HttpEntity(TestInntektRequest(emptySet(), emptySet(), emptySet())), + InntekterResponse::class.java, + ) + + // then + assertEquals(HttpStatus.OK, r.statusCode) + assertEquals(0, r.body!!.inntekter.size) + } + } + + private fun lagreBehandlingIEgenTransaksjon(inkludereInntekter: Boolean) { + val sessionImplementor = entityManager.delegate as SessionImplementor + var transaction = sessionImplementor.transaction + + var transactionStatus = transaction.status + if (TransactionStatus.NOT_ACTIVE == transactionStatus) { + transaction.begin() + } + + var behandling = behandling() + + if (inkludereInntekter) { + var inntekt = inntekt(behandling) + inntekt.inntektPostListe = inntektsposter(inntekt) + behandling.inntekter = setOf(inntekt).toMutableSet() + } + + entityManager?.persist(behandling) + transaction.commit() + } + + private fun inntekt(behandling: Behandling) = Inntekt( + "INNTEKTSOPPLYSNINGER_ARBEIDSGIVER", + BigDecimal.valueOf(45000), + LocalDate.now().minusYears(1).withDayOfYear(1).toDate(), + LocalDate.now().minusYears(1).withMonth(12).withDayOfMonth(31).toDate(), + "1234", + true, + true, + behandling = behandling, + ) + + private fun inntektsposter(inntekt: Inntekt): MutableSet = setOf( + InntektPostDomain( + BigDecimal.valueOf(400000), + "lønnFraFluefiske", + "Lønn fra fluefiske", + inntekt = inntekt, + ), + ).toMutableSet() + + private fun testInntektDto() = TestInntektDto( + null, + true, + "some0", + "1.123", + "2022-10-10", + "2022-10-10", + "blablabla", + setOf(InntektPost("ABC", "ABC", BigDecimal.TEN)), + ) + + private fun behandling(): Behandling { val behandling: Behandling = behandlingRepository.save( Behandling( BehandlingType.FORSKUDD, @@ -59,46 +281,8 @@ class InntekterControllerTest : KontrollerTestRunner() { null, ), ) - - val inn = TestInntektDto(null, true, "some0", "1.123", "2022-10-10", "2022-10-10", "blablabla", setOf(InntektPost("ABC", "ABC", BigDecimal.TEN))) -// val inn1 = TestInntektDto(null, true, "some1", "1.123", "2022-10-10", "2022-10-10", "blablabla", setOf(InntektPost("ABC1", "ABC1", BigDecimal.TEN), InntektPost("ABC2", "ABC2", BigDecimal.TEN))) - - // 2. Add inntekter - val r = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling/${behandling.id}/inntekter", - HttpMethod.PUT, - HttpEntity(TestInntektRequest(setOf(inn), emptySet(), emptySet())), - InntekterResponse::class.java, - ) - - assertEquals(HttpStatus.OK, r.statusCode) - assertEquals(1, r.body!!.inntekter.size) - - // 3. Add some more inntekter - val inntekt1 = inn.copy(id = r.body!!.inntekter.iterator().next().id, inntektPostListe = setOf(InntektPost("ABC1", "ABC1", BigDecimal.TEN), InntektPost("ABC2", "ABC2", BigDecimal.TEN))) - val inntekt2 = inn.copy(datoFom = null, inntektType = "null") - - val r1 = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling/${behandling.id}/inntekter", - HttpMethod.PUT, - HttpEntity(TestInntektRequest(setOf(inntekt1, inntekt2), setOf(), setOf())), - InntekterResponse::class.java, - ) - - assertEquals(HttpStatus.OK, r.statusCode) - assertEquals(2, r1.body!!.inntekter.size) - assertNotNull(r1.body!!.inntekter.find { it.inntektType == "some0" && it.inntektPostListe.size == 2 }) - assertNotNull(r1.body!!.inntekter.find { it.inntektType == "null" && it.inntektPostListe.size == 1 }) - - // 4. Remove inntekter - val r2 = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling/${behandling.id}/inntekter", - HttpMethod.PUT, - HttpEntity(TestInntektRequest(emptySet(), emptySet(), emptySet())), - InntekterResponse::class.java, - ) - - assertEquals(HttpStatus.OK, r.statusCode) - assertEquals(0, r2.body!!.inntekter.size) + return behandling } + + fun createBehandling(): Behandling = behandlingService.createBehandling(behandling()) } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/controller/KontrollerTestRunner.kt b/src/test/kotlin/no/nav/bidrag/behandling/controller/KontrollerTestRunner.kt index 39e334429..60c314ca6 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/controller/KontrollerTestRunner.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/controller/KontrollerTestRunner.kt @@ -16,6 +16,7 @@ abstract class KontrollerTestRunner : CommonTestRunner() { lateinit var httpHeaderTestRestTemplate: HttpHeaderTestRestTemplate val stubUtils: StubUtils = StubUtils() + protected fun rootUri(): String { return "http://localhost:$port/api/" } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/controller/OpplysningerControllerTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/controller/OpplysningerControllerTest.kt index 2d6dcb385..0744a08bc 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/controller/OpplysningerControllerTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/controller/OpplysningerControllerTest.kt @@ -21,17 +21,23 @@ data class AddOpplysningerRequest( ) class OpplysningerControllerTest : KontrollerTestRunner() { - @Test fun `skal opprette og oppdatere opplysninger`() { - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val testBehandlingMedNull = BehandlingControllerTest.createBehandlingRequestTest("sak123", "en12", roller) // 1. Create new behandling - val behandling = httpHeaderTestRestTemplate.exchange("${rootUri()}/behandling", HttpMethod.POST, HttpEntity(testBehandlingMedNull), CreateBehandlingResponse::class.java) + val behandling = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedNull), + CreateBehandlingResponse::class.java, + ) Assertions.assertEquals(HttpStatus.OK, behandling.statusCode) val behandlingId = behandling.body!!.id @@ -41,7 +47,13 @@ class OpplysningerControllerTest : KontrollerTestRunner() { skalOppretteOpplysninger(behandlingId, "opp1", true, OpplysningerType.BOFORHOLD) // 3. Assert that opp1 is active - val oppAktivResult1 = httpHeaderTestRestTemplate.exchange("${rootUri()}/behandling/$behandlingId/opplysninger/BOFORHOLD/aktiv", HttpMethod.GET, HttpEntity.EMPTY, OpplysningerDto::class.java) + val oppAktivResult1 = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/$behandlingId/opplysninger/BOFORHOLD/aktiv", + HttpMethod.GET, + HttpEntity.EMPTY, + OpplysningerDto::class.java, + ) Assertions.assertEquals(HttpStatus.OK, oppAktivResult1.statusCode) Assertions.assertEquals(behandlingId, oppAktivResult1.body!!.behandlingId) Assertions.assertEquals("opp1", oppAktivResult1.body!!.data) @@ -49,14 +61,21 @@ class OpplysningerControllerTest : KontrollerTestRunner() { @Test fun `skal ikke være mulig å opprette flere aktive opplysninger`() { - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val testBehandlingMedNull = BehandlingControllerTest.createBehandlingRequestTest("sak123", "en12", roller) // 1. Create new behandling - val behandling = httpHeaderTestRestTemplate.exchange("${rootUri()}/behandling", HttpMethod.POST, HttpEntity(testBehandlingMedNull), CreateBehandlingResponse::class.java) + val behandling = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedNull), + CreateBehandlingResponse::class.java, + ) Assertions.assertEquals(HttpStatus.OK, behandling.statusCode) val behandlingId = behandling.body!!.id @@ -66,7 +85,13 @@ class OpplysningerControllerTest : KontrollerTestRunner() { skalOppretteOpplysninger(behandlingId, "opp1", true, OpplysningerType.BOFORHOLD) // 3. Assert that opp1 is active - val oppAktivResult1 = httpHeaderTestRestTemplate.exchange("${rootUri()}/behandling/$behandlingId/opplysninger/BOFORHOLD/aktiv", HttpMethod.GET, HttpEntity.EMPTY, OpplysningerDto::class.java) + val oppAktivResult1 = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/$behandlingId/opplysninger/BOFORHOLD/aktiv", + HttpMethod.GET, + HttpEntity.EMPTY, + OpplysningerDto::class.java, + ) Assertions.assertEquals(HttpStatus.OK, oppAktivResult1.statusCode) Assertions.assertEquals(behandlingId, oppAktivResult1.body!!.behandlingId) Assertions.assertEquals("opp1", oppAktivResult1.body!!.data) @@ -74,44 +99,76 @@ class OpplysningerControllerTest : KontrollerTestRunner() { @Test fun `skal returnere 404 ved ugyldig behandling id`() { - val r = httpHeaderTestRestTemplate.exchange("${rootUri()}/behandling/1232132/opplysninger/${OpplysningerType.BOFORHOLD.name}/aktiv", HttpMethod.GET, HttpEntity.EMPTY, OpplysningerDto::class.java) + val r = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/1232132/opplysninger/${OpplysningerType.BOFORHOLD.name}/aktiv", + HttpMethod.GET, + HttpEntity.EMPTY, + OpplysningerDto::class.java, + ) Assertions.assertEquals(HttpStatus.NOT_FOUND, r.statusCode) } @Test fun `skal returnere 404 hvis opplysninger ikke eksisterer for en gitt behandling`() { - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val testBehandlingMedNull = BehandlingControllerTest.createBehandlingRequestTest("sak123", "en12", roller) // 1. Create new behandling - val behandling = httpHeaderTestRestTemplate.exchange("${rootUri()}/behandling", HttpMethod.POST, HttpEntity(testBehandlingMedNull), CreateBehandlingResponse::class.java) + val behandling = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedNull), + CreateBehandlingResponse::class.java, + ) Assertions.assertEquals(HttpStatus.OK, behandling.statusCode) // 2. Check - val r = httpHeaderTestRestTemplate.exchange("${rootUri()}/behandling/${behandling.body!!.id}/opplysninger/${OpplysningerType.BOFORHOLD.name}/aktiv", HttpMethod.GET, HttpEntity.EMPTY, OpplysningerDto::class.java) + val r = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/${behandling.body!!.id}/opplysninger/${OpplysningerType.BOFORHOLD.name}/aktiv", + HttpMethod.GET, + HttpEntity.EMPTY, + OpplysningerDto::class.java, + ) Assertions.assertEquals(HttpStatus.NOT_FOUND, r.statusCode) } @Test @Ignore // Må fikses i validerings logikken fun `skal returnere 400 ved ugyldig type`() { - val r = httpHeaderTestRestTemplate.exchange("${rootUri()}/behandling/1232132/opplysninger/ERROR/aktiv", HttpMethod.GET, HttpEntity.EMPTY, OpplysningerDto::class.java) + val r = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/1232132/opplysninger/ERROR/aktiv", + HttpMethod.GET, + HttpEntity.EMPTY, + OpplysningerDto::class.java, + ) Assertions.assertEquals(HttpStatus.BAD_REQUEST, r.statusCode) } @Test fun `skal opprette og oppdatere opplysninger1`() { - val roller = setOf( - CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), - CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), - ) + val roller = + setOf( + CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)), + CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)), + ) val testBehandlingMedNull = BehandlingControllerTest.createBehandlingRequestTest("sak123", "en12", roller) // 1. Create new behandling - val behandling = httpHeaderTestRestTemplate.exchange("${rootUri()}/behandling", HttpMethod.POST, HttpEntity(testBehandlingMedNull), CreateBehandlingResponse::class.java) + val behandling = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling", + HttpMethod.POST, + HttpEntity(testBehandlingMedNull), + CreateBehandlingResponse::class.java, + ) Assertions.assertEquals(HttpStatus.OK, behandling.statusCode) val behandlingId = behandling.body!!.id @@ -123,13 +180,25 @@ class OpplysningerControllerTest : KontrollerTestRunner() { skalOppretteOpplysninger(behandlingId, "inn1", false, OpplysningerType.INNTEKTSOPPLYSNINGER) // 3. Assert that opp1 is active - val oppAktivResult1 = httpHeaderTestRestTemplate.exchange("${rootUri()}/behandling/$behandlingId/opplysninger/${OpplysningerType.BOFORHOLD.name}/aktiv", HttpMethod.GET, HttpEntity.EMPTY, OpplysningerDto::class.java) + val oppAktivResult1 = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/$behandlingId/opplysninger/${OpplysningerType.BOFORHOLD.name}/aktiv", + HttpMethod.GET, + HttpEntity.EMPTY, + OpplysningerDto::class.java, + ) Assertions.assertEquals(HttpStatus.OK, oppAktivResult1.statusCode) Assertions.assertEquals(behandlingId, oppAktivResult1.body!!.behandlingId) Assertions.assertEquals("opp1", oppAktivResult1.body!!.data) // 4. Assert that inn1 is active - val oppAktivResult2 = httpHeaderTestRestTemplate.exchange("${rootUri()}/behandling/$behandlingId/opplysninger/${OpplysningerType.INNTEKTSOPPLYSNINGER.name}/aktiv", HttpMethod.GET, HttpEntity.EMPTY, OpplysningerDto::class.java) + val oppAktivResult2 = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/$behandlingId/opplysninger/${OpplysningerType.INNTEKTSOPPLYSNINGER.name}/aktiv", + HttpMethod.GET, + HttpEntity.EMPTY, + OpplysningerDto::class.java, + ) Assertions.assertEquals(HttpStatus.OK, oppAktivResult2.statusCode) Assertions.assertEquals(behandlingId, oppAktivResult2.body!!.behandlingId) Assertions.assertEquals("inn1", oppAktivResult2.body!!.data) @@ -143,12 +212,13 @@ class OpplysningerControllerTest : KontrollerTestRunner() { ): OpplysningerDto { val opplysninger = createOpplysninger(behandlingId, data, aktiv, opplysningerType) - val opp = httpHeaderTestRestTemplate.exchange( - "${rootUri()}/behandling/$behandlingId/opplysninger", - HttpMethod.POST, - HttpEntity(opplysninger), - OpplysningerDto::class.java, - ) + val opp = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/$behandlingId/opplysninger", + HttpMethod.POST, + HttpEntity(opplysninger), + OpplysningerDto::class.java, + ) Assertions.assertEquals(HttpStatus.OK, opp.statusCode) val body = opp.body!! @@ -157,7 +227,12 @@ class OpplysningerControllerTest : KontrollerTestRunner() { return body } - private fun createOpplysninger(behandlingId: Long, data: String, aktiv: Boolean, opplysningerType: OpplysningerType): AddOpplysningerRequest { + private fun createOpplysninger( + behandlingId: Long, + data: String, + aktiv: Boolean, + opplysningerType: OpplysningerType, + ): AddOpplysningerRequest { val opplysninger = AddOpplysningerRequest(behandlingId, aktiv, opplysningerType, data, "2025-02-01") return opplysninger diff --git a/src/test/kotlin/no/nav/bidrag/behandling/controller/VirkningsTidspunktControllerTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/controller/VirkningsTidspunktControllerTest.kt index ade240e25..01af8f376 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/controller/VirkningsTidspunktControllerTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/controller/VirkningsTidspunktControllerTest.kt @@ -19,14 +19,21 @@ class VirkningsTidspunktControllerTest : KontrollerTestRunner() { fun `skal oppdatere virknings tidspunkt data`() { val behandling = behandlingService.createBehandling(BehandlingServiceTest.prepareBehandling()) - val req = UpdateVirkningsTidspunktRequestTest( - "MED I VEDTAK", - "KUN I NOTAT", - ForskuddAarsakType.KF, - "2025-12-27", - ) + val req = + UpdateVirkningsTidspunktRequestTest( + "MED I VEDTAK", + "KUN I NOTAT", + ForskuddAarsakType.KF, + "2025-12-27", + ) - val virknsRes = httpHeaderTestRestTemplate.exchange("${rootUri()}/behandling/${behandling.id}/virkningstidspunkt", HttpMethod.PUT, HttpEntity(req), VirkningsTidspunktResponse::class.java) + val virknsRes = + httpHeaderTestRestTemplate.exchange( + "${rootUri()}/behandling/${behandling.id}/virkningstidspunkt", + HttpMethod.PUT, + HttpEntity(req), + VirkningsTidspunktResponse::class.java, + ) Assertions.assertEquals(HttpStatus.OK, virknsRes.statusCode) val body = virknsRes.body!! diff --git a/src/test/kotlin/no/nav/bidrag/behandling/hendelse/VedtakHendelseTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/hendelse/VedtakHendelseTest.kt index a4d782fec..9b66c8d2e 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/hendelse/VedtakHendelseTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/hendelse/VedtakHendelseTest.kt @@ -56,16 +56,23 @@ class VedtakHendelseTest : CommonTestRunner() { val behandlingRequest = opprettBehandling() behandlingRequest.roller = opprettBehandlingRoller(behandlingRequest) val behandling = behandlingRepository.save(behandlingRequest) - vedtakHendelseListener.prossesserVedtakHendelse(opprettHendelseRecord(opprettVedtakhendelse(vedtakId, behandling.id!!))) + vedtakHendelseListener.prossesserVedtakHendelse( + opprettHendelseRecord( + opprettVedtakhendelse( + vedtakId, + behandling.id!!, + ), + ), + ) val oppdatertBehandling = behandlingRepository.findBehandlingById(behandling.id!!).get() oppdatertBehandling.vedtakId shouldBe vedtakId stubUtils.Verify().opprettForsendelseKaltAntallGanger(3) stubUtils.Verify() - .opprettForsendelseKaltMed("\"gjelderIdent\":\"${ROLLE_BM.fødselsnummer.verdi}\"") + .opprettForsendelseKaltMed("\"gjelderIdent\":\"${ROLLE_BM.fødselsnummer?.verdi}\"") stubUtils.Verify() - .opprettForsendelseKaltMed("\"gjelderIdent\":\"${ROLLE_BP.fødselsnummer.verdi}\"") + .opprettForsendelseKaltMed("\"gjelderIdent\":\"${ROLLE_BP.fødselsnummer?.verdi}\"") stubUtils.Verify() - .opprettForsendelseKaltMed("\"gjelderIdent\":\"${ROLLE_BA_1.fødselsnummer.verdi}\"") + .opprettForsendelseKaltMed("\"gjelderIdent\":\"${ROLLE_BA_1.fødselsnummer?.verdi}\"") stubUtils.Verify().forsendelseHentetForSak(SAKSNUMMER) stubUtils.Verify().forsendelseSlettet("1") stubUtils.Verify().forsendelseSlettet("2") @@ -78,7 +85,8 @@ class VedtakHendelseTest : CommonTestRunner() { val behandlingRequest = opprettBehandling() behandlingRequest.roller = opprettBehandlingRoller(behandlingRequest) val behandling = behandlingRepository.save(behandlingRequest) - val vedtakHendelse = opprettVedtakhendelse(vedtakId, behandling.id!!, stonadType = StonadType.FORSKUDD) + val vedtakHendelse = + opprettVedtakhendelse(vedtakId, behandling.id!!, stonadType = StonadType.FORSKUDD) vedtakHendelseListener.prossesserVedtakHendelse(opprettHendelseRecord(vedtakHendelse)) val oppdatertBehandling = behandlingRepository.findBehandlingById(behandling.id!!).get() oppdatertBehandling.vedtakId shouldBe vedtakId @@ -94,6 +102,7 @@ class VedtakHendelseTest : CommonTestRunner() { "", stubUtils.toJsonString(vedtakHendelse), ) + private fun opprettBehandling() = Behandling( datoFom = Date(), datoTom = Date(), @@ -132,7 +141,11 @@ class VedtakHendelseTest : CommonTestRunner() { ), ) - private fun opprettVedtakhendelse(vedtakId: Int, behandlingId: Long, stonadType: StonadType = StonadType.BIDRAG18AAR): VedtakHendelse { + private fun opprettVedtakhendelse( + vedtakId: Int, + behandlingId: Long, + stonadType: StonadType = StonadType.BIDRAG18AAR, + ): VedtakHendelse { return VedtakHendelse( type = VedtakType.FASTSETTELSE, stonadsendringListe = listOf( diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt index c0f32922d..85bd37e7f 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/BehandlingServiceTest.kt @@ -1,5 +1,7 @@ package no.nav.bidrag.behandling.service +import jakarta.persistence.EntityManager +import jakarta.persistence.PersistenceContext import no.nav.bidrag.behandling.TestContainerRunner import no.nav.bidrag.behandling.database.datamodell.Barnetillegg import no.nav.bidrag.behandling.database.datamodell.Behandling @@ -11,6 +13,9 @@ import no.nav.bidrag.behandling.database.datamodell.SivilstandType import no.nav.bidrag.behandling.database.datamodell.SoknadFraType import no.nav.bidrag.behandling.database.datamodell.SoknadType import no.nav.bidrag.behandling.database.datamodell.Utvidetbarnetrygd +import no.nav.bidrag.behandling.database.repository.BehandlingRepository +import no.nav.bidrag.behandling.dto.behandling.CreateRolleDto +import no.nav.bidrag.behandling.dto.behandling.CreateRolleRolleType import no.nav.bidrag.behandling.dto.behandling.SivilstandDto import no.nav.bidrag.behandling.dto.husstandsbarn.HusstandsBarnDto import no.nav.bidrag.behandling.transformers.toDomain @@ -21,319 +26,449 @@ 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.Assertions.assertNull +import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired +import org.springframework.transaction.annotation.Transactional import org.springframework.web.client.HttpClientErrorException import java.math.BigDecimal import java.util.Calendar +import java.util.Date class BehandlingServiceTest : TestContainerRunner() { @Autowired lateinit var behandlingService: BehandlingService - @Test - fun `skal opprette en behandling`() { - val actualBehandling = createBehandling() + @Autowired + lateinit var behandlingRepository: BehandlingRepository + + @PersistenceContext + lateinit var entityManager: EntityManager + + @Nested + open inner class HenteBehandling { + @Test + fun `skal caste 404 exception hvis behandlingen ikke er der`() { + Assertions.assertThrows(HttpClientErrorException::class.java) { + behandlingService.hentBehandlingById(1234) + } + } + } - assertNotNull(actualBehandling.id) - assertEquals(BehandlingType.FORSKUDD, actualBehandling.behandlingType) - assertEquals(3, actualBehandling.roller.size) + @Nested + open inner class OppretteBehandling { + @Test + fun `skal opprette en forskuddsbehandling`() { + val actualBehandling = createBehandling() - val actualBehandlingFetched = behandlingService.hentBehandlingById(actualBehandling.id!!) + assertNotNull(actualBehandling.id) + assertEquals(BehandlingType.FORSKUDD, actualBehandling.behandlingType) + assertEquals(3, actualBehandling.roller.size) - assertEquals(BehandlingType.FORSKUDD, actualBehandlingFetched.behandlingType) - assertEquals(3, actualBehandlingFetched.roller.size) - assertNotNull(actualBehandlingFetched.roller.iterator().next().fodtDato) - } + val actualBehandlingFetched = behandlingService.hentBehandlingById(actualBehandling.id!!) - @Test - fun `skal opprette en behandling med inntekter`() { - val behandling = prepareBehandling() + assertEquals(BehandlingType.FORSKUDD, actualBehandlingFetched.behandlingType) + assertEquals(3, actualBehandlingFetched.roller.size) + assertNotNull(actualBehandlingFetched.roller.iterator().next().fodtDato) + } - behandling.inntekter = mutableSetOf(Inntekt(behandling, true, "", BigDecimal.valueOf(555.55), null, null, "ident", true)) + @Test + fun `skal opprette en behandling med inntekter`() { + val behandling = prepareBehandling() - val actualBehandling = behandlingService.createBehandling(behandling) + behandling.inntekter = mutableSetOf(Inntekt("", BigDecimal.valueOf(555.55), null, null, "ident", true, true, behandling = behandling)) - assertNotNull(actualBehandling.id) + val actualBehandling = behandlingService.createBehandling(behandling) - val actualBehandlingFetched = behandlingService.hentBehandlingById(actualBehandling.id!!) + assertNotNull(actualBehandling.id) - assertEquals(BehandlingType.FORSKUDD, actualBehandlingFetched.behandlingType) - assertEquals(1, actualBehandlingFetched.inntekter.size) - assertEquals(BigDecimal.valueOf(555.55), actualBehandlingFetched.inntekter.iterator().next().belop) - } + val actualBehandlingFetched = behandlingService.hentBehandlingById(actualBehandling.id!!) - companion object { - fun prepareBehandling(): Behandling { - val behandling = Behandling( - BehandlingType.FORSKUDD, - SoknadType.FASTSETTELSE, - Calendar.getInstance().time, - Calendar.getInstance().time, - Calendar.getInstance().time, - "1234", - 123213L, - null, - "1234", - SoknadFraType.BIDRAGSMOTTAKER, - null, - null, - ) - val createRoller = prepareRoles(behandling) - val roller = HashSet( - createRoller.map { - Rolle( - behandling, - it.rolleType, - it.ident, - it.fodtDato, - it.opprettetDato, - ) - }, + assertEquals(BehandlingType.FORSKUDD, actualBehandlingFetched.behandlingType) + assertEquals(1, actualBehandlingFetched.inntekter.size) + assertEquals(BigDecimal.valueOf(555.55), actualBehandlingFetched.inntekter.iterator().next().belop) + } + + @Test + fun `skal oppdatere boforhold data`() { + val behandling = prepareBehandling() + + val NOTAT = "New Notat" + val MED_I_VEDTAK = "med i vedtak" + + val createdBehandling = behandlingService.createBehandling(behandling) + + assertNotNull(createdBehandling.id) + assertNull(createdBehandling.aarsak) + assertEquals(0, createdBehandling.husstandsBarn.size) + assertEquals(0, createdBehandling.sivilstand.size) + + val husstandsBarn = setOf(HusstandsBarnDto(null, true, emptySet(), "Manuelt", "ident!")) + val sivilstand = + setOf( + SivilstandDto( + null, + Calendar.getInstance().time.toLocalDate(), + Calendar.getInstance().time.toLocalDate(), + SivilstandType.ENKE_ELLER_ENKEMANN, + ), + ) + + behandlingService.updateBoforhold( + createdBehandling.id!!, + husstandsBarn.toDomain(createdBehandling), + sivilstand.toSivilstandDomain(createdBehandling), + NOTAT, + MED_I_VEDTAK, ) - behandling.roller.addAll(roller) - return behandling + val updatedBehandling = behandlingService.hentBehandlingById(createdBehandling.id!!) + + assertEquals(1, updatedBehandling.husstandsBarn.size) + assertEquals(1, updatedBehandling.sivilstand.size) + assertEquals(NOTAT, updatedBehandling.boforholdBegrunnelseKunINotat) + assertEquals(MED_I_VEDTAK, updatedBehandling.boforholdBegrunnelseMedIVedtakNotat) } - fun prepareRoles(behandling: Behandling): Set { - val someDate = Calendar.getInstance().time - return setOf( - Rolle(behandling, Rolletype.BIDRAGSMOTTAKER, "123344", someDate, someDate), - Rolle(behandling, Rolletype.BIDRAGSPLIKTIG, "44332211", someDate, someDate), - Rolle(behandling, Rolletype.BARN, "1111", someDate, someDate), + @Test + fun `skal oppdatere virkningstidspunkt data`() { + val behandling = prepareBehandling() + + val NOTAT = "New Notat" + val MED_I_VEDTAK = "med i vedtak" + + val createdBehandling = behandlingService.createBehandling(behandling) + + assertNotNull(createdBehandling.id) + assertNull(createdBehandling.aarsak) + + behandlingService.updateVirkningsTidspunkt( + createdBehandling.id!!, + ForskuddAarsakType.BF, + null, + NOTAT, + MED_I_VEDTAK, ) + + val updatedBehandling = behandlingService.hentBehandlingById(createdBehandling.id!!) + + assertEquals(ForskuddAarsakType.BF, updatedBehandling.aarsak) + assertEquals(NOTAT, updatedBehandling.virkningsTidspunktBegrunnelseKunINotat) + assertEquals(MED_I_VEDTAK, updatedBehandling.virkningsTidspunktBegrunnelseMedIVedtakNotat) } } - @Test - fun `skal legge til inntekter`() { - val actualBehandling = createBehandling() - - assertNotNull(actualBehandling.id) - - assertEquals(0, actualBehandling.inntekter.size) - assertEquals(0, actualBehandling.barnetillegg.size) - assertEquals(0, actualBehandling.utvidetbarnetrygd.size) - assertNull(actualBehandling.inntektBegrunnelseMedIVedtakNotat) - assertNull(actualBehandling.inntektBegrunnelseKunINotat) - - behandlingService.oppdaterInntekter( - actualBehandling.id!!, - mutableSetOf( - Inntekt( - actualBehandling, - true, - "", - BigDecimal.valueOf(1.111), - Calendar.getInstance().time, - Calendar.getInstance().time, - "ident", - true, + @Nested + open inner class SletteBehandling { + @Test + fun `delete behandling`() { + val behandling = createBehandling() + behandlingService.deleteBehandlingById(behandling.id!!) + + Assertions.assertThrows(HttpClientErrorException::class.java) { + behandlingService.hentBehandlingById(behandling.id!!) + } + } + } + + @Nested + open inner class SynkronisereRoller { + @Test + fun `legge til flere roller`() { + val b = createBehandling() + + behandlingService.syncRoller( + b.id!!, + listOf( + CreateRolleDto( + CreateRolleRolleType.BARN, + "newident", + Date(1), + Date(2), + ), ), - ), - mutableSetOf( - Barnetillegg( - actualBehandling, - "ident", - BigDecimal.ONE, - Calendar.getInstance().time, - Calendar.getInstance().time, + ) + + assertEquals(4, behandlingService.hentBehandlingById(b.id!!).roller.size) + } + + @Test + fun `behandling må synce roller og slette behandling`() { + val b = createBehandling() + behandlingService.syncRoller( + b.id!!, + listOf( + CreateRolleDto(CreateRolleRolleType.BARN, "1111", Date(1), Date(2), true), ), - ), - mutableSetOf( - Utvidetbarnetrygd( - actualBehandling, - true, - BigDecimal.TEN, - Calendar.getInstance().time, - Calendar.getInstance().time, + ) + + Assertions.assertThrows(HttpClientErrorException::class.java) { + behandlingService.hentBehandlingById(b.id!!) + } + } + + @Test + fun `behandling må synce roller`() { + val b = createBehandling() + behandlingService.syncRoller( + b.id!!, + listOf( + CreateRolleDto(CreateRolleRolleType.BARN, "1111", Date(1), Date(2), true), + CreateRolleDto(CreateRolleRolleType.BARN, "111123", Date(1), Date(2)), + CreateRolleDto(CreateRolleRolleType.BARN, "1111234", Date(1), Date(2)), ), - ), - "Med i Vedtaket", - "Kun i Notat", - ) - - val expectedBehandling = behandlingService.hentBehandlingById(actualBehandling.id!!) - - assertEquals(1, expectedBehandling.inntekter.size) - assertEquals(1, expectedBehandling.barnetillegg.size) - assertEquals(1, expectedBehandling.utvidetbarnetrygd.size) - assertEquals("Med i Vedtaket", expectedBehandling.inntektBegrunnelseMedIVedtakNotat) - assertEquals("Kun i Notat", expectedBehandling.inntektBegrunnelseKunINotat) + ) + + assertEquals(2, behandlingService.hentBehandlingById(b.id!!).roller.filter { r -> r.rolleType == Rolletype.BARN }.size) + } } - @Test - fun `skal slette inntekter`() { - val actualBehandling = createBehandling() - - assertNotNull(actualBehandling.id) - - assertEquals(0, actualBehandling.inntekter.size) - assertEquals(0, actualBehandling.barnetillegg.size) - assertEquals(0, actualBehandling.utvidetbarnetrygd.size) - - behandlingService.oppdaterInntekter( - actualBehandling.id!!, - mutableSetOf( - Inntekt( - actualBehandling, - true, - "", - BigDecimal.valueOf(1.111), - Calendar.getInstance().time, - Calendar.getInstance().time, - "ident", - true, - ), - ), - mutableSetOf( - Barnetillegg( - actualBehandling, - "ident", - BigDecimal.ONE, - Calendar.getInstance().time, - Calendar.getInstance().time, - ), - ), - mutableSetOf(), - "null", - "null", - ) + @Nested + open inner class OppdatereBehandling { + @Test + fun `skal caste 404 exception hvis behandlingen ikke er der - oppdater`() { + Assertions.assertThrows(HttpClientErrorException::class.java) { + behandlingService.oppdaterBehandling(1234, "New Notat", "Med i Vedtak") + } + } - val expectedBehandling = behandlingService.hentBehandlingById(actualBehandling.id!!) + @Test + fun `skal oppdatere en behandling`() { + val behandling = prepareBehandling() - assertEquals(1, expectedBehandling.inntekter.size) - assertEquals(1, expectedBehandling.barnetillegg.size) - assertNotNull(expectedBehandling.inntektBegrunnelseMedIVedtakNotat) - assertNotNull(expectedBehandling.inntektBegrunnelseKunINotat) + val NOTAT = "New Notat" + val MED_I_VEDTAK = "med i vedtak" - behandlingService.oppdaterInntekter(actualBehandling.id!!, mutableSetOf(), expectedBehandling.barnetillegg, mutableSetOf(), null, null) + val createdBehandling = behandlingService.createBehandling(behandling) - val expectedBehandlingWithoutInntekter = behandlingService.hentBehandlingById(actualBehandling.id!!) + assertNotNull(createdBehandling.id) + assertNull(createdBehandling.aarsak) - assertEquals(0, expectedBehandlingWithoutInntekter.inntekter.size) - assertEquals(1, expectedBehandlingWithoutInntekter.barnetillegg.size) - assertNull(expectedBehandlingWithoutInntekter.inntektBegrunnelseMedIVedtakNotat) - assertNull(expectedBehandlingWithoutInntekter.inntektBegrunnelseKunINotat) - } + val oppdatertBehandling = + behandlingService.oppdaterBehandling( + createdBehandling.id!!, + MED_I_VEDTAK, + NOTAT, + MED_I_VEDTAK, + NOTAT, + MED_I_VEDTAK, + NOTAT, + ) - @Test - fun `skal caste 404 exception hvis behandlingen ikke er der`() { - Assertions.assertThrows(HttpClientErrorException::class.java) { - behandlingService.hentBehandlingById(1234) + val hentBehandlingById = behandlingService.hentBehandlingById(createdBehandling.id!!) + + assertEquals(3, hentBehandlingById.roller.size) + assertEquals(NOTAT, oppdatertBehandling.virkningsTidspunktBegrunnelseKunINotat) + assertEquals(MED_I_VEDTAK, oppdatertBehandling.virkningsTidspunktBegrunnelseMedIVedtakNotat) } - } - @Test - fun `skal caste 404 exception hvis behandlingen ikke er der - oppdater`() { - Assertions.assertThrows(HttpClientErrorException::class.java) { - behandlingService.oppdaterBehandling(1234, "New Notat", "Med i Vedtak") + @Test + fun `skal opprette en behandling med grunnlagspakkeId`() { + val b = createBehandling() + + behandlingService.updateBehandling(b.id!!, 123L) + + assertEquals(123L, behandlingService.hentBehandlingById(b.id!!).grunnlagspakkeId) } } - @Test - fun `skal oppdatere en behandling`() { - val behandling = prepareBehandling() + @Nested + open inner class OppdatereInntekter { + @Test + fun `skal legge til inntekter`() { + val actualBehandling = createBehandling() + + assertNotNull(actualBehandling.id) + + assertEquals(0, actualBehandling.inntekter.size) + assertEquals(0, actualBehandling.barnetillegg.size) + assertEquals(0, actualBehandling.utvidetbarnetrygd.size) + assertNull(actualBehandling.inntektBegrunnelseMedIVedtakNotat) + assertNull(actualBehandling.inntektBegrunnelseKunINotat) + + behandlingService.oppdaterInntekter( + actualBehandling.id!!, + mutableSetOf( + Inntekt( + "", + BigDecimal.valueOf(1.111), + Calendar.getInstance().time, + Calendar.getInstance().time, + "ident", + true, + true, + behandling = actualBehandling, + ), + ), + mutableSetOf( + Barnetillegg( + actualBehandling, + "ident", + BigDecimal.ONE, + Calendar.getInstance().time, + Calendar.getInstance().time, + ), + ), + mutableSetOf( + Utvidetbarnetrygd( + actualBehandling, + true, + BigDecimal.TEN, + Calendar.getInstance().time, + Calendar.getInstance().time, + ), + ), + "Med i Vedtaket", + "Kun i Notat", + ) + + val expectedBehandling = behandlingService.hentBehandlingById(actualBehandling.id!!) - val NOTAT = "New Notat" - val MED_I_VEDTAK = "med i vedtak" + assertEquals(1, expectedBehandling.inntekter.size) + assertEquals(1, expectedBehandling.barnetillegg.size) + assertEquals(1, expectedBehandling.utvidetbarnetrygd.size) + assertEquals("Med i Vedtaket", expectedBehandling.inntektBegrunnelseMedIVedtakNotat) + assertEquals("Kun i Notat", expectedBehandling.inntektBegrunnelseKunINotat) + } - val createdBehandling = behandlingService.createBehandling(behandling) + @Test + @Transactional + open fun `skal slette inntekter`() { + stubUtils.stubOpprettForsendelse() + + val actualBehandling = createBehandling() + + assertNotNull(actualBehandling.id) + + assertEquals(0, actualBehandling.inntekter.size) + assertEquals(0, actualBehandling.barnetillegg.size) + assertEquals(0, actualBehandling.utvidetbarnetrygd.size) + + behandlingService.oppdaterInntekter( + actualBehandling.id!!, + mutableSetOf( + Inntekt( + "", + BigDecimal.valueOf(1.111), + Calendar.getInstance().time, + Calendar.getInstance().time, + "ident", + true, + true, + behandling = actualBehandling, + ), + ), + mutableSetOf( + Barnetillegg( + actualBehandling, + "ident", + BigDecimal.ONE, + Calendar.getInstance().time, + Calendar.getInstance().time, + ), + ), + mutableSetOf(), + "null", + "null", + ) - assertNotNull(createdBehandling.id) - assertNull(createdBehandling.aarsak) + val expectedBehandling = behandlingService.hentBehandlingById(actualBehandling.id!!) - val oppdatertBehandling = behandlingService.oppdaterBehandling( - createdBehandling.id!!, - MED_I_VEDTAK, - NOTAT, - MED_I_VEDTAK, - NOTAT, - MED_I_VEDTAK, - NOTAT, - ) + assertEquals(1, expectedBehandling.inntekter.size) + assertEquals(1, expectedBehandling.barnetillegg.size) + assertNotNull(expectedBehandling.inntektBegrunnelseMedIVedtakNotat) + assertNotNull(expectedBehandling.inntektBegrunnelseKunINotat) - val hentBehandlingById = behandlingService.hentBehandlingById(createdBehandling.id!!) + behandlingService.oppdaterInntekter( + actualBehandling.id!!, + mutableSetOf(), + expectedBehandling.barnetillegg, + mutableSetOf(), + null, + null, + ) - assertEquals(3, hentBehandlingById.roller.size) -// assertEquals(AvslagType.MANGL_DOK, hentBehandlingById.avslag) + val expectedBehandlingWithoutInntekter = behandlingService.hentBehandlingById(actualBehandling.id!!) - assertEquals(NOTAT, oppdatertBehandling.virkningsTidspunktBegrunnelseKunINotat) - assertEquals(MED_I_VEDTAK, oppdatertBehandling.virkningsTidspunktBegrunnelseMedIVedtakNotat) + assertEquals(0, expectedBehandlingWithoutInntekter.inntekter.size) + assertEquals(1, expectedBehandlingWithoutInntekter.barnetillegg.size) + assertNull(expectedBehandlingWithoutInntekter.inntektBegrunnelseMedIVedtakNotat) + assertNull(expectedBehandlingWithoutInntekter.inntektBegrunnelseKunINotat) + } } @Test - fun `skal oppdatere virkningstidspunkt data`() { - val behandling = prepareBehandling() + fun `delete behandling rolle`() { + val behandling = createBehandling() - val NOTAT = "New Notat" - val MED_I_VEDTAK = "med i vedtak" + assertEquals(3, behandling.roller.size) + behandling.roller.removeIf { it.rolleType == Rolletype.BARN } - val createdBehandling = behandlingService.createBehandling(behandling) + behandlingRepository.save(behandling) - assertNotNull(createdBehandling.id) - assertNull(createdBehandling.aarsak) + val updatedBehandling = behandlingRepository.findBehandlingById(behandling.id!!).get() + assertEquals(2, updatedBehandling.roller.size) - behandlingService.updateVirkningsTidspunkt( - createdBehandling.id!!, - ForskuddAarsakType.BF, - null, - NOTAT, - MED_I_VEDTAK, - ) + val realCount = + entityManager.createNativeQuery("select count(*) from rolle r where r.behandling_id = " + behandling.id!!).getSingleResult() - val updatedBehandling = behandlingService.hentBehandlingById(createdBehandling.id!!) + val deletedCount = + entityManager.createNativeQuery( + "select count(*) from rolle r where r.behandling_id = " + behandling.id!! + " and r.deleted = true", + ).getSingleResult() - assertEquals(ForskuddAarsakType.BF, updatedBehandling.aarsak) - assertEquals(NOTAT, updatedBehandling.virkningsTidspunktBegrunnelseKunINotat) - assertEquals(MED_I_VEDTAK, updatedBehandling.virkningsTidspunktBegrunnelseMedIVedtakNotat) + assertEquals(3L, realCount) + assertEquals(1L, deletedCount) } - @Test - fun `skal oppdatere boforhold data`() { - val behandling = prepareBehandling() - - val NOTAT = "New Notat" - val MED_I_VEDTAK = "med i vedtak" - - val createdBehandling = behandlingService.createBehandling(behandling) + companion object { + fun prepareBehandling(): Behandling { + val behandling = + Behandling( + BehandlingType.FORSKUDD, + SoknadType.FASTSETTELSE, + Calendar.getInstance().time, + Calendar.getInstance().time, + Calendar.getInstance().time, + "1234", + 123213L, + null, + "1234", + SoknadFraType.BIDRAGSMOTTAKER, + null, + null, + ) + val createRoller = prepareRoles(behandling) + val roller = + HashSet( + createRoller.map { + Rolle( + behandling, + it.rolleType, + it.ident, + it.fodtDato, + it.opprettetDato, + ) + }, + ) - assertNotNull(createdBehandling.id) - assertNull(createdBehandling.aarsak) - assertEquals(0, createdBehandling.husstandsBarn.size) - assertEquals(0, createdBehandling.sivilstand.size) + behandling.roller.addAll(roller) + return behandling + } - val husstandsBarn = setOf(HusstandsBarnDto(null, true, emptySet(), "Manuelt", "ident!")) - val sivilstand = setOf( - SivilstandDto( - null, - Calendar.getInstance().time.toLocalDate(), - Calendar.getInstance().time.toLocalDate(), - SivilstandType.ENKE_ELLER_ENKEMANN, - ), - ) - - behandlingService.updateBoforhold( - createdBehandling.id!!, - husstandsBarn.toDomain(createdBehandling), - sivilstand.toSivilstandDomain(createdBehandling), - NOTAT, - MED_I_VEDTAK, - ) - - val updatedBehandling = behandlingService.hentBehandlingById(createdBehandling.id!!) - - assertEquals(1, updatedBehandling.husstandsBarn.size) - assertEquals(1, updatedBehandling.sivilstand.size) - assertEquals(NOTAT, updatedBehandling.boforholdBegrunnelseKunINotat) - assertEquals(MED_I_VEDTAK, updatedBehandling.boforholdBegrunnelseMedIVedtakNotat) + fun prepareRoles(behandling: Behandling): Set { + val someDate = Calendar.getInstance().time + return setOf( + Rolle(behandling, Rolletype.BIDRAGSMOTTAKER, "123344", someDate, someDate), + Rolle(behandling, Rolletype.BIDRAGSPLIKTIG, "44332211", someDate, someDate), + Rolle(behandling, Rolletype.BARN, "1111", someDate, someDate), + ) + } } fun createBehandling(): Behandling { val behandling = prepareBehandling() - val actualBehandling = behandlingService.createBehandling(behandling) - return actualBehandling + return behandlingService.createBehandling(behandling) } } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/ForsendelseServiceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/ForsendelseServiceTest.kt index 91d3187a4..e8ebcda9c 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/ForsendelseServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/ForsendelseServiceTest.kt @@ -33,7 +33,6 @@ import org.springframework.test.context.junit.jupiter.SpringExtension @ExtendWith(SpringExtension::class) class ForsendelseServiceTest { - @MockkBean lateinit var bidragForsendelseConsumer: BidragForsendelseConsumer @@ -45,9 +44,10 @@ class ForsendelseServiceTest { fun initMocks() { forsendelseService = ForsendelseService(bidragForsendelseConsumer, bidragTIlgangskontrollConsumer) - every { bidragForsendelseConsumer.opprettForsendelse(any()) } returns OpprettForsendelseRespons( - "2313", - ) + every { bidragForsendelseConsumer.opprettForsendelse(any()) } returns + OpprettForsendelseRespons( + "2313", + ) every { bidragForsendelseConsumer.slettForsendelse(any()) } returns Unit every { bidragTIlgangskontrollConsumer.sjekkTilgangTema(any()) } returns true } @@ -75,7 +75,7 @@ class ForsendelseServiceTest { withArg { it.tema shouldBe "FAR" it.behandlingInfo!!.barnIBehandling shouldHaveSize 1 - it.behandlingInfo!!.barnIBehandling shouldContain ROLLE_BA_1.fødselsnummer.verdi + it.behandlingInfo!!.barnIBehandling shouldContain ROLLE_BA_1.fødselsnummer?.verdi }, ) } @@ -102,7 +102,7 @@ class ForsendelseServiceTest { verify(exactly = 1) { bidragForsendelseConsumer.opprettForsendelse( withArg { - it.gjelderIdent shouldBe ROLLE_BM.fødselsnummer.verdi + it.gjelderIdent shouldBe ROLLE_BM.fødselsnummer?.verdi }, ) } @@ -129,7 +129,7 @@ class ForsendelseServiceTest { verify(exactly = 1) { bidragForsendelseConsumer.opprettForsendelse( withArg { - it.gjelderIdent shouldBe ROLLE_BP.fødselsnummer.verdi + it.gjelderIdent shouldBe ROLLE_BP.fødselsnummer?.verdi }, ) } @@ -191,8 +191,8 @@ class ForsendelseServiceTest { it.behandlingInfo!!.soknadId shouldBe SOKNAD_ID it.behandlingInfo!!.stonadType shouldBe StonadType.FORSKUDD - it.gjelderIdent shouldBe ROLLE_BM.fødselsnummer.verdi - it.mottaker?.ident shouldBe ROLLE_BM.fødselsnummer.verdi + it.gjelderIdent shouldBe ROLLE_BM.fødselsnummer?.verdi + it.mottaker?.ident shouldBe ROLLE_BM.fødselsnummer?.verdi }, ) } @@ -233,14 +233,14 @@ class ForsendelseServiceTest { verify(ordering = Ordering.SEQUENCE) { bidragForsendelseConsumer.opprettForsendelse( withArg { - it.gjelderIdent shouldBe ROLLE_BM.fødselsnummer.verdi - it.mottaker?.ident shouldBe ROLLE_BM.fødselsnummer.verdi + it.gjelderIdent shouldBe ROLLE_BM.fødselsnummer?.verdi + it.mottaker?.ident shouldBe ROLLE_BM.fødselsnummer?.verdi }, ) bidragForsendelseConsumer.opprettForsendelse( withArg { - it.gjelderIdent shouldBe ROLLE_BP.fødselsnummer.verdi - it.mottaker?.ident shouldBe ROLLE_BP.fødselsnummer.verdi + it.gjelderIdent shouldBe ROLLE_BP.fødselsnummer?.verdi + it.mottaker?.ident shouldBe ROLLE_BP.fødselsnummer?.verdi }, ) } @@ -248,6 +248,7 @@ class ForsendelseServiceTest { @Test fun `Skal opprette forsendelse for behandling med type BIDRAG 18 år`() { + val request = InitalizeForsendelseRequest( saksnummer = SAKSNUMMER, enhet = "4806", @@ -263,6 +264,7 @@ class ForsendelseServiceTest { ), ) forsendelseService.slettEllerOpprettForsendelse(request) + verify(exactly = 3) { bidragForsendelseConsumer.opprettForsendelse( withArg { @@ -281,20 +283,20 @@ class ForsendelseServiceTest { verify(ordering = Ordering.SEQUENCE) { bidragForsendelseConsumer.opprettForsendelse( withArg { - it.gjelderIdent shouldBe ROLLE_BM.fødselsnummer.verdi - it.mottaker?.ident shouldBe ROLLE_BM.fødselsnummer.verdi + it.gjelderIdent shouldBe ROLLE_BM.fødselsnummer?.verdi + it.mottaker?.ident shouldBe ROLLE_BM.fødselsnummer?.verdi }, ) bidragForsendelseConsumer.opprettForsendelse( withArg { - it.gjelderIdent shouldBe ROLLE_BP.fødselsnummer.verdi - it.mottaker?.ident shouldBe ROLLE_BP.fødselsnummer.verdi + it.gjelderIdent shouldBe ROLLE_BP.fødselsnummer?.verdi + it.mottaker?.ident shouldBe ROLLE_BP.fødselsnummer?.verdi }, ) bidragForsendelseConsumer.opprettForsendelse( withArg { - it.gjelderIdent shouldBe ROLLE_BA_1.fødselsnummer.verdi - it.mottaker?.ident shouldBe ROLLE_BA_1.fødselsnummer.verdi + it.gjelderIdent shouldBe ROLLE_BA_1.fødselsnummer?.verdi + it.mottaker?.ident shouldBe ROLLE_BA_1.fødselsnummer?.verdi }, ) } @@ -303,6 +305,7 @@ class ForsendelseServiceTest { @Test fun `Skal ikke opprette forsendelse for behandling med type forskudd fastsettelse hvis vedtak ikke er fattet`() { every { bidragTIlgangskontrollConsumer.sjekkTilgangTema(any()) } returns true + val request = InitalizeForsendelseRequest( saksnummer = SAKSNUMMER, enhet = ENHET_FARSKAP, @@ -318,6 +321,7 @@ class ForsendelseServiceTest { ), ) forsendelseService.slettEllerOpprettForsendelse(request) + verify(exactly = 0) { bidragForsendelseConsumer.opprettForsendelse(any()) } @@ -326,6 +330,7 @@ class ForsendelseServiceTest { @Test fun `Skal ikke opprette forsendelse for behandling med type forskudd endring hvis vedtak ikke er fattet`() { every { bidragTIlgangskontrollConsumer.sjekkTilgangTema(any()) } returns true + val request = InitalizeForsendelseRequest( saksnummer = SAKSNUMMER, enhet = ENHET_FARSKAP, @@ -341,6 +346,7 @@ class ForsendelseServiceTest { ), ) forsendelseService.slettEllerOpprettForsendelse(request) + verify(exactly = 0) { bidragForsendelseConsumer.opprettForsendelse(any()) } @@ -348,6 +354,7 @@ class ForsendelseServiceTest { @Test fun `Skal opprette forsendelse for behandling med type BIDRAG som er fattet og slette forsendelser for varsel under opprettelse`() { + every { bidragForsendelseConsumer.hentForsendelserISak(any()) } returns listOf( opprettForsendelseResponsUnderOpprettelse(1), opprettForsendelseResponsUnderOpprettelse(2), @@ -370,6 +377,7 @@ class ForsendelseServiceTest { ), ) forsendelseService.slettEllerOpprettForsendelse(request) + verify(exactly = 2) { bidragForsendelseConsumer.opprettForsendelse( withArg { @@ -388,14 +396,14 @@ class ForsendelseServiceTest { verify { bidragForsendelseConsumer.opprettForsendelse( withArg { - it.gjelderIdent shouldBe ROLLE_BM.fødselsnummer.verdi - it.mottaker?.ident shouldBe ROLLE_BM.fødselsnummer.verdi + it.gjelderIdent shouldBe ROLLE_BM.fødselsnummer?.verdi + it.mottaker?.ident shouldBe ROLLE_BM.fødselsnummer?.verdi }, ) bidragForsendelseConsumer.opprettForsendelse( withArg { - it.gjelderIdent shouldBe ROLLE_BP.fødselsnummer.verdi - it.mottaker?.ident shouldBe ROLLE_BP.fødselsnummer.verdi + it.gjelderIdent shouldBe ROLLE_BP.fødselsnummer?.verdi + it.mottaker?.ident shouldBe ROLLE_BP.fødselsnummer?.verdi }, ) } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/service/OpplysningerServiceTest.kt b/src/test/kotlin/no/nav/bidrag/behandling/service/OpplysningerServiceTest.kt index a3ee86d76..534c9ca3a 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/service/OpplysningerServiceTest.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/service/OpplysningerServiceTest.kt @@ -29,22 +29,23 @@ class OpplysningerServiceTest : TestContainerRunner() { @Test fun `skal være bare en rad med aktive opplysninger`() { - val b = behandlingService.createBehandling( - Behandling( - BehandlingType.FORSKUDD, - SoknadType.FASTSETTELSE, - Date(1), - Date(2), - Date(2), - "123", - 123L, - null, - "ENH1", - SoknadFraType.VERGE, - engangsbelopType = EngangsbelopType.ETTERGIVELSE, - stonadType = null, - ), - ) + val b = + behandlingService.createBehandling( + Behandling( + BehandlingType.FORSKUDD, + SoknadType.FASTSETTELSE, + Date(1), + Date(2), + Date(2), + "123", + 123L, + null, + "ENH1", + SoknadFraType.VERGE, + engangsbelopType = EngangsbelopType.ETTERGIVELSE, + stonadType = null, + ), + ) val opp1 = opplysningerService.opprett(b.id!!, OpplysningerType.BOFORHOLD, "data", Date(1)) val opp2 = opplysningerService.opprett(b.id!!, OpplysningerType.BOFORHOLD, "data", Date(1)) val opp4 = opplysningerService.opprett(b.id!!, OpplysningerType.BOFORHOLD, "data", Date(1)) diff --git a/src/test/kotlin/no/nav/bidrag/behandling/utils/StubUtils.kt b/src/test/kotlin/no/nav/bidrag/behandling/utils/StubUtils.kt index 0f63ab2f2..9b3482ce6 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/utils/StubUtils.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/utils/StubUtils.kt @@ -15,7 +15,6 @@ import org.springframework.http.HttpStatus import java.util.* class StubUtils { - companion object { fun aClosedJsonResponse(): ResponseDefinitionBuilder { return aResponse() @@ -24,7 +23,10 @@ class StubUtils { } } - fun stubResponse(url: String, personResponse: R) { + fun stubResponse( + url: String, + personResponse: R, + ) { try { WireMock.stubFor( WireMock.post(url).willReturn( @@ -52,10 +54,11 @@ class StubUtils { } fun stubHentForsendelserForSak( - response: List = listOf( - opprettForsendelseResponsUnderOpprettelse(1), - opprettForsendelseResponsUnderOpprettelse(2), - ), + response: List = + listOf( + opprettForsendelseResponsUnderOpprettelse(1), + opprettForsendelseResponsUnderOpprettelse(2), + ), status: HttpStatus = HttpStatus.OK, ) { WireMock.stubFor( @@ -78,7 +81,10 @@ class StubUtils { ) } - fun stubTilgangskontrollTema(result: Boolean = true, status: HttpStatus = HttpStatus.OK) { + fun stubTilgangskontrollTema( + result: Boolean = true, + status: HttpStatus = HttpStatus.OK, + ) { WireMock.stubFor( WireMock.post(WireMock.urlMatching("/tilgangskontroll/api/tilgang/tema")).willReturn( aClosedJsonResponse() @@ -90,16 +96,21 @@ class StubUtils { inner class Verify { fun opprettForsendelseKaltMed(vararg contains: String) { - val verify = WireMock.postRequestedFor( - WireMock.urlMatching("/forsendelse/api/forsendelse"), - ) + val verify = + WireMock.postRequestedFor( + WireMock.urlMatching("/forsendelse/api/forsendelse"), + ) verifyContains(verify, *contains) } - fun forsendelseHentetForSak(saksnummer: String, antall: Int = -1) { - val verify = WireMock.getRequestedFor( - WireMock.urlMatching("/forsendelse/api/forsendelse/sak/$saksnummer/forsendelser"), - ) + fun forsendelseHentetForSak( + saksnummer: String, + antall: Int = -1, + ) { + val verify = + WireMock.getRequestedFor( + WireMock.urlMatching("/forsendelse/api/forsendelse/sak/$saksnummer/forsendelser"), + ) WireMock.verify( if (antall == -1) { CountMatchingStrategy( @@ -113,10 +124,14 @@ class StubUtils { ) } - fun forsendelseSlettet(forsendelseId: String = "(.*)", antall: Int = -1) { - val verify = WireMock.postRequestedFor( - WireMock.urlMatching("/forsendelse/api/forsendelse/journal/$forsendelseId/avvik"), - ) + fun forsendelseSlettet( + forsendelseId: String = "(.*)", + antall: Int = -1, + ) { + val verify = + WireMock.postRequestedFor( + WireMock.urlMatching("/forsendelse/api/forsendelse/journal/$forsendelseId/avvik"), + ) WireMock.verify( if (antall == -1) { CountMatchingStrategy( @@ -131,9 +146,10 @@ class StubUtils { } fun opprettForsendelseKaltAntallGanger(antall: Int) { - val verify = WireMock.postRequestedFor( - WireMock.urlMatching("/forsendelse/api/forsendelse"), - ) + val verify = + WireMock.postRequestedFor( + WireMock.urlMatching("/forsendelse/api/forsendelse"), + ) WireMock.verify(antall, verify) } @@ -141,7 +157,10 @@ class StubUtils { opprettForsendelseKaltAntallGanger(0) } - private fun verifyContains(verify: RequestPatternBuilder, vararg contains: String) { + private fun verifyContains( + verify: RequestPatternBuilder, + vararg contains: String, + ) { Arrays.stream(contains).forEach { verify.withRequestBody(ContainsPattern(it)) } WireMock.verify(verify) } diff --git a/src/test/kotlin/no/nav/bidrag/behandling/utils/Testdata.kt b/src/test/kotlin/no/nav/bidrag/behandling/utils/Testdata.kt index bf6a6db0a..83f54f783 100644 --- a/src/test/kotlin/no/nav/bidrag/behandling/utils/Testdata.kt +++ b/src/test/kotlin/no/nav/bidrag/behandling/utils/Testdata.kt @@ -15,13 +15,15 @@ val ROLLE_BA_1 = ForsendelseRolleDto(PersonIdent("1344124"), type = Rolletype.BA val ROLLE_BA_2 = ForsendelseRolleDto(PersonIdent("12344424214"), type = Rolletype.BARN) val ROLLE_BP = ForsendelseRolleDto(PersonIdent("213244124"), type = Rolletype.BIDRAGSPLIKTIG) -fun opprettForsendelseResponsUnderOpprettelse(forsendelseId: Long = 1) = ForsendelseResponsTo( - forsendelseId = forsendelseId, - saksnummer = SAKSNUMMER, - behandlingInfo = BehandlingInfoResponseDto( - soknadId = SOKNAD_ID.toString(), - erFattet = false, - ), - forsendelseType = ForsendelseTypeTo.UTGÅENDE, - status = ForsendelseStatusTo.UNDER_OPPRETTELSE, -) +fun opprettForsendelseResponsUnderOpprettelse(forsendelseId: Long = 1) = + ForsendelseResponsTo( + forsendelseId = forsendelseId, + saksnummer = SAKSNUMMER, + behandlingInfo = + BehandlingInfoResponseDto( + soknadId = SOKNAD_ID.toString(), + erFattet = false, + ), + forsendelseType = ForsendelseTypeTo.UTGÅENDE, + status = ForsendelseStatusTo.UNDER_OPPRETTELSE, + ) diff --git a/src/test/resources/application-test.yaml b/src/test/resources/application-test.yaml index 7d9cea2d5..e85e4b07e 100644 --- a/src/test/resources/application-test.yaml +++ b/src/test/resources/application-test.yaml @@ -1,3 +1,4 @@ +BIDRAG_PERSON_URL: http://localhost:${wiremock.server.port}/bidrag-person BIDRAG_BEREGN_FORSKUDD_URL: http://localhost:${wiremock.server.port}/beregn-forskudd BIDRAG_FORSENDELSE_URL: http://localhost:${wiremock.server.port}/forsendelse BIDRAG_TILGANGSKONTROLL_URL: http://localhost:${wiremock.server.port}/tilgangskontroll