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 1e7d382 commit ed804db
Show file tree
Hide file tree
Showing 10 changed files with 634 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,135 @@
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.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)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.transformasjon

import no.nav.familie.ba.sak.kjerne.tidslinje.Periode
import no.nav.familie.ba.sak.kjerne.tidslinje.fraOgMed
import no.nav.familie.ba.sak.kjerne.tidslinje.komposisjon.Innhold
import no.nav.familie.ba.sak.kjerne.tidslinje.komposisjon.innholdForTidspunkt
import no.nav.familie.ba.sak.kjerne.tidslinje.tidslinje
import no.nav.familie.ba.sak.kjerne.tidslinje.tidsrom.rangeTo
import no.nav.familie.ba.sak.kjerne.tidslinje.tilOgMed
import no.nav.familie.ba.sak.kjerne.tidslinje.transformasjon.map
import no.nav.familie.ba.sak.kjerne.tidslinje.transformasjon.mapIkkeNull
import no.nav.familie.ba.sak.kjerne.tidslinje.util.apr
import no.nav.familie.ba.sak.kjerne.tidslinje.util.aug
import no.nav.familie.ba.sak.kjerne.tidslinje.util.des
import no.nav.familie.ba.sak.kjerne.tidslinje.util.feb
import no.nav.familie.ba.sak.kjerne.tidslinje.util.jan
import no.nav.familie.ba.sak.kjerne.tidslinje.util.jul
import no.nav.familie.ba.sak.kjerne.tidslinje.util.jun
import no.nav.familie.ba.sak.kjerne.tidslinje.util.mai
import no.nav.familie.ba.sak.kjerne.tidslinje.util.mar
import no.nav.familie.ba.sak.kjerne.tidslinje.util.nov
import no.nav.familie.ba.sak.kjerne.tidslinje.util.okt
import no.nav.familie.ba.sak.kjerne.tidslinje.util.sep
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test

internal class MapTidslinjeTest {
val tidslinje =
tidslinje {
listOf(
Periode(aug(2019), nov(2019), null),
Periode(jan(2020), mar(2020), "A"),
Periode(apr(2020), jun(2020), null),
Periode(jul(2020), aug(2020), "B"),
Periode(mar(2021), okt(2021), "C"),
Periode(jan(2022), mai(2022), null),
)
}

@Test
fun `skal mappe innhold og ivareta null`() {
val faktisk = tidslinje.map { it?.lowercase() }

val forventet =
tidslinje {
listOf(
Periode(aug(2019), nov(2019), null),
Periode(jan(2020), mar(2020), "a"),
Periode(apr(2020), jun(2020), null),
Periode(jul(2020), aug(2020), "b"),
Periode(mar(2021), okt(2021), "c"),
Periode(jan(2022), mai(2022), null),
)
}

assertEquals(forventet, faktisk)
assertEquals(aug(2019), faktisk.fraOgMed())
assertEquals(mai(2022), faktisk.tilOgMed())
}

@Test
fun `skal mappe innhold og fjerne null`() {
val faktisk = tidslinje.mapIkkeNull { it.lowercase() }

val forventet =
tidslinje {
listOf(
Periode(jan(2020), mar(2020), "a"),
Periode(jul(2020), aug(2020), "b"),
Periode(mar(2021), okt(2021), "c"),
)
}

assertEquals(forventet, faktisk)
assertEquals(jan(2020), faktisk.fraOgMed())
assertEquals(okt(2021), faktisk.tilOgMed())

(
(aug(2019)..des(2019))
.plus(apr(2020)..jun(2020))
.plus(sep(2020)..feb(2021))
.plus(nov(2021)..mai(2022))
).forEach {
assertEquals(Innhold.utenInnhold<String>(), faktisk.innholdForTidspunkt(it))
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.transformasjon

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.nov
import no.nav.familie.ba.sak.kjerne.tidslinjefamiliefelles.util.tilCharTidslinje
import no.nav.familie.tidslinje.TidsEnhet
import no.nav.familie.tidslinje.tomTidslinje
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test

internal class MånedFraMånedsskifteTest {
@Test
fun `skal gi tom tidslinje hvis alle dager er inni én måned`() {
val dagTidslinje = "aaaaaa".tilCharTidslinje(7.des(2021))
val månedTidslinje = dagTidslinje.tilMånedFraMånedsskifteIkkeNull { _, _ -> 'b' }

val forventet = tomTidslinje<Char>(1.jan(2022), tidsEnhet = TidsEnhet.MÅNED)

assertEquals(forventet, månedTidslinje)
}

@Test
fun `skal gi én måned ved ett månedsskifte`() {
val dagTidslinje = "abcdefg".tilCharTidslinje(28.nov(2021))
val månedTidslinje =
dagTidslinje
.tilMånedFraMånedsskifteIkkeNull { _, verdiFørsteDagDenneMåned ->
verdiFørsteDagDenneMåned
}

assertEquals("d".tilCharTidslinje(des(2021)), månedTidslinje)
}

@Test
fun `skal gi to måneder ved to månedsskifter`() {
val dagTidslinje = "abcdefghijklmnopqrstuvwxyzæøå0123456789".tilCharTidslinje(28.nov(2021))
val månedTidslinje =
dagTidslinje
.tilMånedFraMånedsskifteIkkeNull { verdiSisteDagForrigeMåned, _ ->
verdiSisteDagForrigeMåned
}

assertEquals("c4".tilCharTidslinje(des(2021)), månedTidslinje)
}

@Test
fun `skal gi tom tidslinje hvis månedsskiftet mangler verdi på begge sider`() {
val dagTidslinje =
"abcdefghijklmnopqrstuvwxyzæøå0123456789"
.tilCharTidslinje(28.nov(2021))
.mapIkkeNull {
when (it) {
'c', 'd', '4', '5' -> null // 30/11, 1/12, 31/12 og 1/1 mangler verdi
else -> it
}
}

val månedTidslinje = dagTidslinje.tilMånedFraMånedsskifteIkkeNull { _, _ -> 'A' }

val forventet = tomTidslinje<Char>(1.feb(2022), tidsEnhet = TidsEnhet.MÅNED)

assertEquals(forventet, månedTidslinje)
}

@Test
fun `skal gi tom tidslinje hvis månedsskiftet mangler verdi på én av sidene`() {
val dagTidslinje =
"abcdefghijklmnopqrstuvwxyzæøå0123456789"
.tilCharTidslinje(28.nov(2021))
.mapIkkeNull {
when (it) {
'c', '5' -> null // 30/11 og 1/1 mangler verdi
else -> it
}
}

val månedTidslinje = dagTidslinje.tilMånedFraMånedsskifteIkkeNull { _, _ -> 'A' }

val forventet = tomTidslinje<Char>(1.feb(2022), tidsEnhet = TidsEnhet.MÅNED)

assertEquals(forventet, månedTidslinje)
}
}
Loading

0 comments on commit ed804db

Please sign in to comment.