Skip to content

Commit

Permalink
Legg på saksbehandler/beslutter-sjekker på SakService
Browse files Browse the repository at this point in the history
  • Loading branch information
hestad committed Nov 7, 2024
1 parent bdfb5a3 commit c4b7a5c
Show file tree
Hide file tree
Showing 25 changed files with 413 additions and 276 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ val ktorVersion = "3.0.1"
val kotestVersion = "5.9.1"
val mockkVersion = "1.13.13"
val testContainersVersion = "1.20.3"
val felleslibVersion = "0.0.259"
val felleslibVersion = "0.0.261"
val poaoTilgangVersjon = "2024.10.04_12.38-e183cd9d187f"
val iverksettVersjon = "1.0_20241029145217_29f9f5d"
val kotlinxCoroutinesVersion = "1.9.0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ fun Route.behandlingBenkRoutes(
{
when (it) {
is KanIkkeHenteSaksoversikt.HarIkkeTilgang -> call.respond403Forbidden(
ikkeTilgang("Må ha en av rollene SAKSBEHANDLER eller BESLUTTER for å hente behandlinger på benken."),
ikkeTilgang("Må ha en av rollene ${it.kreverEnAvRollene} for å hente behandlinger på benken."),
)
}
},
Expand Down Expand Up @@ -86,6 +86,12 @@ fun Route.behandlingBenkRoutes(

is StøtterKunInnvilgelse -> call.respond400BadRequest(støtterIkkeDelvisEllerAvslag())
}

is KanIkkeStarteFørstegangsbehandling.HarIkkeTilgang -> {
call.respond403Forbidden(
ikkeTilgang("Krever en av rollene ${it.kreverEnAvRollene} for å starte en behandling."),
)
}
}
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import no.nav.tiltakspenger.vedtak.auditlog.AuditService
import no.nav.tiltakspenger.vedtak.auth2.TokenService
import no.nav.tiltakspenger.vedtak.routes.correlationId
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.Standardfeil
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.Standardfeil.ikkeTilgang
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.respond403Forbidden
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.respond500InternalServerError
import no.nav.tiltakspenger.vedtak.routes.sak.SAK_PATH
import no.nav.tiltakspenger.vedtak.routes.withSakId
Expand All @@ -28,7 +30,8 @@ fun Route.hentPersonRoute(
call.withSaksbehandler(tokenService = tokenService) { saksbehandler ->
call.withSakId { sakId ->
val correlationId = call.correlationId()
sakService.hentEnkelPersonForSakId(sakId).map {
sakService.hentEnkelPersonForSakId(sakId, saksbehandler).map {
// TODO pre-mvp jah: @Benedicte: Skal denne settes statisk slik som dette? :sweat:
it.toDTO(skjerming = false)
}.fold(
{
Expand All @@ -38,6 +41,7 @@ fun Route.hentPersonRoute(
melding = "Feil ved kall mot PDL",
kode = "feil_ved_kall_mot_pdl",
)
is KunneIkkeHenteEnkelPerson.HarIkkeTilgang -> call.respond403Forbidden(ikkeTilgang("Må ha rollen ${it.kreverEnAvRollene} for å hente personopplysninger knyttet til sak"))
}
},
{ personopplysninger ->
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
package no.nav.tiltakspenger.vedtak.routes.meldekort

import arrow.core.getOrElse
import io.ktor.http.HttpStatusCode
import io.ktor.server.response.respond
import io.ktor.server.routing.Route
import io.ktor.server.routing.get
import mu.KotlinLogging
import no.nav.tiltakspenger.meldekort.domene.Meldekort
import no.nav.tiltakspenger.saksbehandling.service.sak.KunneIkkeHenteSakForSakId
import no.nav.tiltakspenger.saksbehandling.service.sak.SakService
import no.nav.tiltakspenger.vedtak.auditlog.AuditLogEvent
import no.nav.tiltakspenger.vedtak.auditlog.AuditService
import no.nav.tiltakspenger.vedtak.auth2.TokenService
import no.nav.tiltakspenger.vedtak.routes.correlationId
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.Standardfeil.fantIkkeMeldekort
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.Standardfeil.fantIkkeSak
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.Standardfeil.ikkeTilgang
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.respond400BadRequest
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.respond403Forbidden
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.respond404NotFound
import no.nav.tiltakspenger.vedtak.routes.meldekort.dto.toDTO
import no.nav.tiltakspenger.vedtak.routes.withMeldekortId
Expand All @@ -34,12 +37,12 @@ fun Route.hentMeldekortRoute(
call.withMeldekortId { meldekortId ->
val correlationId = call.correlationId()

val sak = sakService.hentForSakId(sakId, saksbehandler, correlationId = correlationId)
if (sak == null) {
call.respond404NotFound(fantIkkeSak())
val sak = sakService.hentForSakId(sakId, saksbehandler, correlationId = correlationId).getOrElse {
when (it) {
is KunneIkkeHenteSakForSakId.HarIkkeTilgang -> call.respond403Forbidden(ikkeTilgang("Må ha en av rollene ${it.kreverEnAvRollene} for å hente meldekort"))
}
return@withMeldekortId
}

val meldekort = sak.hentMeldekort(meldekortId)

if (meldekort == null) {
Expand All @@ -64,7 +67,7 @@ fun Route.hentMeldekortRoute(
contextMessage = "Henter meldekort",
correlationId = correlationId,
)
// TODO pre-mvp: Her blir det mer riktig og bruke den totale perioden det skal meldes for.
// TODO post-mvp jah: Saksbehandlerne reagerte på ordet saksperiode og ønsket seg "vedtaksperiode". Gitt at man har en forlengelse vil man har et førstegangsvedtak+forlengelsesvedtak. Vil de ikke ha se den totale meldeperioden for den gitte saken?
call.respond(
status = HttpStatusCode.OK,
message = meldekort.toDTO(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,20 @@ import io.ktor.server.routing.Route
import io.ktor.server.routing.post
import mu.KotlinLogging
import no.nav.tiltakspenger.meldekort.domene.IverksettMeldekortKommando
import no.nav.tiltakspenger.meldekort.domene.KanIkkeIverksetteMeldekort
import no.nav.tiltakspenger.meldekort.domene.KanIkkeIverksetteMeldekort.MåVæreBeslutter
import no.nav.tiltakspenger.meldekort.domene.KanIkkeIverksetteMeldekort.SaksbehandlerOgBeslutterKanIkkeVæreLik
import no.nav.tiltakspenger.meldekort.service.IverksettMeldekortService
import no.nav.tiltakspenger.saksbehandling.service.sak.KunneIkkeHenteSakForSakId
import no.nav.tiltakspenger.vedtak.auditlog.AuditLogEvent
import no.nav.tiltakspenger.vedtak.auditlog.AuditService
import no.nav.tiltakspenger.vedtak.auth2.TokenService
import no.nav.tiltakspenger.vedtak.routes.correlationId
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.Standardfeil.ikkeTilgang
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.Standardfeil.måVæreBeslutter
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.Standardfeil.saksbehandlerOgBeslutterKanIkkeVæreLik
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.respond400BadRequest
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.respond403Forbidden
import no.nav.tiltakspenger.vedtak.routes.withMeldekortId
import no.nav.tiltakspenger.vedtak.routes.withSakId
import no.nav.tiltakspenger.vedtak.routes.withSaksbehandler
Expand Down Expand Up @@ -51,10 +55,16 @@ fun Route.iverksettMeldekortRoute(
meldekort.fold(
{
when (it) {
is MåVæreBeslutter -> call.respond400BadRequest(måVæreBeslutter())
is MåVæreBeslutter -> call.respond403Forbidden(måVæreBeslutter())
is SaksbehandlerOgBeslutterKanIkkeVæreLik -> call.respond400BadRequest(
saksbehandlerOgBeslutterKanIkkeVæreLik(),
)

is KanIkkeIverksetteMeldekort.KunneIkkeHenteSak -> when (val u = it.underliggende) {
is KunneIkkeHenteSakForSakId.HarIkkeTilgang -> call.respond403Forbidden(
ikkeTilgang("Må ha en av rollene ${u.kreverEnAvRollene} for å hente sak"),
)
}
}
},
{ call.respond(message = {}, status = HttpStatusCode.OK) },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,14 @@ import no.nav.tiltakspenger.meldekort.domene.KanIkkeSendeMeldekortTilBeslutter
import no.nav.tiltakspenger.meldekort.domene.SendMeldekortTilBeslutterKommando
import no.nav.tiltakspenger.meldekort.domene.SendMeldekortTilBeslutterKommando.Dager
import no.nav.tiltakspenger.meldekort.service.SendMeldekortTilBeslutterService
import no.nav.tiltakspenger.saksbehandling.service.sak.KunneIkkeHenteSakForSakId
import no.nav.tiltakspenger.vedtak.auditlog.AuditLogEvent
import no.nav.tiltakspenger.vedtak.auditlog.AuditService
import no.nav.tiltakspenger.vedtak.auth2.TokenService
import no.nav.tiltakspenger.vedtak.routes.correlationId
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.Standardfeil
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.respond400BadRequest
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.respond403Forbidden
import no.nav.tiltakspenger.vedtak.routes.withBody
import no.nav.tiltakspenger.vedtak.routes.withMeldekortId
import no.nav.tiltakspenger.vedtak.routes.withSakId
Expand Down Expand Up @@ -122,6 +125,15 @@ fun Route.sendMeldekortTilBeslutterRoute(
kode = "for_mange_dager_utfylt",
)
}

is KanIkkeSendeMeldekortTilBeslutter.KunneIkkeHenteSak -> when (
val u =
it.underliggende
) {
is KunneIkkeHenteSakForSakId.HarIkkeTilgang -> call.respond403Forbidden(
Standardfeil.ikkeTilgang("Må ha en av rollene ${u.kreverEnAvRollene} for å hente sak"),
)
}
}
},
ifRight = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ import io.ktor.server.routing.post
import mu.KotlinLogging
import no.nav.tiltakspenger.libs.common.Fnr
import no.nav.tiltakspenger.saksbehandling.service.sak.KunneIkkeHenteSakForFnr
import no.nav.tiltakspenger.saksbehandling.service.sak.KunneIkkeHenteSakForSaksnummer
import no.nav.tiltakspenger.saksbehandling.service.sak.SakService
import no.nav.tiltakspenger.vedtak.auditlog.AuditLogEvent
import no.nav.tiltakspenger.vedtak.auditlog.AuditService
import no.nav.tiltakspenger.vedtak.auth2.TokenService
import no.nav.tiltakspenger.vedtak.routes.correlationId
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.Standardfeil
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.Standardfeil.ikkeTilgang
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.respond400BadRequest
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.respond403Forbidden
import no.nav.tiltakspenger.vedtak.routes.exceptionhandling.respond404NotFound
Expand All @@ -43,12 +45,20 @@ fun Route.sakRoutes(
contextMessage = "Henter hele saken til brukeren",
correlationId = call.correlationId(),
)
val sakDTO = sakService.hentForSaksnummer(
sakService.hentForSaksnummer(
saksnummer = saksnummer,
saksbehandler = saksbehandler,
correlationId = call.correlationId(),
).toDTO()
call.respond(message = sakDTO, status = HttpStatusCode.OK)
).fold(
{
when (it) {
is KunneIkkeHenteSakForSaksnummer.HarIkkeTilgang -> call.respond403Forbidden(ikkeTilgang("Må ha en av rollene ${it.kreverEnAvRollene} for å hente sak for saksnummer."))
}
},
{ sak ->
call.respond(message = sak.toDTO(), status = HttpStatusCode.OK)
},
)
}
}
}
Expand All @@ -69,7 +79,7 @@ fun Route.sakRoutes(
ifLeft = {
when (it) {
is KunneIkkeHenteSakForFnr.FantIkkeSakForFnr -> call.respond404NotFound(Standardfeil.fantIkkeFnr())
is KunneIkkeHenteSakForFnr.HarIkkeTilgang -> call.respond403Forbidden(Standardfeil.ikkeTilgang("Må ha en av rollene SAKSBEHANDLER eller BESLUTTER for å hente sak for fnr."))
is KunneIkkeHenteSakForFnr.HarIkkeTilgang -> call.respond403Forbidden(ikkeTilgang("Må ha en av rollene ${it.kreverEnAvRollene} for å hente sak for fnr."))
}
},
ifRight = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,31 @@ package no.nav.tiltakspenger.vedtak.routes.alder

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
import io.kotest.assertions.throwables.shouldThrow
import io.kotest.assertions.withClue
import io.kotest.matchers.shouldBe
import io.ktor.client.request.setBody
import io.ktor.client.statement.bodyAsText
import io.ktor.http.HttpMethod
import io.ktor.http.HttpStatusCode
import io.ktor.http.URLProtocol
import io.ktor.http.contentType
import io.ktor.http.path
import io.ktor.server.routing.routing
import io.ktor.server.testing.testApplication
import io.ktor.server.util.url
import kotlinx.coroutines.test.runTest
import no.nav.tiltakspenger.common.TestApplicationContext
import no.nav.tiltakspenger.felles.Saksbehandler
import no.nav.tiltakspenger.felles.exceptions.StøtterIkkeUtfallException
import no.nav.tiltakspenger.felles.januar
import no.nav.tiltakspenger.libs.common.Rolle
import no.nav.tiltakspenger.libs.common.Roller
import no.nav.tiltakspenger.libs.periodisering.Periode
import no.nav.tiltakspenger.objectmothers.ObjectMother
import no.nav.tiltakspenger.objectmothers.førstegangsbehandlingUavklart
import no.nav.tiltakspenger.objectmothers.nySøknad
import no.nav.tiltakspenger.vedtak.clients.defaultObjectMapper
import no.nav.tiltakspenger.vedtak.routes.behandling.BEHANDLING_PATH
import no.nav.tiltakspenger.vedtak.routes.behandling.benk.behandlingBenkRoutes
import no.nav.tiltakspenger.vedtak.routes.behandling.vilkår.SamletUtfallDTO
import no.nav.tiltakspenger.vedtak.routes.behandling.vilkår.alder.AlderVilkårDTO
import no.nav.tiltakspenger.vedtak.routes.behandling.vilkår.alder.alderRoutes
Expand Down Expand Up @@ -118,8 +122,46 @@ class AlderRoutesTest {
val vurderingsperiode = Periode(fraOgMed = 1.januar(2018), tilOgMed = 10.januar(2018))
val fødselsdato = 5.januar(2000)
with(TestApplicationContext()) {
shouldThrow<StøtterIkkeUtfallException> {
this.førstegangsbehandlingUavklart(fødselsdato = fødselsdato, periode = vurderingsperiode)
val tac = this
val søknad = this.nySøknad(
periode = vurderingsperiode,
personopplysningerForBrukerFraPdl = ObjectMother.personopplysningKjedeligFyr(fødselsdato = fødselsdato),
)

testApplication {
application {
jacksonSerialization()
routing {
behandlingBenkRoutes(
tokenService = tac.tokenService,
behandlingService = tac.førstegangsbehandlingContext.behandlingService,
sakService = tac.sakContext.sakService,
auditService = tac.personContext.auditService,
)
}
}
defaultRequest(
HttpMethod.Post,
url {
protocol = URLProtocol.HTTPS
path("$BEHANDLING_PATH/startbehandling")
},
jwt = tac.jwtGenerator.createJwtForSaksbehandler(),
) {
setBody("""{"id":"${søknad.id}"}""")
}.apply {
withClue(
"Response details:\n" +
"Status: ${this.status}\n" +
"Content-Type: ${this.contentType()}\n" +
"Body: ${this.bodyAsText()}\n",
) {
status shouldBe HttpStatusCode.BadRequest
bodyAsText() shouldBe """
{"melding":"Vi støtter ikke delvis innvilgelse eller avslag.","kode":"støtter_ikke_delvis_innvilgelse_eller_avslag"}
""".trimIndent()
}
}
}
}
}
Expand Down
Loading

0 comments on commit c4b7a5c

Please sign in to comment.