Skip to content

Commit

Permalink
Verifiser sletting av opprett-oppgave-konsument-jobb
Browse files Browse the repository at this point in the history
Her var det en liten bug.
  • Loading branch information
hestad committed Dec 13, 2023
1 parent 11612c7 commit 94ecdbf
Show file tree
Hide file tree
Showing 11 changed files with 143 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,17 +50,19 @@ class OppgaveHendelsePostgresRepo(
sakId: UUID,
sessionContext: SessionContext?,
): OppgaveHendelse? {
return sessionContext.withOptionalSession(sessionFactory) {
"""
SELECT *
return dbMetrics.timeQuery("hentHendelseForRelatert") {
sessionContext.withOptionalSession(sessionFactory) {
"""
SELECT data,hendelsestidspunkt,versjon,type,sakId,hendelseId,tidligereHendelseId,entitetId
FROM hendelse
WHERE
type = 'OPPGAVE' AND
sakId = :sakId AND
:relatertHendelseId = ANY (ARRAY(SELECT * from jsonb_array_elements(data->'relaterteHendelser'))::text[])
""".trimIndent().hent(mapOf("relatertHendelseId" to relatertHendelseId.toString(), "sakId" to sakId), it) {
HendelsePostgresRepo.toPersistertHendelse(it)
}?.toOppgaveHendelse()
:relatertHendelseId = ANY (ARRAY(SELECT * from jsonb_array_elements_text(data->'relaterteHendelser'))::text[])
""".trimIndent().hent(mapOf("relatertHendelseId" to relatertHendelseId.toString(), "sakId" to sakId), it) {
HendelsePostgresRepo.toPersistertHendelse(it)
}?.toOppgaveHendelse()
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,16 @@ class OppgaveHendelsePostgresRepoTest {
}
}
}

@Test
fun testHentHendelseForRelatert() {
withMigratedDb { dataSource ->
val testDataHelper = TestDataHelper(dataSource)
val expected = testDataHelper.persisterOppgaveHendelse()

testDataHelper.sessionFactory.withSessionContext {
testDataHelper.oppgaveHendelseRepo.hentHendelseForRelatert(expected.relaterteHendelser.single(), expected.sakId) shouldBe expected
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,17 @@ class GenererDokumentForForhåndsvarselTilbakekrevingKonsument(
private val log = LoggerFactory.getLogger(this::class.java)

fun genererDokumenter(correlationId: CorrelationId) {
hendelsekonsumenterRepo.hentUteståendeSakOgHendelsesIderForKonsumentOgType(
konsumentId = konsumentId,
hendelsestype = ForhåndsvarsletTilbakekrevingsbehandlingHendelsestype,
).forEach { (sakId, hendelsesIder) -> genererDokumenterForSak(sakId, hendelsesIder, correlationId) }
Either.catch {
hendelsekonsumenterRepo.hentUteståendeSakOgHendelsesIderForKonsumentOgType(
konsumentId = konsumentId,
hendelsestype = ForhåndsvarsletTilbakekrevingsbehandlingHendelsestype,
).forEach { (sakId, hendelsesIder) -> genererDokumenterForSak(sakId, hendelsesIder, correlationId) }
}.mapLeft {
log.error(
"Kunne ikke generere dokument for forhåndsvarsel av tilbakekrevingsbehandling: Det ble kastet en exception for konsument $konsumentId",
it,
)
}
}

private fun genererDokumenterForSak(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,16 +44,30 @@ class LukkOppgaveForTilbakekrevingshendelserKonsument(
private val log = LoggerFactory.getLogger(this::class.java)

fun lukkOppgaver(correlationId: CorrelationId) {
Either.catch {
lukkOppgaverForAvbrutt(correlationId)
lukkOppgaverForIverksatt(correlationId)
}.mapLeft {
log.error(
"Kunne ikke lukke oppgave(r) for tilbakekrevingsbehandling: Det ble kastet en exception for konsument $konsumentId",
it,
)
}
}

private fun lukkOppgaverForIverksatt(correlationId: CorrelationId) {
hendelsekonsumenterRepo.hentUteståendeSakOgHendelsesIderForKonsumentOgType(
konsumentId = konsumentId,
hendelsestype = AvbruttTilbakekrevingsbehandlingHendelsestype,
hendelsestype = IverksattTilbakekrevingsbehandlingHendelsestype,
).forEach { (sakId, hendelsesIder) ->
prosesserSak(sakId, hendelsesIder, correlationId)
}
}

private fun lukkOppgaverForAvbrutt(correlationId: CorrelationId) {
hendelsekonsumenterRepo.hentUteståendeSakOgHendelsesIderForKonsumentOgType(
konsumentId = konsumentId,
hendelsestype = IverksattTilbakekrevingsbehandlingHendelsestype,
hendelsestype = AvbruttTilbakekrevingsbehandlingHendelsestype,
).forEach { (sakId, hendelsesIder) ->
prosesserSak(sakId, hendelsesIder, correlationId)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,36 @@ class OppdaterOppgaveForTilbakekrevingshendelserKonsument(
private val log = LoggerFactory.getLogger(this::class.java)

fun oppdaterOppgaver(correlationId: CorrelationId) {
Either.catch {
oppdaterOppgaveEtterForhåndsvarsel(correlationId)
oppdaterOppgaveEtterSendtTilAttestering(correlationId)
oppdaterOppgaveEtterUnderkjennelse(correlationId)
}.mapLeft {
log.error(
"Kunne ikke oppdatere oppgave(r) for tilbakekrevingsbehandling: Det ble kastet en exception for konsument $konsumentId",
it,
)
}
}

private fun oppdaterOppgaveEtterUnderkjennelse(correlationId: CorrelationId) {
hendelsekonsumenterRepo.hentUteståendeSakOgHendelsesIderForKonsumentOgType(
konsumentId = konsumentId,
hendelsestype = ForhåndsvarsletTilbakekrevingsbehandlingHendelsestype,
hendelsestype = UnderkjentTilbakekrevingsbehandlingHendelsestype,
).forEach { (sakId, hendelsesIder) ->
prosesserSak(
sakId,
hendelsesIder,
correlationId,
OppdaterOppgaveInfo(beskrivelse = "Forhåndsvarsel er opprettet"),
OppdaterOppgaveInfo(
beskrivelse = "Behandlingen er sendt tilbake for vurdering",
oppgavetype = Oppgavetype.BEHANDLE_SAK,
),
)
}
}

private fun oppdaterOppgaveEtterSendtTilAttestering(correlationId: CorrelationId) {
hendelsekonsumenterRepo.hentUteståendeSakOgHendelsesIderForKonsumentOgType(
konsumentId = konsumentId,
hendelsestype = TilbakekrevingsbehandlingTilAttesteringHendelsestype,
Expand All @@ -70,18 +89,18 @@ class OppdaterOppgaveForTilbakekrevingshendelserKonsument(
),
)
}
}

private fun oppdaterOppgaveEtterForhåndsvarsel(correlationId: CorrelationId) {
hendelsekonsumenterRepo.hentUteståendeSakOgHendelsesIderForKonsumentOgType(
konsumentId = konsumentId,
hendelsestype = UnderkjentTilbakekrevingsbehandlingHendelsestype,
hendelsestype = ForhåndsvarsletTilbakekrevingsbehandlingHendelsestype,
).forEach { (sakId, hendelsesIder) ->
prosesserSak(
sakId,
hendelsesIder,
correlationId,
OppdaterOppgaveInfo(
beskrivelse = "Behandlingen er sendt tilbake for vurdering",
oppgavetype = Oppgavetype.BEHANDLE_SAK,
),
OppdaterOppgaveInfo(beskrivelse = "Forhåndsvarsel er opprettet"),
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,18 @@ class OpprettOppgaveForTilbakekrevingshendelserKonsument(
private val log = LoggerFactory.getLogger(this::class.java)

fun opprettOppgaver(correlationId: CorrelationId) {
hendelsekonsumenterRepo.hentUteståendeSakOgHendelsesIderForKonsumentOgType(
konsumentId = konsumentId,
hendelsestype = OpprettetTilbakekrevingsbehandlingHendelsestype,
).forEach { (sakId, hendelsesIder) ->
prosesserSak(sakId, hendelsesIder, correlationId)
Either.catch {
hendelsekonsumenterRepo.hentUteståendeSakOgHendelsesIderForKonsumentOgType(
konsumentId = konsumentId,
hendelsestype = OpprettetTilbakekrevingsbehandlingHendelsestype,
).forEach { (sakId, hendelsesIder) ->
prosesserSak(sakId, hendelsesIder, correlationId)
}
}.mapLeft {
log.error(
"Kunne ikke opprette oppgave(r) for tilbakekrevingsbehandling: Det ble kastet en exception for konsument $konsumentId",
it,
)
}
}

Expand All @@ -57,7 +64,7 @@ class OpprettOppgaveForTilbakekrevingshendelserKonsument(
hendelsesIder: Nel<HendelseId>,
correlationId: CorrelationId,
) {
log.info("starter opprettelse av oppgaver for opprettetTilbakekrevingsbehandling-hendelser på sak $sakId")
log.info("Starter opprettelse av oppgaver for opprettetTilbakekrevingsbehandling-hendelser på sak $sakId. Hendelsesider: $hendelsesIder")

val sak = sakService.hentSak(sakId)
.getOrElse { throw IllegalStateException("Kunne ikke hente sakInfo $sakId for å opprette oppgave for OpprettetTilbakekrevingshendelse") }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ internal fun AppComponents.forhåndsvarsleTilbakekrevingsbehandling(
)
}
val sakEtterKallJson = hentSak(sakId, client)
sakEtterKallJson.shouldBeSimilarJsonTo(sakFørKallJson, "versjon", "tilbakekrevinger")
val saksversjonEtter = JSONObject(sakEtterKallJson).getLong("versjon")

if (verifiserRespons) {
Expand All @@ -60,6 +59,7 @@ internal fun AppComponents.forhåndsvarsleTilbakekrevingsbehandling(
} else {
saksversjonEtter shouldBe saksversjon + 1 // kun hendelsen
}
sakEtterKallJson.shouldBeSimilarJsonTo(sakFørKallJson, "versjon", "tilbakekrevinger")
verifiserForhåndsvarsletTilbakekrevingsbehandlingRespons(
actual = it,
sakId = sakId,
Expand Down Expand Up @@ -148,4 +148,6 @@ fun verifiserForhåndsvarsletTilbakekrevingsbehandlingRespons(
}"""
actual.shouldBeSimilarJsonTo(expected, "forhåndsvarselsInfo", "kravgrunnlag.hendelseId", "opprettet")
JSONObject(actual).getJSONArray("forhåndsvarselsInfo").shouldHaveSize(1)
JSONObject(actual).has("opprettet") shouldBe true
JSONObject(actual).getJSONObject("kravgrunnlag").has("hendelseId") shouldBe true
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,22 @@ internal fun AppComponents.opprettTilbakekrevingsbehandling(
}
}.bodyAsText().let { responseJson ->
if (utførSideeffekter) {
// Vi kjører konsumentene 2 ganger, for å se at vi ikke oppretter duplikate oppgaver.
appComponents.kjøreAlleTilbakekrevingskonsumenter()
appComponents.kjøreAlleTilbakekrevingskonsumenter()
appComponents.kjøreAlleVerifiseringer(
sakId = sakId,
antallOpprettetOppgaver = 1,
)
// Vi sletter statusen på jobben, men ikke selve oppgavehendelsen for å verifisere at vi ikke oppretter duplikate oppgaver i disse tilfellene.
appComponents.slettOpprettetOppgaveKonsumentJobb()
appComponents.kjøreAlleTilbakekrevingskonsumenter()
appComponents.kjøreAlleVerifiseringer(
sakId = sakId,
antallOpprettetOppgaver = 1,
)
}
val sakEtterKallJson = hentSak(sakId, client)
sakEtterKallJson.shouldBeSimilarJsonTo(sakFørKallJson, "versjon", "tilbakekrevinger")
val saksversjonEtter = JSONObject(sakEtterKallJson).getLong("versjon")
if (verifiserRespons) {
if (utførSideeffekter) {
Expand All @@ -61,6 +69,7 @@ internal fun AppComponents.opprettTilbakekrevingsbehandling(
} else {
saksversjonEtter shouldBe saksversjon + 1
}
sakEtterKallJson.shouldBeSimilarJsonTo(sakFørKallJson, "versjon", "tilbakekrevinger")
verifiserOpprettetTilbakekrevingsbehandlingRespons(
actual = responseJson,
sakId = sakId,
Expand Down Expand Up @@ -145,4 +154,5 @@ fun verifiserOpprettetTilbakekrevingsbehandlingRespons(
actual.shouldBeSimilarJsonTo(expected, "id", "kravgrunnlag.hendelseId", "opprettet")
JSONObject(actual).has("id") shouldBe true
JSONObject(actual).has("opprettet") shouldBe true
JSONObject(actual).getJSONObject("kravgrunnlag").has("hendelseId") shouldBe true
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ internal fun AppComponents.kjøreAlleVerifiseringer(
this.verifiserLukketOppgaveKonsument(antallLukketOppgaver)
this.verifiserOppgaveHendelser(
sakId = sakId,
antallOpprettetOppgaver = antallOpprettetOppgaver,
antallOppdaterteOppgaver = antallOppdatertOppgaveHendelser,
antallLukketOppgaver = antallLukketOppgaver,
)
Expand Down Expand Up @@ -181,15 +182,15 @@ internal fun AppComponents.verifiserDokumentHendelser(

internal fun AppComponents.verifiserOppgaveHendelser(
sakId: String,
antallOpprettetOppgaver: Int,
antallOppdaterteOppgaver: Int,
antallLukketOppgaver: Int,
) {
val oppgaveHendelser = this.databaseRepos.oppgaveHendelseRepo.hentForSak(UUID.fromString(sakId))
// nr 1 er opprettet
oppgaveHendelser.size shouldBe 1 + antallOppdaterteOppgaver + antallLukketOppgaver

// en serie med tilbakekreving vil bare ha kun 1 opprettet oppgave
oppgaveHendelser.filterIsInstance<OppgaveHendelse.Opprettet>().single()
oppgaveHendelser.size shouldBe antallOpprettetOppgaver + antallOppdaterteOppgaver + antallLukketOppgaver

oppgaveHendelser.filterIsInstance<OppgaveHendelse.Opprettet>().size shouldBe antallOpprettetOppgaver
oppgaveHendelser.filterIsInstance<OppgaveHendelse.Oppdatert>().size shouldBe antallOppdaterteOppgaver
oppgaveHendelser.filterIsInstance<OppgaveHendelse.Lukket>().size shouldBe antallLukketOppgaver
}
Expand Down Expand Up @@ -228,7 +229,7 @@ internal fun AppComponents.slettOpprettetOppgaveKonsumentJobb() {
this.databaseRepos.hendelsekonsumenterRepo.let {
(it as HendelsekonsumenterPostgresRepo).sessionFactory.withSession {
"""
delete * from hendelse_konsument where konsumentId = 'OpprettOppgaveForTilbakekrevingsbehandlingHendelser'
delete from hendelse_konsument where konsumentId = 'OpprettOppgaveForTilbakekrevingsbehandlingHendelser'
""".trimIndent().oppdatering(emptyMap(), it)
}
}
Expand All @@ -255,7 +256,7 @@ internal fun AppComponents.slettOppdatertOppgaveKonsumentJobb() {
this.databaseRepos.hendelsekonsumenterRepo.let {
(it as HendelsekonsumenterPostgresRepo).sessionFactory.withSession {
"""
delete * from hendelse_konsument where konsumentId = 'OppdaterOppgaveForTilbakekrevingsbehandlingHendelser'
delete from hendelse_konsument where konsumentId = 'OppdaterOppgaveForTilbakekrevingsbehandlingHendelser'
""".trimIndent().oppdatering(emptyMap(), it)
}
}
Expand All @@ -282,7 +283,7 @@ internal fun AppComponents.slettLukketOppgaveKonsumentJobb() {
this.databaseRepos.hendelsekonsumenterRepo.let {
(it as HendelsekonsumenterPostgresRepo).sessionFactory.withSession {
"""
delete * from hendelse_konsument where konsumentId = 'LukkOppgaveForTilbakekrevingsbehandlingHendelser'
delete from hendelse_konsument where konsumentId = 'LukkOppgaveForTilbakekrevingsbehandlingHendelser'
""".trimIndent().oppdatering(emptyMap(), it)
}
}
Expand All @@ -309,7 +310,7 @@ internal fun AppComponents.slettGenererDokumentForForhåndsvarselKonsumentJobb()
this.databaseRepos.hendelsekonsumenterRepo.let {
(it as HendelsekonsumenterPostgresRepo).sessionFactory.withSession {
"""
delete * from hendelse_konsument where konsumentId = 'GenererDokumentForForhåndsvarselTilbakekrevingKonsument'
delete from hendelse_konsument where konsumentId = 'GenererDokumentForForhåndsvarselTilbakekrevingKonsument'
""".trimIndent().oppdatering(emptyMap(), it)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import no.nav.su.se.bakover.web.kravgrunnlag.emulerViMottarKravgrunnlagDetaljer
import no.nav.su.se.bakover.web.revurdering.fradrag.leggTilFradrag
import no.nav.su.se.bakover.web.revurdering.opprettIverksattRevurdering
import no.nav.su.se.bakover.web.søknadsbehandling.BehandlingJson
import no.nav.su.se.bakover.web.søknadsbehandling.RevurderingJson
import no.nav.su.se.bakover.web.søknadsbehandling.opprettInnvilgetSøknadsbehandling
import org.json.JSONArray
import org.junit.jupiter.api.Test
Expand All @@ -35,20 +34,16 @@ internal class TilbakekrevingsbehandlingIT {
client = this.client,
appComponents = appComponents,
)

val sakId = BehandlingJson.hentSakId(søknadsbehandlingJson)

@Suppress("UNUSED_VARIABLE")
val revurderingId = opprettIverksattRevurdering(
opprettIverksattRevurdering(
sakid = sakId,
fraogmed = 1.januar(2021).toString(),
tilogmed = 31.januar(2021).toString(),
client = this.client,
appComponents = appComponents,
skalUtsetteTilbakekreving = true,
).let {
RevurderingJson.hentRevurderingId(it)
}
)
appComponents.emulerViMottarKravgrunnlagDetaljer()
verifiserKravgrunnlagPåSak(sakId, client, true, 2)
val (tilbakekrevingsbehandlingId, saksversjonEtterOpprettelseAvBehandling) = appComponents.opprettTilbakekrevingsbehandling(
Expand All @@ -75,9 +70,7 @@ internal class TilbakekrevingsbehandlingIT {
saksversjon = versjonEtterForhåndsvarsel,
client = this.client,
verifiserForhåndsvarselDokumenter = forhåndsvarselDokumenter,
).let {
hentVurderinger(it.first) to it.second
}
)

val (fritekst, versjonEtterOppdateringAvVedtaksbrev) = oppdaterVedtaksbrevTilbakekrevingsbehandling(
sakId = sakId,
Expand Down Expand Up @@ -197,9 +190,7 @@ internal class TilbakekrevingsbehandlingIT {
}
""".trimIndent(),
expectedNotat = notat,
).let {
hentVurderinger(it.first) to it.second
}
)
val (_, versjonEtterAndreSendingTilAttestering) = sendTilbakekrevingsbehandlingTilAttestering(
sakId = sakId,
tilbakekrevingsbehandlingId = tilbakekrevingsbehandlingId,
Expand Down
Loading

0 comments on commit 94ecdbf

Please sign in to comment.