From 1aebea5c4f218102fb575208c8505e3728d839a2 Mon Sep 17 00:00:00 2001 From: Ugur Alpay Cenar Date: Tue, 16 Jan 2024 17:07:56 +0100 Subject: [PATCH] =?UTF-8?q?Bruk=20beregning=20modul=20fra=20felles=20repo?= =?UTF-8?q?=20og=20fjern=20overf=C3=B8rt=20kode=20(#208)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .nais/main.yaml | 2 - .nais/nais.yaml | 6 +- .nais/prod.yaml | 2 - initLocalEnv.sh | 2 +- pom.xml | 162 +---- .../forskudd/rest/BeregnForskuddConfig.kt | 53 +- .../forskudd/rest/BidragBeregnForskudd.kt | 17 +- .../forskudd/rest/consumer/SjablonConsumer.kt | 32 - .../forskudd/rest/consumer/Sjablontall.kt | 13 - .../controller/BeregnForskuddController.kt | 66 +- .../rest/exception/ExceptionHandlerAdvice.kt | 10 +- .../exception/SjablonConsumerException.kt | 12 - .../rest/exception/UgyldigInputException.kt | 3 - .../rest/service/BeregnForskuddService.kt | 158 ----- .../forskudd/rest/service/CoreMapper.kt | 267 -------- src/main/resources/application.yaml | 13 - .../testfiler/forskudd_eksempel1.json | 0 .../testfiler/forskudd_eksempel10.json | 0 .../testfiler/forskudd_eksempel11.json | 0 .../testfiler/forskudd_eksempel12.json | 0 .../testfiler/forskudd_eksempel13.json | 0 .../testfiler/forskudd_eksempel14.json | 0 .../testfiler/forskudd_eksempel15.json | 0 .../testfiler/forskudd_eksempel16.json | 0 .../testfiler/forskudd_eksempel17.json | 0 .../testfiler/forskudd_eksempel18.json | 0 .../testfiler/forskudd_eksempel19.json | 0 .../testfiler/forskudd_eksempel2.json | 0 .../testfiler/forskudd_eksempel20.json | 0 .../testfiler/forskudd_eksempel22.json | 0 .../testfiler/forskudd_eksempel23.json | 0 .../testfiler/forskudd_eksempel3.json | 0 .../testfiler/forskudd_eksempel4.json | 0 .../testfiler/forskudd_eksempel5.json | 0 .../testfiler/forskudd_eksempel6.json | 0 .../testfiler/forskudd_eksempel7.json | 0 .../testfiler/forskudd_eksempel8.json | 0 .../testfiler/forskudd_eksempel9.json | 0 .../BidragBeregnForskuddApplicationTest.kt | 24 - .../rest/BidragBeregnForskuddLocal.kt | 46 -- .../rest/BidragBeregnForskuddLokalNais.kt | 24 - .../forskudd/rest/BidragBeregnForskuddTest.kt | 33 - .../rest/BidragBeregnForskuddTestConfig.kt | 58 -- .../bidrag/beregn/forskudd/rest/TestUtil.kt | 589 ------------------ .../rest/consumer/SjablonConsumerTest.kt | 71 --- .../consumer/wiremockstub/SjablonApiStub.kt | 90 --- ...BeregnForskuddControllerIntegrationTest.kt | 454 -------------- .../BeregnForskuddControllerMockTest.kt | 108 ---- .../beregn/forskudd/rest/dto/DtoTest.kt | 56 -- .../rest/service/BeregnForskuddServiceTest.kt | 76 --- .../forskudd/rest/service/CoreMapperTest.kt | 186 ------ .../resources/application-lokal-nais.yaml | 6 - src/test/resources/application-test.yaml | 27 - 53 files changed, 98 insertions(+), 2568 deletions(-) delete mode 100644 src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/SjablonConsumer.kt delete mode 100644 src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/Sjablontall.kt delete mode 100644 src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/exception/SjablonConsumerException.kt delete mode 100644 src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/exception/UgyldigInputException.kt delete mode 100644 src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/BeregnForskuddService.kt delete mode 100644 src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/CoreMapper.kt rename src/{test => main}/resources/testfiler/forskudd_eksempel1.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel10.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel11.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel12.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel13.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel14.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel15.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel16.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel17.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel18.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel19.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel2.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel20.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel22.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel23.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel3.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel4.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel5.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel6.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel7.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel8.json (100%) rename src/{test => main}/resources/testfiler/forskudd_eksempel9.json (100%) delete mode 100644 src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddApplicationTest.kt delete mode 100644 src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddLocal.kt delete mode 100644 src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddLokalNais.kt delete mode 100644 src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddTest.kt delete mode 100644 src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddTestConfig.kt delete mode 100644 src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/TestUtil.kt delete mode 100644 src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/SjablonConsumerTest.kt delete mode 100644 src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/wiremockstub/SjablonApiStub.kt delete mode 100644 src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/controller/BeregnForskuddControllerIntegrationTest.kt delete mode 100644 src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/controller/BeregnForskuddControllerMockTest.kt delete mode 100644 src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/dto/DtoTest.kt delete mode 100644 src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/BeregnForskuddServiceTest.kt delete mode 100644 src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/CoreMapperTest.kt delete mode 100644 src/test/resources/application-lokal-nais.yaml delete mode 100644 src/test/resources/application-test.yaml diff --git a/.nais/main.yaml b/.nais/main.yaml index 5f48899..531604c 100644 --- a/.nais/main.yaml +++ b/.nais/main.yaml @@ -30,5 +30,3 @@ azure_access_inbound: cluster: dev-gcp unsecured: bidragsjablon_url: bidrag-sjablon.dev-fss-pub.nais.io - bidragsjablon_scope: dev-fss.bidrag.bidrag-sjablon - \ No newline at end of file diff --git a/.nais/nais.yaml b/.nais/nais.yaml index bdec95d..a29f494 100644 --- a/.nais/nais.yaml +++ b/.nais/nais.yaml @@ -42,14 +42,12 @@ spec: cpu: 1000m memory: 1024Mi requests: - cpu: 500m + cpu: 50m memory: 512Mi ingresses: {{#each ingresses as |url|}} - {{url}} {{/each}} env: - - name: BIDRAGSJABLON_URL + - name: BIDRAG_SJABLON_URL value: https://{{ unsecured.bidragsjablon_url }}/bidrag-sjablon - - name: BIDRAGSJABLON_SCOPE - value: {{ unsecured.bidragsjablon_scope }} diff --git a/.nais/prod.yaml b/.nais/prod.yaml index c86cb7a..a702b1c 100644 --- a/.nais/prod.yaml +++ b/.nais/prod.yaml @@ -16,5 +16,3 @@ azure_access_inbound: cluster: prod-gcp unsecured: bidragsjablon_url: bidrag-sjablon.prod-fss-pub.nais.io - bidragsjablon_scope: prod-fss.bidrag.bidrag-sjablon - \ No newline at end of file diff --git a/initLocalEnv.sh b/initLocalEnv.sh index 4f9a2c3..1a79d56 100755 --- a/initLocalEnv.sh +++ b/initLocalEnv.sh @@ -1,2 +1,2 @@ kubectl config use dev-gcp -kubectl exec -n=bidrag --tty deployment/bidrag-beregn-forskudd-rest printenv | grep -E 'AZURE_|_URL|SCOPE' > src/test/resources/application-lokal-nais-secrets.properties \ No newline at end of file +kubectl exec -n=bidrag --tty deployment/bidrag-beregn-forskudd-rest printenv | grep -E 'AZURE_|_URL|SCOPE' > src/main/resources/application-lokal-nais-secrets.properties \ No newline at end of file diff --git a/pom.xml b/pom.xml index 7059965..c909f5d 100644 --- a/pom.xml +++ b/pom.xml @@ -23,19 +23,13 @@ UTF-8 - 20231201131246_f719b2b - 1.20230511093912_dc35d81 - 1.2.1 - 20240103144324_9f5809f + 2024.01.16.101302 2.3.0 2.35.1 4.1.0 3.2.0 4.12.0 4.9.2 - 5.2.1 - 5.8.0 - 4.0.2 21 1.9.22 @@ -48,39 +42,11 @@ - - - - org.yaml - snakeyaml - 2.2 - - - - no.nav.bidrag - bidrag-beregn-forskudd-core - ${bidrag-beregn-forskudd-core.version} - - - - no.nav.bidrag - bidrag-commons - ${bidrag-commons.version} - - - - no.nav.bidrag - bidrag-transport - ${bidrag-transport.version} - - - - no.nav.security - token-client-spring - ${token-support.version} + bidrag-beregn-forskudd + ${bidrag-beregn-felles.version} @@ -89,25 +55,11 @@ ${token-support.version} - - - no.nav.bidrag - bidrag-commons-test - ${bidrag-commons-test.version} - test - - org.springframework.boot spring-boot-starter-actuator - - org.mockito.kotlin - mockito-kotlin - ${mockito-kotlin.version} - - org.springframework.boot spring-boot-starter-aop @@ -116,18 +68,21 @@ org.springframework.boot spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + - org.springframework.boot - spring-boot-starter-oauth2-client + spring-boot-starter-jetty - no.nav.security - token-validation-spring-test - ${token-support.version} - test + org.springframework.boot + spring-boot-starter-oauth2-client @@ -135,24 +90,6 @@ spring-boot-starter-validation - - - org.jetbrains.kotlin - kotlin-stdlib-jdk8 - ${kotlin.version} - - - - - io.micrometer - micrometer-core - - - - io.micrometer - micrometer-registry-prometheus - - org.springdoc @@ -168,73 +105,11 @@ true - - - com.github.tomakehurst - wiremock-jre8-standalone - ${wiremock-standalone.version} - test - - - org.springframework.cloud - spring-cloud-starter-contract-stub-runner - ${springframework-cloud.version} - test - - - com.google.guava - guava - - - commons-collections - commons-collections - - - - - org.assertj - assertj-core - test - - - org.springframework.boot - spring-boot-starter-test - test - - - org.junit - junit-bom - - - - - org.junit.jupiter - junit-jupiter - test - - - org.jetbrains.kotlin - kotlin-test-junit5 - ${kotlin.version} - test - - - io.kotest - kotest-assertions-core-jvm - ${kotest.version} - test - - - com.ninja-squad - springmockk - ${mockk.version} - test - + ${project.basedir}/src/main/kotlin - ${project.basedir}/src/test/kotlin org.springframework.boot @@ -253,19 +128,12 @@ compile - - test-compile - test-compile - - test-compile - - -Xjsr305=strict - 17 + 21 spring @@ -324,7 +192,7 @@ com.pinterest.ktlint ktlint-cli - 1.1.0 + 1.1.1 diff --git a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/BeregnForskuddConfig.kt b/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/BeregnForskuddConfig.kt index 3692149..9d1f03e 100644 --- a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/BeregnForskuddConfig.kt +++ b/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/BeregnForskuddConfig.kt @@ -7,24 +7,16 @@ import io.swagger.v3.oas.annotations.enums.SecuritySchemeType import io.swagger.v3.oas.annotations.info.Info import io.swagger.v3.oas.annotations.security.SecurityRequirement import io.swagger.v3.oas.annotations.security.SecurityScheme -import no.nav.bidrag.beregn.forskudd.core.ForskuddCore -import no.nav.bidrag.beregn.forskudd.rest.consumer.SjablonConsumer -import no.nav.bidrag.commons.CorrelationId -import no.nav.bidrag.commons.ExceptionLogger +import io.swagger.v3.oas.models.examples.Example +import no.nav.bidrag.beregn.forskudd.BeregnForskuddApi import no.nav.bidrag.commons.web.CorrelationIdFilter import no.nav.bidrag.commons.web.DefaultCorsFilter -import no.nav.bidrag.commons.web.HttpHeaderRestTemplate import no.nav.bidrag.commons.web.UserMdcFilter -import org.springframework.beans.factory.annotation.Value -import org.springframework.boot.web.client.RootUriTemplateHandler +import org.springdoc.core.customizers.OpenApiCustomizer import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.Import -import org.springframework.context.annotation.Scope import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder -import org.springframework.web.client.RestTemplate - -const val LIVE_PROFILE = "live" @Configuration @OpenAPIDefinition( @@ -37,36 +29,8 @@ const val LIVE_PROFILE = "live" scheme = "bearer", type = SecuritySchemeType.HTTP, ) -@Import(CorrelationIdFilter::class, UserMdcFilter::class, DefaultCorsFilter::class) +@Import(CorrelationIdFilter::class, UserMdcFilter::class, DefaultCorsFilter::class, BeregnForskuddApi::class) class BeregnForskuddConfig { - @Bean - fun forskuddCore(): ForskuddCore { - return ForskuddCore.getInstance() - } - - @Bean - @Scope("prototype") - fun restTemplate(): HttpHeaderRestTemplate { - val httpHeaderRestTemplate = HttpHeaderRestTemplate() - httpHeaderRestTemplate.addHeaderGenerator(CorrelationIdFilter.CORRELATION_ID_HEADER) { CorrelationId.fetchCorrelationIdForThread() } - return httpHeaderRestTemplate - } - - @Bean - fun sjablonConsumer(@Value("\${BIDRAGSJABLON_URL}") sjablonBaseUrl: String, restTemplate: RestTemplate): SjablonConsumer { - restTemplate.uriTemplateHandler = RootUriTemplateHandler(sjablonBaseUrl) - return SjablonConsumer(restTemplate) - } - - @Bean - fun exceptionLogger(): ExceptionLogger { - return ExceptionLogger(BidragBeregnForskudd::class.java.simpleName) - } - - @Bean - fun correlationIdFilter(): CorrelationIdFilter { - return CorrelationIdFilter() - } @Bean fun jackson2ObjectMapperBuilder(): Jackson2ObjectMapperBuilder { @@ -75,4 +39,13 @@ class BeregnForskuddConfig { .failOnUnknownProperties(false) .serializationInclusion(JsonInclude.Include.NON_NULL) } + + @Bean + fun openApiCustomiser(examples: Collection): OpenApiCustomizer { + return OpenApiCustomizer { openAPI -> + examples.forEach { example -> + openAPI.components.addExamples(example.description, example) + } + } + } } diff --git a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskudd.kt b/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskudd.kt index e6346fd..e086cd5 100644 --- a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskudd.kt +++ b/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskudd.kt @@ -2,27 +2,16 @@ package no.nav.bidrag.beregn.forskudd.rest import no.nav.bidrag.commons.web.DefaultCorsFilter import no.nav.security.token.support.spring.api.EnableJwtTokenValidation -import org.slf4j.Logger -import org.slf4j.LoggerFactory -import org.springframework.boot.SpringApplication import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration +import org.springframework.boot.runApplication import org.springframework.context.annotation.Import @SpringBootApplication(exclude = [SecurityAutoConfiguration::class, ManagementWebSecurityAutoConfiguration::class]) @EnableJwtTokenValidation(ignore = ["org.springframework", "org.springdoc"]) -@Import( - DefaultCorsFilter::class, -) +@Import(DefaultCorsFilter::class) class BidragBeregnForskudd - -const val ISSUER = "aad" -val SECURE_LOGGER: Logger = LoggerFactory.getLogger("secureLogger") - fun main(args: Array) { - val profile = if (args.isEmpty()) LIVE_PROFILE else args[0] - val app = SpringApplication(BidragBeregnForskudd::class.java) - app.setAdditionalProfiles(profile) - app.run(*args) + runApplication(*args) } diff --git a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/SjablonConsumer.kt b/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/SjablonConsumer.kt deleted file mode 100644 index 16dc9d8..0000000 --- a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/SjablonConsumer.kt +++ /dev/null @@ -1,32 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest.consumer - -import no.nav.bidrag.beregn.forskudd.rest.exception.SjablonConsumerException -import no.nav.bidrag.commons.web.HttpResponse -import org.slf4j.LoggerFactory -import org.springframework.core.ParameterizedTypeReference -import org.springframework.http.HttpMethod -import org.springframework.web.client.RestClientResponseException -import org.springframework.web.client.RestTemplate - -private const val SJABLONTALL_URL = "/sjablontall/all" - -class SjablonConsumer(private val restTemplate: RestTemplate) { - fun hentSjablonSjablontall(): HttpResponse> { - try { - val sjablonResponse = restTemplate.exchange(SJABLONTALL_URL, HttpMethod.GET, null, SJABLON_SJABLONTALL_LISTE) - LOGGER.info("hentSjablonSjablontall fikk http status ${sjablonResponse.statusCode} fra bidrag-sjablon") - return HttpResponse(sjablonResponse) - } catch (exception: RestClientResponseException) { - LOGGER.error( - "hentSjablonSjablontall fikk følgende feilkode fra bidrag-sjablon: ${exception.statusText}, med melding " + - "${exception.message}", - ) - throw SjablonConsumerException(exception) - } - } - - companion object { - private val LOGGER = LoggerFactory.getLogger(SjablonConsumer::class.java) - private val SJABLON_SJABLONTALL_LISTE = object : ParameterizedTypeReference>() {} - } -} diff --git a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/Sjablontall.kt b/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/Sjablontall.kt deleted file mode 100644 index 2acdf7c..0000000 --- a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/Sjablontall.kt +++ /dev/null @@ -1,13 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest.consumer - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties -import java.math.BigDecimal -import java.time.LocalDate - -@JsonIgnoreProperties(ignoreUnknown = true) -data class Sjablontall( - var typeSjablon: String? = null, - var datoFom: LocalDate? = null, - var datoTom: LocalDate? = null, - var verdi: BigDecimal? = null, -) diff --git a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/controller/BeregnForskuddController.kt b/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/controller/BeregnForskuddController.kt index 93042f6..7b449b0 100644 --- a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/controller/BeregnForskuddController.kt +++ b/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/controller/BeregnForskuddController.kt @@ -1,12 +1,14 @@ package no.nav.bidrag.beregn.forskudd.rest.controller import io.swagger.v3.oas.annotations.Operation +import io.swagger.v3.oas.annotations.media.Content +import io.swagger.v3.oas.annotations.media.ExampleObject import io.swagger.v3.oas.annotations.security.SecurityRequirement -import no.nav.bidrag.beregn.forskudd.rest.service.BeregnForskuddService +import io.swagger.v3.oas.models.examples.Example +import no.nav.bidrag.beregn.forskudd.BeregnForskuddApi import no.nav.bidrag.transport.behandling.beregning.felles.BeregnGrunnlag -import no.nav.bidrag.transport.behandling.beregning.forskudd.BeregnetForskuddResultat import no.nav.security.token.support.core.api.Protected -import org.springframework.http.ResponseEntity +import org.springframework.context.annotation.Bean import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestMapping @@ -15,12 +17,60 @@ import org.springframework.web.bind.annotation.RestController @RestController @RequestMapping("/beregn") @Protected -class BeregnForskuddController(private val beregnForskuddService: BeregnForskuddService) { +class BeregnForskuddController(private val beregning: BeregnForskuddApi) { + + companion object { + val eksempelfiler = (1..23).map { "forskudd_eksempel$it" } + private fun createExample(filename: String): Example { + val example = Example() + example.value = BeregnForskuddController::class.java.getResource("/testfiler/$filename.json")?.readText() ?: "" + example.description = filename + return example + } + } + + @Bean + fun eksempel1(): List = eksempelfiler.map { createExample(it) } + @PostMapping(path = ["/forskudd"]) @Operation(summary = "Beregner forskudd") @SecurityRequirement(name = "bearer-key") - fun beregnForskudd(@RequestBody beregnForskuddGrunnlag: BeregnGrunnlag): ResponseEntity { - val resultat = beregnForskuddService.beregn(beregnForskuddGrunnlag) - return ResponseEntity(resultat.responseEntity.body, resultat.responseEntity.statusCode) - } + @io.swagger.v3.oas.annotations.parameters.RequestBody( + content = + [ + Content( + examples = [ + ExampleObject( + ref = "#/components/examples/forskudd_eksempel1", + name = "forskudd_eksempel1", + ), + ExampleObject( + ref = "#/components/examples/forskudd_eksempel2", + name = "forskudd_eksempel2", + ), + ExampleObject( + ref = "#/components/examples/forskudd_eksempel3", + name = "forskudd_eksempel3", + ), + ExampleObject( + ref = "#/components/examples/forskudd_eksempel4", + name = "forskudd_eksempel4", + ), + ExampleObject( + ref = "#/components/examples/forskudd_eksempel5", + name = "forskudd_eksempel5", + ), + ExampleObject( + ref = "#/components/examples/forskudd_eksempel6", + name = "forskudd_eksempel6", + ), + ExampleObject( + ref = "#/components/examples/forskudd_eksempel7", + name = "forskudd_eksempel7", + ), + ], + ), + ], + ) + fun beregnForskudd(@RequestBody beregnForskuddGrunnlag: BeregnGrunnlag) = beregning.beregn(beregnForskuddGrunnlag) } diff --git a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/exception/ExceptionHandlerAdvice.kt b/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/exception/ExceptionHandlerAdvice.kt index d5e2dd7..30257cc 100644 --- a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/exception/ExceptionHandlerAdvice.kt +++ b/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/exception/ExceptionHandlerAdvice.kt @@ -1,25 +1,27 @@ package no.nav.bidrag.beregn.forskudd.rest.exception +import org.springframework.http.HttpHeaders import org.springframework.http.HttpStatus import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.ControllerAdvice import org.springframework.web.bind.annotation.ExceptionHandler +import org.springframework.web.client.HttpStatusCodeException @ControllerAdvice class ExceptionHandlerAdvice { @ExceptionHandler - fun handleUgyldigInputException(exception: UgyldigInputException): ResponseEntity<*> { + fun handleUgyldigInputException(exception: IllegalArgumentException): ResponseEntity<*> { return ResponseEntity .status(HttpStatus.BAD_REQUEST) - .header("Error", errorMsg(exception)) + .header(HttpHeaders.WARNING, errorMsg(exception)) .build() } @ExceptionHandler - fun handleSjablonConsumerException(exception: SjablonConsumerException): ResponseEntity<*> { + fun handleSjablonConsumerException(exception: HttpStatusCodeException): ResponseEntity<*> { return ResponseEntity .status(exception.statusCode) - .header("Error", errorMsg(exception)) + .header(HttpHeaders.WARNING, errorMsg(exception)) .build() } diff --git a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/exception/SjablonConsumerException.kt b/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/exception/SjablonConsumerException.kt deleted file mode 100644 index 5eca2b0..0000000 --- a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/exception/SjablonConsumerException.kt +++ /dev/null @@ -1,12 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest.exception - -import org.springframework.http.HttpStatusCode -import org.springframework.web.client.RestClientResponseException - -class SjablonConsumerException(exception: RestClientResponseException) : RuntimeException(exception) { - val statusCode: HttpStatusCode - - init { - statusCode = exception.statusCode - } -} diff --git a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/exception/UgyldigInputException.kt b/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/exception/UgyldigInputException.kt deleted file mode 100644 index 7611baf..0000000 --- a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/exception/UgyldigInputException.kt +++ /dev/null @@ -1,3 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest.exception - -class UgyldigInputException(melding: String) : IllegalArgumentException(melding) diff --git a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/BeregnForskuddService.kt b/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/BeregnForskuddService.kt deleted file mode 100644 index c572588..0000000 --- a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/BeregnForskuddService.kt +++ /dev/null @@ -1,158 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest.service - -import com.fasterxml.jackson.databind.ObjectMapper -import no.nav.bidrag.beregn.forskudd.core.ForskuddCore -import no.nav.bidrag.beregn.forskudd.core.dto.BeregnetForskuddResultatCore -import no.nav.bidrag.beregn.forskudd.core.dto.ResultatPeriodeCore -import no.nav.bidrag.beregn.forskudd.rest.SECURE_LOGGER -import no.nav.bidrag.beregn.forskudd.rest.consumer.SjablonConsumer -import no.nav.bidrag.beregn.forskudd.rest.consumer.Sjablontall -import no.nav.bidrag.beregn.forskudd.rest.exception.UgyldigInputException -import no.nav.bidrag.commons.web.HttpResponse -import no.nav.bidrag.commons.web.HttpResponse.Companion.from -import no.nav.bidrag.domene.enums.beregning.ResultatkodeForskudd -import no.nav.bidrag.domene.enums.grunnlag.Grunnlagstype -import no.nav.bidrag.domene.tid.ÅrMånedsperiode -import no.nav.bidrag.transport.behandling.beregning.felles.BeregnGrunnlag -import no.nav.bidrag.transport.behandling.beregning.felles.Grunnlag -import no.nav.bidrag.transport.behandling.beregning.felles.valider -import no.nav.bidrag.transport.behandling.beregning.forskudd.BeregnetForskuddResultat -import no.nav.bidrag.transport.behandling.beregning.forskudd.ResultatBeregning -import no.nav.bidrag.transport.behandling.beregning.forskudd.ResultatPeriode -import org.slf4j.LoggerFactory -import org.springframework.http.HttpStatus -import org.springframework.stereotype.Service - -@Service -class BeregnForskuddService(private val sjablonConsumer: SjablonConsumer, private val forskuddCore: ForskuddCore) { - fun beregn(grunnlag: BeregnGrunnlag): HttpResponse { - if (SECURE_LOGGER.isDebugEnabled) { - SECURE_LOGGER.debug("Mottatt følgende request: {}", grunnlag) - } - - // Kontroll av inputdata - try { - grunnlag.valider() - } catch (e: IllegalArgumentException) { - throw UgyldigInputException("Ugyldig input ved beregning av forskudd: " + e.message) - } - - // Henter sjabloner - val sjablonSjablontallResponse: HttpResponse> = sjablonConsumer.hentSjablonSjablontall() - - if (sjablonSjablontallResponse.responseEntity.body.isNullOrEmpty()) { - LOGGER.error("Klarte ikke å hente sjabloner") - return from(httpStatus = HttpStatus.OK, body = BeregnetForskuddResultat()) - } - - val sjablonTallListe = sjablonSjablontallResponse.responseEntity.body!! - - if (LOGGER.isDebugEnabled) { - LOGGER.debug("Antall sjabloner hentet av type Sjablontall: ${sjablonSjablontallResponse.responseEntity.body!!.size}") - } - - // Lager input-grunnlag til core-modulen - val grunnlagTilCore = - CoreMapper.mapGrunnlagTilCore( - beregnForskuddGrunnlag = grunnlag, - sjablontallListe = sjablonTallListe, - ) - - if (SECURE_LOGGER.isDebugEnabled) { - SECURE_LOGGER.debug("Forskudd - grunnlag for beregning: {}", grunnlagTilCore) - } - - // Kaller core-modulen for beregning av forskudd - val resultatFraCore = - try { - forskuddCore.beregnForskudd(grunnlagTilCore) - } catch (e: Exception) { - throw UgyldigInputException("Ugyldig input ved beregning av forskudd: " + e.message) - } - - if (resultatFraCore.avvikListe.isNotEmpty()) { - val avvikTekst = resultatFraCore.avvikListe.joinToString("; ") { it.avvikTekst } - LOGGER.warn("Ugyldig input ved beregning av forskudd. Følgende avvik ble funnet: $avvikTekst") - SECURE_LOGGER.warn("Ugyldig input ved beregning av forskudd. Følgende avvik ble funnet: $avvikTekst") - SECURE_LOGGER.info( - "Forskudd - grunnlag for beregning: " + System.lineSeparator() + - "beregnDatoFra= " + grunnlagTilCore.beregnDatoFra + System.lineSeparator() + - "beregnDatoTil= " + grunnlagTilCore.beregnDatoTil + System.lineSeparator() + - "soknadBarn= " + grunnlagTilCore.soknadBarn + System.lineSeparator() + - "barnIHusstandenPeriodeListe= " + grunnlagTilCore.barnIHusstandenPeriodeListe + System.lineSeparator() + - "inntektPeriodeListe= " + grunnlagTilCore.inntektPeriodeListe + System.lineSeparator() + - "sivilstandPeriodeListe= " + grunnlagTilCore.sivilstandPeriodeListe + System.lineSeparator(), - ) - throw UgyldigInputException("Ugyldig input ved beregning av forskudd. Følgende avvik ble funnet: $avvikTekst") - } - - if (SECURE_LOGGER.isDebugEnabled) { - SECURE_LOGGER.debug("Forskudd - resultat av beregning: {}", resultatFraCore.beregnetForskuddPeriodeListe) - } - - val grunnlagReferanseListe = lagGrunnlagReferanseListe(forskuddGrunnlag = grunnlag, resultatFraCore = resultatFraCore) - - val respons = - BeregnetForskuddResultat( - beregnetForskuddPeriodeListe = mapFraResultatPeriodeCore(resultatFraCore.beregnetForskuddPeriodeListe), - grunnlagListe = grunnlagReferanseListe, - ) - - if (SECURE_LOGGER.isDebugEnabled) { - SECURE_LOGGER.debug("Returnerer følgende respons: {}", respons) - } - - return from(httpStatus = HttpStatus.OK, body = respons) - } - - private fun mapFraResultatPeriodeCore(resultatPeriodeCoreListe: List) = resultatPeriodeCoreListe.map { - ResultatPeriode( - periode = ÅrMånedsperiode(fom = it.periode.datoFom, til = it.periode.datoTil), - resultat = - ResultatBeregning( - belop = it.resultat.belop, - kode = ResultatkodeForskudd.valueOf(it.resultat.kode), - regel = it.resultat.regel, - ), - grunnlagsreferanseListe = it.grunnlagsreferanseListe, - ) - } - - // Lager en liste over resultatgrunnlag som inneholder: - // - mottatte grunnlag som er brukt i beregningen - // - sjabloner som er brukt i beregningen - private fun lagGrunnlagReferanseListe(forskuddGrunnlag: BeregnGrunnlag, resultatFraCore: BeregnetForskuddResultatCore): List { - val mapper = ObjectMapper() - val resultatGrunnlagListe = mutableListOf() - val grunnlagReferanseListe = - resultatFraCore.beregnetForskuddPeriodeListe - .flatMap { it.grunnlagsreferanseListe } - .distinct() - - // Matcher mottatte grunnlag med grunnlag som er brukt i beregningen - resultatGrunnlagListe.addAll( - forskuddGrunnlag.grunnlagListe!! - .filter { grunnlagReferanseListe.contains(it.referanse) } - .map { Grunnlag(referanse = it.referanse, type = it.type, innhold = it.innhold) }, - ) - - // Danner grunnlag basert på liste over sjabloner som er brukt i beregningen - resultatGrunnlagListe.addAll( - resultatFraCore.sjablonListe - .map { - val map = LinkedHashMap() - map["datoFom"] = it.periode.datoFom.toString() - map["datoTil"] = it.periode.datoTil.toString() - map["sjablonNavn"] = it.navn - map["sjablonVerdi"] = it.verdi.toInt() - Grunnlag(referanse = it.referanse, type = Grunnlagstype.SJABLON, innhold = mapper.valueToTree(map)) - }, - ) - - return resultatGrunnlagListe - } - - companion object { - private val LOGGER = LoggerFactory.getLogger(BeregnForskuddService::class.java) - } -} diff --git a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/CoreMapper.kt b/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/CoreMapper.kt deleted file mode 100644 index 3a34cee..0000000 --- a/src/main/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/CoreMapper.kt +++ /dev/null @@ -1,267 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest.service - -import no.nav.bidrag.beregn.felles.dto.PeriodeCore -import no.nav.bidrag.beregn.felles.dto.SjablonInnholdCore -import no.nav.bidrag.beregn.felles.dto.SjablonPeriodeCore -import no.nav.bidrag.beregn.forskudd.core.dto.BarnIHusstandenPeriodeCore -import no.nav.bidrag.beregn.forskudd.core.dto.BeregnForskuddGrunnlagCore -import no.nav.bidrag.beregn.forskudd.core.dto.BostatusPeriodeCore -import no.nav.bidrag.beregn.forskudd.core.dto.InntektPeriodeCore -import no.nav.bidrag.beregn.forskudd.core.dto.SivilstandPeriodeCore -import no.nav.bidrag.beregn.forskudd.core.dto.SoknadBarnCore -import no.nav.bidrag.beregn.forskudd.rest.consumer.Sjablontall -import no.nav.bidrag.beregn.forskudd.rest.exception.UgyldigInputException -import no.nav.bidrag.domene.enums.grunnlag.Grunnlagstype -import no.nav.bidrag.domene.enums.person.Bostatuskode -import no.nav.bidrag.domene.enums.sjablon.SjablonInnholdNavn -import no.nav.bidrag.domene.enums.sjablon.SjablonTallNavn -import no.nav.bidrag.transport.behandling.beregning.felles.BeregnGrunnlag -import no.nav.bidrag.transport.behandling.beregning.felles.grunnlag.BeregningInntektRapporteringPeriode -import no.nav.bidrag.transport.behandling.beregning.felles.hentInnholdBasertPåEgenReferanse -import no.nav.bidrag.transport.behandling.beregning.felles.hentInnholdBasertPåFremmedReferanse -import no.nav.bidrag.transport.behandling.felles.grunnlag.BostatusPeriode -import no.nav.bidrag.transport.behandling.felles.grunnlag.Person -import no.nav.bidrag.transport.behandling.felles.grunnlag.SivilstandPeriode -import java.time.LocalDate - -object CoreMapper { - private val MAX_DATO = LocalDate.parse("9999-12-31") - - fun mapGrunnlagTilCore(beregnForskuddGrunnlag: BeregnGrunnlag, sjablontallListe: List): BeregnForskuddGrunnlagCore { - // Lager en map for sjablontall (id og navn) - val sjablontallMap = HashMap() - SjablonTallNavn.entries.forEach { - sjablontallMap[it.id] = it - } - - // Mapper grunnlagstyper til input for core - val soknadbarnCore = mapSoknadsbarn(beregnForskuddGrunnlag) - val bostatusPeriodeCoreListe = mapBostatus(beregnForskuddGrunnlag) - val inntektPeriodeCoreListe = mapInntekt(beregnForskuddGrunnlag) - val sivilstandPeriodeCoreListe = mapSivilstand(beregnForskuddGrunnlag) - val barnIHusstandenPeriodeCoreListe = mapBarnIHusstanden(beregnForskuddGrunnlag) - - // Validerer at alle nødvendige grunnlag er med - validerGrunnlag( - soknadbarnGrunnlag = soknadbarnCore != null, - bostatusGrunnlag = bostatusPeriodeCoreListe.isNotEmpty(), - inntektGrunnlag = inntektPeriodeCoreListe.isNotEmpty(), - sivilstandGrunnlag = sivilstandPeriodeCoreListe.isNotEmpty(), - barnIHusstandenGrunnlag = barnIHusstandenPeriodeCoreListe.isNotEmpty(), - ) - - val sjablonPeriodeCoreListe = - mapSjablonVerdier( - beregnDatoFra = beregnForskuddGrunnlag.periode!!.fom.atDay(1), - beregnDatoTil = beregnForskuddGrunnlag.periode!!.til!!.atDay(1), - sjablonSjablontallListe = sjablontallListe, - sjablontallMap = sjablontallMap, - ) - - return BeregnForskuddGrunnlagCore( - beregnDatoFra = beregnForskuddGrunnlag.periode!!.fom.atDay(1), - beregnDatoTil = beregnForskuddGrunnlag.periode!!.til!!.atDay(1), - soknadBarn = soknadbarnCore!!, - bostatusPeriodeListe = bostatusPeriodeCoreListe, - inntektPeriodeListe = inntektPeriodeCoreListe, - sivilstandPeriodeListe = sivilstandPeriodeCoreListe, - barnIHusstandenPeriodeListe = barnIHusstandenPeriodeCoreListe, - sjablonPeriodeListe = sjablonPeriodeCoreListe, - ) - } - - private fun mapSoknadsbarn(beregnForskuddGrunnlag: BeregnGrunnlag): SoknadBarnCore? { - try { - val soknadsbarnGrunnlag = - beregnForskuddGrunnlag.hentInnholdBasertPåEgenReferanse( - grunnlagType = Grunnlagstype.PERSON, - clazz = Person::class.java, - referanse = beregnForskuddGrunnlag.søknadsbarnReferanse!!, - ) - - return if (soknadsbarnGrunnlag.isEmpty() || soknadsbarnGrunnlag.count() > 1) { - null - } else { - SoknadBarnCore( - referanse = soknadsbarnGrunnlag[0].referanse, - fodselsdato = soknadsbarnGrunnlag[0].innhold.fødselsdato, - ) - } - } catch (e: Exception) { - throw UgyldigInputException( - "Ugyldig input ved beregning av forskudd. Innhold i Grunnlagstype.PERSON er ikke gyldig: " + e.message, - ) - } - } - - private fun mapBostatus(beregnForskuddGrunnlag: BeregnGrunnlag): List { - try { - val bostatusGrunnlag = - beregnForskuddGrunnlag.hentInnholdBasertPåFremmedReferanse( - grunnlagType = Grunnlagstype.BOSTATUS_PERIODE, - clazz = BostatusPeriode::class.java, - referanse = beregnForskuddGrunnlag.søknadsbarnReferanse!!, - ) - - return bostatusGrunnlag.map { - BostatusPeriodeCore( - referanse = it.referanse, - periode = - PeriodeCore( - datoFom = it.innhold.periode.toDatoperiode().fom, - datoTil = it.innhold.periode.toDatoperiode().til, - ), - kode = it.innhold.bostatus.name, - ) - } - } catch (e: Exception) { - throw UgyldigInputException( - "Ugyldig input ved beregning av forskudd. Innhold i Grunnlagstype.BOSTATUS_PERIODE er ikke gyldig: " + e.message, - ) - } - } - - private fun mapInntekt(beregnForskuddGrunnlag: BeregnGrunnlag): List { - try { - val inntektGrunnlag = - beregnForskuddGrunnlag.hentInnholdBasertPåEgenReferanse( - grunnlagType = Grunnlagstype.BEREGNING_INNTEKT_RAPPORTERING_PERIODE, - clazz = BeregningInntektRapporteringPeriode::class.java, - ) - - return inntektGrunnlag - .filter { it.innhold.valgt } - .filter { it.innhold.gjelderBarn == null || it.innhold.gjelderBarn == beregnForskuddGrunnlag.søknadsbarnReferanse } - .map { - InntektPeriodeCore( - referanse = it.referanse, - periode = - PeriodeCore( - datoFom = it.innhold.periode.toDatoperiode().fom, - datoTil = it.innhold.periode.toDatoperiode().til, - ), - type = it.innhold.inntektsrapportering.name, - belop = it.innhold.beløp, - ) - } - } catch (e: Exception) { - throw UgyldigInputException( - "Ugyldig input ved beregning av forskudd. Innhold i Grunnlagstype.BEREGNING_INNTEKT_RAPPORTERING_PERIODE er ikke gyldig: " + - e.message, - ) - } - } - - private fun mapSivilstand(beregnForskuddGrunnlag: BeregnGrunnlag): List { - try { - val sivilstandGrunnlag = - beregnForskuddGrunnlag.hentInnholdBasertPåEgenReferanse( - grunnlagType = Grunnlagstype.SIVILSTAND_PERIODE, - clazz = SivilstandPeriode::class.java, - ) - - return sivilstandGrunnlag.map { - SivilstandPeriodeCore( - referanse = it.referanse, - periode = - PeriodeCore( - datoFom = it.innhold.periode.toDatoperiode().fom, - datoTil = it.innhold.periode.toDatoperiode().til, - ), - kode = it.innhold.sivilstand.name, - ) - } - } catch (e: Exception) { - throw UgyldigInputException( - "Ugyldig input ved beregning av forskudd. Innhold i Grunnlagstype.SIVILSTAND_PERIODE er ikke gyldig: " + e.message, - ) - } - } - - private fun mapBarnIHusstanden(beregnForskuddGrunnlag: BeregnGrunnlag): List { - try { - val barnIHusstandenGrunnlag = - beregnForskuddGrunnlag.hentInnholdBasertPåEgenReferanse( - grunnlagType = Grunnlagstype.BOSTATUS_PERIODE, - clazz = BostatusPeriode::class.java, - ) - - return barnIHusstandenGrunnlag - .filter { it.innhold.bostatus == Bostatuskode.MED_FORELDER || it.innhold.bostatus == Bostatuskode.DOKUMENTERT_SKOLEGANG } - .map { - BarnIHusstandenPeriodeCore( - referanse = it.referanse, - periode = - PeriodeCore( - datoFom = it.innhold.periode.toDatoperiode().fom, - datoTil = it.innhold.periode.toDatoperiode().til, - ), - ) - } - } catch (e: Exception) { - throw UgyldigInputException( - "Ugyldig input ved beregning av forskudd. Innhold i Grunnlagstype.BOSTATUS_PERIODE er ikke gyldig: " + e.message, - ) - } - } - - private fun validerGrunnlag( - soknadbarnGrunnlag: Boolean, - bostatusGrunnlag: Boolean, - inntektGrunnlag: Boolean, - sivilstandGrunnlag: Boolean, - barnIHusstandenGrunnlag: Boolean, - ) { - when { - !soknadbarnGrunnlag -> { - throw UgyldigInputException("Søknadsbarn mangler i input") - } - - !bostatusGrunnlag -> { - throw UgyldigInputException("Bostatus mangler i input") - } - - !inntektGrunnlag -> { - throw UgyldigInputException("Inntekt mangler i input") - } - - !sivilstandGrunnlag -> { - throw UgyldigInputException("Sivilstand mangler i input") - } - - !barnIHusstandenGrunnlag -> { - throw UgyldigInputException("Barn i husstanden mangler i input") - } - } - } - - // Plukker ut aktuelle sjabloner og flytter inn i inputen til core-modulen - private fun mapSjablonVerdier( - beregnDatoFra: LocalDate, - beregnDatoTil: LocalDate, - sjablonSjablontallListe: List, - sjablontallMap: HashMap, - ): List { - return sjablonSjablontallListe - .filter { !(it.datoFom!!.isAfter(beregnDatoTil) || it.datoTom!!.isBefore(beregnDatoFra)) } - .filter { (sjablontallMap.getOrDefault(it.typeSjablon, SjablonTallNavn.DUMMY)).forskudd } - .map { - SjablonPeriodeCore( - periode = PeriodeCore(it.datoFom!!, justerTilDato(it.datoTom)), - navn = sjablontallMap.getOrDefault(it.typeSjablon, SjablonTallNavn.DUMMY).navn, - nokkelListe = emptyList(), - innholdListe = listOf(SjablonInnholdCore(navn = SjablonInnholdNavn.SJABLON_VERDI.navn, verdi = it.verdi!!)), - ) - } - } - - private fun justerTilDato(dato: LocalDate?): LocalDate? { - return if (dato == null || dato == MAX_DATO) { - null - } else if (dato.dayOfMonth != 1) { - dato.plusMonths(1).withDayOfMonth(1) - } else { - dato - } - } -} diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 3257fb6..db93ee0 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -10,19 +10,6 @@ no.nav.security.jwt: discovery-url: ${AZURE_APP_WELL_KNOWN_URL} accepted_audience: ${AZURE_APP_CLIENT_ID}, api://${AZURE_APP_CLIENT_ID} ---- -# Profil for lokal kjøring -spring.config.activate.on-profile: local - -# Lokal profil bruker selvstendige wiremocks -wiremock.server: - files: classpath:/__files - stubs: classpath:/wiremock_stubs - ---- -# Profil for integrasjonstest -spring.config.activate.on-profile: integrationtest - # Inkluderer alle felter i JSON-responsen spring: jackson: diff --git a/src/test/resources/testfiler/forskudd_eksempel1.json b/src/main/resources/testfiler/forskudd_eksempel1.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel1.json rename to src/main/resources/testfiler/forskudd_eksempel1.json diff --git a/src/test/resources/testfiler/forskudd_eksempel10.json b/src/main/resources/testfiler/forskudd_eksempel10.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel10.json rename to src/main/resources/testfiler/forskudd_eksempel10.json diff --git a/src/test/resources/testfiler/forskudd_eksempel11.json b/src/main/resources/testfiler/forskudd_eksempel11.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel11.json rename to src/main/resources/testfiler/forskudd_eksempel11.json diff --git a/src/test/resources/testfiler/forskudd_eksempel12.json b/src/main/resources/testfiler/forskudd_eksempel12.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel12.json rename to src/main/resources/testfiler/forskudd_eksempel12.json diff --git a/src/test/resources/testfiler/forskudd_eksempel13.json b/src/main/resources/testfiler/forskudd_eksempel13.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel13.json rename to src/main/resources/testfiler/forskudd_eksempel13.json diff --git a/src/test/resources/testfiler/forskudd_eksempel14.json b/src/main/resources/testfiler/forskudd_eksempel14.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel14.json rename to src/main/resources/testfiler/forskudd_eksempel14.json diff --git a/src/test/resources/testfiler/forskudd_eksempel15.json b/src/main/resources/testfiler/forskudd_eksempel15.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel15.json rename to src/main/resources/testfiler/forskudd_eksempel15.json diff --git a/src/test/resources/testfiler/forskudd_eksempel16.json b/src/main/resources/testfiler/forskudd_eksempel16.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel16.json rename to src/main/resources/testfiler/forskudd_eksempel16.json diff --git a/src/test/resources/testfiler/forskudd_eksempel17.json b/src/main/resources/testfiler/forskudd_eksempel17.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel17.json rename to src/main/resources/testfiler/forskudd_eksempel17.json diff --git a/src/test/resources/testfiler/forskudd_eksempel18.json b/src/main/resources/testfiler/forskudd_eksempel18.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel18.json rename to src/main/resources/testfiler/forskudd_eksempel18.json diff --git a/src/test/resources/testfiler/forskudd_eksempel19.json b/src/main/resources/testfiler/forskudd_eksempel19.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel19.json rename to src/main/resources/testfiler/forskudd_eksempel19.json diff --git a/src/test/resources/testfiler/forskudd_eksempel2.json b/src/main/resources/testfiler/forskudd_eksempel2.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel2.json rename to src/main/resources/testfiler/forskudd_eksempel2.json diff --git a/src/test/resources/testfiler/forskudd_eksempel20.json b/src/main/resources/testfiler/forskudd_eksempel20.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel20.json rename to src/main/resources/testfiler/forskudd_eksempel20.json diff --git a/src/test/resources/testfiler/forskudd_eksempel22.json b/src/main/resources/testfiler/forskudd_eksempel22.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel22.json rename to src/main/resources/testfiler/forskudd_eksempel22.json diff --git a/src/test/resources/testfiler/forskudd_eksempel23.json b/src/main/resources/testfiler/forskudd_eksempel23.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel23.json rename to src/main/resources/testfiler/forskudd_eksempel23.json diff --git a/src/test/resources/testfiler/forskudd_eksempel3.json b/src/main/resources/testfiler/forskudd_eksempel3.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel3.json rename to src/main/resources/testfiler/forskudd_eksempel3.json diff --git a/src/test/resources/testfiler/forskudd_eksempel4.json b/src/main/resources/testfiler/forskudd_eksempel4.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel4.json rename to src/main/resources/testfiler/forskudd_eksempel4.json diff --git a/src/test/resources/testfiler/forskudd_eksempel5.json b/src/main/resources/testfiler/forskudd_eksempel5.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel5.json rename to src/main/resources/testfiler/forskudd_eksempel5.json diff --git a/src/test/resources/testfiler/forskudd_eksempel6.json b/src/main/resources/testfiler/forskudd_eksempel6.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel6.json rename to src/main/resources/testfiler/forskudd_eksempel6.json diff --git a/src/test/resources/testfiler/forskudd_eksempel7.json b/src/main/resources/testfiler/forskudd_eksempel7.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel7.json rename to src/main/resources/testfiler/forskudd_eksempel7.json diff --git a/src/test/resources/testfiler/forskudd_eksempel8.json b/src/main/resources/testfiler/forskudd_eksempel8.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel8.json rename to src/main/resources/testfiler/forskudd_eksempel8.json diff --git a/src/test/resources/testfiler/forskudd_eksempel9.json b/src/main/resources/testfiler/forskudd_eksempel9.json similarity index 100% rename from src/test/resources/testfiler/forskudd_eksempel9.json rename to src/main/resources/testfiler/forskudd_eksempel9.json diff --git a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddApplicationTest.kt b/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddApplicationTest.kt deleted file mode 100644 index 63a138b..0000000 --- a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddApplicationTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest - -import no.nav.bidrag.beregn.forskudd.rest.BidragBeregnForskuddTest.Companion.TEST_PROFILE -import no.nav.security.token.support.spring.test.EnableMockOAuth2Server -import org.junit.jupiter.api.DisplayName -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment -import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock -import org.springframework.test.context.ActiveProfiles -import org.springframework.test.context.junit.jupiter.SpringExtension - -@ExtendWith(SpringExtension::class) -@SpringBootTest(classes = [BidragBeregnForskuddTest::class], webEnvironment = WebEnvironment.RANDOM_PORT) -@ActiveProfiles(TEST_PROFILE) -@DisplayName("BidragBeregnForskudd") -@AutoConfigureWireMock(port = 0) -@EnableMockOAuth2Server -class BidragBeregnForskuddApplicationTest { - @Test - fun contextLoads() { - } -} diff --git a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddLocal.kt b/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddLocal.kt deleted file mode 100644 index 0d034d0..0000000 --- a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddLocal.kt +++ /dev/null @@ -1,46 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest - -import com.github.tomakehurst.wiremock.WireMockServer -import com.github.tomakehurst.wiremock.core.WireMockConfiguration -import no.nav.bidrag.beregn.forskudd.rest.BidragBeregnForskuddLocal.Companion.LOCAL_PROFILE -import no.nav.security.token.support.spring.api.EnableJwtTokenValidation -import org.springframework.boot.SpringApplication -import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration -import org.springframework.boot.autoconfigure.SpringBootApplication -import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration -import org.springframework.context.annotation.ComponentScan -import org.springframework.context.annotation.FilterType -import org.springframework.test.context.ActiveProfiles - -@SpringBootApplication(exclude = [SecurityAutoConfiguration::class, ManagementWebSecurityAutoConfiguration::class]) -@EnableJwtTokenValidation(ignore = ["org.springdoc", "org.springframework"]) -@ComponentScan( - excludeFilters = [ - ComponentScan.Filter( - type = FilterType.ASSIGNABLE_TYPE, - value = [BidragBeregnForskudd::class, BidragBeregnForskuddTest::class], - ), - ], -) -@ActiveProfiles(LOCAL_PROFILE) -class BidragBeregnForskuddLocal { - companion object { - const val LOCAL_PROFILE = "local" - } -} - -fun main(args: Array) { - val wireMockServer = - WireMockServer( - WireMockConfiguration.wireMockConfig().dynamicPort().dynamicHttpsPort(), - ) // No-args constructor will start on port 8080, no HTTPS - wireMockServer.start() - - val profile = if (args.isEmpty()) LOCAL_PROFILE else args[0] - val app = SpringApplication(BidragBeregnForskuddLocal::class.java) - app.setAdditionalProfiles(profile) - app.run(*args) - - wireMockServer.resetAll() - wireMockServer.stop() -} diff --git a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddLokalNais.kt b/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddLokalNais.kt deleted file mode 100644 index 3988e99..0000000 --- a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddLokalNais.kt +++ /dev/null @@ -1,24 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest - -import no.nav.security.token.support.spring.api.EnableJwtTokenValidation -import no.nav.security.token.support.spring.test.EnableMockOAuth2Server -import org.springframework.boot.SpringApplication -import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration -import org.springframework.boot.autoconfigure.SpringBootApplication -import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration -import org.springframework.context.annotation.ComponentScan -import org.springframework.context.annotation.FilterType -import org.springframework.context.annotation.Profile - -@SpringBootApplication(exclude = [SecurityAutoConfiguration::class, ManagementWebSecurityAutoConfiguration::class]) -@EnableMockOAuth2Server -@EnableJwtTokenValidation(ignore = ["org.springdoc", "org.springframework"]) -@ComponentScan(excludeFilters = [ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = [BidragBeregnForskudd::class])]) -@Profile("lokal-nais") -class BidragBeregnForskuddLokalNais - -fun main(args: Array) { - val app = SpringApplication(BidragBeregnForskuddLokalNais::class.java) - app.setAdditionalProfiles("lokal-nais", "lokal-nais-secrets") - app.run(*args) -} diff --git a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddTest.kt b/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddTest.kt deleted file mode 100644 index b3c4eea..0000000 --- a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddTest.kt +++ /dev/null @@ -1,33 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest - -import no.nav.bidrag.beregn.forskudd.rest.BidragBeregnForskuddTest.Companion.TEST_PROFILE -import org.springframework.boot.SpringApplication -import org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration -import org.springframework.boot.autoconfigure.SpringBootApplication -import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration -import org.springframework.context.annotation.ComponentScan -import org.springframework.context.annotation.FilterType -import org.springframework.test.context.ActiveProfiles - -@SpringBootApplication(exclude = [SecurityAutoConfiguration::class, ManagementWebSecurityAutoConfiguration::class]) -@ActiveProfiles(TEST_PROFILE) -@ComponentScan( - excludeFilters = [ - ComponentScan.Filter( - type = FilterType.ASSIGNABLE_TYPE, - value = [BidragBeregnForskudd::class, BidragBeregnForskuddLocal::class], - ), - ], -) -class BidragBeregnForskuddTest { - companion object { - const val TEST_PROFILE = "test" - } -} - -fun main(args: Array) { - val profile = if (args.isEmpty()) TEST_PROFILE else args[0] - val app = SpringApplication(BidragBeregnForskuddTest::class.java) - app.setAdditionalProfiles(profile) - app.run(*args) -} diff --git a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddTestConfig.kt b/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddTestConfig.kt deleted file mode 100644 index 67576e1..0000000 --- a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/BidragBeregnForskuddTestConfig.kt +++ /dev/null @@ -1,58 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest - -import com.nimbusds.jose.JOSEObjectType -import io.swagger.v3.oas.annotations.OpenAPIDefinition -import io.swagger.v3.oas.annotations.info.Info -import io.swagger.v3.oas.annotations.security.SecurityRequirement -import no.nav.bidrag.beregn.forskudd.rest.BidragBeregnForskuddLocal.Companion.LOCAL_PROFILE -import no.nav.bidrag.beregn.forskudd.rest.BidragBeregnForskuddTest.Companion.TEST_PROFILE -import no.nav.bidrag.commons.web.test.HttpHeaderTestRestTemplate -import no.nav.security.mock.oauth2.MockOAuth2Server -import no.nav.security.mock.oauth2.token.DefaultOAuth2TokenCallback -import org.slf4j.LoggerFactory -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.web.client.TestRestTemplate -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.context.annotation.Profile -import org.springframework.http.HttpHeaders - -private val LOGGER = LoggerFactory.getLogger(BidragBeregnForskuddTestConfig::class.java) - -@Configuration -@OpenAPIDefinition( - info = Info(title = "bidrag-vedtak", version = "v1"), - security = [SecurityRequirement(name = "bearer-key")], -) -@Profile(TEST_PROFILE, LOCAL_PROFILE) -class BidragBeregnForskuddTestConfig { - @Autowired - private lateinit var mockOAuth2Server: MockOAuth2Server - - @Bean - open fun securedTestRestTemplate(testRestTemplate: TestRestTemplate): HttpHeaderTestRestTemplate { - val httpHeaderTestRestTemplate = HttpHeaderTestRestTemplate(testRestTemplate) - httpHeaderTestRestTemplate.add(HttpHeaders.AUTHORIZATION) { generateTestToken() } - return httpHeaderTestRestTemplate - } - - private fun generateTestToken(): String { - val iss = mockOAuth2Server.issuerUrl(ISSUER) - val newIssuer = iss.newBuilder().host("localhost").build() - val token = - mockOAuth2Server.issueToken( - issuerId = ISSUER, - clientId = "aud-localhost", - tokenCallback = - DefaultOAuth2TokenCallback( - issuerId = ISSUER, - subject = "aud-localhost", - typeHeader = JOSEObjectType.JWT.type, - audience = listOf("aud-localhost"), - claims = mapOf("iss" to newIssuer.toString()), - expiry = 3600, - ), - ) - return "Bearer " + token.serialize() - } -} diff --git a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/TestUtil.kt b/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/TestUtil.kt deleted file mode 100644 index 98ab92b..0000000 --- a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/TestUtil.kt +++ /dev/null @@ -1,589 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest - -import com.fasterxml.jackson.databind.JsonNode -import com.fasterxml.jackson.databind.ObjectMapper -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule -import com.fasterxml.jackson.module.kotlin.registerKotlinModule -import no.nav.bidrag.beregn.felles.dto.AvvikCore -import no.nav.bidrag.beregn.felles.dto.PeriodeCore -import no.nav.bidrag.beregn.forskudd.core.dto.BeregnetForskuddResultatCore -import no.nav.bidrag.beregn.forskudd.core.dto.ResultatBeregningCore -import no.nav.bidrag.beregn.forskudd.core.dto.ResultatPeriodeCore -import no.nav.bidrag.beregn.forskudd.rest.consumer.Sjablontall -import no.nav.bidrag.domene.enums.beregning.ResultatkodeForskudd -import no.nav.bidrag.domene.enums.grunnlag.Grunnlagstype -import no.nav.bidrag.domene.enums.inntekt.Inntektsrapportering -import no.nav.bidrag.domene.enums.person.Bostatuskode -import no.nav.bidrag.domene.enums.person.Sivilstandskode -import no.nav.bidrag.domene.tid.ÅrMånedsperiode -import no.nav.bidrag.transport.behandling.beregning.felles.BeregnGrunnlag -import no.nav.bidrag.transport.behandling.beregning.felles.Grunnlag -import no.nav.bidrag.transport.behandling.beregning.forskudd.BeregnetForskuddResultat -import no.nav.bidrag.transport.behandling.beregning.forskudd.ResultatBeregning -import no.nav.bidrag.transport.behandling.beregning.forskudd.ResultatPeriode -import java.math.BigDecimal -import java.text.SimpleDateFormat -import java.time.LocalDate -import java.time.YearMonth - -object TestUtil { - private const val INNTEKT_REFERANSE_1 = "INNTEKT_REFERANSE_1" - private const val SIVILSTAND_REFERANSE_ENSLIG = "SIVILSTAND_REFERANSE_ENSLIG" - private const val BARN_REFERANSE_1 = "BARN_REFERANSE_1" - private const val SOKNADBARN_REFERANSE = "SOKNADBARN_REFERANSE" - private const val BOSTATUS_REFERANSE_MED_FORELDRE_1 = "BOSTATUS_REFERANSE_MED_FORELDRE_1" - - fun byggDummyForskuddGrunnlag(): BeregnGrunnlag { - return byggDummyForskuddGrunnlag("") - } - - fun byggForskuddGrunnlagUtenBeregningsperiodeTil(): BeregnGrunnlag { - return byggDummyForskuddGrunnlag("beregningsperiodeTil") - } - - fun byggForskuddGrunnlagUtenGrunnlagListe(): BeregnGrunnlag { - return byggDummyForskuddGrunnlag("grunnlagListe") - } - - fun byggForskuddGrunnlagUtenReferanse(): BeregnGrunnlag { - return byggDummyForskuddGrunnlag("referanse") - } - - fun byggForskuddGrunnlagUtenType(): BeregnGrunnlag { - return byggDummyForskuddGrunnlag("type") - } - - fun byggForskuddGrunnlagUtenInnhold(): BeregnGrunnlag { - return byggDummyForskuddGrunnlag("innhold") - } - - // Bygger opp BeregnGrunnlag - private fun byggDummyForskuddGrunnlag(nullVerdi: String): BeregnGrunnlag { - val mapper = ObjectMapper() - val beregningsperiodeFom = YearMonth.parse("2017-01") - val beregningsperiodeTil = if (nullVerdi == "beregningsperiodeTil") null else YearMonth.parse("2020-01") - val referanse = if (nullVerdi == "referanse") null else "Mottatt_BM_Inntekt_AG_20201201" - val type = if (nullVerdi == "type") null else Grunnlagstype.INNTEKT - val innhold = - if (nullVerdi == "innhold") { - null - } else { - mapper.valueToTree( - mapOf( - "rolle" to "BM", - "datoFom" to "2017-01", - "datoTil" to "2020-01", - "inntektsrapportering" to "INNTEKT_RAPPORTERING", - "belop" to 290000, - "manueltRegistrert" to false, - "valgt" to true, - ), - ) - } - val grunnlagListe = - if (nullVerdi == "grunnlagListe") { - null - } else { - listOf( - Grunnlag( - referanse = referanse, - type = type, - grunnlagsreferanseListe = emptyList(), - innhold = innhold, - ), - ) - } - - return BeregnGrunnlag( - periode = ÅrMånedsperiode(fom = beregningsperiodeFom, til = beregningsperiodeTil), - søknadsbarnReferanse = "1", - grunnlagListe = grunnlagListe, - ) - } - - // Bygger opp fullt BeregnGrunnlag - @JvmOverloads - fun byggForskuddGrunnlag( - periodeFom: String = "2017-01", - periodeTil: String = "2020-01", - fødselsdato: String = "2006-12-01", - beløp: String = "290000", - ): BeregnGrunnlag { - val mapper = ObjectMapper() - val personSøknadsbarnInnhold = - mapper.valueToTree( - mapOf( - "ident" to "11111111111", - "navn" to "Søknadsbarn", - "fødselsdato" to fødselsdato, - ), - ) - val bostatusInnhold = - mapper.valueToTree( - mapOf( - "periode" to - mapOf( - "fom" to periodeFom, - "til" to periodeTil, - ), - "bostatus" to Bostatuskode.MED_FORELDER.name, - "manueltRegistrert" to false, - ), - ) - val inntektInnhold = - mapper.valueToTree( - mapOf( - "periode" to - mapOf( - "fom" to periodeFom, - "til" to periodeTil, - ), - "inntektsrapportering" to Inntektsrapportering.AINNTEKT.name, - "gjelderBarn" to null, - "beløp" to beløp, - "manueltRegistrert" to false, - "valgt" to true, - ), - ) - val sivilstandInnhold = - mapper.valueToTree( - mapOf( - "periode" to - mapOf( - "fom" to periodeFom, - "til" to periodeTil, - ), - "sivilstand" to Sivilstandskode.GIFT_SAMBOER.name, - ), - ) - - val beregningsperiodeFom = YearMonth.parse(periodeFom) - val beregningsperiodeTil = YearMonth.parse(periodeTil) - val grunnlagListe = mutableListOf() - - grunnlagListe.add( - Grunnlag( - referanse = "Person_Søknadsbarn", - type = Grunnlagstype.PERSON, - grunnlagsreferanseListe = emptyList(), - innhold = personSøknadsbarnInnhold, - ), - ) - grunnlagListe.add( - Grunnlag( - referanse = "Bostatus_20170101", - type = Grunnlagstype.BOSTATUS_PERIODE, - grunnlagsreferanseListe = listOf("Person_Søknadsbarn"), - innhold = bostatusInnhold, - ), - ) - grunnlagListe.add( - Grunnlag( - referanse = "BeregningInntektRapportering_Ainntekt_20170101", - type = Grunnlagstype.BEREGNING_INNTEKT_RAPPORTERING_PERIODE, - grunnlagsreferanseListe = emptyList(), - innhold = inntektInnhold, - ), - ) - grunnlagListe.add( - Grunnlag( - referanse = "Sivilstand_20170101", - type = Grunnlagstype.SIVILSTAND_PERIODE, - grunnlagsreferanseListe = emptyList(), - innhold = sivilstandInnhold, - ), - ) - - return BeregnGrunnlag( - periode = ÅrMånedsperiode(fom = beregningsperiodeFom, til = beregningsperiodeTil), - søknadsbarnReferanse = "Person_Søknadsbarn", - grunnlagListe = grunnlagListe, - ) - } - - // Bygger opp BeregnForskuddResultatCore - fun dummyForskuddResultatCore(): BeregnetForskuddResultatCore { - val beregnetForskuddPeriodeListe = mutableListOf() - beregnetForskuddPeriodeListe.add( - ResultatPeriodeCore( - periode = PeriodeCore(datoFom = LocalDate.parse("2017-01-01"), datoTil = LocalDate.parse("2019-01-01")), - resultat = - ResultatBeregningCore( - belop = BigDecimal.valueOf(100), - kode = ResultatkodeForskudd.FORHØYET_FORSKUDD_100_PROSENT.name, - regel = "REGEL 1", - ), - grunnlagsreferanseListe = - listOf( - INNTEKT_REFERANSE_1, - SIVILSTAND_REFERANSE_ENSLIG, - BARN_REFERANSE_1, - SOKNADBARN_REFERANSE, - BOSTATUS_REFERANSE_MED_FORELDRE_1, - ), - ), - ) - - return BeregnetForskuddResultatCore( - beregnetForskuddPeriodeListe = beregnetForskuddPeriodeListe, - sjablonListe = emptyList(), - avvikListe = emptyList(), - ) - } - - // Bygger opp BeregnForskuddResultatCore med avvik - fun dummyForskuddResultatCoreMedAvvik(): BeregnetForskuddResultatCore { - val avvikListe = mutableListOf() - avvikListe.add(AvvikCore(avvikTekst = "beregnDatoFra kan ikke være null", avvikType = "NULL_VERDI_I_DATO")) - avvikListe.add( - AvvikCore( - avvikTekst = - "periodeDatoTil må være etter periodeDatoFra i bidragMottakInntektPeriodeListe: periodeDatoFra=2018-04-01, " + - "periodeDatoTil=2018-03-01", - avvikType = "DATO_FRA_ETTER_DATO_TIL", - ), - ) - - return BeregnetForskuddResultatCore(beregnetForskuddPeriodeListe = emptyList(), sjablonListe = emptyList(), avvikListe = avvikListe) - } - - // Bygger opp BeregnForskuddResultat - fun dummyForskuddResultat(): BeregnetForskuddResultat { - val beregnetForskuddPeriodeListe = mutableListOf() - beregnetForskuddPeriodeListe.add( - ResultatPeriode( - periode = ÅrMånedsperiode(fom = LocalDate.parse("2017-01-01"), til = LocalDate.parse("2019-01-01")), - resultat = - ResultatBeregning( - belop = BigDecimal.valueOf(100), - kode = ResultatkodeForskudd.FORHØYET_FORSKUDD_100_PROSENT, - regel = "REGEL 1", - ), - grunnlagsreferanseListe = - listOf( - INNTEKT_REFERANSE_1, - SIVILSTAND_REFERANSE_ENSLIG, - BARN_REFERANSE_1, - SOKNADBARN_REFERANSE, - BOSTATUS_REFERANSE_MED_FORELDRE_1, - ), - ), - ) - - return BeregnetForskuddResultat(beregnetForskuddPeriodeListe = beregnetForskuddPeriodeListe, grunnlagListe = emptyList()) - } - - // Bygger opp liste av sjablonverdier - fun dummySjablonSjablontallListe(): List { - val sjablonSjablontallListe = mutableListOf() - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0005", - datoFom = LocalDate.parse("2015-07-01"), - datoTom = LocalDate.parse("2016-06-30"), - verdi = BigDecimal.valueOf(1490), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0005", - datoFom = LocalDate.parse("2016-07-01"), - datoTom = LocalDate.parse("2017-06-30"), - verdi = BigDecimal.valueOf(1530), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0005", - datoFom = LocalDate.parse("2017-07-01"), - datoTom = LocalDate.parse("2018-06-30"), - verdi = BigDecimal.valueOf(1570), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0005", - datoFom = LocalDate.parse("2018-07-01"), - datoTom = LocalDate.parse("2019-06-30"), - verdi = BigDecimal.valueOf(1600), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0005", - datoFom = LocalDate.parse("2019-07-01"), - datoTom = LocalDate.parse("2020-06-30"), - verdi = BigDecimal.valueOf(1640), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0005", - datoFom = LocalDate.parse("2020-07-01"), - datoTom = LocalDate.parse("9999-12-31"), - verdi = BigDecimal.valueOf(1670), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0013", - datoFom = LocalDate.parse("2003-01-01"), - datoTom = LocalDate.parse("9999-12-31"), - verdi = BigDecimal.valueOf(320), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0033", - datoFom = LocalDate.parse("2015-07-01"), - datoTom = LocalDate.parse("2016-06-30"), - verdi = BigDecimal.valueOf(241600), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0033", - datoFom = LocalDate.parse("2016-07-01"), - datoTom = LocalDate.parse("2017-06-30"), - verdi = BigDecimal.valueOf(264200), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0033", - datoFom = LocalDate.parse("2017-07-01"), - datoTom = LocalDate.parse("2018-06-30"), - verdi = BigDecimal.valueOf(271000), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0033", - datoFom = LocalDate.parse("2018-07-01"), - datoTom = LocalDate.parse("2019-06-30"), - verdi = BigDecimal.valueOf(270200), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0033", - datoFom = LocalDate.parse("2019-07-01"), - datoTom = LocalDate.parse("2020-06-30"), - verdi = BigDecimal.valueOf(277600), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0033", - datoFom = LocalDate.parse("2020-07-01"), - datoTom = LocalDate.parse("9999-12-31"), - verdi = BigDecimal.valueOf(297500), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0034", - datoFom = LocalDate.parse("2015-07-01"), - datoTom = LocalDate.parse("2016-06-30"), - verdi = BigDecimal.valueOf(370200), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0034", - datoFom = LocalDate.parse("2016-07-01"), - datoTom = LocalDate.parse("2017-06-30"), - verdi = BigDecimal.valueOf(399100), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0034", - datoFom = LocalDate.parse("2017-07-01"), - datoTom = LocalDate.parse("2018-06-30"), - verdi = BigDecimal.valueOf(408200), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0034", - datoFom = LocalDate.parse("2018-07-01"), - datoTom = LocalDate.parse("2019-06-30"), - verdi = BigDecimal.valueOf(419700), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0034", - datoFom = LocalDate.parse("2019-07-01"), - datoTom = LocalDate.parse("2020-06-30"), - verdi = BigDecimal.valueOf(430000), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0034", - datoFom = LocalDate.parse("2020-07-01"), - datoTom = LocalDate.parse("9999-12-31"), - verdi = BigDecimal.valueOf(468500), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0035", - datoFom = LocalDate.parse("2015-07-01"), - datoTom = LocalDate.parse("2016-06-30"), - verdi = BigDecimal.valueOf(314800), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0035", - datoFom = LocalDate.parse("2016-07-01"), - datoTom = LocalDate.parse("2017-06-30"), - verdi = BigDecimal.valueOf(328700), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0035", - datoFom = LocalDate.parse("2017-07-01"), - datoTom = LocalDate.parse("2018-06-30"), - verdi = BigDecimal.valueOf(335900), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0035", - datoFom = LocalDate.parse("2018-07-01"), - datoTom = LocalDate.parse("2019-06-30"), - verdi = BigDecimal.valueOf(336500), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0035", - datoFom = LocalDate.parse("2019-07-01"), - datoTom = LocalDate.parse("2020-06-30"), - verdi = BigDecimal.valueOf(344900), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0035", - datoFom = LocalDate.parse("2020-07-01"), - datoTom = LocalDate.parse("9999-12-31"), - verdi = BigDecimal.valueOf(360800), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0036", - datoFom = LocalDate.parse("2015-07-01"), - datoTom = LocalDate.parse("2016-06-30"), - verdi = BigDecimal.valueOf(58400), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0036", - datoFom = LocalDate.parse("2016-07-01"), - datoTom = LocalDate.parse("2017-06-30"), - verdi = BigDecimal.valueOf(60200), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0036", - datoFom = LocalDate.parse("2017-07-01"), - datoTom = LocalDate.parse("2018-06-30"), - verdi = BigDecimal.valueOf(61100), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0036", - datoFom = LocalDate.parse("2018-07-01"), - datoTom = LocalDate.parse("2019-06-30"), - verdi = BigDecimal.valueOf(61700), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0036", - datoFom = LocalDate.parse("2019-07-01"), - datoTom = LocalDate.parse("2020-06-30"), - verdi = BigDecimal.valueOf(62700), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0036", - datoFom = LocalDate.parse("2020-07-01"), - datoTom = LocalDate.parse("9999-12-31"), - verdi = BigDecimal.valueOf(69100), - ), - ) - - // Ikke i bruk for forskudd - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0028", - datoFom = LocalDate.parse("2015-07-01"), - datoTom = LocalDate.parse("2016-06-30"), - verdi = BigDecimal.valueOf(74250), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0028", - datoFom = LocalDate.parse("2016-07-01"), - datoTom = LocalDate.parse("2017-06-30"), - verdi = BigDecimal.valueOf(76250), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0028", - datoFom = LocalDate.parse("2017-07-01"), - datoTom = LocalDate.parse("2018-06-30"), - verdi = BigDecimal.valueOf(78300), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0028", - datoFom = LocalDate.parse("2018-07-01"), - datoTom = LocalDate.parse("2019-06-30"), - verdi = BigDecimal.valueOf(54750), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0028", - datoFom = LocalDate.parse("2019-07-01"), - datoTom = LocalDate.parse("2020-06-30"), - verdi = BigDecimal.valueOf(56550), - ), - ) - sjablonSjablontallListe.add( - Sjablontall( - typeSjablon = "0028", - datoFom = LocalDate.parse("2020-07-01"), - datoTom = LocalDate.parse("9999-12-31"), - verdi = BigDecimal.valueOf(51300), - ), - ) - - return sjablonSjablontallListe - } - - fun printJson(json: T) { - val objectMapper = ObjectMapper() - objectMapper.registerKotlinModule() - objectMapper.registerModule(JavaTimeModule()) - objectMapper.dateFormat = SimpleDateFormat("yyyy-MM-dd") - - println(objectMapper.writeValueAsString(json)) - } -} diff --git a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/SjablonConsumerTest.kt b/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/SjablonConsumerTest.kt deleted file mode 100644 index 7b5f1d5..0000000 --- a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/SjablonConsumerTest.kt +++ /dev/null @@ -1,71 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest.consumer - -import no.nav.bidrag.beregn.forskudd.rest.TestUtil -import no.nav.bidrag.beregn.forskudd.rest.exception.SjablonConsumerException -import org.assertj.core.api.Assertions.assertThat -import org.assertj.core.api.Assertions.assertThatExceptionOfType -import org.junit.jupiter.api.Assertions.assertAll -import org.junit.jupiter.api.DisplayName -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.mockito.ArgumentMatchers.any -import org.mockito.ArgumentMatchers.anyString -import org.mockito.ArgumentMatchers.eq -import org.mockito.InjectMocks -import org.mockito.Mock -import org.mockito.Mockito.`when` -import org.mockito.junit.jupiter.MockitoExtension -import org.springframework.core.ParameterizedTypeReference -import org.springframework.http.HttpMethod -import org.springframework.http.HttpStatus -import org.springframework.http.ResponseEntity -import org.springframework.web.client.HttpClientErrorException -import org.springframework.web.client.RestTemplate - -@ExtendWith(MockitoExtension::class) -@SuppressWarnings("unchecked") -@DisplayName("SjablonConsumerTest") -internal class SjablonConsumerTest { - @InjectMocks - private lateinit var sjablonConsumer: SjablonConsumer - - @Mock - private lateinit var restTemplateMock: RestTemplate - - @Test - @DisplayName("Skal hente liste av Sjablontall når respons fra tjenesten er OK") - fun skalHenteListeAvSjablontallNaarResponsFraTjenestenErOk() { - `when`( - restTemplateMock.exchange( - anyString(), - eq(HttpMethod.GET), - eq(null), - any>>(), - ), - ) - .thenReturn(ResponseEntity(TestUtil.dummySjablonSjablontallListe(), HttpStatus.OK)) - - val sjablonResponse = sjablonConsumer.hentSjablonSjablontall() - - assertAll( - { assertThat(sjablonResponse).isNotNull() }, - { assertThat(sjablonResponse.responseEntity.statusCode).isNotNull() }, - { assertThat(sjablonResponse.responseEntity.statusCode).isEqualTo(HttpStatus.OK) }, - { assertThat(sjablonResponse.responseEntity.body).isNotNull() }, - { assertThat(sjablonResponse.responseEntity.body?.size).isEqualTo(TestUtil.dummySjablonSjablontallListe().size) }, - { - assertThat( - sjablonResponse.responseEntity.body?.get(0)?.typeSjablon, - ).isEqualTo(TestUtil.dummySjablonSjablontallListe()[0].typeSjablon) - }, - ) - } - - @Test - @DisplayName("Skal kaste SjablonConsumerException når respons fra tjenesten ikke er OK for Sjablontall") - fun skalKasteRestClientExceptionNaarResponsFraTjenestenIkkeErOkForSjablontall() { - `when`(restTemplateMock.exchange(anyString(), eq(HttpMethod.GET), eq(null), any>>())) - .thenThrow(HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR)) - assertThatExceptionOfType(SjablonConsumerException::class.java).isThrownBy { sjablonConsumer.hentSjablonSjablontall() } - } -} diff --git a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/wiremockstub/SjablonApiStub.kt b/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/wiremockstub/SjablonApiStub.kt deleted file mode 100644 index c5538b7..0000000 --- a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/consumer/wiremockstub/SjablonApiStub.kt +++ /dev/null @@ -1,90 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest.consumer.wiremockstub - -import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder -import com.github.tomakehurst.wiremock.client.WireMock -import com.github.tomakehurst.wiremock.client.WireMock.get -import com.github.tomakehurst.wiremock.client.WireMock.stubFor -import com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo -import org.springframework.cloud.contract.spec.internal.HttpStatus -import org.springframework.http.HttpHeaders -import org.springframework.stereotype.Component - -@Component -class SjablonApiStub { - fun settOppSjablonStub() { - settOppSjablonSjablontallStub() - } - - private fun aClosedJsonResponse(): ResponseDefinitionBuilder { - return WireMock.aResponse() - .withHeader(HttpHeaders.CONNECTION, "close") - .withHeader(HttpHeaders.CONTENT_TYPE, "application/json") - } - - private fun settOppSjablonSjablontallStub() { - val url = "/bidrag-sjablon/sjablontall/all" - val sjablonliste = - listOf( - " [ " + - "{\"typeSjablon\": \"0005\"," + - "\"datoFom\": \"2020-07-01\"," + - "\"datoTom\": \"9999-12-31\"," + - "\"verdi\": 1670," + - "\"brukerid\": \"A100364 \"," + - "\"tidspktEndret\": \"2020-05-17T14:13:16.999\"}," + - - "{\"typeSjablon\": \"0013\"," + - "\"datoFom\": \"2003-01-01\"," + - "\"datoTom\": \"9999-12-31\"," + - "\"verdi\": 320," + - "\"brukerid\": \"A100364 \"," + - "\"tidspktEndret\": \"2020-05-17T14:13:16.999\"}," + - - "{\"typeSjablon\": \"0034\"," + - "\"datoFom\": \"2020-07-01\"," + - "\"datoTom\": \"9999-12-31\"," + - "\"verdi\": 468500," + - "\"brukerid\": \"A100364 \"," + - "\"tidspktEndret\": \"2020-05-17T14:13:16.999\"}," + - - "{\"typeSjablon\": \"0033\"," + - "\"datoFom\": \"2020-07-01\"," + - "\"datoTom\": \"9999-12-31\"," + - "\"verdi\": 297500," + - "\"brukerid\": \"A100364 \"," + - "\"tidspktEndret\": \"2020-05-17T14:13:16.999\"}," + - - "{\"typeSjablon\": \"0035\"," + - "\"datoFom\": \"2020-07-01\"," + - "\"datoTom\": \"9999-12-31\"," + - "\"verdi\": 360800," + - "\"brukerid\": \"A100364 \"," + - "\"tidspktEndret\": \"2020-05-17T14:13:16.999\"}," + - - "{\"typeSjablon\": \"0036\"," + - "\"datoFom\": \"2020-07-01\"," + - "\"datoTom\": \"9999-12-31\"," + - "\"verdi\": 69100," + - "\"brukerid\": \"A100364 \"," + - "\"tidspktEndret\": \"2020-05-17T14:13:16.999\"}," + - - "{\"typeSjablon\": \"0038\"," + - "\"datoFom\": \"2020-07-01\"," + - "\"datoTom\": \"9999-12-31\"," + - "\"verdi\": 1250," + - "\"brukerid\": \"A100364 \"," + - "\"tidspktEndret\": \"2020-05-17T14:15:49.233\"}]", - ) - - stubFor( - get(urlEqualTo(url)) - .willReturn( - aClosedJsonResponse() - .withStatus(HttpStatus.OK) - .withBody( - sjablonliste.joinToString(), - ), - ), - ) - } -} diff --git a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/controller/BeregnForskuddControllerIntegrationTest.kt b/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/controller/BeregnForskuddControllerIntegrationTest.kt deleted file mode 100644 index b9552c9..0000000 --- a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/controller/BeregnForskuddControllerIntegrationTest.kt +++ /dev/null @@ -1,454 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest.controller - -import no.nav.bidrag.beregn.forskudd.rest.BidragBeregnForskuddTest -import no.nav.bidrag.beregn.forskudd.rest.BidragBeregnForskuddTest.Companion.TEST_PROFILE -import no.nav.bidrag.beregn.forskudd.rest.TestUtil -import no.nav.bidrag.beregn.forskudd.rest.consumer.wiremockstub.SjablonApiStub -import no.nav.bidrag.commons.web.test.HttpHeaderTestRestTemplate -import no.nav.bidrag.domene.enums.beregning.ResultatkodeForskudd -import no.nav.bidrag.transport.behandling.beregning.forskudd.BeregnetForskuddResultat -import no.nav.security.token.support.spring.test.EnableMockOAuth2Server -import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.Assertions.assertAll -import org.junit.jupiter.api.Assertions.fail -import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.DisplayName -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.function.Executable -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment -import org.springframework.boot.test.web.server.LocalServerPort -import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock -import org.springframework.http.HttpEntity -import org.springframework.http.HttpHeaders -import org.springframework.http.HttpMethod -import org.springframework.http.HttpStatus.OK -import org.springframework.http.MediaType -import org.springframework.test.context.ActiveProfiles -import java.nio.file.Files -import java.nio.file.Paths - -@SpringBootTest(classes = [BidragBeregnForskuddTest::class], webEnvironment = WebEnvironment.RANDOM_PORT) -@AutoConfigureWireMock(port = 8096) -@EnableMockOAuth2Server -@ActiveProfiles(TEST_PROFILE) -internal class BeregnForskuddControllerIntegrationTest { - @Autowired - private lateinit var httpHeaderTestRestTemplate: HttpHeaderTestRestTemplate - - @Autowired - private lateinit var sjablonApiStub: SjablonApiStub - - @LocalServerPort - private val port = 0 - - private lateinit var url: String - private lateinit var filnavn: String - - private var forventetForskuddBelop = 0 - private lateinit var forventetForskuddResultatkode: ResultatkodeForskudd - private lateinit var forventetForskuddRegel: String - - /* - Beskrivelse av regler - - REGEL 1 - Betingelse 1 Søknadsbarn alder er høyere enn eller lik 18 år - Resultatkode AVSLAG - - REGEL 2 - Betingelse 1 Søknadsbarn alder er høyere enn eller lik 11 år - Betingelse 2 Søknadsbarn bostedsstatus er BOR_IKKE_MED_FORELDRE - Resultatkode FORHOYET_FORSKUDD_11_AAR_125_PROSENT - - REGEL 3 - Betingelse 1 Søknadsbarn alder er lavere enn 11 år - Betingelse 2 Søknadsbarn bostedsstatus er BOR_IKKE_MED_FORELDRE - Resultatkode FORHOYET_FORSKUDD_100_PROSENT - - REGEL 4 - Betingelse 1 Bidragsmottakers inntekt er høyere enn 0005 x 0013 - Resultatkode AVSLAG - - REGEL 5 - Betingelse 1 Bidragsmottakers inntekt er lavere enn eller lik 0033 - Betingelse 2 Søknadsbarn alder er høyere enn eller lik 11 år - Resultatkode FORHOYET_FORSKUDD_11_AAR_125_PROSENT - - REGEL 6 - Betingelse 1 Bidragsmottakers inntekt er lavere enn eller lik 0033 - Betingelse 2 Søknadsbarn alder er lavere enn 11 år - Resultatkode FORHOYET_FORSKUDD_100_PROSENT - - REGEL 7 - Betingelse 1 Bidragsmottakers inntekt er lavere enn eller lik 0034 - Betingelse 2 Bidragsmottakers sivilstand er ENSLIG - Betingelse 3 Antall barn i husstand er 1 - Resultatkode ORDINAERT_FORSKUDD_75_PROSENT - - REGEL 8 - Betingelse 1 Bidragsmottakers inntekt er høyere enn 0034 - Betingelse 2 Bidragsmottakers sivilstand er ENSLIG - Betingelse 3 Antall barn i husstand er 1 - Resultatkode REDUSERT_FORSKUDD_50_PROSENT - - REGEL 9 - Betingelse 1 Bidragsmottakers inntekt er lavere enn eller lik 0034 + (0036 x antall barn utover ett) - Betingelse 2 Bidragsmottakers sivilstand er ENSLIG - Betingelse 3 Antall barn i husstand er mer enn 1 - Resultatkode ORDINAERT_FORSKUDD_75_PROSENT - - REGEL 10 - Betingelse 1 Bidragsmottakers inntekt er høyere enn 0034 + (0036 x antall barn utover ett) - Betingelse 2 Bidragsmottakers sivilstand er ENSLIG - Betingelse 3 Antall barn i husstand er mer enn 1 - Resultatkode REDUSERT_FORSKUDD_50_PROSENT - - REGEL 11 - Betingelse 1 Bidragsmottakers inntekt er lavere enn eller lik 0035 - Betingelse 2 Bidragsmottakers sivilstand er GIFT - Betingelse 3 Antall barn i husstand er 1 - Resultatkode ORDINAERT_FORSKUDD_75_PROSENT - - REGEL 12 - Betingelse 1 Bidragsmottakers inntekt er høyere enn 0035 - Betingelse 2 Bidragsmottakers sivilstand er GIFT - Betingelse 3 Antall barn i husstand er 1 - Resultatkode REDUSERT_FORSKUDD_50_PROSENT - - REGEL 13 - Betingelse 1 Bidragsmottakers inntekt er lavere enn eller lik 0035 + (0036 x antall barn utover ett) - Betingelse 2 Bidragsmottakers sivilstand er GIFT - Betingelse 3 Antall barn i husstand er mer enn 1 - Resultatkode ORDINAERT_FORSKUDD_75_PROSENT - - REGEL 14 - Betingelse 1 Bidragsmottakers inntekt er høyere enn 0035 + (0036 x antall barn utover ett) - Betingelse 2 Bidragsmottakers sivilstand er GIFT - Betingelse 3 Antall barn i husstand er mer enn 1 - Resultatkode REDUSERT_FORSKUDD_50_PROSENT - */ - - @BeforeEach - fun init() { - // Sett opp wiremock mot sjablon-tjenestene - sjablonApiStub.settOppSjablonStub() - - // Bygg opp url - url = "http://localhost:$port/beregn/forskudd" - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 1") - fun skalKalleCoreOgReturnereEtResultat_Eksempel01() { - // Forhøyet forskudd ved 11 år: SB alder > 11 år; BM inntekt 290000; BM antall barn egen husstand 1; BM sivilstatus gift - filnavn = "src/test/resources/testfiler/forskudd_eksempel1.json" - forventetForskuddBelop = 2080 - forventetForskuddResultatkode = ResultatkodeForskudd.FORHØYET_FORSKUDD_11_ÅR_125_PROSENT - forventetForskuddRegel = "REGEL 5" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 2") - fun skalKalleCoreOgReturnereEtResultat_Eksempel02() { - // Ordinært forskudd: SB alder > 11 år; BM inntekt 300000; BM antall barn egen husstand 1; BM sivilstatus gift - filnavn = "src/test/resources/testfiler/forskudd_eksempel2.json" - forventetForskuddBelop = 1250 - forventetForskuddResultatkode = ResultatkodeForskudd.ORDINÆRT_FORSKUDD_75_PROSENT - forventetForskuddRegel = "REGEL 11" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 3") - fun skalKalleCoreOgReturnereEtResultat_Eksempel03() { - // Redusert forskudd: SB alder > 11 år; BM inntekt 370000; BM antall barn egen husstand 1; BM sivilstatus gift - filnavn = "src/test/resources/testfiler/forskudd_eksempel3.json" - forventetForskuddBelop = 830 - forventetForskuddResultatkode = ResultatkodeForskudd.REDUSERT_FORSKUDD_50_PROSENT - forventetForskuddRegel = "REGEL 12" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 4") - fun skalKalleCoreOgReturnereEtResultat_Eksempel04() { - // Ordinært forskudd: SB alder > 11 år; BM inntekt 370000; BM antall barn egen husstand 2; BM sivilstatus gift - filnavn = "src/test/resources/testfiler/forskudd_eksempel4.json" - forventetForskuddBelop = 1250 - forventetForskuddResultatkode = ResultatkodeForskudd.ORDINÆRT_FORSKUDD_75_PROSENT - forventetForskuddRegel = "REGEL 13" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 5") - fun skalKalleCoreOgReturnereEtResultat_Eksempel05() { - // Redusert forskudd: SB alder > 11 år; BM inntekt 460000; BM antall barn egen husstand 1; BM sivilstatus gift - filnavn = "src/test/resources/testfiler/forskudd_eksempel5.json" - forventetForskuddBelop = 830 - forventetForskuddResultatkode = ResultatkodeForskudd.REDUSERT_FORSKUDD_50_PROSENT - forventetForskuddRegel = "REGEL 12" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 6") - fun skalKalleCoreOgReturnereEtResultat_Eksempel06() { - // Ordinært forskudd: SB alder > 11 år; BM inntekt 460000; BM antall barn egen husstand 1; BM sivilstatus enslig - filnavn = "src/test/resources/testfiler/forskudd_eksempel6.json" - forventetForskuddBelop = 1250 - forventetForskuddResultatkode = ResultatkodeForskudd.ORDINÆRT_FORSKUDD_75_PROSENT - forventetForskuddRegel = "REGEL 7" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 7") - fun skalKalleCoreOgReturnereEtResultat_Eksempel07() { - // Ordinært forskudd: SB alder > 11 år; BM inntekt 460000; BM antall barn egen husstand 3; BM sivilstatus gift - filnavn = "src/test/resources/testfiler/forskudd_eksempel7.json" - forventetForskuddBelop = 1250 - forventetForskuddResultatkode = ResultatkodeForskudd.ORDINÆRT_FORSKUDD_75_PROSENT - forventetForskuddRegel = "REGEL 13" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 8") - fun skalKalleCoreOgReturnereEtResultat_Eksempel08() { - // Ordinært forskudd: SB alder > 11 år; BM inntekt 460000; BM antall barn egen husstand 3; BM sivilstatus enslig - filnavn = "src/test/resources/testfiler/forskudd_eksempel8.json" - forventetForskuddBelop = 1250 - forventetForskuddResultatkode = ResultatkodeForskudd.ORDINÆRT_FORSKUDD_75_PROSENT - forventetForskuddRegel = "REGEL 9" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 9") - fun skalKalleCoreOgReturnereEtResultat_Eksempel09() { - // Redusert forskudd: SB alder > 11 år; BM inntekt 530000; BM antall barn egen husstand 1; BM sivilstatus gift - filnavn = "src/test/resources/testfiler/forskudd_eksempel9.json" - forventetForskuddBelop = 830 - forventetForskuddResultatkode = ResultatkodeForskudd.REDUSERT_FORSKUDD_50_PROSENT - forventetForskuddRegel = "REGEL 12" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 10") - fun skalKalleCoreOgReturnereEtResultat_Eksempel10() { - // Avslag: SB alder > 11 år; BM inntekt 540000; BM antall barn egen husstand 1; BM sivilstatus enslig - filnavn = "src/test/resources/testfiler/forskudd_eksempel10.json" - forventetForskuddBelop = 0 - forventetForskuddResultatkode = ResultatkodeForskudd.AVSLAG - forventetForskuddRegel = "REGEL 4" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 11") - fun skalKalleCoreOgReturnereEtResultat_Eksempel11() { - // Avslag: SB alder > 11 år; BM inntekt 540000; BM antall barn egen husstand 1; BM sivilstatus gift - filnavn = "src/test/resources/testfiler/forskudd_eksempel11.json" - forventetForskuddBelop = 0 - forventetForskuddResultatkode = ResultatkodeForskudd.AVSLAG - forventetForskuddRegel = "REGEL 4" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 12") - fun skalKalleCoreOgReturnereEtResultat_Eksempel12() { - // Forhøyet forskudd: SB alder < 11 år; BM inntekt 290000; BM antall barn egen husstand 1; BM sivilstatus enslig - filnavn = "src/test/resources/testfiler/forskudd_eksempel12.json" - forventetForskuddBelop = 1670 - forventetForskuddResultatkode = ResultatkodeForskudd.FORHØYET_FORSKUDD_100_PROSENT - forventetForskuddRegel = "REGEL 6" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 13") - fun skalKalleCoreOgReturnereEtResultat_Eksempel13() { - // Ordinært forskudd: SB alder < 11 år; BM inntekt 290000+13000; BM antall barn egen husstand 1; BM sivilstatus enslig - filnavn = "src/test/resources/testfiler/forskudd_eksempel13.json" - forventetForskuddBelop = 1250 - forventetForskuddResultatkode = ResultatkodeForskudd.ORDINÆRT_FORSKUDD_75_PROSENT - forventetForskuddRegel = "REGEL 7" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 14") - fun skalKalleCoreOgReturnereEtResultat_Eksempel14() { - // Redusert forskudd: SB alder < 11 år; BM inntekt 361000; BM antall barn egen husstand 1; BM sivilstatus gift - filnavn = "src/test/resources/testfiler/forskudd_eksempel14.json" - forventetForskuddBelop = 830 - forventetForskuddResultatkode = ResultatkodeForskudd.REDUSERT_FORSKUDD_50_PROSENT - forventetForskuddRegel = "REGEL 12" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 15") - fun skalKalleCoreOgReturnereEtResultat_Eksempel15() { - // Ordinært forskudd: SB alder < 11 år; BM inntekt 361000; BM antall barn egen husstand 1; BM sivilstatus enslig - filnavn = "src/test/resources/testfiler/forskudd_eksempel15.json" - forventetForskuddBelop = 1250 - forventetForskuddResultatkode = ResultatkodeForskudd.ORDINÆRT_FORSKUDD_75_PROSENT - forventetForskuddRegel = "REGEL 7" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 16") - fun skalKalleCoreOgReturnereEtResultat_Eksempel16() { - // Ordinært forskudd: SB alder < 11 år; BM inntekt 468000; BM antall barn egen husstand 1; BM sivilstatus enslig - filnavn = "src/test/resources/testfiler/forskudd_eksempel16.json" - forventetForskuddBelop = 1250 - forventetForskuddResultatkode = ResultatkodeForskudd.ORDINÆRT_FORSKUDD_75_PROSENT - forventetForskuddRegel = "REGEL 7" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 17") - fun skalKalleCoreOgReturnereEtResultat_Eksempel17() { - // Redusert forskudd: SB alder < 11 år; BM inntekt 468000; BM antall barn egen husstand 1; BM sivilstatus gift - filnavn = "src/test/resources/testfiler/forskudd_eksempel17.json" - forventetForskuddBelop = 830 - forventetForskuddResultatkode = ResultatkodeForskudd.REDUSERT_FORSKUDD_50_PROSENT - forventetForskuddRegel = "REGEL 12" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 18") - fun skalKalleCoreOgReturnereEtResultat_Eksempel18() { - // Ordinært forskudd: SB alder < 11 år; BM inntekt 429000; BM antall barn egen husstand 2; BM sivilstatus enslig - filnavn = "src/test/resources/testfiler/forskudd_eksempel18.json" - forventetForskuddBelop = 1250 - forventetForskuddResultatkode = ResultatkodeForskudd.ORDINÆRT_FORSKUDD_75_PROSENT - forventetForskuddRegel = "REGEL 9" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 19") - fun skalKalleCoreOgReturnereEtResultat_Eksempel19() { - // Ordinært forskudd: SB alder < 11 år; BM inntekt 429000; BM antall barn egen husstand 2; BM sivilstatus gift - filnavn = "src/test/resources/testfiler/forskudd_eksempel19.json" - forventetForskuddBelop = 1250 - forventetForskuddResultatkode = ResultatkodeForskudd.ORDINÆRT_FORSKUDD_75_PROSENT - forventetForskuddRegel = "REGEL 13" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 20") - fun skalKalleCoreOgReturnereEtResultat_Eksempel20() { - // Redusert forskudd: SB alder < 11 år; BM inntekt 430000; BM antall barn egen husstand 2; BM sivilstatus gift - filnavn = "src/test/resources/testfiler/forskudd_eksempel20.json" - forventetForskuddBelop = 830 - forventetForskuddResultatkode = ResultatkodeForskudd.REDUSERT_FORSKUDD_50_PROSENT - forventetForskuddRegel = "REGEL 14" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 22") - fun skalKalleCoreOgReturnereEtResultat_Eksempel22() { - // Avslag: SB alder < 11 år; BM inntekt 489000+60000; BM antall barn egen husstand 2; BM sivilstatus gift - filnavn = "src/test/resources/testfiler/forskudd_eksempel22.json" - forventetForskuddBelop = 0 - forventetForskuddResultatkode = ResultatkodeForskudd.AVSLAG - forventetForskuddRegel = "REGEL 4" - utfoerBeregningerOgEvaluerResultat() - } - - @Test - @DisplayName("skal kalle core og returnere et resultat - eksempel 23") - fun skalKalleCoreOgReturnereEtResultat_Eksempel23() { - // Redusert forskudd: SB alder < 11 år; BM inntekt 489000; BM antall barn egen husstand 2; BM sivilstatus gift - filnavn = "src/test/resources/testfiler/forskudd_eksempel23.json" - forventetForskuddBelop = 830 - forventetForskuddResultatkode = ResultatkodeForskudd.REDUSERT_FORSKUDD_50_PROSENT - forventetForskuddRegel = "REGEL 14" - utfoerBeregningerOgEvaluerResultat() - } - - private fun utfoerBeregningerOgEvaluerResultat() { - val request: HttpEntity = lesFilOgByggRequest(filnavn) - - // Kall rest-API for forskudd - val responseEntity = httpHeaderTestRestTemplate.exchange(url, HttpMethod.POST, request, BeregnetForskuddResultat::class.java) - val forskuddResultat = responseEntity.body - - TestUtil.printJson(forskuddResultat) - - assertAll( - Executable { assertThat(responseEntity.statusCode).isEqualTo(OK) }, - Executable { assertThat(forskuddResultat).isNotNull() }, - Executable { assertThat(forskuddResultat?.beregnetForskuddPeriodeListe).isNotNull() }, - Executable { assertThat(forskuddResultat?.beregnetForskuddPeriodeListe).hasSize(1) }, - Executable { assertThat(forskuddResultat?.beregnetForskuddPeriodeListe?.get(0)?.resultat).isNotNull() }, - Executable { - assertThat(forskuddResultat?.beregnetForskuddPeriodeListe?.get(0)?.resultat?.belop?.intValueExact()) - .isEqualTo(forventetForskuddBelop) - }, - Executable { - assertThat( - forskuddResultat?.beregnetForskuddPeriodeListe?.get(0)?.resultat?.kode, - ).isEqualTo(forventetForskuddResultatkode) - }, - Executable { - assertThat( - forskuddResultat?.beregnetForskuddPeriodeListe?.get(0)?.resultat?.regel, - ).isEqualTo(forventetForskuddRegel) - }, - Executable { - assertThat(forskuddResultat?.beregnetForskuddPeriodeListe?.get(0)?.grunnlagsreferanseListe?.distinct()).size().isEqualTo( - forskuddResultat?.grunnlagListe?.size, - ) - }, - Executable { - assertThat( - forskuddResultat?.beregnetForskuddPeriodeListe?.get( - 0, - )?.grunnlagsreferanseListe?.count { it.startsWith("Mottatt") }?.toLong(), - ).isEqualTo(request.body?.split("Mottatt".toRegex())?.size?.minus(1)?.toLong()) - }, - Executable { - assertThat( - forskuddResultat?.beregnetForskuddPeriodeListe?.get( - 0, - )?.grunnlagsreferanseListe?.count { it.startsWith("Sjablon") }?.toLong(), - ).isEqualTo(7) - }, - ) - } - - private fun lesFilOgByggRequest(filnavn: String?): HttpEntity { - var json = "" - - // Les inn fil med request-data (json) - try { - json = Files.readString(Paths.get(filnavn!!)) - } catch (e: Exception) { - fail("Klarte ikke å lese fil: $filnavn") - } - - // Lag request - return initHttpEntity(json) - } - - private fun initHttpEntity(body: T): HttpEntity { - val httpHeaders = HttpHeaders() - httpHeaders.contentType = MediaType.APPLICATION_JSON - return HttpEntity(body, httpHeaders) - } -} diff --git a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/controller/BeregnForskuddControllerMockTest.kt b/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/controller/BeregnForskuddControllerMockTest.kt deleted file mode 100644 index 3298c33..0000000 --- a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/controller/BeregnForskuddControllerMockTest.kt +++ /dev/null @@ -1,108 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest.controller - -import no.nav.bidrag.beregn.forskudd.rest.BidragBeregnForskuddTest -import no.nav.bidrag.beregn.forskudd.rest.BidragBeregnForskuddTest.Companion.TEST_PROFILE -import no.nav.bidrag.beregn.forskudd.rest.TestUtil -import no.nav.bidrag.beregn.forskudd.rest.service.BeregnForskuddService -import no.nav.bidrag.commons.web.HttpResponse -import no.nav.bidrag.commons.web.test.HttpHeaderTestRestTemplate -import no.nav.bidrag.domene.enums.beregning.ResultatkodeForskudd -import no.nav.bidrag.transport.behandling.beregning.felles.BeregnGrunnlag -import no.nav.bidrag.transport.behandling.beregning.forskudd.BeregnetForskuddResultat -import no.nav.security.token.support.spring.test.EnableMockOAuth2Server -import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.Assertions.assertAll -import org.junit.jupiter.api.DisplayName -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.mockito.Mockito -import org.mockito.Mockito.`when` -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.context.SpringBootTest -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment -import org.springframework.boot.test.mock.mockito.MockBean -import org.springframework.boot.test.web.server.LocalServerPort -import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock -import org.springframework.http.HttpEntity -import org.springframework.http.HttpHeaders -import org.springframework.http.HttpMethod -import org.springframework.http.HttpStatus -import org.springframework.test.context.ActiveProfiles -import org.springframework.test.context.junit.jupiter.SpringExtension -import java.time.YearMonth - -@SpringBootTest(classes = [BidragBeregnForskuddTest::class], webEnvironment = WebEnvironment.RANDOM_PORT) -@AutoConfigureWireMock(port = 8096) -@ActiveProfiles(TEST_PROFILE) -@EnableMockOAuth2Server -@ExtendWith(SpringExtension::class) -internal class BeregnForskuddControllerMockTest { - @Autowired - private lateinit var httpHeaderTestRestTemplate: HttpHeaderTestRestTemplate - - @LocalServerPort - private val port = 0 - - @MockBean - lateinit var beregnForskuddServiceMock: BeregnForskuddService - - @Test - @DisplayName("Skal returnere forskudd resultat") - fun skalReturnereForskuddResultat() { - `when`(beregnForskuddServiceMock.beregn(any(BeregnGrunnlag::class.java))) - .thenReturn(HttpResponse.from(HttpStatus.OK, TestUtil.dummyForskuddResultat())) - - val url = "http://localhost:$port/beregn/forskudd" - val request = initHttpEntity(TestUtil.byggDummyForskuddGrunnlag()) - val responseEntity = httpHeaderTestRestTemplate.exchange(url, HttpMethod.POST, request, BeregnetForskuddResultat::class.java) - val forskuddResultat = responseEntity.body - assertAll( - { assertThat(responseEntity.statusCode)?.isEqualTo(HttpStatus.OK) }, - { assertThat(forskuddResultat)?.isNotNull() }, - { assertThat(forskuddResultat?.beregnetForskuddPeriodeListe)?.isNotNull() }, - { assertThat(forskuddResultat?.beregnetForskuddPeriodeListe)?.hasSize(1) }, - { - assertThat(forskuddResultat?.beregnetForskuddPeriodeListe?.get(0)?.periode?.fom) - .isEqualTo(YearMonth.parse("2017-01")) - }, - { - assertThat(forskuddResultat?.beregnetForskuddPeriodeListe?.get(0)?.periode?.til) - .isEqualTo(YearMonth.parse("2019-01")) - }, - { - assertThat(forskuddResultat?.beregnetForskuddPeriodeListe?.get(0)?.resultat?.belop?.toInt()) - .isEqualTo(100) - }, - { - assertThat(forskuddResultat?.beregnetForskuddPeriodeListe?.get(0)?.resultat?.kode) - .isEqualTo(ResultatkodeForskudd.FORHØYET_FORSKUDD_100_PROSENT) - }, - { assertThat(forskuddResultat?.beregnetForskuddPeriodeListe?.get(0)?.resultat?.regel).isEqualTo("REGEL 1") }, - ) - } - - @Test - @DisplayName("Skal returnere 500 Internal Server Error når kall til servicen feiler") - fun skalReturnere500InternalServerErrorNaarKallTilServicenFeiler() { - `when`(beregnForskuddServiceMock.beregn(any(BeregnGrunnlag::class.java))) - .thenReturn(HttpResponse.from(HttpStatus.INTERNAL_SERVER_ERROR, BeregnetForskuddResultat())) - - val url = "http://localhost:$port/beregn/forskudd" - val request = initHttpEntity(TestUtil.byggDummyForskuddGrunnlag()) - val responseEntity = httpHeaderTestRestTemplate.exchange(url, HttpMethod.POST, request, BeregnetForskuddResultat::class.java) - val forskuddResultat = responseEntity.body - assertAll( - { assertThat(responseEntity.statusCode).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR) }, - { assertThat(forskuddResultat).isEqualTo(BeregnetForskuddResultat()) }, - ) - } - - private fun initHttpEntity(body: T): HttpEntity { - val httpHeaders = HttpHeaders() - return HttpEntity(body, httpHeaders) - } - - companion object MockitoHelper { - fun any(type: Class): T = Mockito.any(type) - } -} diff --git a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/dto/DtoTest.kt b/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/dto/DtoTest.kt deleted file mode 100644 index 393248e..0000000 --- a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/dto/DtoTest.kt +++ /dev/null @@ -1,56 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest.dto - -import no.nav.bidrag.beregn.forskudd.rest.TestUtil -import no.nav.bidrag.transport.behandling.beregning.felles.valider -import org.assertj.core.api.Assertions -import org.junit.jupiter.api.DisplayName -import org.junit.jupiter.api.Test - -internal class DtoTest { - @Test - @DisplayName("Skal kaste IllegalArgumentException når beregningsperiode til er null") - fun skalKasteIllegalArgumentExceptionNaarBeregningsperiodeTilErNull() { - val grunnlag = TestUtil.byggForskuddGrunnlagUtenBeregningsperiodeTil() - Assertions.assertThatExceptionOfType(IllegalArgumentException::class.java).isThrownBy { grunnlag.valider() } - .withMessage("beregningsperiode til kan ikke være null") - } - - @Test - @DisplayName("Skal kaste IllegalArgumentException når grunnlagListe er null") - fun skalKasteIllegalArgumentExceptionNaarGrunnlagListeErNull() { - val grunnlag = TestUtil.byggForskuddGrunnlagUtenGrunnlagListe() - Assertions.assertThatExceptionOfType(IllegalArgumentException::class.java).isThrownBy { grunnlag.valider() } - .withMessage("grunnlagListe kan ikke være null") - } - - @Test - @DisplayName("Skal kaste IllegalArgumentException når referanse er null") - fun skalKasteIllegalArgumentExceptionNaarReferanseErNull() { - val grunnlag = TestUtil.byggForskuddGrunnlagUtenReferanse() - Assertions.assertThatExceptionOfType(IllegalArgumentException::class.java).isThrownBy { grunnlag.valider() } - .withMessage("referanse kan ikke være null") - } - - @Test - @DisplayName("Skal kaste IllegalArgumentException når type er null") - fun skalKasteIllegalArgumentExceptionNaarTypeErNull() { - val grunnlag = TestUtil.byggForskuddGrunnlagUtenType() - Assertions.assertThatExceptionOfType(IllegalArgumentException::class.java).isThrownBy { grunnlag.valider() } - .withMessage("type kan ikke være null") - } - - @Test - @DisplayName("Skal kaste IllegalArgumentException når innhold er null") - fun skalKasteIllegalArgumentExceptionNaarInnholdErNull() { - val grunnlag = TestUtil.byggForskuddGrunnlagUtenInnhold() - Assertions.assertThatExceptionOfType(IllegalArgumentException::class.java).isThrownBy { grunnlag.valider() } - .withMessage("innhold kan ikke være null") - } - - @Test - @DisplayName("Skal ikke kaste exception") - fun skalIkkeKasteException() { - val grunnlag = TestUtil.byggDummyForskuddGrunnlag() - Assertions.assertThatCode { grunnlag.valider() }.doesNotThrowAnyException() - } -} diff --git a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/BeregnForskuddServiceTest.kt b/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/BeregnForskuddServiceTest.kt deleted file mode 100644 index f0cbe4e..0000000 --- a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/BeregnForskuddServiceTest.kt +++ /dev/null @@ -1,76 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest.service - -import no.nav.bidrag.beregn.forskudd.core.ForskuddCore -import no.nav.bidrag.beregn.forskudd.core.dto.BeregnForskuddGrunnlagCore -import no.nav.bidrag.beregn.forskudd.rest.BidragBeregnForskuddTest -import no.nav.bidrag.beregn.forskudd.rest.TestUtil -import no.nav.bidrag.beregn.forskudd.rest.consumer.SjablonConsumer -import no.nav.bidrag.beregn.forskudd.rest.exception.UgyldigInputException -import no.nav.bidrag.commons.web.HttpResponse.Companion.from -import org.assertj.core.api.Assertions.assertThat -import org.assertj.core.api.Assertions.assertThatExceptionOfType -import org.junit.jupiter.api.Assertions.assertAll -import org.junit.jupiter.api.DisplayName -import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.junit.jupiter.api.function.Executable -import org.mockito.ArgumentCaptor -import org.mockito.Captor -import org.mockito.InjectMocks -import org.mockito.Mock -import org.mockito.Mockito -import org.mockito.Mockito.`when` -import org.mockito.junit.jupiter.MockitoExtension -import org.mockito.kotlin.capture -import org.springframework.http.HttpStatus -import org.springframework.test.context.ActiveProfiles - -@ExtendWith(MockitoExtension::class) -@ActiveProfiles(BidragBeregnForskuddTest.TEST_PROFILE) -internal class BeregnForskuddServiceTest { - @InjectMocks - private lateinit var beregnForskuddService: BeregnForskuddService - - @Mock - private lateinit var sjablonConsumerMock: SjablonConsumer - - @Mock - private lateinit var forskuddCoreMock: ForskuddCore - - @Captor - private lateinit var grunnlagTilCoreCaptor: ArgumentCaptor - - @Test - @DisplayName("Skal beregne forskudd") - fun skalBeregneForskudd() { - `when`(sjablonConsumerMock.hentSjablonSjablontall()).thenReturn(from(HttpStatus.OK, TestUtil.dummySjablonSjablontallListe())) - `when`(forskuddCoreMock.beregnForskudd(capture(grunnlagTilCoreCaptor))).thenReturn(TestUtil.dummyForskuddResultatCore()) - - val beregnForskuddResultat = beregnForskuddService.beregn(TestUtil.byggForskuddGrunnlag()) - val grunnlagTilCore = grunnlagTilCoreCaptor.value - - assertAll( - Executable { assertThat(beregnForskuddResultat.responseEntity.statusCode).isEqualTo(HttpStatus.OK) }, - Executable { assertThat(beregnForskuddResultat.responseEntity.body).isNotNull() }, - Executable { assertThat(beregnForskuddResultat.responseEntity.body?.beregnetForskuddPeriodeListe).isNotNull() }, - Executable { assertThat(beregnForskuddResultat.responseEntity.body?.beregnetForskuddPeriodeListe).hasSize(1) }, - // Sjablontyper som ikke er gyldige for forskudd og sjabloner som ikke er innenfor beregn-fra-til-dato filtreres bort - Executable { assertThat(grunnlagTilCore.sjablonPeriodeListe).hasSize(21) }, - ) - } - - @Test - @DisplayName("Skal kaste UgyldigInputException ved feil retur fra Core") - fun skalKasteUgyldigInputExceptionVedFeilReturFraCore() { - `when`(sjablonConsumerMock.hentSjablonSjablontall()).thenReturn(from(HttpStatus.OK, TestUtil.dummySjablonSjablontallListe())) - `when`(forskuddCoreMock.beregnForskudd(any())).thenReturn(TestUtil.dummyForskuddResultatCoreMedAvvik()) - assertThatExceptionOfType(UgyldigInputException::class.java) - .isThrownBy { beregnForskuddService.beregn(TestUtil.byggForskuddGrunnlag()) } - .withMessageContaining("beregnDatoFra kan ikke være null") - .withMessageContaining("periodeDatoTil må være etter periodeDatoFra") - } - - companion object MockitoHelper { - fun any(): T = Mockito.any() - } -} diff --git a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/CoreMapperTest.kt b/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/CoreMapperTest.kt deleted file mode 100644 index 841ddc9..0000000 --- a/src/test/kotlin/no/nav/bidrag/beregn/forskudd/rest/service/CoreMapperTest.kt +++ /dev/null @@ -1,186 +0,0 @@ -package no.nav.bidrag.beregn.forskudd.rest.service - -import com.fasterxml.jackson.databind.ObjectMapper -import no.nav.bidrag.beregn.forskudd.rest.exception.UgyldigInputException -import no.nav.bidrag.domene.enums.grunnlag.Grunnlagstype -import no.nav.bidrag.domene.tid.ÅrMånedsperiode -import no.nav.bidrag.transport.behandling.beregning.felles.BeregnGrunnlag -import no.nav.bidrag.transport.behandling.beregning.felles.Grunnlag -import org.assertj.core.api.Assertions.assertThatExceptionOfType -import org.junit.jupiter.api.DisplayName -import org.junit.jupiter.api.Test - -internal class CoreMapperTest { - @Test - @DisplayName("Skal kaste UgyldigInputException når PERSON-objekt inneholder ugyldige data") - fun mapPersonUgyldig() { - val mapper = ObjectMapper() - val innholdPersonMedFeil = innholdPersonMedFeil(mapper) - val beregnForskuddGrunnlag = - BeregnGrunnlag( - periode = ÅrMånedsperiode(fom = "2020-12", til = "2021-01"), - søknadsbarnReferanse = "Person_Søknadsbarn", - grunnlagListe = - listOf( - Grunnlag( - referanse = "Person_Søknadsbarn", - type = Grunnlagstype.PERSON, - grunnlagsreferanseListe = emptyList(), - innhold = innholdPersonMedFeil, - ), - ), - ) - - assertThatExceptionOfType(UgyldigInputException::class.java) - .isThrownBy { CoreMapper.mapGrunnlagTilCore(beregnForskuddGrunnlag = beregnForskuddGrunnlag, sjablontallListe = emptyList()) } - .withMessageContaining("Ugyldig input ved beregning av forskudd. Innhold i Grunnlagstype.PERSON er ikke gyldig") - } - - @Test - @DisplayName("Skal kaste UgyldigInputException når BOSTATUS_PERIODE-objekt inneholder ugyldige data") - fun mapBostatusPeriodeUgyldig() { - val mapper = ObjectMapper() - val innholdPerson = innholdPersonOK(mapper) - val innholdBostatusMedFeil = innholdBostatusMedFeil(mapper) - val beregnForskuddGrunnlag = - BeregnGrunnlag( - periode = ÅrMånedsperiode(fom = "2020-12", til = "2021-01"), - søknadsbarnReferanse = "Person_Søknadsbarn", - grunnlagListe = - listOf( - Grunnlag( - referanse = "Person_Søknadsbarn", - type = Grunnlagstype.PERSON, - grunnlagsreferanseListe = emptyList(), - innhold = innholdPerson, - ), - Grunnlag( - referanse = "Bostatus_Søknadsbarn", - type = Grunnlagstype.BOSTATUS_PERIODE, - grunnlagsreferanseListe = listOf("Person_Søknadsbarn"), - innhold = innholdBostatusMedFeil, - ), - ), - ) - - assertThatExceptionOfType(UgyldigInputException::class.java) - .isThrownBy { CoreMapper.mapGrunnlagTilCore(beregnForskuddGrunnlag = beregnForskuddGrunnlag, sjablontallListe = emptyList()) } - .withMessageContaining("Ugyldig input ved beregning av forskudd. Innhold i Grunnlagstype.BOSTATUS_PERIODE er ikke gyldig") - } - - @Test - @DisplayName("Skal kaste UgyldigInputException når BEREGNING_INNTEKT_RAPPORTERING_PERIODE-objekt inneholder ugyldige data") - fun mapInntektPeriodeUgyldig() { - val mapper = ObjectMapper() - val innholdPerson = innholdPersonOK(mapper) - val innholdBostatus = innholdBostatusOK(mapper) - val innholdInntektMedFeil = innholdInntektMedFeil(mapper) - val beregnForskuddGrunnlag = - BeregnGrunnlag( - periode = ÅrMånedsperiode(fom = "2020-12", til = "2021-01"), - søknadsbarnReferanse = "Person_Søknadsbarn", - grunnlagListe = - listOf( - Grunnlag( - referanse = "Person_Søknadsbarn", - type = Grunnlagstype.PERSON, - grunnlagsreferanseListe = emptyList(), - innhold = innholdPerson, - ), - Grunnlag( - referanse = "Bostatus_Søknadsbarn", - type = Grunnlagstype.BOSTATUS_PERIODE, - grunnlagsreferanseListe = listOf("Person_Søknadsbarn"), - innhold = innholdBostatus, - ), - Grunnlag( - referanse = "BeregningInntektRapportering_Ainntekt", - type = Grunnlagstype.BEREGNING_INNTEKT_RAPPORTERING_PERIODE, - grunnlagsreferanseListe = listOf("Person_Bidragsmottaker"), - innhold = innholdInntektMedFeil, - ), - ), - ) - - assertThatExceptionOfType(UgyldigInputException::class.java) - .isThrownBy { CoreMapper.mapGrunnlagTilCore(beregnForskuddGrunnlag = beregnForskuddGrunnlag, sjablontallListe = emptyList()) } - .withMessageContaining( - "Ugyldig input ved beregning av forskudd. Innhold i Grunnlagstype.BEREGNING_INNTEKT_RAPPORTERING_PERIODE er ikke gyldig", - ) - } - - @Test - @DisplayName("Skal kaste UgyldigInputException når SIVILSTAND_PERIODE-objekt inneholder ugyldige data") - fun mapSivilstandPeriodeUgyldig() { - val mapper = ObjectMapper() - val innholdPerson = innholdPersonOK(mapper) - val innholdBostatus = innholdBostatusOK(mapper) - val innholdInntekt = innholdInntektOK(mapper) - val innholdSivilstandMedFeil = innholdSivilstandMedFeil(mapper) - val beregnForskuddGrunnlag = - BeregnGrunnlag( - periode = ÅrMånedsperiode(fom = "2020-12", til = "2021-01"), - søknadsbarnReferanse = "Person_Søknadsbarn", - grunnlagListe = - listOf( - Grunnlag( - referanse = "Person_Søknadsbarn", - type = Grunnlagstype.PERSON, - grunnlagsreferanseListe = emptyList(), - innhold = innholdPerson, - ), - Grunnlag( - referanse = "Bostatus_Søknadsbarn", - type = Grunnlagstype.BOSTATUS_PERIODE, - grunnlagsreferanseListe = listOf("Person_Søknadsbarn"), - innhold = innholdBostatus, - ), - Grunnlag( - referanse = "BeregningInntektRapportering_Ainntekt", - type = Grunnlagstype.BEREGNING_INNTEKT_RAPPORTERING_PERIODE, - grunnlagsreferanseListe = listOf("Person_Bidragsmottaker"), - innhold = innholdInntekt, - ), - Grunnlag( - referanse = "Sivilstand", - type = Grunnlagstype.SIVILSTAND_PERIODE, - grunnlagsreferanseListe = listOf("Person_Bidragsmottaker"), - innhold = innholdSivilstandMedFeil, - ), - ), - ) - - assertThatExceptionOfType(UgyldigInputException::class.java) - .isThrownBy { CoreMapper.mapGrunnlagTilCore(beregnForskuddGrunnlag = beregnForskuddGrunnlag, sjablontallListe = emptyList()) } - .withMessageContaining("Ugyldig input ved beregning av forskudd. Innhold i Grunnlagstype.SIVILSTAND_PERIODE er ikke gyldig") - } - - private fun innholdPersonMedFeil(mapper: ObjectMapper) = - mapper.readTree("{\"ident\": \"11111111111\"," + "\"navn\": \"Søknadsbarn\"," + "\"fødselsdato\": null}") - - private fun innholdPersonOK(mapper: ObjectMapper) = - mapper.readTree("{\"ident\": \"11111111111\"," + "\"navn\": \"Søknadsbarn\"," + "\"fødselsdato\": \"2010-01-01\"}") - - private fun innholdBostatusMedFeil(mapper: ObjectMapper) = mapper.readTree( - "{\"periode\":{" + "\"fom\": \"2020-12\"," + "\"til\": \"2021-01\"}," + "\"bostatus\": \"MED_BESTEMOR\"," + - "\"manueltRegistrert\": false}", - ) - - private fun innholdBostatusOK(mapper: ObjectMapper) = mapper.readTree( - "{\"periode\":{" + "\"fom\": \"2020-12\"," + "\"til\": \"2021-01\"}," + "\"bostatus\": \"MED_FORELDER\"," + - "\"manueltRegistrert\": false}", - ) - - private fun innholdInntektMedFeil(mapper: ObjectMapper) = mapper.readTree( - "{\"periode\":{" + "\"fom\": \"2020-12\"," + "\"til\": \"2021-01\"}," + "\"inntektsrapportering\": \"AINNTEKT\"," + - "\"gjelderBarn\": null," + "\"beløp\": \"29x000\"," + "\"manueltRegistrert\": false," + "\"valgt\": true}", - ) - - private fun innholdInntektOK(mapper: ObjectMapper) = mapper.readTree( - "{\"periode\":{" + "\"fom\": \"2020-12\"," + "\"til\": \"2021-01\"}," + "\"inntektsrapportering\": \"AINNTEKT\"," + - "\"gjelderBarn\": null," + "\"beløp\": 290000," + "\"manueltRegistrert\": false," + "\"valgt\": true}", - ) - - private fun innholdSivilstandMedFeil(mapper: ObjectMapper) = - mapper.readTree("{\"periode\":{" + "\"fom\": \"2020-12\"," + "\"til\": \"2021-01\"}," + "\"sivilstand\": \"UGIFT\"}") -} diff --git a/src/test/resources/application-lokal-nais.yaml b/src/test/resources/application-lokal-nais.yaml deleted file mode 100644 index 1a301b0..0000000 --- a/src/test/resources/application-lokal-nais.yaml +++ /dev/null @@ -1,6 +0,0 @@ -no.nav.security.jwt: - issuer: - aad: - discoveryurl: ${AZURE_APP_WELL_KNOWN_URL} - accepted_audience: ${AZURE_APP_CLIENT_ID}, api://${AZURE_APP_CLIENT_ID} -server.port: 8889 \ No newline at end of file diff --git a/src/test/resources/application-test.yaml b/src/test/resources/application-test.yaml deleted file mode 100644 index 239f317..0000000 --- a/src/test/resources/application-test.yaml +++ /dev/null @@ -1,27 +0,0 @@ -#################################################################### -# Profile: test -#---------------------------- -# -# Properties for unit testing and local runs. -# Mocks OIDC. -# -#################################################################### -BIDRAGSJABLON_URL: http://localhost:${wiremock.server.port}/bidrag-sjablon - -spring: - config.activate.on-profile: test, local - security: - oauth2: - resourceserver: - jwt: - issuer-uri: http://localhost:${mock-oauth2-server.port}/azure - client: - provider: - aad: - token-uri: http://localhost:${mock-oauth2-server.port}/azure/token - jwk-set-uri: http://localhost:${mock-oauth2-server.port}/azure/jwks -no.nav.security.jwt: - issuer: - aad: - discovery_url: http://localhost:${mock-oauth2-server.port}/aad/.well-known/openid-configuration - accepted_audience: aud-localhost \ No newline at end of file