Skip to content

Commit

Permalink
Unittester
Browse files Browse the repository at this point in the history
  • Loading branch information
Bjodn committed Nov 25, 2024
1 parent d488638 commit 6231613
Show file tree
Hide file tree
Showing 2 changed files with 263 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,59 +28,42 @@ class AvkortingReparerAarsoppgjoeret(
alleVedtak: List<VedtakSammendragDto>,
): Avkorting {
val alleAarMedAarsoppgjoer = avkortingRepository.hentAlleAarsoppgjoer(sakId).map { it.aar }.distinct()
val manglerAar = alleAarMedAarsoppgjoer != forrigeAvkorting.aarsoppgjoer.map { it.aar }
val alleAarNyAvkortng = forrigeAvkorting.aarsoppgjoer.map { it.aar }
val manglerAar = alleAarMedAarsoppgjoer != alleAarNyAvkortng

if (manglerAar) {
val sisteAarsoppgjoer = forrigeAvkorting.aarsoppgjoer.maxBy { it.aar }
if (sisteAarsoppgjoer.aar < virkningstidspunkt.year) {
// TODO to unittester
if (virkningstidspunkt != YearMonth.of(virkningstidspunkt.year, 1)) {
throw FoersteRevurderingSenereEnnJanuar()
}
return forrigeAvkorting
}

// TODO en unittester - mock liste med vedtak som har opphør i mellom
val sisteBehandlingSammeAar = alleVedtak.sisteLoependeVedtakForAar(virkningstidspunkt.year).behandlingId
val manglendeAar =
when (alleAarNyAvkortng.contains(virkningstidspunkt.year)) {
true -> virkningstidspunkt.year.minus(1)
false -> virkningstidspunkt.year
}

val forrigeAvkortingSammeAar =
avkortingRepository.hentAvkorting(sisteBehandlingSammeAar)
?: throw TidligereAvkortingFinnesIkkeException(sisteBehandlingSammeAar)
val sisteBehandlingManglendeAar = alleVedtak.sisteLoependeVedtakForAar(manglendeAar).behandlingId
val sisteAvkortingManglendeAar =
avkortingRepository.hentAvkorting(sisteBehandlingManglendeAar)
?: throw TidligereAvkortingFinnesIkkeException(sisteBehandlingManglendeAar)

// TODO to unittester
val forrigeAvkortingHarAarsoppgjoerForVirk =
forrigeAvkortingSammeAar.aarsoppgjoer.map { it.aar }.contains(virkningstidspunkt.year)
return forrigeAvkortingSammeAar.copy(
aarsoppgjoer =
if (forrigeAvkortingHarAarsoppgjoerForVirk) {
val nyttAarsoppgjoer =
forrigeAvkorting.aarsoppgjoer.single {
it.aar == virkningstidspunkt.year
}
forrigeAvkortingSammeAar.aarsoppgjoer.erstattEtAarsoppgjoer(nyttAarsoppgjoer)
} else {
forrigeAvkortingSammeAar.aarsoppgjoer + forrigeAvkorting.aarsoppgjoer
},
return sisteAvkortingManglendeAar.copy(
aarsoppgjoer = sisteAvkortingManglendeAar.aarsoppgjoer + forrigeAvkorting.aarsoppgjoer,
)
} else {
// TODO en unittester
return forrigeAvkorting
}
}
}

fun List<Aarsoppgjoer>.erstattEtAarsoppgjoer(nyttAarsoppgjoer: Aarsoppgjoer) =
map {
when (it.aar) {
nyttAarsoppgjoer.aar -> nyttAarsoppgjoer
else -> it
}
}

fun List<VedtakSammendragDto>.sisteLoependeVedtakForAar(aar: Int) =
filter {
val vedtakAar = it.virkningstidspunkt?.year ?: throw InternfeilException("Vedtak mangler virk")
it.vedtakType != VedtakType.OPPHOER && (vedtakAar) != aar
it.vedtakType != VedtakType.OPPHOER && vedtakAar == aar
}.maxBy {
it.datoAttestert ?: throw InternfeilException("Iverksatt vedtak mangler dato attestert")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,249 @@
package avkorting

import io.kotest.matchers.shouldBe
import io.mockk.every
import io.mockk.mockk
import no.nav.etterlatte.avkorting.Avkorting
import no.nav.etterlatte.avkorting.AvkortingReparerAarsoppgjoeret
import no.nav.etterlatte.avkorting.AvkortingRepository
import no.nav.etterlatte.avkorting.FoersteRevurderingSenereEnnJanuar
import no.nav.etterlatte.beregning.regler.aarsoppgjoer
import no.nav.etterlatte.libs.common.sak.SakId
import no.nav.etterlatte.libs.common.vedtak.VedtakSammendragDto
import no.nav.etterlatte.libs.common.vedtak.VedtakType
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
import java.time.YearMonth
import java.time.ZoneId
import java.time.ZonedDateTime
import java.util.UUID

class AvkortingReparerAarsoppgjoeretTest {
private val repo = mockk<AvkortingRepository>()
private val service = AvkortingReparerAarsoppgjoeret(repo)

@Test
fun `hvis det ikke mangler tidligere aarsoppgjoer paa forrige avkorting skal den returneres`() {
val sakId = SakId(123L)
val forrigeAvkorting =
mockk<Avkorting> {
every { aarsoppgjoer } returns
listOf(
aarsoppgjoer(aar = 2024),
aarsoppgjoer(aar = 2025),
)
}
val virk = YearMonth.of(2024, 12)
val alleVedtak = emptyList<VedtakSammendragDto>()

every { repo.hentAlleAarsoppgjoer(sakId) } returns
listOf(
aarsoppgjoer(aar = 2024),
aarsoppgjoer(aar = 2025),
)

val reparertAvkorting =
service.hentSisteAvkortingMedReparertAarsoppgjoer(
forrigeAvkorting,
virk,
sakId,
alleVedtak,
)

reparertAvkorting shouldBe forrigeAvkorting
}

@Test
fun `hvis det mangler aarsoppgjoer men det er fordi nytt aarsoppgjoer er et nytt aar skal forrige avkorting returneres`() {
val sakId = SakId(123L)
val forrigeAvkorting =
mockk<Avkorting> {
every { aarsoppgjoer } returns
listOf(
aarsoppgjoer(aar = 2024),
)
}
val virk = YearMonth.of(2025, 1)
val alleVedtak = emptyList<VedtakSammendragDto>()

every { repo.hentAlleAarsoppgjoer(sakId) } returns
listOf(
aarsoppgjoer(aar = 2024),
aarsoppgjoer(aar = 2025),
)

val reparertAvkorting =
service.hentSisteAvkortingMedReparertAarsoppgjoer(
forrigeAvkorting,
virk,
sakId,
alleVedtak,
)

reparertAvkorting shouldBe forrigeAvkorting
}

@Test
fun `hvis det mangler aarsoppgjoer men det er fordi nytt aarsoppgjoer er et nytt aar skal det feile hvis virk ikke er januar`() {
val sakId = SakId(123L)
val forrigeAvkorting =
mockk<Avkorting> {
every { aarsoppgjoer } returns
listOf(
aarsoppgjoer(aar = 2024),
)
}
val virk = YearMonth.of(2025, 2)
val alleVedtak = emptyList<VedtakSammendragDto>()

every { repo.hentAlleAarsoppgjoer(sakId) } returns
listOf(
aarsoppgjoer(aar = 2024),
aarsoppgjoer(aar = 2025),
)

assertThrows<FoersteRevurderingSenereEnnJanuar> {
service.hentSisteAvkortingMedReparertAarsoppgjoer(
forrigeAvkorting,
virk,
sakId,
alleVedtak,
)
}
}

@Test
fun `hvis det mangler aarsoppgjoer for aar samme som virk skal det tidligere avkorting hentes for kopiering`() {
val sakId = SakId(123L)
val forrigeAvkorting =
Avkorting(
aarsoppgjoer = listOf(aarsoppgjoer(aar = 2025)),
)
val virk = YearMonth.of(2024, 11)

val sistebehandlingIdManglendeAar = UUID.randomUUID()
val sisteAvkortingMangelndeAar =
Avkorting(
aarsoppgjoer =
listOf(
aarsoppgjoer(aar = 2024),
),
)

val alleVedtak =
listOf(
vedtakSammendragDto(virk = YearMonth.of(2025, 1), datoAttestert = YearMonth.of(2024, 11)),
vedtakSammendragDto(
behandlingId = sistebehandlingIdManglendeAar,
virk = YearMonth.of(2024, 10),
datoAttestert = YearMonth.of(2024, 9),
),
vedtakSammendragDto(
type = VedtakType.INNVILGELSE,
virk = YearMonth.of(2024, 3),
datoAttestert = YearMonth.of(2024, 2),
),
)

every { repo.hentAlleAarsoppgjoer(sakId) } returns
listOf(
aarsoppgjoer(aar = 2024),
aarsoppgjoer(aar = 2025),
)
every { repo.hentAvkorting(sistebehandlingIdManglendeAar) } returns sisteAvkortingMangelndeAar

val reparertAvkorting =
service.hentSisteAvkortingMedReparertAarsoppgjoer(
forrigeAvkorting,
virk,
sakId,
alleVedtak,
)

reparertAvkorting.aarsoppgjoer.size shouldBe 2
reparertAvkorting.aarsoppgjoer[0].aar shouldBe 2024
reparertAvkorting.aarsoppgjoer[1].aar shouldBe 2025
}

@Test
fun `hvis det mangler aarsoppgjoer for tidligere aar enn virk skal disse hentes og legges til`() {
val sakId = SakId(123L)
val forrigeAvkorting =
Avkorting(
aarsoppgjoer = listOf(aarsoppgjoer(aar = 2025)),
)
val virk = YearMonth.of(2025, 2)

val sistebehandlingIdManglendeAar = UUID.randomUUID()
val sisteAvkortingManglendeAar =
Avkorting(
aarsoppgjoer =
listOf(
aarsoppgjoer(aar = 2024),
),
)

val alleVedtak =
listOf(
vedtakSammendragDto(virk = YearMonth.of(2025, 1), datoAttestert = YearMonth.of(2024, 11)),
vedtakSammendragDto(
behandlingId = sistebehandlingIdManglendeAar,
virk = YearMonth.of(2024, 10),
datoAttestert = YearMonth.of(2024, 9),
),
vedtakSammendragDto(
type = VedtakType.INNVILGELSE,
virk = YearMonth.of(2024, 3),
datoAttestert = YearMonth.of(2024, 2),
),
)

every { repo.hentAlleAarsoppgjoer(sakId) } returns
listOf(
aarsoppgjoer(aar = 2024),
aarsoppgjoer(aar = 2025),
)
every { repo.hentAvkorting(sistebehandlingIdManglendeAar) } returns sisteAvkortingManglendeAar

val reparertAvkorting =
service.hentSisteAvkortingMedReparertAarsoppgjoer(
forrigeAvkorting,
virk,
sakId,
alleVedtak,
)

reparertAvkorting.aarsoppgjoer.size shouldBe 2
reparertAvkorting.aarsoppgjoer[0].aar shouldBe 2024
reparertAvkorting.aarsoppgjoer[1].aar shouldBe 2025
}

companion object {
fun vedtakSammendragDto(
behandlingId: UUID = UUID.randomUUID(),
type: VedtakType = VedtakType.ENDRING,
datoAttestert: YearMonth,
virk: YearMonth,
) = VedtakSammendragDto(
id = "id",
behandlingId = behandlingId,
vedtakType = type,
behandlendeSaksbehandler = null,
datoFattet = null,
attesterendeSaksbehandler = null,
datoAttestert =
ZonedDateTime.of(
datoAttestert.year,
datoAttestert.monthValue,
1,
1,
1,
1,
1,
ZoneId.of("Europe/Oslo"),
),
virkningstidspunkt = virk,
opphoerFraOgMed = null,
)
}
}

0 comments on commit 6231613

Please sign in to comment.