Skip to content

Commit

Permalink
Fjern påminnelser på oppgaver som er sendt til Infotrygd (#748)
Browse files Browse the repository at this point in the history
Når Spleis sender saker til Infotrygd så kan vi ikke vite om arbeidsgiver har sendt inn eller ikke sendt inn inntektsmelding. Derfor ønsker vi å fjerne påminnelsene på oppgavene som tilhører slike saker.

* Fjern påminnelse på oppgaver som er sendt til Infotrygd

* Ta i bruk påminnelse-togglen for å styre sletting av oppgave-påminnelser

* Legg til named parameters for å unngå mixup i fremtiden

* Fjern rusk
  • Loading branch information
magnusae authored Nov 5, 2024
1 parent 6613483 commit 8b26176
Show file tree
Hide file tree
Showing 4 changed files with 154 additions and 28 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ utilsVersion=0.9.0
aaregClientVersion=0.7.0
altinnClientVersion=0.4.0
maskinportenClientVersion=0.1.9
arbeidsgiverNotifikasjonKlientVersion=3.1.0
arbeidsgiverNotifikasjonKlientVersion=3.2.0
brregKlientVersion=0.5.0
dokarkivKlientVersion=0.3.1
inntektKlientVersion=0.4.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,10 @@ fun RapidsConnection.createNotifikasjonRivers(
UtgaattForespoerselRiver(linkUrl, agNotifikasjonKlient).connect(this)

logger.info("Starter ${FjernPaaminnelseRiver::class.simpleName}...")
FjernPaaminnelseRiver(agNotifikasjonKlient).connect(this)
FjernPaaminnelseRiver(
agNotifikasjonKlient = agNotifikasjonKlient,
paaminnelseToggle = paaminnelseToggle,
).connect(this)
}

private fun buildClient(): ArbeidsgiverNotifikasjonKlient {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river

import kotlinx.coroutines.runBlocking
import kotlinx.serialization.json.JsonElement
import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.ArbeidsgiverNotifikasjonKlient
import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.OppgaveAlleredeUtfoertException
import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.SakEllerOppgaveFinnesIkkeException
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Key
Expand All @@ -11,6 +13,8 @@ import no.nav.helsearbeidsgiver.felles.json.toJson
import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail
import no.nav.helsearbeidsgiver.felles.rapidsrivers.river.ObjectRiver
import no.nav.helsearbeidsgiver.felles.utils.Log
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.NotifikasjonTekst
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.PaaminnelseToggle
import no.nav.helsearbeidsgiver.utils.json.serializer.UuidSerializer
import no.nav.helsearbeidsgiver.utils.log.logger
import no.nav.helsearbeidsgiver.utils.log.sikkerLogger
Expand All @@ -24,29 +28,11 @@ data class FjernPaaminnelseMelding(

class FjernPaaminnelseRiver(
val agNotifikasjonKlient: ArbeidsgiverNotifikasjonKlient,
private val paaminnelseToggle: PaaminnelseToggle,
) : ObjectRiver<FjernPaaminnelseMelding>() {
private val logger = logger()
private val sikkerLogger = sikkerLogger()

override fun FjernPaaminnelseMelding.haandter(json: Map<Key, JsonElement>): Map<Key, JsonElement>? {
runCatching {
"FjernPaaminnelseRiver skulle her ha fjernet påminnelsen på oppgaven, men det er ikke implementert ennå.".also {
logger.info(it)
sikkerLogger.info(it)
}
}.onFailure {
if (it is SakEllerOppgaveFinnesIkkeException) {
logger.warn(it.message)
sikkerLogger.warn(it.message)
} else {
throw it
}
}

// TODO: Send melding når påminnelsen er fjernet
return null
}

override fun les(json: Map<Key, JsonElement>): FjernPaaminnelseMelding? =
if (Key.FAIL in json) {
null
Expand All @@ -58,6 +44,13 @@ class FjernPaaminnelseRiver(
)
}

override fun FjernPaaminnelseMelding.haandter(json: Map<Key, JsonElement>): Map<Key, JsonElement>? {
if (paaminnelseToggle.oppgavePaaminnelseAktivert) {
slettOppgavePaaminnelser(forespoerselId = forespoerselId)
}
return null
}

override fun FjernPaaminnelseMelding.haandterFeil(
json: Map<Key, JsonElement>,
error: Throwable,
Expand All @@ -84,4 +77,24 @@ class FjernPaaminnelseRiver(
Log.transaksjonId(transaksjonId),
Log.forespoerselId(forespoerselId),
)

private fun slettOppgavePaaminnelser(forespoerselId: UUID) {
runCatching {
runBlocking {
agNotifikasjonKlient.slettOppgavePaaminnelserByEksternId(
merkelapp = NotifikasjonTekst.MERKELAPP,
eksternId = forespoerselId.toString(),
)
}
}.onFailure {
when (it) {
is SakEllerOppgaveFinnesIkkeException, is OppgaveAlleredeUtfoertException -> {
logger.warn(it.message)
sikkerLogger.warn(it.message)
}

else -> throw it
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,25 @@ package no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.river
import com.github.navikt.tbd_libs.rapids_and_rivers.test_support.TestRapid
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.ints.shouldBeExactly
import io.kotest.matchers.maps.shouldContainExactly
import io.mockk.Runs
import io.mockk.clearAllMocks
import io.mockk.coEvery
import io.mockk.coVerifySequence
import io.mockk.just
import io.mockk.mockk
import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.ArbeidsgiverNotifikasjonKlient
import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.OppgaveEndrePaaminnelseByEksternIdException
import no.nav.helsearbeidsgiver.arbeidsgivernotifikasjon.SakEllerOppgaveFinnesIkkeException
import no.nav.helsearbeidsgiver.felles.EventName
import no.nav.helsearbeidsgiver.felles.Key
import no.nav.helsearbeidsgiver.felles.json.toJson
import no.nav.helsearbeidsgiver.felles.json.toMap
import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Fail
import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.firstMessage
import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.sendJson
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.NotifikasjonTekst
import no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon.PaaminnelseToggle
import no.nav.helsearbeidsgiver.utils.json.toJson
import java.util.UUID

Expand All @@ -19,23 +31,121 @@ class FjernPaaminnelseRiverTest :
val testRapid = TestRapid()
val mockagNotifikasjonKlient = mockk<ArbeidsgiverNotifikasjonKlient>()

FjernPaaminnelseRiver(mockagNotifikasjonKlient)
val mockPaaminnelseToggle =
PaaminnelseToggle(
oppgavePaaminnelseAktivert = true,
tidMellomOppgaveopprettelseOgPaaminnelse = "P28D",
)

FjernPaaminnelseRiver(
agNotifikasjonKlient = mockagNotifikasjonKlient,
paaminnelseToggle = mockPaaminnelseToggle,
).connect(testRapid)

beforeTest {
testRapid.reset()
clearAllMocks()
}

test("fjern påminnelse for forespørsel") {
val innkommendeMelding =
mapOf(
Key.EVENT_NAME to EventName.FORESPOERSEL_KASTET_TIL_INFOTRYGD.toJson(),
Key.UUID to UUID.randomUUID().toJson(),
Key.FORESPOERSEL_ID to UUID.randomUUID().toJson(),
val innkommendeMelding = innkommendeFjernPaaminnelseMelding()

coEvery { mockagNotifikasjonKlient.slettOppgavePaaminnelserByEksternId(any(), any()) } just Runs

testRapid.sendJson(innkommendeMelding.toMap())

coVerifySequence {
mockagNotifikasjonKlient.slettOppgavePaaminnelserByEksternId(
NotifikasjonTekst.MERKELAPP,
innkommendeMelding.forespoerselId.toString(),
)
}

testRapid.inspektør.size shouldBeExactly 0
}

test("ukjent feil ved sletting av påminnelser håndteres") {
val innkommendeMelding = innkommendeFjernPaaminnelseMelding()

coEvery { mockagNotifikasjonKlient.slettOppgavePaaminnelserByEksternId(any(), any()) } throws
OppgaveEndrePaaminnelseByEksternIdException(
innkommendeMelding.forespoerselId.toString(),
"mock feil",
)

testRapid.sendJson(innkommendeMelding.toMap())

coVerifySequence {
mockagNotifikasjonKlient.slettOppgavePaaminnelserByEksternId(
NotifikasjonTekst.MERKELAPP,
innkommendeMelding.forespoerselId.toString(),
)
}

testRapid.inspektør.size shouldBeExactly 1

testRapid.firstMessage().toMap() shouldContainExactly forventetFail(innkommendeMelding).tilMelding()
}

test("kaster ingen exception dersom oppgaven ikke finnes") {
val innkommendeMelding = innkommendeFjernPaaminnelseMelding()

coEvery {
mockagNotifikasjonKlient.slettOppgavePaaminnelserByEksternId(
any(),
any(),
)
} throws SakEllerOppgaveFinnesIkkeException("Sak eller oppgave finnes ikke.")

testRapid.sendJson(innkommendeMelding.toMap())

coVerifySequence {
mockagNotifikasjonKlient.slettOppgavePaaminnelserByEksternId(
NotifikasjonTekst.MERKELAPP,
innkommendeMelding.forespoerselId.toString(),
)
}

testRapid.inspektør.size shouldBeExactly 0
}

test("kaster ikke exception dersom oppgaven allerede er utført") {
val innkommendeMelding = innkommendeFjernPaaminnelseMelding()

coEvery { mockagNotifikasjonKlient.slettOppgavePaaminnelserByEksternId(any(), any()) } just Runs

testRapid.sendJson(innkommendeMelding.toMap())

testRapid.sendJson(innkommendeMelding)
coVerifySequence {
mockagNotifikasjonKlient.slettOppgavePaaminnelserByEksternId(
NotifikasjonTekst.MERKELAPP,
innkommendeMelding.forespoerselId.toString(),
)
}

testRapid.inspektør.size shouldBeExactly 0
}
})

private fun forventetFail(innkommendeMelding: FjernPaaminnelseMelding): Fail =
Fail(
feilmelding = "Klarte ikke fjerne påminnelse fra oppgave.",
event = innkommendeMelding.eventName,
transaksjonId = innkommendeMelding.transaksjonId,
forespoerselId = innkommendeMelding.forespoerselId,
utloesendeMelding = innkommendeMelding.toMap().toJson(),
)

private fun FjernPaaminnelseMelding.toMap() =
mapOf(
Key.EVENT_NAME to eventName.toJson(),
Key.UUID to transaksjonId.toJson(),
Key.FORESPOERSEL_ID to forespoerselId.toJson(),
)

fun innkommendeFjernPaaminnelseMelding(): FjernPaaminnelseMelding =
FjernPaaminnelseMelding(
eventName = EventName.FORESPOERSEL_KASTET_TIL_INFOTRYGD,
transaksjonId = UUID.randomUUID(),
forespoerselId = UUID.randomUUID(),
)

0 comments on commit 8b26176

Please sign in to comment.