Skip to content

Commit

Permalink
Forenkling og test (#875)
Browse files Browse the repository at this point in the history
  • Loading branch information
espenjv authored Jan 5, 2024
1 parent f26cd0c commit c260892
Show file tree
Hide file tree
Showing 2 changed files with 202 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ internal object PeriodeKnekker {
)
knekkpunkter.forEach { knekkpunkt ->
val knekkDato = knekkpunkt.knekk
if (!knekkDato.isEqual(søktUttaksperiode.periode.fom) && !knekkDato.isBefore(søktUttaksperiode.periode.fom) && !knekkDato.isAfter(søktUttaksperiode.periode.tom)) {
if (knekkDato.isAfter(søktUttaksperiode.periode.fom) && !knekkDato.isAfter(søktUttaksperiode.periode.tom)) {
val periode = LukketPeriode(
fom = rest.periode.fom,
tom = knekkDato.minusDays(1)
Expand Down Expand Up @@ -47,4 +47,4 @@ internal object PeriodeKnekker {
val periode: LukketPeriode,
val knekkpunkttyper : Set<KnekkpunktType> = setOf()
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
package no.nav.pleiepengerbarn.uttak.regler

import no.nav.pleiepengerbarn.uttak.kontrakter.KnekkpunktType
import no.nav.pleiepengerbarn.uttak.kontrakter.LukketPeriode
import no.nav.pleiepengerbarn.uttak.kontrakter.SøktUttak
import no.nav.pleiepengerbarn.uttak.regler.domene.Knekkpunkt
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Assertions.*

import org.junit.jupiter.api.Test
import java.time.Duration
import java.time.LocalDate
import java.util.SortedSet
import java.util.TreeSet

class PeriodeKnekkerTest {

@Test
fun `skal legge til knekkpunkt om knekkpunkt lik tom`() {

val fom = LocalDate.now()
val tom = fom.plusDays(3)
val søktUttak = SøktUttak(LukketPeriode(fom, tom), Duration.ofHours(2))
val knekk = tom
val resultat =
PeriodeKnekker.knekk(listOf(søktUttak), setOf(Knekkpunkt(knekk, setOf(KnekkpunktType.ARBEID))).toSortedSet(compareBy { it.knekk }))

assertThat(resultat.size).isEqualTo(2);
val iterator = resultat.entries.iterator()
val førsteDel = iterator.next()
assertThat(førsteDel.key.periode.fom).isEqualTo(fom);
assertThat(førsteDel.key.periode.tom).isEqualTo(knekk.minusDays(1));
assertThat(førsteDel.value.size).isEqualTo(0);

val andreDel = iterator.next()
assertThat(andreDel.key.periode.fom).isEqualTo(knekk);
assertThat(andreDel.key.periode.tom).isEqualTo(tom);
assertThat(andreDel.value.size).isEqualTo(1);
assertThat(andreDel.value.first()).isEqualTo(KnekkpunktType.ARBEID);

}

@Test
fun `skal legge til knekkpunkt om knekkpunkt lik midt i periode`() {

val fom = LocalDate.now()
val tom = fom.plusDays(3)
val søktUttak = SøktUttak(LukketPeriode(fom, tom), Duration.ofHours(2))
val knekk = tom.minusDays(1)
val resultat =
PeriodeKnekker.knekk(listOf(søktUttak), setOf(Knekkpunkt(knekk, setOf(KnekkpunktType.ARBEID))).toSortedSet(compareBy { it.knekk }))

assertThat(resultat.size).isEqualTo(2);
val iterator = resultat.entries.iterator()
val førsteDel = iterator.next()
assertThat(førsteDel.key.periode.fom).isEqualTo(fom);
assertThat(førsteDel.key.periode.tom).isEqualTo(knekk.minusDays(1));
assertThat(førsteDel.value.size).isEqualTo(0);

val andreDel = iterator.next()
assertThat(andreDel.key.periode.fom).isEqualTo(knekk);
assertThat(andreDel.key.periode.tom).isEqualTo(tom);
assertThat(andreDel.value.size).isEqualTo(1);
assertThat(andreDel.value.first()).isEqualTo(KnekkpunktType.ARBEID);

}

@Test
fun `skal ikke legge til knekkpunkt om knekkpunkt lik fom`() {

val fom = LocalDate.now()
val tom = fom.plusDays(3)
val søktUttak = SøktUttak(LukketPeriode(fom, tom), Duration.ofHours(2))
val knekk = fom
val resultat =
PeriodeKnekker.knekk(listOf(søktUttak), setOf(Knekkpunkt(knekk, setOf(KnekkpunktType.ARBEID))).toSortedSet(compareBy { it.knekk }))

assertThat(resultat.size).isEqualTo(1);
val iterator = resultat.entries.iterator()
val førsteDel = iterator.next()
assertThat(førsteDel.key.periode.fom).isEqualTo(fom);
assertThat(førsteDel.key.periode.tom).isEqualTo(tom);
assertThat(førsteDel.value.size).isEqualTo(0);
}

@Test
fun `skal legge til flere knekkpunkter om knekkpunkt lik midt i periode`() {

val fom = LocalDate.now()
val tom = fom.plusDays(5)
val søktUttak = SøktUttak(LukketPeriode(fom, tom), Duration.ofHours(2))
val knekk1 = fom.plusDays(1)
val knekk2 = fom.plusDays(3)

val resultat =
PeriodeKnekker.knekk(listOf(søktUttak),
setOf(
Knekkpunkt(knekk1, setOf(KnekkpunktType.ARBEID)),
Knekkpunkt(knekk2, setOf(KnekkpunktType.ARBEID))).toSortedSet(compareBy { it.knekk }))

assertThat(resultat.size).isEqualTo(3);
val iterator = resultat.entries.iterator()
val førsteDel = iterator.next()
assertThat(førsteDel.key.periode.fom).isEqualTo(fom);
assertThat(førsteDel.key.periode.tom).isEqualTo(knekk1.minusDays(1));
assertThat(førsteDel.value.size).isEqualTo(0);

val andreDel = iterator.next()
assertThat(andreDel.key.periode.fom).isEqualTo(knekk1);
assertThat(andreDel.key.periode.tom).isEqualTo(knekk2.minusDays(1));
assertThat(andreDel.value.size).isEqualTo(1);
assertThat(andreDel.value.first()).isEqualTo(KnekkpunktType.ARBEID);

val tredjeDel = iterator.next()
assertThat(tredjeDel.key.periode.fom).isEqualTo(knekk2);
assertThat(tredjeDel.key.periode.tom).isEqualTo(tom);
assertThat(tredjeDel.value.size).isEqualTo(1);
assertThat(tredjeDel.value.first()).isEqualTo(KnekkpunktType.ARBEID);

}


@Test
fun `skal ikke legge til knekkpunkt utenfor søknadsperiode`() {

val fom = LocalDate.now()
val tom = fom.plusDays(5)
val søktUttak = SøktUttak(LukketPeriode(fom, tom), Duration.ofHours(2))
val knekk1 = fom.minusDays(1)
val knekk2 = fom.plusDays(3)

val resultat =
PeriodeKnekker.knekk(listOf(søktUttak),
setOf(
Knekkpunkt(knekk1, setOf(KnekkpunktType.ARBEID)),
Knekkpunkt(knekk2, setOf(KnekkpunktType.ARBEID))).toSortedSet(compareBy { it.knekk }))

assertThat(resultat.size).isEqualTo(2);
val iterator = resultat.entries.iterator()
val førsteDel = iterator.next()
assertThat(førsteDel.key.periode.fom).isEqualTo(fom);
assertThat(førsteDel.key.periode.tom).isEqualTo(knekk2.minusDays(1));
assertThat(førsteDel.value.size).isEqualTo(0);

val andreDel = iterator.next()
assertThat(andreDel.key.periode.fom).isEqualTo(knekk2);
assertThat(andreDel.key.periode.tom).isEqualTo(tom);
assertThat(andreDel.value.size).isEqualTo(1);
assertThat(andreDel.value.first()).isEqualTo(KnekkpunktType.ARBEID);

}

@Test
fun `skal legge til knekkpunkt for flere søknadsperioder`() {

val fom1 = LocalDate.now()
val fom2 = LocalDate.now().plusDays(3)
val tom1 = fom2.minusDays(1)
val tom2 = fom2.plusDays(5)

val søktUttak1 = SøktUttak(LukketPeriode(fom1, tom1), Duration.ofHours(2))
val knekk1 = fom1.plusDays(1)

val søktUttak2 = SøktUttak(LukketPeriode(fom2, tom2), Duration.ofHours(2))

val knekk2 = fom2.plusDays(3)

val resultat =
PeriodeKnekker.knekk(listOf(søktUttak1, søktUttak2),
setOf(
Knekkpunkt(knekk1, setOf(KnekkpunktType.ARBEID)),
Knekkpunkt(knekk2, setOf(KnekkpunktType.ARBEID))).toSortedSet(compareBy { it.knekk }))

assertThat(resultat.size).isEqualTo(4);
val iterator = resultat.entries.iterator()
val førsteDel = iterator.next()
assertThat(førsteDel.key.periode.fom).isEqualTo(fom1);
assertThat(førsteDel.key.periode.tom).isEqualTo(knekk1.minusDays(1));
assertThat(førsteDel.value.size).isEqualTo(0);

val andreDel = iterator.next()
assertThat(andreDel.key.periode.fom).isEqualTo(knekk1);
assertThat(andreDel.key.periode.tom).isEqualTo(tom1);
assertThat(andreDel.value.size).isEqualTo(1);
assertThat(andreDel.value.first()).isEqualTo(KnekkpunktType.ARBEID);

val tredjeDel = iterator.next()
assertThat(tredjeDel.key.periode.fom).isEqualTo(fom2);
assertThat(tredjeDel.key.periode.tom).isEqualTo(knekk2.minusDays(1));
assertThat(tredjeDel.value.size).isEqualTo(0);

val fjerdeDel = iterator.next()
assertThat(fjerdeDel.key.periode.fom).isEqualTo(knekk2);
assertThat(fjerdeDel.key.periode.tom).isEqualTo(tom2);
assertThat(fjerdeDel.value.size).isEqualTo(1);
assertThat(fjerdeDel.value.first()).isEqualTo(KnekkpunktType.ARBEID);

}

}

0 comments on commit c260892

Please sign in to comment.