-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Legg til tester for tidslinje fra familie-felles
- Loading branch information
1 parent
5764419
commit 687c652
Showing
12 changed files
with
822 additions
and
0 deletions.
There are no files selected for viewing
87 changes: 87 additions & 0 deletions
87
...er/kotlin/no/nav/familie/ba/sak/kjerne/tidslinjefamiliefelles/TidslinjeKombinasjonTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} | ||
} |
62 changes: 62 additions & 0 deletions
62
...no/nav/familie/ba/sak/kjerne/tidslinjefamiliefelles/matematikk/BigDecimalTidslinjeTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) | ||
} | ||
} |
225 changes: 225 additions & 0 deletions
225
.../nav/familie/ba/sak/kjerne/tidslinjefamiliefelles/transformasjon/BeskjæreTidslinjeTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) } | ||
} | ||
} |
Oops, something went wrong.