-
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
3ac1b55
commit fb305b2
Showing
10 changed files
with
634 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) | ||
} | ||
} |
135 changes: 135 additions & 0 deletions
135
.../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,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) | ||
} | ||
} |
87 changes: 87 additions & 0 deletions
87
...in/no/nav/familie/ba/sak/kjerne/tidslinjefamiliefelles/transformasjon/MapTidslinjeTest.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.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)) | ||
} | ||
} | ||
} |
85 changes: 85 additions & 0 deletions
85
...v/familie/ba/sak/kjerne/tidslinjefamiliefelles/transformasjon/MånedFraMånedsskifteTest.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,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) | ||
} | ||
} |
Oops, something went wrong.