From bb6ffa1ec3769610ddac8c99607a65e237762fba Mon Sep 17 00:00:00 2001 From: david steinsland Date: Fri, 26 Jan 2024 14:19:50 +0100 Subject: [PATCH] =?UTF-8?q?ignorerer=20nye=20generasjoner=20om=20de=20er?= =?UTF-8?q?=20h=C3=A5ndtert=20f=C3=B8r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spekemat/foredler/P\303\270lsefabrikk.kt" | 15 ++-- .../Duplikath\303\245ndteringTest.kt" | 53 ++++++++++++++ .../spekemat/foredler/P\303\270lseTest.kt" | 49 +++++++++++++ .../foredler/P\303\270lsefabrikkTest.kt" | 72 +------------------ 4 files changed, 110 insertions(+), 79 deletions(-) create mode 100644 "foredler/src/test/kotlin/no/nav/helse/spekemat/foredler/Duplikath\303\245ndteringTest.kt" create mode 100644 "foredler/src/test/kotlin/no/nav/helse/spekemat/foredler/P\303\270lseTest.kt" diff --git "a/foredler/src/main/kotlin/no/nav/helse/spekemat/foredler/P\303\270lsefabrikk.kt" "b/foredler/src/main/kotlin/no/nav/helse/spekemat/foredler/P\303\270lsefabrikk.kt" index a6d283a..dbcf596 100644 --- "a/foredler/src/main/kotlin/no/nav/helse/spekemat/foredler/P\303\270lsefabrikk.kt" +++ "b/foredler/src/main/kotlin/no/nav/helse/spekemat/foredler/P\303\270lsefabrikk.kt" @@ -14,10 +14,16 @@ class Pølsefabrikk private constructor( } fun nyPølse(pølse: Pølse) { + if (håndtertFør(pølse)) return if (skalLageNyrad(pølse)) return lagNyRad(pølse) pakken[0] = pakken[0].nyPølse(pølse) } + private fun håndtertFør(pølse: Pølse) = + pakken.any { rad -> + rad.pølser.any { it.generasjonId == pølse.generasjonId } + } + fun oppdaterPølse(vedtaksperiodeId: UUID, generasjonId: UUID, status: Pølsestatus): PølseDto { pakken[0] = pakken[0].oppdaterPølse(vedtaksperiodeId, generasjonId, status) return pakken[0].pølser.single { it.vedtaksperiodeId == vedtaksperiodeId }.dto() @@ -55,8 +61,6 @@ data class Pølserad( .copy(kildeTilRad = pølse.kilde) } fun nyPølse(pølse: Pølse): Pølserad { - // har håndtert pølsen før - if (pølser.any { it.generasjonId == pølse.generasjonId }) return this return this.copy( pølser = pølser .filterNot { it.vedtaksperiodeId == pølse.vedtaksperiodeId } @@ -91,12 +95,7 @@ data class Pølse( ) { fun erNyPølseAv(other: Pølse): Boolean { // må være samme vedtaksperiode - if (this.vedtaksperiodeId != other.vedtaksperiodeId) return false - // lik kilde == duplikat av noe vi har håndtert før - if (this.kilde == other.kilde) return false - // lik generasjonId == duplikat av noe vi har håndtert før - if (this.generasjonId == other.generasjonId) return false - return this.status == ÅPEN && other.status != ÅPEN + return this.vedtaksperiodeId == other.vedtaksperiodeId } fun dto() = PølseDto( vedtaksperiodeId = vedtaksperiodeId, diff --git "a/foredler/src/test/kotlin/no/nav/helse/spekemat/foredler/Duplikath\303\245ndteringTest.kt" "b/foredler/src/test/kotlin/no/nav/helse/spekemat/foredler/Duplikath\303\245ndteringTest.kt" new file mode 100644 index 0000000..9a8c072 --- /dev/null +++ "b/foredler/src/test/kotlin/no/nav/helse/spekemat/foredler/Duplikath\303\245ndteringTest.kt" @@ -0,0 +1,53 @@ +package no.nav.helse.spekemat.foredler + +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test +import java.util.* + +class DuplikathåndteringTest : PølseTest() { + + @Test + fun `en duplikat ny pølse`() { + val p1 = 1.januar til 5.januar + val p2 = p1 fordi UUID.randomUUID() + + fabrikk.nyPølse(p1) + fabrikk.nyPølse(p2) + + val result = fabrikk.pakke() + assertEquals(1, result.size) // forventer én rad + assertEquals(setOf(p1), result.single()) // rekkefølgen på rad 1 + } + + @Test + fun `en duplikat ny pølse etter at pølsen er lukket`() { + val p1 = 1.januar til 5.januar + val p2 = p1 fordi UUID.randomUUID() + + fabrikk.nyPølse(p1) + fabrikk.lukketPølse(p1) + fabrikk.nyPølse(p2) // f.eks. at spekemat har lest inn generasjon_opprettet på nytt, eller at noen har sendt feil + + val result = fabrikk.pakke() + assertEquals(1, result.size) // forventer én rad + assertEquals(setOf(p1.lukket()), result.single()) // rekkefølgen på rad 1 + } + + @Test + fun `en duplikat ny pølse etter at pølsen er revurdert`() { + val p1 = 1.januar til 5.januar + val p1Revurdering = p1.nyGenerasjon() + val p2 = p1 fordi UUID.randomUUID() + + fabrikk.nyPølse(p1) + fabrikk.lukketPølse(p1) + fabrikk.nyPølse(p1Revurdering) + fabrikk.lukketPølse(p1Revurdering.lukket()) + fabrikk.nyPølse(p2) // f.eks. at spekemat har lest inn generasjon_opprettet på nytt, eller at noen har sendt feil + + val result = fabrikk.pakke() + assertEquals(2, result.size) + assertEquals(setOf(p1Revurdering.lukket()), result[0].pølser) + assertEquals(setOf(p1.lukket()), result[1].pølser) + } +} \ No newline at end of file diff --git "a/foredler/src/test/kotlin/no/nav/helse/spekemat/foredler/P\303\270lseTest.kt" "b/foredler/src/test/kotlin/no/nav/helse/spekemat/foredler/P\303\270lseTest.kt" new file mode 100644 index 0000000..9445e30 --- /dev/null +++ "b/foredler/src/test/kotlin/no/nav/helse/spekemat/foredler/P\303\270lseTest.kt" @@ -0,0 +1,49 @@ +package no.nav.helse.spekemat.foredler + +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.BeforeEach +import java.time.LocalDate +import java.util.* + +abstract class PølseTest { + protected lateinit var fabrikk: Pølsefabrikk + + @BeforeEach + fun setup() { + fabrikk = Pølsefabrikk() + } + + private fun pølse( + vedtaksperiodeId: UUID, + kilde: UUID = UUID.randomUUID(), + status: Pølsestatus = Pølsestatus.ÅPEN + ) = Pølse(vedtaksperiodeId, UUID.randomUUID(), status, kilde) + + protected infix fun LocalDate.til(tom: LocalDate) = pølse(UUID.randomUUID()) + protected infix fun Pølse.som(vedtaksperiodeId: UUID) = this.copy(vedtaksperiodeId = vedtaksperiodeId) + protected fun Pølse.nyGenerasjon(generasjonId: UUID = UUID.randomUUID(), kilde: UUID = UUID.randomUUID()) = fordi(kilde).copy(generasjonId = UUID.randomUUID()) + protected infix fun Pølse.fordi(kilde: UUID) = this.copy(kilde = kilde) + + protected fun Pølse.lukket() = this.copy(status = Pølsestatus.LUKKET) + protected fun Pølse.forkastet() = this.copy(status = Pølsestatus.FORKASTET) + + protected val mandag = LocalDate.of(2018, 1, 1) + protected val Int.januar get() = mandag.withDayOfMonth(this).withMonth(1) + + protected fun assertEquals(expected: Set, actual: PølseradDto) { + assertEquals(expected, actual.pølser) + } + protected fun assertEquals(expected: Set, actual: List) { + assertEquals(expected.size, actual.size) + val ingenMatch = expected.map { it.dto() }.filterNot { it in actual } + assertEquals(emptyList(), ingenMatch) { "Det er pølser som ikke finnes i actual" } + } + + protected fun Pølsefabrikk.lukketPølse(pølse: Pølse) { + this.oppdaterPølse(pølse.vedtaksperiodeId, pølse.generasjonId, Pølsestatus.LUKKET) + } + + protected fun Pølsefabrikk.pølseForkastet(pølse: Pølse) { + this.oppdaterPølse(pølse.vedtaksperiodeId, pølse.generasjonId, Pølsestatus.FORKASTET) + } +} \ No newline at end of file diff --git "a/foredler/src/test/kotlin/no/nav/helse/spekemat/foredler/P\303\270lsefabrikkTest.kt" "b/foredler/src/test/kotlin/no/nav/helse/spekemat/foredler/P\303\270lsefabrikkTest.kt" index 779b574..ee17644 100644 --- "a/foredler/src/test/kotlin/no/nav/helse/spekemat/foredler/P\303\270lsefabrikkTest.kt" +++ "b/foredler/src/test/kotlin/no/nav/helse/spekemat/foredler/P\303\270lsefabrikkTest.kt" @@ -1,19 +1,10 @@ package no.nav.helse.spekemat.foredler import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import java.time.LocalDate import java.util.* -class PølsefabrikkTest { - - private lateinit var fabrikk: Pølsefabrikk - - @BeforeEach - fun setup() { - fabrikk = Pølsefabrikk() - } +class PølsefabrikkTest : PølseTest() { @Test fun `en ny pølse`() { @@ -26,33 +17,6 @@ class PølsefabrikkTest { assertEquals(setOf(p1), result.single()) // rekkefølgen på rad 1 } - @Test - fun `en duplikat ny pølse`() { - val p1 = 1.januar til 5.januar - val p2 = p1 fordi UUID.randomUUID() - - fabrikk.nyPølse(p1) - fabrikk.nyPølse(p2) - - val result = fabrikk.pakke() - assertEquals(1, result.size) // forventer én rad - assertEquals(setOf(p1), result.single()) // rekkefølgen på rad 1 - } - - @Test - fun `en duplikat ny pølse etter at pølsen er lukket`() { - val p1 = 1.januar til 5.januar - val p2 = p1 fordi UUID.randomUUID() - - fabrikk.nyPølse(p1) - fabrikk.lukketPølse(p1) - fabrikk.nyPølse(p2) // f.eks. at spekemat har lest inn generasjon_opprettet på nytt, eller at noen har sendt feil - - val result = fabrikk.pakke() - assertEquals(1, result.size) // forventer én rad - assertEquals(setOf(p1.lukket()), result.single()) // rekkefølgen på rad 1 - } - @Test fun `en forkastet ny pølse`() { val p1 = 1.januar til 5.januar @@ -239,38 +203,4 @@ class PølsefabrikkTest { assertEquals(setOf(p1Revurdering.lukket()), result[1]) assertEquals(setOf(p3.lukket(), p2.lukket(), p1.lukket()), result[2]) } - - private fun pølse( - vedtaksperiodeId: UUID, - kilde: UUID = UUID.randomUUID(), - status: Pølsestatus = Pølsestatus.ÅPEN - ) = Pølse(vedtaksperiodeId, UUID.randomUUID(), status, kilde) - - private infix fun LocalDate.til(tom: LocalDate) = pølse(UUID.randomUUID()) - private infix fun Pølse.som(vedtaksperiodeId: UUID) = this.copy(vedtaksperiodeId = vedtaksperiodeId) - private fun Pølse.nyGenerasjon(generasjonId: UUID = UUID.randomUUID(), kilde: UUID = UUID.randomUUID()) = fordi(kilde).copy(generasjonId = UUID.randomUUID()) - private infix fun Pølse.fordi(kilde: UUID) = this.copy(kilde = kilde) - - private fun Pølse.lukket() = this.copy(status = Pølsestatus.LUKKET) - private fun Pølse.forkastet() = this.copy(status = Pølsestatus.FORKASTET) - - private val mandag = LocalDate.of(2018, 1, 1) - private val Int.januar get() = mandag.withDayOfMonth(this).withMonth(1) - - private fun assertEquals(expected: Set, actual: PølseradDto) { - assertEquals(expected, actual.pølser) - } - private fun assertEquals(expected: Set, actual: List) { - assertEquals(expected.size, actual.size) - val ingenMatch = expected.map { it.dto() }.filterNot { it in actual } - assertEquals(emptyList(), ingenMatch) { "Det er pølser som ikke finnes i actual" } - } - - private fun Pølsefabrikk.lukketPølse(pølse: Pølse) { - this.oppdaterPølse(pølse.vedtaksperiodeId, pølse.generasjonId, Pølsestatus.LUKKET) - } - - private fun Pølsefabrikk.pølseForkastet(pølse: Pølse) { - this.oppdaterPølse(pølse.vedtaksperiodeId, pølse.generasjonId, Pølsestatus.FORKASTET) - } } \ No newline at end of file