Skip to content

Commit

Permalink
Legg til tester for tidslinje fra familie-felles
Browse files Browse the repository at this point in the history
  • Loading branch information
MagnusTonnessen committed Feb 13, 2025
1 parent 5764419 commit 687c652
Show file tree
Hide file tree
Showing 12 changed files with 822 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles

import no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.util.jan
import no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.util.tilCharTidslinje
import no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.util.tilStringTidslinje
import no.nav.familie.tidslinje.utvidelser.kombinerMed
import no.nav.familie.tidslinje.utvidelser.tilPerioder
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test

class TidslinjeKombinasjonTest {
private val kombinator = { venstre: Char?, høyre: Char? ->
(venstre?.toString() ?: "").trim() + (høyre?.toString() ?: "").trim()
}

@Test
fun testEndeligeLikeLangTidslinjer() {
assertTidslinjer(
linje1 = "abcdef",
linje2 = "fedcba",
"af",
"be",
"cd",
"dc",
"eb",
"fa",
)
}

@Test
fun testEndeligeTidslinjerMedForskjelligLengde() {
assertTidslinjer(
linje1 = " ab",
linje2 = "fedcba",
"f",
"e",
"ad",
"bc",
"b",
"a",
)
}

@Test
fun testUendeligeTidslinjerFremover() {
assertTidslinjer(
linje1 = "abc>",
linje2 = "abacd>",
"aa",
"bb",
"ca",
"cc",
"cd",
">",
)
}

@Test
fun testUendeligeTidslinjerBeggeVeier() {
assertTidslinjer(
linje1 = "<a",
linje2 = "<abacd>",
"<",
"aa",
"b",
"a",
"c",
"d",
">",
)
}

private fun assertTidslinjer(
linje1: String,
linje2: String,
vararg forventet: String,
) {
val fom = jan(2020)
val char1 = linje1.tilCharTidslinje(fom)
val char2 = linje2.tilCharTidslinje(fom)

val kombinertePerioder = char1.kombinerMed(char2, kombinator).tilPerioder()
val forventedePerioder = forventet.toList().tilStringTidslinje(fom).tilPerioder()

Assertions.assertEquals(forventedePerioder, kombinertePerioder)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.matematikk

import no.nav.familie.ba.sak.datagenerator.randomAktør
import no.nav.familie.tidslinje.Periode
import no.nav.familie.tidslinje.tilTidslinje
import no.nav.familie.tidslinje.utvidelser.tilPerioder
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import java.math.BigDecimal
import java.time.LocalDate

class BigDecimalTidslinjeTest {
private val tidslinje1 =
listOf(BigDecimal(1.5), BigDecimal(2.5), BigDecimal(4))
.mapIndexed { index, verdi ->
Periode(
verdi = verdi,
fom = LocalDate.now().plusDays(index.toLong()),
tom = LocalDate.now().plusDays(index.toLong()),
)
}.tilTidslinje()

private val tidslinje2 =
listOf(BigDecimal(10), BigDecimal(10), BigDecimal(10))
.mapIndexed { index, verdi ->
Periode(
verdi = verdi,
fom = LocalDate.now().plusDays(index.toLong()),
tom = LocalDate.now().plusDays(index.toLong()),
)
}.tilTidslinje()

private val tidslinjeMap =
mapOf(
randomAktør() to tidslinje1,
randomAktør() to tidslinje2,
)

@Test
fun minus() {
val aktør = randomAktør()
val tidslinje1AsMap = mapOf(aktør to tidslinje1)
val tidslinje2AsMap = mapOf(aktør to tidslinje2)
val subtrahertePerioder = tidslinje2AsMap.minus(tidslinje1AsMap)[aktør]!!.tilPerioder().map { it.verdi }

assertThat(subtrahertePerioder).containsExactly(BigDecimal(8.5), BigDecimal(7.5), BigDecimal(6))
}

@Test
fun sum() {
val summertePerioder = tidslinjeMap.sum().tilPerioder()

assertThat(summertePerioder.map { it.verdi }).containsExactly(BigDecimal(11.5), BigDecimal(12.5), BigDecimal(14))
}

@Test
fun rundAvTilHeleTall() {
val avrundedeTall = tidslinje1.rundAvTilHeltall().tilPerioder().map { it.verdi }

assertThat(avrundedeTall).containsExactly(BigDecimal(2), BigDecimal(3), BigDecimal(4))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
package no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.transformasjon

import no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.util.apr
import no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.util.des
import no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.util.feb
import no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.util.jan
import no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.util.mar
import no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.util.tilCharTidslinje
import no.nav.familie.tidslinje.TidsEnhet.MÅNED
import no.nav.familie.tidslinje.beskjærEtter
import no.nav.familie.tidslinje.tomTidslinje
import no.nav.familie.tidslinje.utvidelser.tilPerioder
import org.junit.Assert.assertEquals
import org.junit.jupiter.api.Test

internal class BeskjæreTidslinjeTest {
@Test
fun `skal beskjære endelig tidslinje på begge sider`() {
val hovedlinje = "aaaaaa".tilCharTidslinje(des(2001))
val beskjæring = "bbb".tilCharTidslinje(feb(2002))

val faktiskePerioder = hovedlinje.beskjærEtter(beskjæring).tilPerioder()
val forventedePerioder = "aaa".tilCharTidslinje(feb(2002)).tilPerioder()

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun `skal beholde tidslinje som allerede er innenfor beskjæring`() {
val hovedlinje = "aaa".tilCharTidslinje(feb(2002))
val beskjæring = "bbbbbbbbb".tilCharTidslinje(des(2001))

val faktiskePerioder = hovedlinje.beskjærEtter(beskjæring).tilPerioder()
val forventedePerioder = "aaa".tilCharTidslinje(feb(2002)).tilPerioder()

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun `skal beholde tidslinje som er innenfor en uendelig beskjæring`() {
val hovedlinje = "aaa".tilCharTidslinje(feb(2002))
val beskjæring = "<b>".tilCharTidslinje(mar(2002))

val faktiskePerioder = hovedlinje.beskjærEtter(beskjæring).tilPerioder()
val forventedePerioder = "aaa".tilCharTidslinje(feb(2002)).tilPerioder()

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun `beskjæring utenfor tidslinjen skal gi tom tidslinje`() {
val hovedlinje = "aaaaaa".tilCharTidslinje(des(2001))
val beskjæring = "bbb".tilCharTidslinje(feb(2009))

val faktiskePerioder = hovedlinje.beskjærEtter(beskjæring).tilPerioder()
val forventedePerioder = tomTidslinje<Char>(beskjæring.startsTidspunkt, MÅNED).tilPerioder()

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun `skal beskjære uendelig tidslinje begge veier mot endelig tidsline`() {
val hovedlinje = "<aaaaaa>".tilCharTidslinje(des(2002))
val beskjæring = "bbb".tilCharTidslinje(feb(2002))

val faktiskePerioder = hovedlinje.beskjærEtter(beskjæring).tilPerioder()
val forventedePerioder = "aaa".tilCharTidslinje(feb(2002)).tilPerioder()

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun `skal beskjære tidslinje som går fra uendelig lenge siden til et endelig tidspunkt i fremtiden`() {
val hovedlinje = "<aaaaaa".tilCharTidslinje(des(2038))
val beskjæring = "bbbbb".tilCharTidslinje(feb(2002))

val faktiskePerioder = hovedlinje.beskjærEtter(beskjæring).tilPerioder()
val forventedePerioder = "aaaaa".tilCharTidslinje(feb(2002)).tilPerioder()

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun `skal beskjære tidslinje som går fra et endelig tidspunkt i fortiden til uendelig lenge til`() {
val hovedlinje = "aaaaaa>".tilCharTidslinje(des(1993))
val beskjæring = "bbbbb".tilCharTidslinje(feb(2002))

val faktiskePerioder = hovedlinje.beskjærEtter(beskjæring).tilPerioder()
val forventedePerioder = "aaaaa".tilCharTidslinje(feb(2002)).tilPerioder()

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun `skal beskjære uendelig fremtid slik at den blir kortest mulig`() {
val hovedlinje = "aaaaaa>".tilCharTidslinje(des(1993))
val beskjæring = "bbb>".tilCharTidslinje(feb(2002))

val faktiskePerioder = hovedlinje.beskjærEtter(beskjæring).tilPerioder()
val forventedePerioder = "a>".tilCharTidslinje(feb(2002)).tilPerioder()

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun `skal beskjære uendelig fortid slik at den inneholder tidligste fra-og-med, beskjæring er tidligst`() {
val hovedlinje = "<a".tilCharTidslinje(des(2038))
val beskjæring = "<bbb".tilCharTidslinje(feb(2002))

val faktiskePerioder = hovedlinje.beskjærEtter(beskjæring)
val forventedePerioder = "<a".tilCharTidslinje(apr(2002))

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun `skal beskjære uendelig fortid slik at den inneholder tidligste fra-og-med, beskjæring er senest`() {
val hovedlinje = "<bbb".tilCharTidslinje(feb(2002))
val beskjæring = "<a".tilCharTidslinje(des(2038))

val faktiskePerioder = hovedlinje.beskjærEtter(beskjæring).tilPerioder()
val forventedePerioder = "<bbb".tilCharTidslinje(feb(2002)).tilPerioder()

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun `beskjære mot tom tidslinje skal gi tom tidslinje`() {
val hovedlinje = "bbb".tilCharTidslinje(feb(2002))

val faktiskePerioder = hovedlinje.beskjærEtter(tomTidslinje<Char>()).tilPerioder()
val forventedePerioder = tomTidslinje<Char>(tidsEnhet = MÅNED).tilPerioder()

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun beskjærTilOgMedEtterTomTidslinje() {
val hovedlinje = "aaaaa".tilCharTidslinje(jan(2000))
val beskjæring = tomTidslinje<Char>()

val faktiskePerioder = hovedlinje.beskjærTilOgMedEtter(beskjæring).tilPerioder()
val forventedePerioder = tomTidslinje<Char>().tilPerioder()

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun beskjærTilOgMedEtter() {
val hovedlinje = "aaaaa".tilCharTidslinje(jan(2000))
val beskjæring = "bbb".tilCharTidslinje(feb(2000))

val faktiskePerioder = hovedlinje.beskjærTilOgMedEtter(beskjæring).tilPerioder()
val forventedePerioder = "aaaa".tilCharTidslinje(jan(2000)).tilPerioder()

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun beskjær() {
val hovedlinje = "aaaaa".tilCharTidslinje(jan(2000))
val fom = 1.feb(2000)
val tom = 30.apr(2000)

val faktiskePerioder = hovedlinje.beskjær(fom, tom).tilPerioder()
val forventedePerioder = "aaa".tilCharTidslinje(feb(2000)).tilPerioder()

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun beskjærFom() {
val hovedlinje = "aaaaa".tilCharTidslinje(jan(2000))
val fom = 1.feb(2000)

val faktiskePerioder = hovedlinje.beskjærFraOgMed(fom).tilPerioder()
val forventedePerioder = "aaaa".tilCharTidslinje(feb(2000)).tilPerioder()

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun beskjærTom() {
val hovedlinje = "aaaaa".tilCharTidslinje(jan(2000))
val tom = 30.apr(2000)

val faktiskePerioder = hovedlinje.beskjærTilOgMed(tom).tilPerioder()
val forventedePerioder = "aaaa".tilCharTidslinje(jan(2000)).tilPerioder()

assertEquals(forventedePerioder, faktiskePerioder)
}

@Test
fun beskjærTomMap() {
val hovedlinje1 = 1 to "aaaaa".tilCharTidslinje(jan(2000))
val hovedlinje2 = 2 to "aaaaa".tilCharTidslinje(feb(2000))
val tidslinjeMap = mapOf(hovedlinje1, hovedlinje2)
val tom = 30.apr(2000)

val faktiskePerioder = tidslinjeMap.beskjærTilOgMed(tom)
val forventedePerioder1 = "aaaa".tilCharTidslinje(jan(2000)).tilPerioder()
val forventedePerioder2 = "aaa".tilCharTidslinje(feb(2000)).tilPerioder()

assertEquals(forventedePerioder1, faktiskePerioder[1]!!.tilPerioder())
assertEquals(forventedePerioder2, faktiskePerioder[2]!!.tilPerioder())
}

@Test
fun `beskjæring av tom tidslinje skal gi tom tidslinje`() {
val hovedlinje = tomTidslinje<Char>()
val beskjæring = "aaa".tilCharTidslinje(jan(2000))
val forventedePerioder = tomTidslinje<Char>().tilPerioder()

val faktiskePerioder =
listOf(
hovedlinje.beskjærEtter(beskjæring).tilPerioder(),
hovedlinje.beskjærTilOgMedEtter(beskjæring).tilPerioder(),
hovedlinje.beskjærTilOgMed(beskjæring.startsTidspunkt).tilPerioder(),
hovedlinje.beskjærFraOgMed(beskjæring.kalkulerSluttTidspunkt()).tilPerioder(),
hovedlinje.beskjær(beskjæring.startsTidspunkt, beskjæring.kalkulerSluttTidspunkt()).tilPerioder(),
)

faktiskePerioder.forEach { assertEquals(forventedePerioder, it) }
}
}
Loading

0 comments on commit 687c652

Please sign in to comment.