Skip to content

Commit

Permalink
Validering av ferdigstill-endepunkt
Browse files Browse the repository at this point in the history
Co-authored-by: Henrik Jackson <[email protected]>
  • Loading branch information
matiasvinjevoll and henrikjackson committed Jan 17, 2025
1 parent d06e639 commit da3ea07
Show file tree
Hide file tree
Showing 5 changed files with 148 additions and 17 deletions.
6 changes: 4 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ val ktorVersion = "3.0.3"
val komponenterVersjon = "1.0.114"
val behandlingsflytVersjon = "0.0.105"
val tilgangVersjon = "0.0.89"
val junitVersjon = "5.11.4"

plugins {
id("brev.conventions")
Expand Down Expand Up @@ -57,9 +58,10 @@ dependencies {
implementation("org.flywaydb:flyway-database-postgresql:11.1.1")
implementation("org.postgresql:postgresql:42.7.4")

testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.11.4")
testImplementation("no.nav.aap.kelvin:dbtest:$komponenterVersjon")
testImplementation("org.junit.jupiter:junit-jupiter-api:5.11.4")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:$junitVersjon")
testImplementation("org.junit.jupiter:junit-jupiter-api:$junitVersjon")
testImplementation("org.junit.jupiter:junit-jupiter-params:$junitVersjon")
testImplementation("org.assertj:assertj-core:3.27.2")
testImplementation("org.testcontainers:postgresql:1.20.4")
constraints {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ package no.nav.aap.brev.bestilling
import no.nav.aap.brev.arkivoppslag.ArkivoppslagGateway
import no.nav.aap.brev.arkivoppslag.SafGateway
import no.nav.aap.brev.exception.ValideringsfeilException
import no.nav.aap.brev.innhold.FaktagrunnlagService
import no.nav.aap.brev.kontrakt.Brev
import no.nav.aap.brev.kontrakt.Brevtype
import no.nav.aap.brev.kontrakt.Språk
import no.nav.aap.brev.prosessering.ProsesserBrevbestillingJobbUtfører
import no.nav.aap.brev.prosessering.ProsesserBrevbestillingJobbUtfører.Companion.BESTILLING_REFERANSE_PARAMETER_NAVN
import no.nav.aap.brev.prosessering.ProsesseringStatus
import no.nav.aap.komponenter.dbconnect.DBConnection
import no.nav.aap.motor.FlytJobbRepository
import no.nav.aap.motor.JobbInput
Expand Down Expand Up @@ -70,10 +72,13 @@ class BrevbestillingService(
}

fun ferdigstill(referanse: BrevbestillingReferanse) {
// valider request
// fortsett prosessering
val bestilling = hent(referanse)
if (erBestillingAlleredeFerdigstilt(bestilling)) {
log.warn("Forsøkte å ferdigstille allerede ferdigstilt bestilling.")
return
}
validerFerdigstilling(bestilling)
// TODO fortsett prosessering
}

private fun validerBestilling(saksnummer: Saksnummer, vedlegg: Set<Vedlegg>) {
Expand Down Expand Up @@ -113,11 +118,30 @@ class BrevbestillingService(
}
}

private fun erBestillingAlleredeFerdigstilt(bestilling: Brevbestilling): Boolean {
return bestilling.prosesseringStatus != null &&
bestilling.prosesseringStatus > ProsesseringStatus.BREVBESTILLING_LØST
}

private fun validerFerdigstilling(bestilling: Brevbestilling) {
// TODO
checkNotNull(bestilling.brev)
checkNotNull(bestilling.prosesseringStatus)

val feilmelding =
"Kan ikke ferdigstille brevbestilling med referanse=${bestilling.referanse}"

valider(bestilling.prosesseringStatus == ProsesseringStatus.BREVBESTILLING_LØST) {
"$feilmelding: Bestillingen er i feil status for ferdigstilling, prosesseringStatus=${bestilling.prosesseringStatus}"
}

val faktagrunnlag = FaktagrunnlagService.finnFaktagrunnlag(bestilling.brev)
valider(faktagrunnlag.isNotEmpty()) {
val faktagrunnlagString = faktagrunnlag.joinToString(separator = ",", transform = { it.tekniskNavn })
"$feilmelding: Brevet mangler utfylling av faktagrunnlag med teknisk navn: $faktagrunnlagString."
}
}

private fun valider(value: Boolean, lazyMessage: () -> String): Unit {
private fun valider(value: Boolean, lazyMessage: () -> String) {
if (!value) {
val message = lazyMessage()
throw ValideringsfeilException(message)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class LøsBrevbestillingSteg(
log.info("LøsBrevbestillingSteg")

val brevbestilling = brevbestillingRepository.hent(kontekst.referanse)

// TODO: Sende riktig status i oppdaterBrevStatus - Er Status.FERDIGSTILT for å forhindre stopp i flyten
bestillerGateway.oppdaterBrevStatus(
brevbestilling,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
import java.util.UUID

class BestillingServiceTest {
class BestillingValideringTest {

companion object {
private val fakes = Fakes()
Expand All @@ -41,7 +41,7 @@ class BestillingServiceTest {
fun `bestilling går igjennom dersom ingen valideringsfeil`() {
val saksnummer = randomSaksnummer()
val dokumentInfoId = randomDokumentInfoId()
val journalpost = gittJournalpostIAkrivet(
val journalpost = gittJournalpostIArkivet(
journalpostId = randomJournalpostId(),
saksnummer = saksnummer,
dokumentInfoId = dokumentInfoId
Expand All @@ -65,7 +65,7 @@ class BestillingServiceTest {
@Test
fun `validering feiler dersom sak på vedlegg ikke har fagsakId lik bestillingens saksnummer`() {
val dokumentInfoId = randomDokumentInfoId()
val journalpost = gittJournalpostIAkrivet(
val journalpost = gittJournalpostIArkivet(
journalpostId = randomJournalpostId(),
saksnummer = randomSaksnummer(),
dokumentInfoId = dokumentInfoId
Expand All @@ -82,7 +82,7 @@ class BestillingServiceTest {
fun `validering feiler dersom sak på vedlegg ikke har fagsystem KELVIN`() {
val saksnummer = randomSaksnummer()
val dokumentInfoId = randomDokumentInfoId()
val journalpost = gittJournalpostIAkrivet(
val journalpost = gittJournalpostIArkivet(
journalpostId = randomJournalpostId(),
saksnummer = saksnummer,
dokumentInfoId = dokumentInfoId,
Expand All @@ -104,7 +104,7 @@ class BestillingServiceTest {
fun `validering feiler dersom sak på vedlegg ikke er sakstype FAGSAK`() {
val saksnummer = randomSaksnummer()
val dokumentInfoId = randomDokumentInfoId()
val journalpost = gittJournalpostIAkrivet(
val journalpost = gittJournalpostIArkivet(
journalpostId = randomJournalpostId(),
saksnummer = saksnummer,
dokumentInfoId = dokumentInfoId,
Expand All @@ -122,7 +122,7 @@ class BestillingServiceTest {
fun `validering feiler dersom sak på vedlegg ikke har tema AAP`() {
val saksnummer = randomSaksnummer()
val dokumentInfoId = randomDokumentInfoId()
val journalpost = gittJournalpostIAkrivet(
val journalpost = gittJournalpostIArkivet(
journalpostId = randomJournalpostId(),
saksnummer = saksnummer,
dokumentInfoId = dokumentInfoId,
Expand All @@ -140,7 +140,7 @@ class BestillingServiceTest {
fun `validering feiler dersom bruker ikke har tilgang til vedlegg (journalposten)`() {
val saksnummer = randomSaksnummer()
val dokumentInfoId = randomDokumentInfoId()
val journalpost = gittJournalpostIAkrivet(
val journalpost = gittJournalpostIArkivet(
journalpostId = randomJournalpostId(),
saksnummer = saksnummer,
dokumentInfoId = dokumentInfoId,
Expand All @@ -158,7 +158,7 @@ class BestillingServiceTest {
fun `validering feiler dersom vedlegg ikke journalstatus FERDIGSTILT eller EKSPEDERT`() {
val saksnummer = randomSaksnummer()
val dokumentInfoId = randomDokumentInfoId()
val journalpost = gittJournalpostIAkrivet(
val journalpost = gittJournalpostIArkivet(
journalpostId = randomJournalpostId(),
saksnummer = saksnummer,
dokumentInfoId = dokumentInfoId,
Expand All @@ -175,7 +175,7 @@ class BestillingServiceTest {
@Test
fun `validering feiler dersom vedlegg ikke har dokumentet i arkivet`() {
val saksnummer = randomSaksnummer()
val journalpost = gittJournalpostIAkrivet(
val journalpost = gittJournalpostIArkivet(
journalpostId = randomJournalpostId(),
saksnummer = saksnummer,
dokumentInfoId = randomDokumentInfoId(),
Expand All @@ -192,7 +192,7 @@ class BestillingServiceTest {
fun `validering feiler dersom bruker ikke har tilgang til vedlegg (dokument)`() {
val saksnummer = randomSaksnummer()
val dokumentInfoId = randomDokumentInfoId()
val journalpost = gittJournalpostIAkrivet(
val journalpost = gittJournalpostIArkivet(
journalpostId = randomJournalpostId(),
saksnummer = saksnummer,
dokumentInfoId = dokumentInfoId,
Expand All @@ -206,7 +206,7 @@ class BestillingServiceTest {
)
}

private fun gittJournalpostIAkrivet(
private fun gittJournalpostIArkivet(
journalpostId: JournalpostId,
saksnummer: Saksnummer,
dokumentInfoId: DokumentInfoId,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
package no.nav.aap.brev.bestilling

import no.nav.aap.brev.exception.ValideringsfeilException
import no.nav.aap.brev.innhold.BrevinnholdService
import no.nav.aap.brev.kontrakt.Brev
import no.nav.aap.brev.kontrakt.Brevtype
import no.nav.aap.brev.kontrakt.Språk
import no.nav.aap.brev.no.nav.aap.brev.test.Fakes
import no.nav.aap.brev.prosessering.ProsesseringStatus
import no.nav.aap.brev.test.fakes.brev
import no.nav.aap.brev.test.fakes.randomBehandlingReferanse
import no.nav.aap.brev.test.fakes.randomSaksnummer
import no.nav.aap.komponenter.dbconnect.transaction
import no.nav.aap.komponenter.dbtest.InitTestDatabase
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.AfterAll
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.EnumSource
import java.util.*

class FerdigstillValideringTest {

companion object {
private val fakes = Fakes()
private val dataSource = InitTestDatabase.dataSource

@JvmStatic
@AfterAll
fun afterAll() {
fakes.close()
}
}

@Test
fun `ferdigstilling går igjennom dersom ingen valideringsfeil`() {
val referanse = gittBrevMed(brev = brev(), status = ProsesseringStatus.BREVBESTILLING_LØST)
ferdigstill(referanse)
// TODO sjekk at fortsett prosessering blir gjort
}

@ParameterizedTest
@EnumSource(
ProsesseringStatus::class, names = ["STARTET", "INNHOLD_HENTET", "FAKTAGRUNNLAG_HENTET"]
)
fun `ferdigstill med status før BREVBESTILLING_LØST feiler`(status : ProsesseringStatus) {
val referanse = gittBrevMed(brev = brev(), status = status)
val exception = assertThrows<ValideringsfeilException> {
ferdigstill(referanse)
}
assertThat(exception.message).endsWith(
"Bestillingen er i feil status for ferdigstilling, prosesseringStatus=$status"
)
}

@ParameterizedTest
@EnumSource(
ProsesseringStatus::class, names = [
"BREV_FERDIGSTILT",
"JOURNALFORT",
"JOURNALPOST_VEDLEGG_TILKNYTTET",
"JOURNALPOST_FERDIGSTILT",
"DISTRIBUERT",
"FERDIG"
]
)
fun `ferdigstill feiler ikke dersom status er etter BREVBESTILLING_LØST, men gjør ingen endring`(status : ProsesseringStatus) {
val referanse = gittBrevMed(brev = brev(), status = status)
ferdigstill(referanse)
// TODO sjekk at fortsett prosessering ikke blir gjort
}

private fun gittBrevMed(brev: Brev, status: ProsesseringStatus): BrevbestillingReferanse {
return dataSource.transaction { connection ->
val brevbestillingService = BrevbestillingService.konstruer(connection)
val brevbestillingRepository = BrevbestillingRepositoryImpl(connection)
val brevinnholdService = BrevinnholdService.konstruer(connection)

val referanse = brevbestillingService.opprettBestilling(
saksnummer = randomSaksnummer(),
behandlingReferanse = randomBehandlingReferanse(),
unikReferanse = UUID.randomUUID().toString(),
brevtype = Brevtype.INNVILGELSE,
språk = Språk.NB,
vedlegg = emptySet(),
)

brevinnholdService.hentOgLagre(referanse)
brevbestillingService.oppdaterBrev(referanse, brev)
brevbestillingRepository.oppdaterProsesseringStatus(referanse, status)

referanse
}
}

private fun ferdigstill(referanse: BrevbestillingReferanse) {
dataSource.transaction { connection ->
val brevbestillingService = BrevbestillingService.konstruer(connection)

brevbestillingService.ferdigstill(referanse)
}
}
}

0 comments on commit da3ea07

Please sign in to comment.