From 05c6e4a8a8904034e67f5877abcc7d2644ec27a2 Mon Sep 17 00:00:00 2001 From: Henrik Gundersen Date: Wed, 11 Dec 2024 15:34:55 +0100 Subject: [PATCH 1/5] EY-4842: Opprettet service for utsending av brev --- .../behandling/jobs/brevjobber/Arbeidsjobb.kt | 4 +- .../jobs/brevjobber/ArbeidstabellDao.kt | 38 ++++- .../jobs/brevjobber/BrevMasseutsendelseJob.kt | 53 +++++++ .../brevjobber/BrevMasseutsendelseService.kt | 129 +++++++++++++++++ .../brevjobber/SjekkBrevMottakerService.kt | 132 ++++++++++++++++++ .../brevjobber/BrevMasseutsendelseJobTest.kt | 93 ++++++++++++ .../BrevMasseutsendelseServiceTest.kt | 114 +++++++++++++++ 7 files changed, 561 insertions(+), 2 deletions(-) create mode 100644 apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJob.kt create mode 100644 apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseService.kt create mode 100644 apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/SjekkBrevMottakerService.kt create mode 100644 apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJobTest.kt create mode 100644 apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseServiceTest.kt diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/Arbeidsjobb.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/Arbeidsjobb.kt index 09151a1a89c..f2eff4474a7 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/Arbeidsjobb.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/Arbeidsjobb.kt @@ -13,7 +13,9 @@ data class Arbeidsjobb( val merknad: String? = null, val opprettet: Tidspunkt, val sistEndret: Tidspunkt, -) +) { + fun oppdaterStatus(status: ArbeidStatus): Arbeidsjobb = this.copy(status = status) +} fun lagNyArbeidsJobb( sakId: SakId, diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/ArbeidstabellDao.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/ArbeidstabellDao.kt index a8766d418fd..158128b99ba 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/ArbeidstabellDao.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/ArbeidstabellDao.kt @@ -4,6 +4,7 @@ import no.nav.etterlatte.common.ConnectionAutoclosing import no.nav.etterlatte.libs.common.sak.SakId import no.nav.etterlatte.libs.common.tidspunkt.getTidspunkt import no.nav.etterlatte.libs.common.tidspunkt.setTidspunkt +import no.nav.etterlatte.libs.database.singleOrNull import no.nav.etterlatte.libs.database.toList import org.slf4j.LoggerFactory import java.sql.ResultSet @@ -14,7 +15,7 @@ class ArbeidstabellDao( ) { private val logger = LoggerFactory.getLogger(this::class.java) - fun opprettJobb(jobb: Arbeidsjobb) { + fun opprettJobb(jobb: Arbeidsjobb): Arbeidsjobb { connectionAutoclosing.hentConnection { with(it) { val statement = @@ -36,8 +37,43 @@ class ArbeidstabellDao( logger.info("Opprettet en jobb av type ${jobb.type.name} for sak ${jobb.sakId} med status ${jobb.status}") } } + + return hentJobb(jobb.id) ?: throw IllegalStateException("Fant ikke jobb $jobb") + } + + fun oppdaterJobb(jobb: Arbeidsjobb): Arbeidsjobb { + connectionAutoclosing.hentConnection { + with(it) { + val statement = + prepareStatement( + """ + UPDATE arbeidstabell SET status = ? WHERE id = ? + """.trimIndent(), + ) + statement.setString(1, jobb.status.name) + statement.setObject(2, jobb.id) + statement.executeUpdate() + } + } + return hentJobb(jobb.id) ?: throw IllegalStateException("Fant ikke jobb $jobb") } + fun hentJobb(id: UUID): Arbeidsjobb? = + connectionAutoclosing.hentConnection { + with(it) { + val statement = + prepareStatement( + """ + SELECT * from arbeidstabell where id = ? + """.trimIndent(), + ) + statement.setObject(1, id) + statement.executeQuery().singleOrNull { + asJobb() + } + } + } + fun hentKlareJobber(): List = connectionAutoclosing.hentConnection { with(it) { diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJob.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJob.kt new file mode 100644 index 00000000000..c962d482aa6 --- /dev/null +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJob.kt @@ -0,0 +1,53 @@ +package no.nav.etterlatte.behandling.jobs.brevjobber + +import no.nav.etterlatte.Context +import no.nav.etterlatte.Kontekst +import no.nav.etterlatte.behandling.jobs.brevjobber.ArbeidStatus.FEILET +import no.nav.etterlatte.behandling.jobs.brevjobber.ArbeidStatus.FERDIG +import no.nav.etterlatte.behandling.jobs.brevjobber.ArbeidStatus.PAAGAAENDE +import no.nav.etterlatte.inTransaction +import no.nav.etterlatte.libs.ktor.token.BrukerTokenInfo +import no.nav.etterlatte.libs.ktor.token.HardkodaSystembruker +import org.slf4j.LoggerFactory + +class BrevMasseutsendelseJob( + private val arbeidstabellDao: ArbeidstabellDao, + private val brevMasseutsendelseService: BrevMasseutsendelseService, +) { + private val saksbehandler: BrukerTokenInfo = HardkodaSystembruker.oppgave + + private val logger = LoggerFactory.getLogger(this::class.java) + + fun setupKontekstAndRun(context: Context) { + Kontekst.set(context) + run() + } + + // TODO er jobber egentlig riktig begrep her - blir kanskje litt for generelt i denne sammenheng? Burde tabellen heller hete masseutsendelse_brev? + // TODO vi ønsker kun å hente ut et visst antall for kjøring - hva blir riktig måte å gjøre dette på? + // TODO mer logging må på plass + private fun run() { + logger.info("Starter jobb for masseutsendelse av brev") + + val brevutsendelser = inTransaction { arbeidstabellDao.hentKlareJobber() } + logger.info("Hentet ${brevutsendelser.size} brevutsendelser som er klare for prosessering") + + brevutsendelser.forEach { brevutsendelse -> + try { + inTransaction { + val paagaaendeBrevutsendelse = oppdaterStatus(brevutsendelse, PAAGAAENDE) + brevMasseutsendelseService.prosesserBrevutsendelse(paagaaendeBrevutsendelse, saksbehandler) + oppdaterStatus(paagaaendeBrevutsendelse, FERDIG) + } + } catch (e: Exception) { + oppdaterStatus(brevutsendelse, FEILET) + logger.error("Feilet under brevutsendelse av type ${brevutsendelse.type.name} for sak ${brevutsendelse.sakId}", e) + } + } + } + + private fun oppdaterStatus( + jobb: Arbeidsjobb, + status: ArbeidStatus, + ) = arbeidstabellDao.oppdaterJobb(jobb.oppdaterStatus(status)) +} diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseService.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseService.kt new file mode 100644 index 00000000000..d97067b4e27 --- /dev/null +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseService.kt @@ -0,0 +1,129 @@ +package no.nav.etterlatte.behandling.jobs.brevjobber + +import kotlinx.coroutines.runBlocking +import no.nav.etterlatte.behandling.jobs.brevjobber.SjekkGyldigBrevMottakerResultat.GYLDIG_MOTTAKER +import no.nav.etterlatte.behandling.klienter.BrevApiKlient +import no.nav.etterlatte.brev.BrevParametre +import no.nav.etterlatte.brev.SaksbehandlerOgAttestant +import no.nav.etterlatte.brev.model.FerdigstillJournalFoerOgDistribuerOpprettetBrev +import no.nav.etterlatte.brev.model.Spraak +import no.nav.etterlatte.libs.common.feilhaandtering.InternfeilException +import no.nav.etterlatte.libs.common.logging.withLogContext +import no.nav.etterlatte.libs.common.oppgave.OppgaveIntern +import no.nav.etterlatte.libs.common.oppgave.OppgaveType +import no.nav.etterlatte.libs.common.person.maskerFnr +import no.nav.etterlatte.libs.common.sak.Sak +import no.nav.etterlatte.libs.ktor.token.BrukerTokenInfo +import no.nav.etterlatte.oppgave.OppgaveService +import no.nav.etterlatte.sak.SakService +import org.slf4j.LoggerFactory +import java.util.UUID + +class BrevMasseutsendelseService( + private val sakService: SakService, + private val oppgaveService: OppgaveService, + private val sjekkBrevMottakerService: SjekkBrevMottakerService, + private val brevKlient: BrevApiKlient, +) { + private val logger = LoggerFactory.getLogger(this::class.java) + + fun prosesserBrevutsendelse( + brevutsendelse: Arbeidsjobb, + brukerTokenInfo: BrukerTokenInfo, + ) { + withLogContext(kv = mdcVerdier(brevutsendelse)) { + logger.info("Starter å prosessering brevutsendelse av type ${brevutsendelse.type.name} for sak ${brevutsendelse.sakId}") + + val sak = hentSak(brevutsendelse) + val gyldigBrevMottakerResultat = sjekkBrevMottakerService.sjekkOmPersonErGyldigBrevmottaker(sak, brukerTokenInfo) + + if (gyldigBrevMottakerResultat == GYLDIG_MOTTAKER) { + sendBrev(sak, brevutsendelse, brukerTokenInfo) + // TODO hvis noe feiler her, må oppgaven endres til manuell + } else { + logger.info("Manuell oppgave opprettes i sak ${sak.id} fordi mottaker ikke var gyldig: ${gyldigBrevMottakerResultat.name}") + opprettManuellOppgave(brevutsendelse) + } + + logger.info("Prosessering av brevutsendelse i sak ${brevutsendelse.sakId} er fullført") + + // TODO burde returnere et objekt her som sier noe om hva som ble resultatet (brev sendt, manuell oppgave opprettet etc) + } + } + + private fun mdcVerdier(brevutsendelse: Arbeidsjobb) = + mapOf( + "sakId" to brevutsendelse.sakId.toString(), + "jobbType" to brevutsendelse.type.name, + ) + + private fun hentSak(brevutsendelse: Arbeidsjobb) = + ( + sakService.finnSak(brevutsendelse.sakId) + ?: throw InternfeilException("Fant ikke sak med id ${brevutsendelse.sakId} for brevutsendelse") + ) + + private fun sendBrev( + sak: Sak, + brevutsendelse: Arbeidsjobb, + saksbehandler: BrukerTokenInfo, + ): Boolean { + logger.info("Sender brev til ${sak.ident.maskerFnr()} i sak ${sak.id}") + + val oppgave = opprettOppgave(brevutsendelse, saksbehandler) + val tomtBrev = BrevParametre.TomtBrev(Spraak.NB) // TODO placeholder inntil vi har en brevmal + + runBlocking { + val opprettetBrev = brevKlient.opprettSpesifiktBrev(brevutsendelse.sakId, tomtBrev, saksbehandler) + val ferdigstiltBrev = + brevKlient.ferdigstillBrev( + FerdigstillJournalFoerOgDistribuerOpprettetBrev( + opprettetBrev.id, + brevutsendelse.sakId, + sak.enhet, + SaksbehandlerOgAttestant(saksbehandler.ident(), saksbehandler.ident()), + ), + saksbehandler, + ) + logger.info("Brev med id ${ferdigstiltBrev.brevId} er ferdigstilt") + + val journalfoertBrev = brevKlient.journalfoerBrev(brevutsendelse.sakId, ferdigstiltBrev.brevId, saksbehandler) + logger.info("Brev med id ${ferdigstiltBrev.brevId} er journaltført (journalpostId: ${journalfoertBrev.journalpostId})") + + val distribuertBrev = brevKlient.distribuerBrev(brevutsendelse.sakId, ferdigstiltBrev.brevId, saksbehandler) + logger.info("Brev med id ${ferdigstiltBrev.brevId} er distribuert (bestillingsId: ${distribuertBrev.bestillingsId})") + } + + logger.info("Ferdigstiller oppgave ${oppgave.id} for brevutsending") + ferdigstillOppgave(oppgave.id, saksbehandler) + + return true + } + + private fun opprettManuellOppgave(brevutsendelse: Arbeidsjobb): OppgaveIntern = + oppgaveService.opprettOppgave( + referanse = brevutsendelse.id.toString(), + sakId = brevutsendelse.sakId, + kilde = null, // TODO legge inn kilde + type = OppgaveType.GENERELL_OPPGAVE, // TODO er dette riktig + merknad = "Her må det komme tekst om hva saksbehandler må gjøre", // TODO hva skal stå her? + ) + + private fun opprettOppgave( + brevutsendelse: Arbeidsjobb, + saksbehandler: BrukerTokenInfo, + ): OppgaveIntern = + oppgaveService.opprettOppgave( + referanse = brevutsendelse.id.toString(), + sakId = brevutsendelse.sakId, + kilde = null, // TODO legge inn kilde + type = OppgaveType.GENERELL_OPPGAVE, // TODO er dette riktig + merknad = "Her må det komme tekst om hva saksbehandler må gjøre", // TODO hva skal stå her? + saksbehandler = saksbehandler.ident(), + ) + + private fun ferdigstillOppgave( + oppgaveId: UUID, + saksbehandler: BrukerTokenInfo, + ): OppgaveIntern = oppgaveService.ferdigstillOppgave(oppgaveId, saksbehandler) +} diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/SjekkBrevMottakerService.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/SjekkBrevMottakerService.kt new file mode 100644 index 00000000000..69b22b5523f --- /dev/null +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/SjekkBrevMottakerService.kt @@ -0,0 +1,132 @@ +package no.nav.etterlatte.behandling.jobs.brevjobber + +import kotlinx.coroutines.runBlocking +import no.nav.etterlatte.behandling.GrunnlagService +import no.nav.etterlatte.behandling.jobs.brevjobber.SjekkGyldigBrevMottakerResultat.GYLDIG_MOTTAKER +import no.nav.etterlatte.behandling.jobs.brevjobber.SjekkGyldigBrevMottakerResultat.UGYLDIG_MOTTAKER_UTDATERTE_PERSON_OPPLYSNINGER +import no.nav.etterlatte.behandling.jobs.brevjobber.SjekkGyldigBrevMottakerResultat.UGYLDIG_MOTTAKER_UTDATERT_IDENT +import no.nav.etterlatte.behandling.jobs.brevjobber.SjekkGyldigBrevMottakerResultat.UGYLDIG_MOTTAKER_VERGEMAAL +import no.nav.etterlatte.common.klienter.PdlTjenesterKlient +import no.nav.etterlatte.libs.common.behandling.SakType +import no.nav.etterlatte.libs.common.feilhaandtering.InternfeilException +import no.nav.etterlatte.libs.common.logging.sikkerlogger +import no.nav.etterlatte.libs.common.person.PdlIdentifikator +import no.nav.etterlatte.libs.common.person.Person +import no.nav.etterlatte.libs.common.person.PersonRolle +import no.nav.etterlatte.libs.common.person.VergemaalEllerFremtidsfullmakt +import no.nav.etterlatte.libs.common.person.maskerFnr +import no.nav.etterlatte.libs.common.sak.Sak +import no.nav.etterlatte.libs.ktor.token.BrukerTokenInfo +import org.slf4j.LoggerFactory +import java.util.UUID + +enum class SjekkGyldigBrevMottakerResultat { + UGYLDIG_MOTTAKER_UTDATERT_IDENT, + UGYLDIG_MOTTAKER_UTDATERTE_PERSON_OPPLYSNINGER, + UGYLDIG_MOTTAKER_VERGEMAAL, + GYLDIG_MOTTAKER, +} + +class SjekkBrevMottakerService( + private val grunnlagService: GrunnlagService, + private val pdlTjenesterKlient: PdlTjenesterKlient, +) { + private val logger = LoggerFactory.getLogger(this::class.java) + + fun sjekkOmPersonErGyldigBrevmottaker( + sak: Sak, + brukerTokenInfo: BrukerTokenInfo, + ): SjekkGyldigBrevMottakerResultat { + logger.info("Sjekker om person ${sak.ident.maskerFnr()} er en gyldig brev mottaker") + sikkerlogger().info("Sjekker om person ${sak.ident} er en gyldig brev mottaker") + + // Sjekker ident + hentPdlPersonident(sak).let { sisteIdentifikatorPdl -> + val sisteIdent = + when (sisteIdentifikatorPdl) { + is PdlIdentifikator.FolkeregisterIdent -> sisteIdentifikatorPdl.folkeregisterident.value + is PdlIdentifikator.Npid -> sisteIdentifikatorPdl.npid.ident + } + if (sak.ident != sisteIdent) { + return UGYLDIG_MOTTAKER_UTDATERT_IDENT + } + } + + val opplysningerPdl = hentPdlPersonopplysning(sak) + val opplysningerGjenny = hentOpplysningerGjenny(sak, brukerTokenInfo) + + // Sjekker vergemål + if (!opplysningerPdl.vergemaalEllerFremtidsfullmakt.isNullOrEmpty()) { + return UGYLDIG_MOTTAKER_VERGEMAAL + } + + val opplysningerErUendretIPdl = + with(opplysningerGjenny) { + fornavn == opplysningerPdl.fornavn && + mellomnavn == opplysningerPdl.mellomnavn && + etternavn == opplysningerPdl.etternavn && + foedselsdato == opplysningerPdl.foedselsdato && + erLikeVergemaal(vergemaalEllerFremtidsfullmakt, opplysningerPdl.vergemaalEllerFremtidsfullmakt) + } + + // Sjekker for utdaterte personopplysninger + if (!opplysningerErUendretIPdl) { + logger.info( + "Personopplysninger i PDL og Gjenny er forskjellig i sak ${sak.id}. " + + "Det opprettes en oppgave for manuell håndtering. Se sikkerlogg for detaljer om hva som er forskjellig.", + ) + sikkerlogger().info( + "Personopplysninger i PDL og Gjenny er forskjellig i sak ${sak.id}. " + + "Personopplysinger i Grunnlag: $opplysningerGjenny, " + + "Personopplysinger i PDL: $opplysningerPdl", + ) + return UGYLDIG_MOTTAKER_UTDATERTE_PERSON_OPPLYSNINGER + } + + return GYLDIG_MOTTAKER + } + + private fun hentPdlPersonident(sak: Sak) = + runBlocking { + pdlTjenesterKlient.hentPdlIdentifikator(sak.ident) + ?: throw InternfeilException("Fant ikke ident fra PDL for sak ${sak.id}") + } + + private fun hentPdlPersonopplysning(sak: Sak): Person { + // Mottaker av ytelsen + val rolle = + when (sak.sakType) { + SakType.OMSTILLINGSSTOENAD -> PersonRolle.GJENLEVENDE + SakType.BARNEPENSJON -> PersonRolle.BARN + } + + return pdlTjenesterKlient + .hentPdlModellForSaktype(sak.ident, rolle, sak.sakType) + .toPerson() + } + + private fun hentOpplysningerGjenny( + sak: Sak, + brukerTokenInfo: BrukerTokenInfo, + ): Person = + runBlocking { + grunnlagService + .hentPersonopplysninger( + // TODO skal vi hente siste iverksatte behandling her, eller nytt endepunkt for siste grunnlag i sak? + UUID.randomUUID(), + sak.sakType, + brukerTokenInfo, + ).soeker + ?.opplysning ?: throw InternfeilException("Fant ikke opplysninger for sak=${sak.id}") + } + + private fun erLikeVergemaal( + vergerEn: List?, + vergerTo: List?, + ): Boolean { + if (vergerEn.isNullOrEmpty() && vergerTo.isNullOrEmpty()) { + return true + } + return vergerEn == vergerTo + } +} diff --git a/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJobTest.kt b/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJobTest.kt new file mode 100644 index 00000000000..d690ab2bca5 --- /dev/null +++ b/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJobTest.kt @@ -0,0 +1,93 @@ +package no.nav.etterlatte.behandling.jobs.brevjobber + +import io.kotest.matchers.shouldBe +import io.mockk.every +import io.mockk.just +import io.mockk.mockk +import io.mockk.runs +import io.mockk.verify +import no.nav.etterlatte.ConnectionAutoclosingTest +import no.nav.etterlatte.Context +import no.nav.etterlatte.DatabaseContextTest +import no.nav.etterlatte.DatabaseExtension +import no.nav.etterlatte.Self +import no.nav.etterlatte.libs.common.Enhetsnummer +import no.nav.etterlatte.libs.common.behandling.SakType +import no.nav.etterlatte.libs.common.sak.SakId +import no.nav.etterlatte.libs.testdata.grunnlag.SOEKER_FOEDSELSNUMMER +import no.nav.etterlatte.sak.SakSkrivDao +import no.nav.etterlatte.sak.SakendringerDao +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.api.extension.ExtendWith +import javax.sql.DataSource + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +@ExtendWith(DatabaseExtension::class) +internal class BrevMasseutsendelseJobTest( + val dataSource: DataSource, +) { + private val kontekst = Context(Self(this::class.java.simpleName), DatabaseContextTest(mockk()), mockk(), null) + + private val arbeidstabellDao: ArbeidstabellDao = ArbeidstabellDao(ConnectionAutoclosingTest(dataSource)) + private val sakDao: SakSkrivDao = SakSkrivDao(SakendringerDao(ConnectionAutoclosingTest(dataSource)) { mockk() }) + private val brevMasseutsendelseService: BrevMasseutsendelseService = mockk() + + private val brevMasseutsendelseJob: BrevMasseutsendelseJob = + BrevMasseutsendelseJob( + arbeidstabellDao = arbeidstabellDao, + brevMasseutsendelseService = brevMasseutsendelseService, + ) + + @BeforeEach + fun beforeEach() { + } + + @AfterEach + fun afterEach() { + dataSource.connection.use { + it.prepareStatement("TRUNCATE arbeidstabell CASCADE;").execute() + } + } + + @Test + fun `skal prosessere brevutsendelse og oppdatere status til ferdig`() { + val sak = sakDao.opprettSak(SOEKER_FOEDSELSNUMMER.value, SakType.BARNEPENSJON, Enhetsnummer("1234")) + val brevutsendelse = arbeidstabellDao.opprettJobb(nyArbeidsjobb(sak.id)) + + every { brevMasseutsendelseService.prosesserBrevutsendelse(any(), any()) } just runs + + brevMasseutsendelseJob.setupKontekstAndRun(kontekst) + + val oppdatertBrevutsendelse = arbeidstabellDao.hentJobb(brevutsendelse.id) + oppdatertBrevutsendelse?.status shouldBe ArbeidStatus.FERDIG + + verify { + brevMasseutsendelseService.prosesserBrevutsendelse(match { it.status == ArbeidStatus.PAAGAAENDE }, any()) + } + } + + @Test + fun `skal prosessere brevutsendelse og oppdatere status til feilet ved feil`() { + val sak = sakDao.opprettSak(SOEKER_FOEDSELSNUMMER.value, SakType.BARNEPENSJON, Enhetsnummer("1234")) + val brevutsendelse = arbeidstabellDao.opprettJobb(nyArbeidsjobb(sak.id)) + + every { brevMasseutsendelseService.prosesserBrevutsendelse(any(), any()) } throws Exception("Brevutsendelse feilet") + + brevMasseutsendelseJob.setupKontekstAndRun(kontekst) + + val oppdatertBrevutsendelse = arbeidstabellDao.hentJobb(brevutsendelse.id) + oppdatertBrevutsendelse?.status shouldBe ArbeidStatus.FEILET + } + + // TODO flere tester for ulike scenarioer + + private fun nyArbeidsjobb(sakId: SakId): Arbeidsjobb = + lagNyArbeidsJobb( + sakId = sakId, + type = JobbType.TREKKPLIKT_2025, + merknad = null, + ) +} diff --git a/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseServiceTest.kt b/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseServiceTest.kt new file mode 100644 index 00000000000..0b1f30bd12e --- /dev/null +++ b/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseServiceTest.kt @@ -0,0 +1,114 @@ +package no.nav.etterlatte.behandling.jobs.brevjobber + +import io.mockk.coEvery +import io.mockk.coVerifyOrder +import io.mockk.confirmVerified +import io.mockk.every +import io.mockk.mockk +import io.mockk.verifyOrder +import no.nav.etterlatte.behandling.jobs.brevjobber.SjekkGyldigBrevMottakerResultat.GYLDIG_MOTTAKER +import no.nav.etterlatte.behandling.jobs.brevjobber.SjekkGyldigBrevMottakerResultat.UGYLDIG_MOTTAKER_UTDATERT_IDENT +import no.nav.etterlatte.behandling.klienter.BrevApiKlient +import no.nav.etterlatte.brev.model.Status +import no.nav.etterlatte.libs.common.Enhetsnummer +import no.nav.etterlatte.libs.common.behandling.SakType +import no.nav.etterlatte.libs.common.sak.Sak +import no.nav.etterlatte.libs.common.sak.SakId +import no.nav.etterlatte.libs.testdata.grunnlag.SOEKER_FOEDSELSNUMMER +import no.nav.etterlatte.oppgave.OppgaveService +import no.nav.etterlatte.sak.SakService +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import java.util.UUID.randomUUID + +internal class BrevMasseutsendelseServiceTest { + private val sakService: SakService = mockk() + private val sjekkBrevMottakerService: SjekkBrevMottakerService = mockk() + private val oppgaveService: OppgaveService = mockk() + private val brevKlient: BrevApiKlient = mockk() + + private val brevMasseutsendelseService: BrevMasseutsendelseService = + BrevMasseutsendelseService( + sakService = sakService, + sjekkBrevMottakerService = sjekkBrevMottakerService, + oppgaveService = oppgaveService, + brevKlient = brevKlient, + ) + + @BeforeEach + fun beforeEach() { + } + + @Test + fun `skal opprette oppgave, sende brev og ferdigstille oppgave`() { + val sak = sak() + val brevutsendelse = brevutsendelse(sak.id) + val oppgaveId = randomUUID() + + every { sakService.finnSak(any()) } returns sak + every { sjekkBrevMottakerService.sjekkOmPersonErGyldigBrevmottaker(any(), any()) } returns GYLDIG_MOTTAKER + + every { oppgaveService.opprettOppgave(brevutsendelse.id.toString(), sak.id, any(), any(), any(), any(), any(), any()) } returns + mockk { every { id } returns oppgaveId } + every { oppgaveService.ferdigstillOppgave(any(), any()) } returns mockk() + + coEvery { brevKlient.opprettSpesifiktBrev(any(), any(), any()) } returns mockk { every { id } returns 1 } + coEvery { brevKlient.ferdigstillBrev(any(), any()) } returns + mockk { + every { brevId } returns 1 + every { status } returns Status.FERDIGSTILT + } + coEvery { brevKlient.journalfoerBrev(any(), any(), any()) } returns mockk { every { journalpostId } returns listOf("1") } + coEvery { brevKlient.distribuerBrev(any(), any(), any()) } returns mockk { every { bestillingsId } returns listOf("1") } + + brevMasseutsendelseService.prosesserBrevutsendelse(brevutsendelse, mockk { every { ident() } returns "ident" }) + + verifyOrder { + sakService.finnSak(any()) + sjekkBrevMottakerService.sjekkOmPersonErGyldigBrevmottaker(sak, any()) + oppgaveService.opprettOppgave(any(), sak.id, any(), any(), any(), any(), any(), any()) + oppgaveService.ferdigstillOppgave(oppgaveId, any()) + } + + coVerifyOrder { + brevKlient.opprettSpesifiktBrev(sak.id, any(), any()) + brevKlient.ferdigstillBrev(any(), any()) + brevKlient.journalfoerBrev(sak.id, any(), any()) + brevKlient.distribuerBrev(sak.id, any(), any()) + } + + confirmVerified(sjekkBrevMottakerService, sakService, oppgaveService, brevKlient) + } + + @Test + fun `skal opprette manuell oppgave hvis brevmottaker ikke er gyldig`() { + val sak = sak() + val brevutsendelse = brevutsendelse(sak.id) + val oppgaveId = randomUUID() + + every { sakService.finnSak(any()) } returns sak + every { sjekkBrevMottakerService.sjekkOmPersonErGyldigBrevmottaker(any(), any()) } returns UGYLDIG_MOTTAKER_UTDATERT_IDENT + + every { oppgaveService.opprettOppgave(brevutsendelse.id.toString(), sak.id, any(), any(), any(), any(), any(), any()) } returns + mockk { every { id } returns oppgaveId } + + brevMasseutsendelseService.prosesserBrevutsendelse(brevutsendelse, mockk { every { ident() } returns "ident" }) + + verifyOrder { + sakService.finnSak(any()) + sjekkBrevMottakerService.sjekkOmPersonErGyldigBrevmottaker(sak, any()) + oppgaveService.opprettOppgave(any(), sak.id, any(), any(), any(), any(), any(), any()) + } + + confirmVerified(sjekkBrevMottakerService, sakService, oppgaveService) + } + + private fun sak() = Sak(SOEKER_FOEDSELSNUMMER.value, SakType.BARNEPENSJON, SakId(1), Enhetsnummer("1234")) + + private fun brevutsendelse(sakId: SakId): Arbeidsjobb = + lagNyArbeidsJobb( + sakId = sakId, + type = JobbType.TREKKPLIKT_2025, + merknad = null, + ) +} From 95ac964f8d6a83c60b6659c633d671694b311103 Mon Sep 17 00:00:00 2001 From: Henrik Gundersen Date: Thu, 12 Dec 2024 09:32:04 +0100 Subject: [PATCH 2/5] =?UTF-8?q?EY-4842:=20Lagt=20p=C3=A5=20parametere=20fo?= =?UTF-8?q?r=20antall=20saker=20og=20ekskluderte=20saker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../behandling/jobs/brevjobber/ArbeidstabellDao.kt | 6 +++++- .../jobs/brevjobber/BrevMasseutsendelseJob.kt | 11 +++++++++-- .../jobs/brevjobber/ArbeidstabellDaoTest.kt | 4 ++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/ArbeidstabellDao.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/ArbeidstabellDao.kt index 158128b99ba..656d1e3dfa5 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/ArbeidstabellDao.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/ArbeidstabellDao.kt @@ -74,7 +74,11 @@ class ArbeidstabellDao( } } - fun hentKlareJobber(): List = + fun hentKlareJobber( + antallSaker: Long, + ekskluderteSaker: List = emptyList(), + ): List = + // TODO håndter antall saker og ekskluderte saker connectionAutoclosing.hentConnection { with(it) { val statement = diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJob.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJob.kt index c962d482aa6..ca536d1b8bf 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJob.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJob.kt @@ -24,12 +24,11 @@ class BrevMasseutsendelseJob( } // TODO er jobber egentlig riktig begrep her - blir kanskje litt for generelt i denne sammenheng? Burde tabellen heller hete masseutsendelse_brev? - // TODO vi ønsker kun å hente ut et visst antall for kjøring - hva blir riktig måte å gjøre dette på? // TODO mer logging må på plass private fun run() { logger.info("Starter jobb for masseutsendelse av brev") - val brevutsendelser = inTransaction { arbeidstabellDao.hentKlareJobber() } + val brevutsendelser = inTransaction { arbeidstabellDao.hentKlareJobber(ANTALL_SAKER, EKSKLUDERTE_SAKER) } logger.info("Hentet ${brevutsendelser.size} brevutsendelser som er klare for prosessering") brevutsendelser.forEach { brevutsendelse -> @@ -40,14 +39,22 @@ class BrevMasseutsendelseJob( oppdaterStatus(paagaaendeBrevutsendelse, FERDIG) } } catch (e: Exception) { + // TODO ønsker nok å lagre ned exception her oppdaterStatus(brevutsendelse, FEILET) logger.error("Feilet under brevutsendelse av type ${brevutsendelse.type.name} for sak ${brevutsendelse.sakId}", e) } } } + // TODO oppdater status eller opprett ny rad for hver status? private fun oppdaterStatus( jobb: Arbeidsjobb, status: ArbeidStatus, ) = arbeidstabellDao.oppdaterJobb(jobb.oppdaterStatus(status)) + + // TODO burde dette heller håndteres fra en tabell slik at det kan oppdateres uten å endre koden? + companion object { + val ANTALL_SAKER: Long = 1 + val EKSKLUDERTE_SAKER: List = emptyList() + } } diff --git a/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/ArbeidstabellDaoTest.kt b/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/ArbeidstabellDaoTest.kt index dd29d89fe50..5c4279ffb6d 100644 --- a/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/ArbeidstabellDaoTest.kt +++ b/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/ArbeidstabellDaoTest.kt @@ -44,7 +44,7 @@ internal class ArbeidstabellDaoTest( val testjobb = lagNyArbeidsJobb(sakId, merknad = "testmerknad", type = JobbType.TREKKPLIKT_2025) arbeidstabellDao.opprettJobb(testjobb) - val nyeJobber = arbeidstabellDao.hentKlareJobber() + val nyeJobber = arbeidstabellDao.hentKlareJobber(1) nyeJobber.size shouldBe 1 nyeJobber.first() shouldBe testjobb @@ -52,7 +52,7 @@ internal class ArbeidstabellDaoTest( val enSakMedFlerejobber = lagNyArbeidsJobb(sakId, merknad = "jobbtoforsak", type = JobbType.TREKKPLIKT_2025) arbeidstabellDao.opprettJobb(enSakMedFlerejobber) - val sakMedToJobber = arbeidstabellDao.hentKlareJobber() + val sakMedToJobber = arbeidstabellDao.hentKlareJobber(1) sakMedToJobber.size shouldBe 2 } } From fe07685cfccdc6f9c95c0a3c725180c2d2c3475f Mon Sep 17 00:00:00 2001 From: Henrik Gundersen Date: Thu, 12 Dec 2024 09:51:32 +0100 Subject: [PATCH 3/5] EY-4842: Oppretter kun oppgave dersom brev ikke kan sendes --- .../brevjobber/BrevMasseutsendelseService.kt | 25 +------------------ .../BrevMasseutsendelseServiceTest.kt | 5 +--- 2 files changed, 2 insertions(+), 28 deletions(-) diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseService.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseService.kt index d97067b4e27..12dc176f7a1 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseService.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseService.kt @@ -17,7 +17,6 @@ import no.nav.etterlatte.libs.ktor.token.BrukerTokenInfo import no.nav.etterlatte.oppgave.OppgaveService import no.nav.etterlatte.sak.SakService import org.slf4j.LoggerFactory -import java.util.UUID class BrevMasseutsendelseService( private val sakService: SakService, @@ -39,7 +38,7 @@ class BrevMasseutsendelseService( if (gyldigBrevMottakerResultat == GYLDIG_MOTTAKER) { sendBrev(sak, brevutsendelse, brukerTokenInfo) - // TODO hvis noe feiler her, må oppgaven endres til manuell + // TODO hvis noe feiler her, må manuell oppgave opprettes } else { logger.info("Manuell oppgave opprettes i sak ${sak.id} fordi mottaker ikke var gyldig: ${gyldigBrevMottakerResultat.name}") opprettManuellOppgave(brevutsendelse) @@ -70,7 +69,6 @@ class BrevMasseutsendelseService( ): Boolean { logger.info("Sender brev til ${sak.ident.maskerFnr()} i sak ${sak.id}") - val oppgave = opprettOppgave(brevutsendelse, saksbehandler) val tomtBrev = BrevParametre.TomtBrev(Spraak.NB) // TODO placeholder inntil vi har en brevmal runBlocking { @@ -94,9 +92,6 @@ class BrevMasseutsendelseService( logger.info("Brev med id ${ferdigstiltBrev.brevId} er distribuert (bestillingsId: ${distribuertBrev.bestillingsId})") } - logger.info("Ferdigstiller oppgave ${oppgave.id} for brevutsending") - ferdigstillOppgave(oppgave.id, saksbehandler) - return true } @@ -108,22 +103,4 @@ class BrevMasseutsendelseService( type = OppgaveType.GENERELL_OPPGAVE, // TODO er dette riktig merknad = "Her må det komme tekst om hva saksbehandler må gjøre", // TODO hva skal stå her? ) - - private fun opprettOppgave( - brevutsendelse: Arbeidsjobb, - saksbehandler: BrukerTokenInfo, - ): OppgaveIntern = - oppgaveService.opprettOppgave( - referanse = brevutsendelse.id.toString(), - sakId = brevutsendelse.sakId, - kilde = null, // TODO legge inn kilde - type = OppgaveType.GENERELL_OPPGAVE, // TODO er dette riktig - merknad = "Her må det komme tekst om hva saksbehandler må gjøre", // TODO hva skal stå her? - saksbehandler = saksbehandler.ident(), - ) - - private fun ferdigstillOppgave( - oppgaveId: UUID, - saksbehandler: BrukerTokenInfo, - ): OppgaveIntern = oppgaveService.ferdigstillOppgave(oppgaveId, saksbehandler) } diff --git a/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseServiceTest.kt b/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseServiceTest.kt index 0b1f30bd12e..f3e6e89fcde 100644 --- a/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseServiceTest.kt +++ b/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseServiceTest.kt @@ -50,7 +50,6 @@ internal class BrevMasseutsendelseServiceTest { every { oppgaveService.opprettOppgave(brevutsendelse.id.toString(), sak.id, any(), any(), any(), any(), any(), any()) } returns mockk { every { id } returns oppgaveId } - every { oppgaveService.ferdigstillOppgave(any(), any()) } returns mockk() coEvery { brevKlient.opprettSpesifiktBrev(any(), any(), any()) } returns mockk { every { id } returns 1 } coEvery { brevKlient.ferdigstillBrev(any(), any()) } returns @@ -66,8 +65,6 @@ internal class BrevMasseutsendelseServiceTest { verifyOrder { sakService.finnSak(any()) sjekkBrevMottakerService.sjekkOmPersonErGyldigBrevmottaker(sak, any()) - oppgaveService.opprettOppgave(any(), sak.id, any(), any(), any(), any(), any(), any()) - oppgaveService.ferdigstillOppgave(oppgaveId, any()) } coVerifyOrder { @@ -77,7 +74,7 @@ internal class BrevMasseutsendelseServiceTest { brevKlient.distribuerBrev(sak.id, any(), any()) } - confirmVerified(sjekkBrevMottakerService, sakService, oppgaveService, brevKlient) + confirmVerified(sjekkBrevMottakerService, sakService, brevKlient) } @Test From 5cc3cb902563d9f45e47b5b082b8d14e485a9573 Mon Sep 17 00:00:00 2001 From: Henrik Gundersen Date: Thu, 12 Dec 2024 09:55:53 +0100 Subject: [PATCH 4/5] EY-4842: Lagt inn todo --- .../src/main/kotlin/behandling/jobs/brevjobber/Jobbtyper.kt | 2 +- .../behandling/jobs/brevjobber/SjekkBrevMottakerService.kt | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/Jobbtyper.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/Jobbtyper.kt index 743418c62f2..e89827398e7 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/Jobbtyper.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/Jobbtyper.kt @@ -7,7 +7,7 @@ enum class JobbType( val kategori: JobbKategori, val sakType: SakType?, ) { - TREKKPLIKT_2025("Trekkplikt 2025, du taper penger på dette", JobbKategori.TREKKPLIKT, SakType.OMSTILLINGSSTOENAD), + TREKKPLIKT_2025("Trekkplikt 2025, du taper penger på dette", JobbKategori.TREKKPLIKT, SakType.BARNEPENSJON), } enum class JobbKategori { diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/SjekkBrevMottakerService.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/SjekkBrevMottakerService.kt index 69b22b5523f..b8c4ca3a498 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/SjekkBrevMottakerService.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/SjekkBrevMottakerService.kt @@ -40,6 +40,8 @@ class SjekkBrevMottakerService( logger.info("Sjekker om person ${sak.ident.maskerFnr()} er en gyldig brev mottaker") sikkerlogger().info("Sjekker om person ${sak.ident} er en gyldig brev mottaker") + // TODO Må vel ha en iverksatt sak for at dette skal sendes? + // Sjekker ident hentPdlPersonident(sak).let { sisteIdentifikatorPdl -> val sisteIdent = From b57e0e8716af17d0b533cbc582db0ecea1fc15e6 Mon Sep 17 00:00:00 2001 From: Henrik Gundersen Date: Thu, 12 Dec 2024 10:28:21 +0100 Subject: [PATCH 5/5] EY-4842: Endre noen navn --- ...eutsendelseJob.kt => BrevutsendelseJob.kt} | 8 ++++---- ...lseService.kt => BrevutsendelseService.kt} | 2 +- ...lseJobTest.kt => BrevutsendelseJobTest.kt} | 20 +++++++++---------- ...ceTest.kt => BrevutsendelseServiceTest.kt} | 10 +++++----- 4 files changed, 20 insertions(+), 20 deletions(-) rename apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/{BrevMasseutsendelseJob.kt => BrevutsendelseJob.kt} (90%) rename apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/{BrevMasseutsendelseService.kt => BrevutsendelseService.kt} (99%) rename apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/{BrevMasseutsendelseJobTest.kt => BrevutsendelseJobTest.kt} (79%) rename apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/{BrevMasseutsendelseServiceTest.kt => BrevutsendelseServiceTest.kt} (91%) diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJob.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevutsendelseJob.kt similarity index 90% rename from apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJob.kt rename to apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevutsendelseJob.kt index ca536d1b8bf..8f3ebf0a7cb 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJob.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevutsendelseJob.kt @@ -10,9 +10,9 @@ import no.nav.etterlatte.libs.ktor.token.BrukerTokenInfo import no.nav.etterlatte.libs.ktor.token.HardkodaSystembruker import org.slf4j.LoggerFactory -class BrevMasseutsendelseJob( +class BrevutsendelseJob( private val arbeidstabellDao: ArbeidstabellDao, - private val brevMasseutsendelseService: BrevMasseutsendelseService, + private val brevutsendelseService: BrevutsendelseService, ) { private val saksbehandler: BrukerTokenInfo = HardkodaSystembruker.oppgave @@ -23,7 +23,7 @@ class BrevMasseutsendelseJob( run() } - // TODO er jobber egentlig riktig begrep her - blir kanskje litt for generelt i denne sammenheng? Burde tabellen heller hete masseutsendelse_brev? + // TODO er jobber egentlig riktig begrep her - blir kanskje litt for generelt i denne sammenheng? Burde tabellen heller hete brevutsendelse? // TODO mer logging må på plass private fun run() { logger.info("Starter jobb for masseutsendelse av brev") @@ -35,7 +35,7 @@ class BrevMasseutsendelseJob( try { inTransaction { val paagaaendeBrevutsendelse = oppdaterStatus(brevutsendelse, PAAGAAENDE) - brevMasseutsendelseService.prosesserBrevutsendelse(paagaaendeBrevutsendelse, saksbehandler) + brevutsendelseService.prosesserBrevutsendelse(paagaaendeBrevutsendelse, saksbehandler) oppdaterStatus(paagaaendeBrevutsendelse, FERDIG) } } catch (e: Exception) { diff --git a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseService.kt b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevutsendelseService.kt similarity index 99% rename from apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseService.kt rename to apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevutsendelseService.kt index 12dc176f7a1..e859c549bb9 100644 --- a/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseService.kt +++ b/apps/etterlatte-behandling/src/main/kotlin/behandling/jobs/brevjobber/BrevutsendelseService.kt @@ -18,7 +18,7 @@ import no.nav.etterlatte.oppgave.OppgaveService import no.nav.etterlatte.sak.SakService import org.slf4j.LoggerFactory -class BrevMasseutsendelseService( +class BrevutsendelseService( private val sakService: SakService, private val oppgaveService: OppgaveService, private val sjekkBrevMottakerService: SjekkBrevMottakerService, diff --git a/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJobTest.kt b/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevutsendelseJobTest.kt similarity index 79% rename from apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJobTest.kt rename to apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevutsendelseJobTest.kt index d690ab2bca5..b7d39eb4bf5 100644 --- a/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseJobTest.kt +++ b/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevutsendelseJobTest.kt @@ -26,19 +26,19 @@ import javax.sql.DataSource @TestInstance(TestInstance.Lifecycle.PER_CLASS) @ExtendWith(DatabaseExtension::class) -internal class BrevMasseutsendelseJobTest( +internal class BrevutsendelseJobTest( val dataSource: DataSource, ) { private val kontekst = Context(Self(this::class.java.simpleName), DatabaseContextTest(mockk()), mockk(), null) private val arbeidstabellDao: ArbeidstabellDao = ArbeidstabellDao(ConnectionAutoclosingTest(dataSource)) private val sakDao: SakSkrivDao = SakSkrivDao(SakendringerDao(ConnectionAutoclosingTest(dataSource)) { mockk() }) - private val brevMasseutsendelseService: BrevMasseutsendelseService = mockk() + private val brevutsendelseService: BrevutsendelseService = mockk() - private val brevMasseutsendelseJob: BrevMasseutsendelseJob = - BrevMasseutsendelseJob( + private val brevutsendelseJob: BrevutsendelseJob = + BrevutsendelseJob( arbeidstabellDao = arbeidstabellDao, - brevMasseutsendelseService = brevMasseutsendelseService, + brevutsendelseService = brevutsendelseService, ) @BeforeEach @@ -57,15 +57,15 @@ internal class BrevMasseutsendelseJobTest( val sak = sakDao.opprettSak(SOEKER_FOEDSELSNUMMER.value, SakType.BARNEPENSJON, Enhetsnummer("1234")) val brevutsendelse = arbeidstabellDao.opprettJobb(nyArbeidsjobb(sak.id)) - every { brevMasseutsendelseService.prosesserBrevutsendelse(any(), any()) } just runs + every { brevutsendelseService.prosesserBrevutsendelse(any(), any()) } just runs - brevMasseutsendelseJob.setupKontekstAndRun(kontekst) + brevutsendelseJob.setupKontekstAndRun(kontekst) val oppdatertBrevutsendelse = arbeidstabellDao.hentJobb(brevutsendelse.id) oppdatertBrevutsendelse?.status shouldBe ArbeidStatus.FERDIG verify { - brevMasseutsendelseService.prosesserBrevutsendelse(match { it.status == ArbeidStatus.PAAGAAENDE }, any()) + brevutsendelseService.prosesserBrevutsendelse(match { it.status == ArbeidStatus.PAAGAAENDE }, any()) } } @@ -74,9 +74,9 @@ internal class BrevMasseutsendelseJobTest( val sak = sakDao.opprettSak(SOEKER_FOEDSELSNUMMER.value, SakType.BARNEPENSJON, Enhetsnummer("1234")) val brevutsendelse = arbeidstabellDao.opprettJobb(nyArbeidsjobb(sak.id)) - every { brevMasseutsendelseService.prosesserBrevutsendelse(any(), any()) } throws Exception("Brevutsendelse feilet") + every { brevutsendelseService.prosesserBrevutsendelse(any(), any()) } throws Exception("Brevutsendelse feilet") - brevMasseutsendelseJob.setupKontekstAndRun(kontekst) + brevutsendelseJob.setupKontekstAndRun(kontekst) val oppdatertBrevutsendelse = arbeidstabellDao.hentJobb(brevutsendelse.id) oppdatertBrevutsendelse?.status shouldBe ArbeidStatus.FEILET diff --git a/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseServiceTest.kt b/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevutsendelseServiceTest.kt similarity index 91% rename from apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseServiceTest.kt rename to apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevutsendelseServiceTest.kt index f3e6e89fcde..6b3108941a8 100644 --- a/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevMasseutsendelseServiceTest.kt +++ b/apps/etterlatte-behandling/src/test/kotlin/behandling/jobs/brevjobber/BrevutsendelseServiceTest.kt @@ -21,14 +21,14 @@ import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import java.util.UUID.randomUUID -internal class BrevMasseutsendelseServiceTest { +internal class BrevutsendelseServiceTest { private val sakService: SakService = mockk() private val sjekkBrevMottakerService: SjekkBrevMottakerService = mockk() private val oppgaveService: OppgaveService = mockk() private val brevKlient: BrevApiKlient = mockk() - private val brevMasseutsendelseService: BrevMasseutsendelseService = - BrevMasseutsendelseService( + private val brevutsendelseService: BrevutsendelseService = + BrevutsendelseService( sakService = sakService, sjekkBrevMottakerService = sjekkBrevMottakerService, oppgaveService = oppgaveService, @@ -60,7 +60,7 @@ internal class BrevMasseutsendelseServiceTest { coEvery { brevKlient.journalfoerBrev(any(), any(), any()) } returns mockk { every { journalpostId } returns listOf("1") } coEvery { brevKlient.distribuerBrev(any(), any(), any()) } returns mockk { every { bestillingsId } returns listOf("1") } - brevMasseutsendelseService.prosesserBrevutsendelse(brevutsendelse, mockk { every { ident() } returns "ident" }) + brevutsendelseService.prosesserBrevutsendelse(brevutsendelse, mockk { every { ident() } returns "ident" }) verifyOrder { sakService.finnSak(any()) @@ -89,7 +89,7 @@ internal class BrevMasseutsendelseServiceTest { every { oppgaveService.opprettOppgave(brevutsendelse.id.toString(), sak.id, any(), any(), any(), any(), any(), any()) } returns mockk { every { id } returns oppgaveId } - brevMasseutsendelseService.prosesserBrevutsendelse(brevutsendelse, mockk { every { ident() } returns "ident" }) + brevutsendelseService.prosesserBrevutsendelse(brevutsendelse, mockk { every { ident() } returns "ident" }) verifyOrder { sakService.finnSak(any())