From 5e8418b57f0d9089013d7ad37651541c69806c9f Mon Sep 17 00:00:00 2001 From: Ole Christian Kvernberg Date: Fri, 18 Feb 2022 20:40:41 +0100 Subject: [PATCH 1/3] POC Cucumber --- pom.xml | 30 +++- .../no/nav/familie/ef/sak/RunCucumberTest.kt | 14 ++ .../domeneparser/BasisDomeneParser.kt | 143 ++++++++++++++++++ .../sak/cucumber/domeneparser/DomeneParser.kt | 14 ++ .../domeneparser/Domenen\303\270kkel.kt" | 6 + .../domeneparser/VedtakDomeneParser.kt | 131 ++++++++++++++++ .../ef/sak/cucumber/steps/RegelSteps.kt | 52 +++++++ .../sak/vedtak/AndelHistorikkBeregnerTest.kt | 5 - src/test/resources/cucumber.properties | 1 + .../features/inntekt_endrer_seg.feature | 24 +++ 10 files changed, 409 insertions(+), 11 deletions(-) create mode 100644 src/test/kotlin/no/nav/familie/ef/sak/RunCucumberTest.kt create mode 100644 src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/BasisDomeneParser.kt create mode 100644 src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/DomeneParser.kt create mode 100644 "src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/Domenen\303\270kkel.kt" create mode 100644 src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/VedtakDomeneParser.kt create mode 100644 src/test/kotlin/no/nav/familie/ef/sak/cucumber/steps/RegelSteps.kt create mode 100644 src/test/resources/cucumber.properties create mode 100644 src/test/resources/features/inntekt_endrer_seg.feature diff --git a/pom.xml b/pom.xml index ac825b082e..cc7fed78ac 100644 --- a/pom.xml +++ b/pom.xml @@ -18,10 +18,6 @@ confluent https://packages.confluent.io/maven/ - - github - https://maven.pkg.github.com/navikt/familie-felles - @@ -37,7 +33,8 @@ 1.20211125150647_a7c6f64 no.nav.familie.ef.sak.ApplicationKt 2.0_20220217093059_3870509 - + 7.2.3 + 5.8.2 ${SONAR_PROJECTKEY} @@ -222,6 +219,27 @@ ${unleash.version} + + io.cucumber + cucumber-java8 + ${cucumber.version} + test + + + + io.cucumber + cucumber-junit + ${cucumber.version} + test + + + + org.junit.vintage + junit-vintage-engine + ${junit-vintage-engine.version} + runtime + + @@ -306,7 +324,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.2 + 3.0.0-M5 diff --git a/src/test/kotlin/no/nav/familie/ef/sak/RunCucumberTest.kt b/src/test/kotlin/no/nav/familie/ef/sak/RunCucumberTest.kt new file mode 100644 index 0000000000..8f8d790fc4 --- /dev/null +++ b/src/test/kotlin/no/nav/familie/ef/sak/RunCucumberTest.kt @@ -0,0 +1,14 @@ +package no.nav.familie.ef.sak.no.nav.familie.ef.sak + +import io.cucumber.junit.Cucumber +import io.cucumber.junit.CucumberOptions +import org.junit.runner.RunWith + +@RunWith(Cucumber::class) +@CucumberOptions( + features = ["src/test/resources/features"], + plugin = ["pretty", "html:build/cucumber.html"], + tags = "not @ignored", + monochrome = false +) +class RunCucumberTest diff --git a/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/BasisDomeneParser.kt b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/BasisDomeneParser.kt new file mode 100644 index 0000000000..336d0d4161 --- /dev/null +++ b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/BasisDomeneParser.kt @@ -0,0 +1,143 @@ +package no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser + +import io.cucumber.datatable.DataTable +import no.nav.familie.ef.sak.vedtak.EndringType +import no.nav.familie.ef.sak.vedtak.dto.ResultatType +import java.time.LocalDate +import java.time.format.DateTimeFormatter + +abstract class BasisDomeneParser { + companion object { + val norskDatoFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy") + val isoDatoFormatter = DateTimeFormatter.ISO_LOCAL_DATE + + fun parseDato(domenebegrep: Domenenøkkel, rad: Map): LocalDate { + return parseDato(domenebegrep.nøkkel(), rad) + } + + fun parseValgfriDato(domenebegrep: Domenenøkkel, rad: Map): LocalDate? { + return parseValgfriDato(domenebegrep.nøkkel(), rad) + } + + fun parseString(domenebegrep: Domenenøkkel, rad: Map): String { + return verdi(domenebegrep.nøkkel(), rad) + } + + fun parseValgfriString(domenebegrep: Domenenøkkel, rad: Map): String? { + return valgfriVerdi(domenebegrep.nøkkel(), rad) + } + + fun parseBooleanMedBooleanVerdi(domenebegrep: Domenenøkkel, rad: Map): Boolean { + val verdi = verdi(domenebegrep.nøkkel(), rad) + + return when (verdi) { + "true" -> true + else -> false + } + } + + fun parseBoolean(domenebegrep: Domenenøkkel, rad: Map): Boolean { + val verdi = verdi(domenebegrep.nøkkel(), rad) + + return when (verdi) { + "Ja" -> true + else -> false + } + } + + fun parseValgfriBoolean(domenebegrep: String, rad: Map): Boolean? { + + if (rad.get(domenebegrep) == null || rad.get(domenebegrep) == "") { + return null + } + + return when (rad.get(domenebegrep)) { + "Ja" -> true + "Nei" -> false + else -> null + } + } + + fun parseDato(domenebegrep: String, rad: Map): LocalDate { + val dato = rad.get(domenebegrep)!! + + return if (dato.contains(".")) { + LocalDate.parse(dato, norskDatoFormatter) + } else { + LocalDate.parse(dato, isoDatoFormatter) + } + } + + fun parseValgfriDato(domenebegrep: String, rad: Map): LocalDate? { + if (rad.get(domenebegrep) == null || rad.get(domenebegrep) == "") { + return null + } + val dato = rad.get(domenebegrep)!! + + return if (dato.contains(".")) { + LocalDate.parse(dato, norskDatoFormatter) + } else { + LocalDate.parse(dato, isoDatoFormatter) + } + } + + fun verdi(nøkkel: String, rad: Map): String { + val verdi = rad.get(nøkkel) + + if (verdi == null || verdi == "") { + throw java.lang.RuntimeException("Fant ingen verdi for $nøkkel") + } + + return verdi + } + + fun valgfriVerdi(nøkkel: String, rad: Map): String? { + val verdi = rad.get(nøkkel) + + return verdi + } + + fun parseInt(domenebegrep: Domenenøkkel, rad: Map): Int { + val verdi = verdi(domenebegrep.nøkkel(), rad) + + return Integer.parseInt(verdi) + } + + fun parseDouble(domenebegrep: Domenenøkkel, rad: Map): Double { + val verdi = verdi(domenebegrep.nøkkel(), rad) + return verdi.toDouble() + } + + fun parseValgfriDouble(domenebegrep: Domenenøkkel, rad: Map): Double? { + return valgfriVerdi(domenebegrep.nøkkel(), rad)?.toDouble() ?: return null + } + + fun parseValgfriInt(domenebegrep: Domenenøkkel, rad: Map): Int? { + val verdi = valgfriVerdi(domenebegrep.nøkkel(), rad) + if (verdi == null) { + return null + } + + return parseInt(domenebegrep, rad) + } + + fun parseResultatType(rad: Map): ResultatType { + val verdi = verdi(VedtakDomenebegrep.RESULTAT_TYPE.nøkkel, rad) + return ResultatType.valueOf(verdi) + } + + fun parseEndringType(rad: Map): EndringType? { + val verdi = valgfriVerdi(VedtakDomenebegrep.ENDRING_TYPE.nøkkel, rad) ?: return null + return EndringType.valueOf(verdi) + } + + + fun mapDataTable(dataTable: DataTable, radMapper: RadMapper): List { + return dataTable.asMaps().map { radMapper.mapRad(it) } + } + } +} + +interface RadMapper { + fun mapRad(rad: Map): T +} \ No newline at end of file diff --git a/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/DomeneParser.kt b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/DomeneParser.kt new file mode 100644 index 0000000000..c7ffe855d9 --- /dev/null +++ b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/DomeneParser.kt @@ -0,0 +1,14 @@ +package no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser + +object DomeneParser: BasisDomeneParser() { +} + +enum class Domenebegrep(val nøkkel: String) : Domenenøkkel { + BEHANDLING_ID("BehandlingId"), + FRA_OG_MED_DATO("Fra og med dato"), + TIL_OG_MED_DATO("Til og med dato"); + + override fun nøkkel(): String { + return nøkkel + } +} diff --git "a/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/Domenen\303\270kkel.kt" "b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/Domenen\303\270kkel.kt" new file mode 100644 index 0000000000..e5cb364ff7 --- /dev/null +++ "b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/Domenen\303\270kkel.kt" @@ -0,0 +1,6 @@ +package no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser + +interface Domenenøkkel { + + fun nøkkel(): String +} \ No newline at end of file diff --git a/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/VedtakDomeneParser.kt b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/VedtakDomeneParser.kt new file mode 100644 index 0000000000..16bcfa86a3 --- /dev/null +++ b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/VedtakDomeneParser.kt @@ -0,0 +1,131 @@ +package no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser + +import io.cucumber.datatable.DataTable +import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.BasisDomeneParser.Companion.parseEndringType +import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.BasisDomeneParser.Companion.parseInt +import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.BasisDomeneParser.Companion.parseResultatType +import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.BasisDomeneParser.Companion.parseString +import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.BasisDomeneParser.Companion.parseValgfriDato +import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.BasisDomeneParser.Companion.parseValgfriInt +import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.BasisDomeneParser.Companion.parseValgfriString +import no.nav.familie.ef.sak.tilkjentytelse.domain.AndelTilkjentYtelse +import no.nav.familie.ef.sak.tilkjentytelse.domain.TilkjentYtelse +import no.nav.familie.ef.sak.tilkjentytelse.domain.TilkjentYtelseType +import no.nav.familie.ef.sak.vedtak.HistorikkEndring +import no.nav.familie.ef.sak.vedtak.domain.AktivitetType +import no.nav.familie.ef.sak.vedtak.domain.PeriodeWrapper +import no.nav.familie.ef.sak.vedtak.domain.Vedtak +import no.nav.familie.ef.sak.vedtak.domain.Vedtaksperiode +import no.nav.familie.ef.sak.vedtak.domain.VedtaksperiodeType +import no.nav.familie.ef.sak.økonomi.lagTilkjentYtelse +import java.time.LocalDate +import java.time.LocalDateTime +import java.util.UUID + +object VedtakDomeneParser { + + val behandlingIdTilUUID = mapOf(1 to UUID.randomUUID(), 2 to UUID.randomUUID(), 3 to UUID.randomUUID()) + val tilkjentYtelseIdNummerTilUUID = mapOf(1 to UUID.randomUUID(), 2 to UUID.randomUUID(), 3 to UUID.randomUUID()) + + fun mapVedtak(dataTable: DataTable): List { + return dataTable.asMaps().map { + VedtakMapper().mapRad(it) + } + } + + fun mapBehandlingForHistorikkEndring(dataTable: DataTable): List> { + return dataTable.asMaps().map { + BehandlingForHistorikkEndringMapper().mapRad(it) + } + } + + + fun mapAndelTilkjentYtelse(dataTable: DataTable): List { + return dataTable.asMaps().map { + AndelTilkjentYtelseMapper().mapRad(it) + } + } + + + fun lagDefaultTilkjentYtelseFraAndel(dataTable: DataTable): List { + return dataTable.asMaps().map { + val andel = AndelTilkjentYtelseMapper().mapRad(it) + lagTilkjentYtelse(listOf(andel), UUID.randomUUID(), andel.kildeBehandlingId) + } + } + + class VedtakMapper { + fun mapRad(rad: Map): Vedtak { + return Vedtak( + behandlingId = behandlingIdTilUUID[parseInt(VedtakDomenebegrep.BEHANDLING_ID, rad)]!!, + resultatType = parseResultatType(rad), + perioder = PeriodeWrapper(listOf(Vedtaksperiode(LocalDate.now(), LocalDate.now().plusYears(1), AktivitetType.BARN_UNDER_ETT_ÅR, VedtaksperiodeType.HOVEDPERIODE))) + ) + } + } + + class TilkjentYtelseMapper { + + fun mapRad(rad: Map): TilkjentYtelse { + return TilkjentYtelse( + id = tilkjentYtelseIdNummerTilUUID[parseInt(VedtakDomenebegrep.TILKJENT_YTELSE_ID, rad)]!!, + behandlingId = behandlingIdTilUUID[parseInt(VedtakDomenebegrep.BEHANDLING_ID, rad)]!!, + personident = parseString(VedtakDomenebegrep.PERSONIDENT, rad), + vedtakstidspunkt = LocalDateTime.now(), + type = TilkjentYtelseType.FØRSTEGANGSBEHANDLING, + andelerTilkjentYtelse = listOf() + ) + } + } + + class AndelTilkjentYtelseMapper { + fun mapRad(rad: Map): AndelTilkjentYtelse { + return AndelTilkjentYtelse( + beløp = parseValgfriInt(VedtakDomenebegrep.BELØP, rad) ?: 0, + stønadFom = parseValgfriDato(VedtakDomenebegrep.FRA_OG_MED_DATO, rad) ?: LocalDate.now(), + stønadTom = parseValgfriDato(VedtakDomenebegrep.TIL_OG_MED_DATO, rad) ?: LocalDate.now().plusYears(1), + personIdent = parseValgfriString(VedtakDomenebegrep.PERSONIDENT, rad) ?: "1", + inntekt = parseValgfriInt(VedtakDomenebegrep.INNTEKT, rad) ?: 0, + inntektsreduksjon = parseValgfriInt(VedtakDomenebegrep.INNTEKTSREDUKSJON, rad) ?: 0, + samordningsfradrag = parseValgfriInt(VedtakDomenebegrep.SAMORDNINGSFRADRAG, rad) ?: 0, + kildeBehandlingId = behandlingIdTilUUID[parseInt(VedtakDomenebegrep.BEHANDLING_ID, rad)]!! + ) + } + } + + class BehandlingForHistorikkEndringMapper { + fun mapRad(rad: Map): Pair { + if (parseEndringType(rad) == null && parseValgfriInt(VedtakDomenebegrep.ENDRET_I_BEHANDLING_ID, rad) == null) + return behandlingIdTilUUID[parseInt(VedtakDomenebegrep.BEHANDLING_ID, rad)]!! to null + + return behandlingIdTilUUID[parseInt(VedtakDomenebegrep.BEHANDLING_ID, rad)]!! to + HistorikkEndring( + type = parseEndringType(rad)!!, + behandlingId = behandlingIdTilUUID[parseInt(VedtakDomenebegrep.ENDRET_I_BEHANDLING_ID, rad)]!!, + vedtakstidspunkt = LocalDateTime.now() + ) + } + } + +} + +enum class VedtakDomenebegrep(val nøkkel: String) : Domenenøkkel { + RESULTAT_TYPE("Vedtaksresultat"), + TILKJENT_YTELSE_ID("Tilkjent ytelse Id"), + PERSONIDENT("Personnummer"), + INNTEKT("Inntekt"), + INNTEKTSREDUKSJON("Inntektsreduksjon"), + SAMORDNINGSFRADRAG("Samordningsfradrag"), + BELØP("Beløp"), + FRA_OG_MED_DATO("Fra og med dato"), + TIL_OG_MED_DATO("Til og med dato"), + BEHANDLING_ID("BehandlingId"), + ENDRET_I_BEHANDLING_ID("Endret i behandlingId"), + ENDRING_TYPE("Endringstype"), + HISTORIKKENDRING("Historikkendring"), + ; + + override fun nøkkel(): String { + return nøkkel + } +} diff --git a/src/test/kotlin/no/nav/familie/ef/sak/cucumber/steps/RegelSteps.kt b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/steps/RegelSteps.kt new file mode 100644 index 0000000000..fae7d4210c --- /dev/null +++ b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/steps/RegelSteps.kt @@ -0,0 +1,52 @@ +package no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.steps + +import io.cucumber.datatable.DataTable +import io.cucumber.java8.No +import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.VedtakDomeneParser +import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.VedtakDomeneParser.lagDefaultTilkjentYtelseFraAndel +import no.nav.familie.ef.sak.repository.behandling +import no.nav.familie.ef.sak.tilkjentytelse.domain.TilkjentYtelse +import no.nav.familie.ef.sak.vedtak.AndelHistorikkBeregner +import no.nav.familie.ef.sak.vedtak.AndelHistorikkDto +import no.nav.familie.ef.sak.vedtak.domain.Vedtak +import org.assertj.core.api.Assertions +import java.time.LocalDateTime + +class RegelSteps : No { + private var vedtak = listOf() + private var tilkjentYtelse = listOf() + private var forventetAndelHistorikk = listOf() + + init { + Gitt("følgende vedtak") { dataTable: DataTable -> + vedtak = VedtakDomeneParser.mapVedtak(dataTable) + } + Gitt("følgende andeler tilkjent ytelse") { dataTable: DataTable -> + //vedtak = VedtakDomeneParser.mapVedtak(dataTable) + tilkjentYtelse = lagDefaultTilkjentYtelseFraAndel(dataTable) + + } + Når("lag andelhistorikk kjøres") { + + val behandlinger = vedtak.map { it.behandlingId }.distinct().mapIndexed { index, id -> + behandling(id = id, opprettetTid = LocalDateTime.now().plusMinutes(index.toLong())) + } + forventetAndelHistorikk = AndelHistorikkBeregner.lagHistorikk(tilkjentYtelse, vedtak, behandlinger, null) + println(forventetAndelHistorikk.size) + } + + Så("forvent følgende historikk") { dataTable: DataTable -> + val forventetHistorikkEndringer = VedtakDomeneParser.mapBehandlingForHistorikkEndring(dataTable) + + for (forventetBehandlingMedHistorikkEndring in forventetHistorikkEndringer) { + val andelHistorikkDto = forventetAndelHistorikk.first { it.behandlingId == forventetBehandlingMedHistorikkEndring.first} + if (forventetBehandlingMedHistorikkEndring.second == null) { + Assertions.assertThat(andelHistorikkDto.endring).isNull() + } else { + Assertions.assertThat(forventetBehandlingMedHistorikkEndring.second?.behandlingId).isEqualTo(andelHistorikkDto.endring?.behandlingId) + Assertions.assertThat(forventetBehandlingMedHistorikkEndring.second?.type).isEqualTo(andelHistorikkDto.endring?.type) + } + } + } + } +} \ No newline at end of file diff --git a/src/test/kotlin/no/nav/familie/ef/sak/vedtak/AndelHistorikkBeregnerTest.kt b/src/test/kotlin/no/nav/familie/ef/sak/vedtak/AndelHistorikkBeregnerTest.kt index 40cb340a89..5cc96e4a74 100644 --- a/src/test/kotlin/no/nav/familie/ef/sak/vedtak/AndelHistorikkBeregnerTest.kt +++ b/src/test/kotlin/no/nav/familie/ef/sak/vedtak/AndelHistorikkBeregnerTest.kt @@ -38,11 +38,6 @@ import java.util.UUID class AndelHistorikkBeregnerTest { - @Test - internal fun `inntek_endrer_seg`() { - run("/økonomi/inntekt_endrer_seg.csv") - } - @Test internal fun `når vi revurderer fra midt i en tidligere periode lagrer vi ikke ned hele vedtakshistorikken`() { run("/økonomi/hele_vedtaket_blir_ikke_med.csv") diff --git a/src/test/resources/cucumber.properties b/src/test/resources/cucumber.properties new file mode 100644 index 0000000000..aa51b352be --- /dev/null +++ b/src/test/resources/cucumber.properties @@ -0,0 +1 @@ +cucumber.publish.quiet=true \ No newline at end of file diff --git a/src/test/resources/features/inntekt_endrer_seg.feature b/src/test/resources/features/inntekt_endrer_seg.feature new file mode 100644 index 0000000000..f81f5c362b --- /dev/null +++ b/src/test/resources/features/inntekt_endrer_seg.feature @@ -0,0 +1,24 @@ +# language: no +# encoding: UTF-8 + +Egenskap: Andelhistorikk: Endring i inntekt + + Scenario: Inntekt endrer seg i ny behandling og det vil bli en rad merket med erstattet i historikk + + Gitt følgende vedtak + | BehandlingId | Vedtaksresultat | + | 1 | INNVILGE | + | 2 | INNVILGE | + + Og følgende andeler tilkjent ytelse + | BehandlingId | Inntekt | + | 1 | 0 | + | 2 | 1 | + + Når lag andelhistorikk kjøres + + Så forvent følgende historikk + | BehandlingId | Endringstype | Endret i behandlingId | + | 1 | ERSTATTET | 2 | + | 2 | | | + From 86a125dac8ecd87f64411d5ae06eef65b8cee485 Mon Sep 17 00:00:00 2001 From: Ole Christian Kvernberg Date: Fri, 18 Feb 2022 20:50:32 +0100 Subject: [PATCH 2/3] Repo familie-felles --- pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pom.xml b/pom.xml index cc7fed78ac..1f911ce411 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,10 @@ confluent https://packages.confluent.io/maven/ + + github + https://maven.pkg.github.com/navikt/familie-felles + From 9cc28c38c6c582a616cc6ebba1ed1f8552efa6c2 Mon Sep 17 00:00:00 2001 From: Ole Christian Kvernberg Date: Tue, 22 Feb 2022 22:32:15 +0100 Subject: [PATCH 3/3] Forbedringer etter QA: - Byttet oppsett til nyere java - Sjekker at inntekt er som forventet i scenario --- pom.xml | 12 +- .../no/nav/familie/ef/sak/RunCucumberTest.kt | 22 +- .../domeneparser/BasisDomeneParser.kt | 256 +++++++++--------- .../sak/cucumber/domeneparser/DomeneParser.kt | 3 - .../domeneparser/VedtakDomeneParser.kt | 60 ++-- .../ef/sak/cucumber/steps/RegelSteps.kt | 52 ---- .../ef/sak/cucumber/steps/StepDefinitions.kt | 65 +++++ .../ef/sak}/inntekt_endrer_seg.feature | 6 +- 8 files changed, 247 insertions(+), 229 deletions(-) delete mode 100644 src/test/kotlin/no/nav/familie/ef/sak/cucumber/steps/RegelSteps.kt create mode 100644 src/test/kotlin/no/nav/familie/ef/sak/cucumber/steps/StepDefinitions.kt rename src/test/resources/{features => no/nav/familie/ef/sak}/inntekt_endrer_seg.feature (71%) diff --git a/pom.xml b/pom.xml index 1f911ce411..c00aa4a759 100644 --- a/pom.xml +++ b/pom.xml @@ -225,25 +225,23 @@ io.cucumber - cucumber-java8 + cucumber-java ${cucumber.version} test io.cucumber - cucumber-junit + cucumber-junit-platform-engine ${cucumber.version} test - org.junit.vintage - junit-vintage-engine - ${junit-vintage-engine.version} - runtime + org.junit.platform + junit-platform-suite + test - diff --git a/src/test/kotlin/no/nav/familie/ef/sak/RunCucumberTest.kt b/src/test/kotlin/no/nav/familie/ef/sak/RunCucumberTest.kt index 8f8d790fc4..78ae4250a4 100644 --- a/src/test/kotlin/no/nav/familie/ef/sak/RunCucumberTest.kt +++ b/src/test/kotlin/no/nav/familie/ef/sak/RunCucumberTest.kt @@ -1,14 +1,14 @@ -package no.nav.familie.ef.sak.no.nav.familie.ef.sak +package no.nav.familie.ef.sak -import io.cucumber.junit.Cucumber -import io.cucumber.junit.CucumberOptions -import org.junit.runner.RunWith +import io.cucumber.core.options.Constants.PLUGIN_PROPERTY_NAME +import org.junit.platform.suite.api.ConfigurationParameter; +import org.junit.platform.suite.api.IncludeEngines; +import org.junit.platform.suite.api.SelectClasspathResource; +import org.junit.platform.suite.api.Suite; -@RunWith(Cucumber::class) -@CucumberOptions( - features = ["src/test/resources/features"], - plugin = ["pretty", "html:build/cucumber.html"], - tags = "not @ignored", - monochrome = false -) + +@Suite +@IncludeEngines("cucumber") +@SelectClasspathResource("no/nav/familie/ef/sak") +@ConfigurationParameter(key = PLUGIN_PROPERTY_NAME, value = "pretty") class RunCucumberTest diff --git a/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/BasisDomeneParser.kt b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/BasisDomeneParser.kt index 336d0d4161..4583c1179d 100644 --- a/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/BasisDomeneParser.kt +++ b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/BasisDomeneParser.kt @@ -6,138 +6,136 @@ import no.nav.familie.ef.sak.vedtak.dto.ResultatType import java.time.LocalDate import java.time.format.DateTimeFormatter -abstract class BasisDomeneParser { - companion object { - val norskDatoFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy") - val isoDatoFormatter = DateTimeFormatter.ISO_LOCAL_DATE - - fun parseDato(domenebegrep: Domenenøkkel, rad: Map): LocalDate { - return parseDato(domenebegrep.nøkkel(), rad) - } - - fun parseValgfriDato(domenebegrep: Domenenøkkel, rad: Map): LocalDate? { - return parseValgfriDato(domenebegrep.nøkkel(), rad) - } - - fun parseString(domenebegrep: Domenenøkkel, rad: Map): String { - return verdi(domenebegrep.nøkkel(), rad) - } - - fun parseValgfriString(domenebegrep: Domenenøkkel, rad: Map): String? { - return valgfriVerdi(domenebegrep.nøkkel(), rad) - } - - fun parseBooleanMedBooleanVerdi(domenebegrep: Domenenøkkel, rad: Map): Boolean { - val verdi = verdi(domenebegrep.nøkkel(), rad) - - return when (verdi) { - "true" -> true - else -> false - } - } - - fun parseBoolean(domenebegrep: Domenenøkkel, rad: Map): Boolean { - val verdi = verdi(domenebegrep.nøkkel(), rad) - - return when (verdi) { - "Ja" -> true - else -> false - } - } - - fun parseValgfriBoolean(domenebegrep: String, rad: Map): Boolean? { - - if (rad.get(domenebegrep) == null || rad.get(domenebegrep) == "") { - return null - } - - return when (rad.get(domenebegrep)) { - "Ja" -> true - "Nei" -> false - else -> null - } - } - - fun parseDato(domenebegrep: String, rad: Map): LocalDate { - val dato = rad.get(domenebegrep)!! - - return if (dato.contains(".")) { - LocalDate.parse(dato, norskDatoFormatter) - } else { - LocalDate.parse(dato, isoDatoFormatter) - } - } - - fun parseValgfriDato(domenebegrep: String, rad: Map): LocalDate? { - if (rad.get(domenebegrep) == null || rad.get(domenebegrep) == "") { - return null - } - val dato = rad.get(domenebegrep)!! - - return if (dato.contains(".")) { - LocalDate.parse(dato, norskDatoFormatter) - } else { - LocalDate.parse(dato, isoDatoFormatter) - } - } - - fun verdi(nøkkel: String, rad: Map): String { - val verdi = rad.get(nøkkel) - - if (verdi == null || verdi == "") { - throw java.lang.RuntimeException("Fant ingen verdi for $nøkkel") - } - - return verdi - } - - fun valgfriVerdi(nøkkel: String, rad: Map): String? { - val verdi = rad.get(nøkkel) - - return verdi - } - - fun parseInt(domenebegrep: Domenenøkkel, rad: Map): Int { - val verdi = verdi(domenebegrep.nøkkel(), rad) - - return Integer.parseInt(verdi) - } - - fun parseDouble(domenebegrep: Domenenøkkel, rad: Map): Double { - val verdi = verdi(domenebegrep.nøkkel(), rad) - return verdi.toDouble() - } - - fun parseValgfriDouble(domenebegrep: Domenenøkkel, rad: Map): Double? { - return valgfriVerdi(domenebegrep.nøkkel(), rad)?.toDouble() ?: return null - } - - fun parseValgfriInt(domenebegrep: Domenenøkkel, rad: Map): Int? { - val verdi = valgfriVerdi(domenebegrep.nøkkel(), rad) - if (verdi == null) { - return null - } - - return parseInt(domenebegrep, rad) - } - - fun parseResultatType(rad: Map): ResultatType { - val verdi = verdi(VedtakDomenebegrep.RESULTAT_TYPE.nøkkel, rad) - return ResultatType.valueOf(verdi) - } - - fun parseEndringType(rad: Map): EndringType? { - val verdi = valgfriVerdi(VedtakDomenebegrep.ENDRING_TYPE.nøkkel, rad) ?: return null - return EndringType.valueOf(verdi) - } - - - fun mapDataTable(dataTable: DataTable, radMapper: RadMapper): List { - return dataTable.asMaps().map { radMapper.mapRad(it) } - } +val norskDatoFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy") +val isoDatoFormatter = DateTimeFormatter.ISO_LOCAL_DATE + +fun parseDato(domenebegrep: Domenenøkkel, rad: Map): LocalDate { + return parseDato(domenebegrep.nøkkel(), rad) +} + +fun parseValgfriDato(domenebegrep: Domenenøkkel, rad: Map): LocalDate? { + return parseValgfriDato(domenebegrep.nøkkel(), rad) +} + +fun parseString(domenebegrep: Domenenøkkel, rad: Map): String { + return verdi(domenebegrep.nøkkel(), rad) +} + +fun parseValgfriString(domenebegrep: Domenenøkkel, rad: Map): String? { + return valgfriVerdi(domenebegrep.nøkkel(), rad) +} + +fun parseBooleanMedBooleanVerdi(domenebegrep: Domenenøkkel, rad: Map): Boolean { + val verdi = verdi(domenebegrep.nøkkel(), rad) + + return when (verdi) { + "true" -> true + else -> false + } +} + +fun parseBoolean(domenebegrep: Domenenøkkel, rad: Map): Boolean { + val verdi = verdi(domenebegrep.nøkkel(), rad) + + return when (verdi) { + "Ja" -> true + else -> false + } +} + +fun parseValgfriBoolean(domenebegrep: String, rad: Map): Boolean? { + + if (rad.get(domenebegrep) == null || rad.get(domenebegrep) == "") { + return null + } + + return when (rad.get(domenebegrep)) { + "Ja" -> true + "Nei" -> false + else -> null + } +} + +fun parseDato(domenebegrep: String, rad: Map): LocalDate { + val dato = rad.get(domenebegrep)!! + + return if (dato.contains(".")) { + LocalDate.parse(dato, norskDatoFormatter) + } else { + LocalDate.parse(dato, isoDatoFormatter) + } +} + +fun parseValgfriDato(domenebegrep: String, rad: Map): LocalDate? { + if (rad.get(domenebegrep) == null || rad.get(domenebegrep) == "") { + return null + } + val dato = rad.get(domenebegrep)!! + + return if (dato.contains(".")) { + LocalDate.parse(dato, norskDatoFormatter) + } else { + LocalDate.parse(dato, isoDatoFormatter) } } +fun verdi(nøkkel: String, rad: Map): String { + val verdi = rad.get(nøkkel) + + if (verdi == null || verdi == "") { + throw java.lang.RuntimeException("Fant ingen verdi for $nøkkel") + } + + return verdi +} + +fun valgfriVerdi(nøkkel: String, rad: Map): String? { + val verdi = rad.get(nøkkel) + + return verdi +} + +fun parseInt(domenebegrep: Domenenøkkel, rad: Map): Int { + val verdi = verdi(domenebegrep.nøkkel(), rad) + + return Integer.parseInt(verdi) +} + +fun parseDouble(domenebegrep: Domenenøkkel, rad: Map): Double { + val verdi = verdi(domenebegrep.nøkkel(), rad) + return verdi.toDouble() +} + +fun parseValgfriDouble(domenebegrep: Domenenøkkel, rad: Map): Double? { + return valgfriVerdi(domenebegrep.nøkkel(), rad)?.toDouble() ?: return null +} + +fun parseValgfriInt(domenebegrep: Domenenøkkel, rad: Map): Int? { + val verdi = valgfriVerdi(domenebegrep.nøkkel(), rad) + if (verdi == null) { + return null + } + + return parseInt(domenebegrep, rad) +} + +fun parseResultatType(rad: Map): ResultatType { + val verdi = verdi(VedtakDomenebegrep.RESULTAT_TYPE.nøkkel, rad) + return ResultatType.valueOf(verdi) +} + +fun parseEndringType(rad: Map): EndringType? { + val verdi = valgfriVerdi(VedtakDomenebegrep.ENDRING_TYPE.nøkkel, rad) ?: return null + return EndringType.valueOf(verdi) +} + + +fun mapDataTable(dataTable: DataTable, radMapper: RadMapper): List { + return dataTable.asMaps().map { radMapper.mapRad(it) } +} + + interface RadMapper { + fun mapRad(rad: Map): T } \ No newline at end of file diff --git a/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/DomeneParser.kt b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/DomeneParser.kt index c7ffe855d9..1d55184049 100644 --- a/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/DomeneParser.kt +++ b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/DomeneParser.kt @@ -1,8 +1,5 @@ package no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser -object DomeneParser: BasisDomeneParser() { -} - enum class Domenebegrep(val nøkkel: String) : Domenenøkkel { BEHANDLING_ID("BehandlingId"), FRA_OG_MED_DATO("Fra og med dato"), diff --git a/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/VedtakDomeneParser.kt b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/VedtakDomeneParser.kt index 16bcfa86a3..584faba609 100644 --- a/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/VedtakDomeneParser.kt +++ b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/domeneparser/VedtakDomeneParser.kt @@ -1,13 +1,6 @@ package no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser import io.cucumber.datatable.DataTable -import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.BasisDomeneParser.Companion.parseEndringType -import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.BasisDomeneParser.Companion.parseInt -import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.BasisDomeneParser.Companion.parseResultatType -import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.BasisDomeneParser.Companion.parseString -import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.BasisDomeneParser.Companion.parseValgfriDato -import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.BasisDomeneParser.Companion.parseValgfriInt -import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.BasisDomeneParser.Companion.parseValgfriString import no.nav.familie.ef.sak.tilkjentytelse.domain.AndelTilkjentYtelse import no.nav.familie.ef.sak.tilkjentytelse.domain.TilkjentYtelse import no.nav.familie.ef.sak.tilkjentytelse.domain.TilkjentYtelseType @@ -33,12 +26,17 @@ object VedtakDomeneParser { } } - fun mapBehandlingForHistorikkEndring(dataTable: DataTable): List> { + fun mapBehandlingForHistorikkEndring(dataTable: DataTable): List { return dataTable.asMaps().map { BehandlingForHistorikkEndringMapper().mapRad(it) } } + class ForventetHistorikk( + val id: UUID, + val historikkEndring: HistorikkEndring?, + val inntekt: Int + ) fun mapAndelTilkjentYtelse(dataTable: DataTable): List { return dataTable.asMaps().map { @@ -55,11 +53,15 @@ object VedtakDomeneParser { } class VedtakMapper { + fun mapRad(rad: Map): Vedtak { return Vedtak( behandlingId = behandlingIdTilUUID[parseInt(VedtakDomenebegrep.BEHANDLING_ID, rad)]!!, resultatType = parseResultatType(rad), - perioder = PeriodeWrapper(listOf(Vedtaksperiode(LocalDate.now(), LocalDate.now().plusYears(1), AktivitetType.BARN_UNDER_ETT_ÅR, VedtaksperiodeType.HOVEDPERIODE))) + perioder = PeriodeWrapper(listOf(Vedtaksperiode(LocalDate.now(), + LocalDate.now().plusYears(1), + AktivitetType.BARN_UNDER_ETT_ÅR, + VedtaksperiodeType.HOVEDPERIODE))) ) } } @@ -68,17 +70,18 @@ object VedtakDomeneParser { fun mapRad(rad: Map): TilkjentYtelse { return TilkjentYtelse( - id = tilkjentYtelseIdNummerTilUUID[parseInt(VedtakDomenebegrep.TILKJENT_YTELSE_ID, rad)]!!, - behandlingId = behandlingIdTilUUID[parseInt(VedtakDomenebegrep.BEHANDLING_ID, rad)]!!, - personident = parseString(VedtakDomenebegrep.PERSONIDENT, rad), - vedtakstidspunkt = LocalDateTime.now(), - type = TilkjentYtelseType.FØRSTEGANGSBEHANDLING, - andelerTilkjentYtelse = listOf() + id = tilkjentYtelseIdNummerTilUUID[parseInt(VedtakDomenebegrep.TILKJENT_YTELSE_ID, rad)]!!, + behandlingId = behandlingIdTilUUID[parseInt(VedtakDomenebegrep.BEHANDLING_ID, rad)]!!, + personident = parseString(VedtakDomenebegrep.PERSONIDENT, rad), + vedtakstidspunkt = LocalDateTime.now(), + type = TilkjentYtelseType.FØRSTEGANGSBEHANDLING, + andelerTilkjentYtelse = listOf() ) } } class AndelTilkjentYtelseMapper { + fun mapRad(rad: Map): AndelTilkjentYtelse { return AndelTilkjentYtelse( beløp = parseValgfriInt(VedtakDomenebegrep.BELØP, rad) ?: 0, @@ -94,15 +97,24 @@ object VedtakDomeneParser { } class BehandlingForHistorikkEndringMapper { - fun mapRad(rad: Map): Pair { - if (parseEndringType(rad) == null && parseValgfriInt(VedtakDomenebegrep.ENDRET_I_BEHANDLING_ID, rad) == null) - return behandlingIdTilUUID[parseInt(VedtakDomenebegrep.BEHANDLING_ID, rad)]!! to null - - return behandlingIdTilUUID[parseInt(VedtakDomenebegrep.BEHANDLING_ID, rad)]!! to - HistorikkEndring( - type = parseEndringType(rad)!!, - behandlingId = behandlingIdTilUUID[parseInt(VedtakDomenebegrep.ENDRET_I_BEHANDLING_ID, rad)]!!, - vedtakstidspunkt = LocalDateTime.now() + + fun mapRad(rad: Map): ForventetHistorikk { + if (parseEndringType(rad) == null) { + return ForventetHistorikk( + id = behandlingIdTilUUID[parseInt(VedtakDomenebegrep.BEHANDLING_ID, rad)]!!, + historikkEndring = null, + inntekt = parseInt(VedtakDomenebegrep.INNTEKT, rad) + ) + + } + return ForventetHistorikk( + id = behandlingIdTilUUID[parseInt(VedtakDomenebegrep.BEHANDLING_ID, rad)]!!, + historikkEndring = HistorikkEndring( + type = parseEndringType(rad)!!, + behandlingId = behandlingIdTilUUID[parseInt(VedtakDomenebegrep.ENDRET_I_BEHANDLING_ID, rad)]!!, + vedtakstidspunkt = LocalDateTime.now() + ), + inntekt = parseInt(VedtakDomenebegrep.INNTEKT, rad) ) } } diff --git a/src/test/kotlin/no/nav/familie/ef/sak/cucumber/steps/RegelSteps.kt b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/steps/RegelSteps.kt deleted file mode 100644 index fae7d4210c..0000000000 --- a/src/test/kotlin/no/nav/familie/ef/sak/cucumber/steps/RegelSteps.kt +++ /dev/null @@ -1,52 +0,0 @@ -package no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.steps - -import io.cucumber.datatable.DataTable -import io.cucumber.java8.No -import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.VedtakDomeneParser -import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.VedtakDomeneParser.lagDefaultTilkjentYtelseFraAndel -import no.nav.familie.ef.sak.repository.behandling -import no.nav.familie.ef.sak.tilkjentytelse.domain.TilkjentYtelse -import no.nav.familie.ef.sak.vedtak.AndelHistorikkBeregner -import no.nav.familie.ef.sak.vedtak.AndelHistorikkDto -import no.nav.familie.ef.sak.vedtak.domain.Vedtak -import org.assertj.core.api.Assertions -import java.time.LocalDateTime - -class RegelSteps : No { - private var vedtak = listOf() - private var tilkjentYtelse = listOf() - private var forventetAndelHistorikk = listOf() - - init { - Gitt("følgende vedtak") { dataTable: DataTable -> - vedtak = VedtakDomeneParser.mapVedtak(dataTable) - } - Gitt("følgende andeler tilkjent ytelse") { dataTable: DataTable -> - //vedtak = VedtakDomeneParser.mapVedtak(dataTable) - tilkjentYtelse = lagDefaultTilkjentYtelseFraAndel(dataTable) - - } - Når("lag andelhistorikk kjøres") { - - val behandlinger = vedtak.map { it.behandlingId }.distinct().mapIndexed { index, id -> - behandling(id = id, opprettetTid = LocalDateTime.now().plusMinutes(index.toLong())) - } - forventetAndelHistorikk = AndelHistorikkBeregner.lagHistorikk(tilkjentYtelse, vedtak, behandlinger, null) - println(forventetAndelHistorikk.size) - } - - Så("forvent følgende historikk") { dataTable: DataTable -> - val forventetHistorikkEndringer = VedtakDomeneParser.mapBehandlingForHistorikkEndring(dataTable) - - for (forventetBehandlingMedHistorikkEndring in forventetHistorikkEndringer) { - val andelHistorikkDto = forventetAndelHistorikk.first { it.behandlingId == forventetBehandlingMedHistorikkEndring.first} - if (forventetBehandlingMedHistorikkEndring.second == null) { - Assertions.assertThat(andelHistorikkDto.endring).isNull() - } else { - Assertions.assertThat(forventetBehandlingMedHistorikkEndring.second?.behandlingId).isEqualTo(andelHistorikkDto.endring?.behandlingId) - Assertions.assertThat(forventetBehandlingMedHistorikkEndring.second?.type).isEqualTo(andelHistorikkDto.endring?.type) - } - } - } - } -} \ No newline at end of file diff --git a/src/test/kotlin/no/nav/familie/ef/sak/cucumber/steps/StepDefinitions.kt b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/steps/StepDefinitions.kt new file mode 100644 index 0000000000..c82ed4bb62 --- /dev/null +++ b/src/test/kotlin/no/nav/familie/ef/sak/cucumber/steps/StepDefinitions.kt @@ -0,0 +1,65 @@ +package no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.steps + +import io.cucumber.datatable.DataTable +import io.cucumber.java.no.Gitt +import io.cucumber.java.no.Når +import io.cucumber.java.no.Så +import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.VedtakDomeneParser +import no.nav.familie.ef.sak.no.nav.familie.ef.sak.cucumber.domeneparser.VedtakDomeneParser.lagDefaultTilkjentYtelseFraAndel +import no.nav.familie.ef.sak.repository.behandling +import no.nav.familie.ef.sak.tilkjentytelse.domain.TilkjentYtelse +import no.nav.familie.ef.sak.vedtak.AndelHistorikkBeregner +import no.nav.familie.ef.sak.vedtak.AndelHistorikkDto +import no.nav.familie.ef.sak.vedtak.domain.Vedtak +import org.assertj.core.api.Assertions +import java.time.LocalDateTime + +class StepDefinitions { + + private var vedtak = listOf() + private var tilkjentYtelse = listOf() + private var forventetAndelHistorikk = listOf() + + + @Gitt("følgende vedtak") + fun følgende_vedtak(dataTable: DataTable) { + vedtak = VedtakDomeneParser.mapVedtak(dataTable) + } + + @Gitt("følgende andeler tilkjent ytelse") + fun `følgende andeler tilkjent ytelse`(dataTable: DataTable) { + tilkjentYtelse = lagDefaultTilkjentYtelseFraAndel(dataTable) + + } + + @Når("lag andelhistorikk kjøres") + fun `lag andelhistorikk kjøres`() { + + val behandlinger = vedtak.map { it.behandlingId }.distinct().mapIndexed { index, id -> + behandling(id = id, opprettetTid = LocalDateTime.now().plusMinutes(index.toLong())) + } + forventetAndelHistorikk = AndelHistorikkBeregner.lagHistorikk(tilkjentYtelse, vedtak, behandlinger, null) + } + + @Så("forvent følgende historikk") + fun forvent_følgende_historik(dataTable: DataTable) { + val forventetHistorikkEndringer = VedtakDomeneParser.mapBehandlingForHistorikkEndring(dataTable) + + for (forventetBehandlingMedHistorikkEndring in forventetHistorikkEndringer) { + val andelHistorikkDto = + forventetAndelHistorikk.first { it.behandlingId == forventetBehandlingMedHistorikkEndring.id } + + if (forventetBehandlingMedHistorikkEndring.historikkEndring == null) { + Assertions.assertThat(andelHistorikkDto.endring).isNull() + Assertions.assertThat(andelHistorikkDto.andel.inntekt).isEqualTo(forventetBehandlingMedHistorikkEndring.inntekt) + } else { + Assertions.assertThat(forventetBehandlingMedHistorikkEndring.historikkEndring.behandlingId) + .isEqualTo(andelHistorikkDto.endring?.behandlingId) + Assertions.assertThat(forventetBehandlingMedHistorikkEndring.historikkEndring.type) + .isEqualTo(andelHistorikkDto.endring?.type) + Assertions.assertThat(forventetBehandlingMedHistorikkEndring.inntekt).isEqualTo(andelHistorikkDto.andel.inntekt) + } + } + } + +} \ No newline at end of file diff --git a/src/test/resources/features/inntekt_endrer_seg.feature b/src/test/resources/no/nav/familie/ef/sak/inntekt_endrer_seg.feature similarity index 71% rename from src/test/resources/features/inntekt_endrer_seg.feature rename to src/test/resources/no/nav/familie/ef/sak/inntekt_endrer_seg.feature index f81f5c362b..9e2bcb4c7e 100644 --- a/src/test/resources/features/inntekt_endrer_seg.feature +++ b/src/test/resources/no/nav/familie/ef/sak/inntekt_endrer_seg.feature @@ -18,7 +18,7 @@ Egenskap: Andelhistorikk: Endring i inntekt Når lag andelhistorikk kjøres Så forvent følgende historikk - | BehandlingId | Endringstype | Endret i behandlingId | - | 1 | ERSTATTET | 2 | - | 2 | | | + | BehandlingId | Endringstype | Endret i behandlingId | Inntekt | + | 1 | ERSTATTET | 2 | 0 | + | 2 | | | 1 |