Skip to content

Commit

Permalink
duplikathåndtering
Browse files Browse the repository at this point in the history
hvis spekemat skal migreres 'on the fly', dvs. at den kontakter spleis-api før den oppretter en person første gang, så må vi hensynta at hendelsen som leses inn er gammel.
For eksempel kan hendelsen være 1 dag gammel og spleis-api vil returnere *nå*-bildet – ikke slik det så ut da hendelsen ble håndtert av spleis.
  • Loading branch information
davidsteinsland committed Jan 26, 2024
1 parent ceb9c90 commit 0dd8d2d
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ 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 }
Expand Down Expand Up @@ -87,7 +89,15 @@ data class Pølse(
// tingen som gjorde at generasjonen ble opprettet
val kilde: UUID
) {
fun erNyPølseAv(other: Pølse) = this.vedtaksperiodeId == other.vedtaksperiodeId && this.kilde != other.kilde && this.status == ÅPEN
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
}
fun dto() = PølseDto(
vedtaksperiodeId = vedtaksperiodeId,
generasjonId = generasjonId,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,33 @@ 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
Expand Down Expand Up @@ -54,7 +81,7 @@ class PølsefabrikkTest {
@Test
fun `ett forkastet vedtak`() {
val p1 = 1.januar til 5.januar
val p1Annullert = p1.fordi(UUID.randomUUID())
val p1Annullert = p1.nyGenerasjon()

fabrikk.nyPølse(p1)
fabrikk.lukketPølse(p1)
Expand Down Expand Up @@ -103,7 +130,7 @@ class PølsefabrikkTest {
val p1 = 1.januar til 5.januar som v1
val p2 = 6.januar til 10.januar som v2
val revurderingkilde = UUID.randomUUID()
val p2Revurdering = p2.fordi(revurderingkilde)
val p2Revurdering = p2.nyGenerasjon(kilde = revurderingkilde)

fabrikk.nyPølse(p1)
fabrikk.nyPølse(p2)
Expand All @@ -126,8 +153,8 @@ class PølsefabrikkTest {

val p1 = 1.januar til 5.januar som v1
val p2 = 6.januar til 10.januar som v2
val p2Revurdering = p2.fordi(revurderingkilde)
val p1Revurdering = p1.fordi(revurderingkilde)
val p2Revurdering = p2.nyGenerasjon(kilde = revurderingkilde)
val p1Revurdering = p1.nyGenerasjon(kilde = revurderingkilde)

fabrikk.nyPølse(p1)
fabrikk.nyPølse(p2)
Expand All @@ -152,8 +179,8 @@ class PølsefabrikkTest {
val p1 = 10.januar til 20.januar som v1
val p2 = 21.januar til 31.januar som v2
val p3 = 1.januar til 5.januar som v3 fordi oufOrderOrderkilde
val p2Revurdering = p2.fordi(oufOrderOrderkilde)
val p1Revurdering = p1.fordi(oufOrderOrderkilde)
val p2Revurdering = p2.nyGenerasjon(kilde = oufOrderOrderkilde)
val p1Revurdering = p1.nyGenerasjon(kilde = oufOrderOrderkilde)

fabrikk.nyPølse(p1)
fabrikk.nyPølse(p2)
Expand Down Expand Up @@ -182,10 +209,10 @@ class PølsefabrikkTest {
val p1 = 10.januar til 20.januar som v2
val p2 = 21.januar til 31.januar som v3

val p3Revurdering = p3.fordi(revurderingkilde)
val p2Revurdering = p2.fordi(revurderingkilde)
val p1Revurdering = p1.fordi(revurderingkilde)
val p1Revurdering2 = p1.fordi(UUID.randomUUID())
val p3Revurdering = p3.nyGenerasjon(kilde = revurderingkilde)
val p2Revurdering = p2.nyGenerasjon(kilde = revurderingkilde)
val p1Revurdering = p1.nyGenerasjon(kilde = revurderingkilde)
val p1Revurdering2 = p1.nyGenerasjon(kilde = UUID.randomUUID())

fabrikk.nyPølse(p1)
fabrikk.nyPølse(p2)
Expand Down Expand Up @@ -221,6 +248,7 @@ class PølsefabrikkTest {

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)
Expand Down

0 comments on commit 0dd8d2d

Please sign in to comment.