Skip to content

Commit 042615b

Browse files
authored
Validering (#863)
* 1376 skal ikke få velge tiltak utenfor deltakelsesperioden * retter navn på testmetode * 1376 skal ikke kunne velge deltakelser som mangler start- og/eller sluttdato
1 parent 18db85f commit 042615b

File tree

4 files changed

+97
-3
lines changed

4 files changed

+97
-3
lines changed

app/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/saksbehandling/domene/behandling/Behandling.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,6 @@ data class Behandling(
7373

7474
val maksDagerMedTiltakspengerForPeriode: Int = MAKS_DAGER_MED_TILTAKSPENGER_FOR_PERIODE
7575

76-
// TODO: Brukes bare for å angi deltakelse frem til saksbehandler setter den selv via input. Skal fjernes når det er på plass.
77-
private val tiltaksdeltakelse = saksopplysninger.tiltaksdeltagelse.first()
78-
7976
fun inneholderEksternDeltagelseId(eksternDeltagelseId: String): Boolean =
8077
saksopplysninger.tiltaksdeltagelse.find { it.eksternDeltagelseId == eksternDeltagelseId } != null
8178

@@ -456,6 +453,7 @@ data class Behandling(
456453
}
457454
if (behandlingstype == FØRSTEGANGSBEHANDLING) {
458455
require(valgteTiltaksdeltakelser != null) { "Valgte tiltaksdeltakelser må være satt for førstegangsbehandling" }
456+
require(valgteTiltaksdeltakelser.periodisering.totalePeriode == virkningsperiode) { "Total periode for valgte tiltaksdeltakelser (${valgteTiltaksdeltakelser.periodisering.totalePeriode}) må stemme overens med virkningsperioden ($virkningsperiode)" }
459457
}
460458
}
461459

@@ -471,6 +469,7 @@ data class Behandling(
471469
}
472470
if (behandlingstype == FØRSTEGANGSBEHANDLING) {
473471
require(valgteTiltaksdeltakelser != null) { "Valgte tiltaksdeltakelser må være satt for førstegangsbehandling" }
472+
require(valgteTiltaksdeltakelser.periodisering.totalePeriode == virkningsperiode) { "Total periode for valgte tiltaksdeltakelser (${valgteTiltaksdeltakelser.periodisering.totalePeriode}) må stemme overens med virkningsperioden ($virkningsperiode)" }
474473
}
475474
}
476475

@@ -487,6 +486,7 @@ data class Behandling(
487486
}
488487
if (behandlingstype == FØRSTEGANGSBEHANDLING) {
489488
require(valgteTiltaksdeltakelser != null) { "Valgte tiltaksdeltakelser må være satt for førstegangsbehandling" }
489+
require(valgteTiltaksdeltakelser.periodisering.totalePeriode == virkningsperiode) { "Total periode for valgte tiltaksdeltakelser (${valgteTiltaksdeltakelser.periodisering.totalePeriode}) må stemme overens med virkningsperioden ($virkningsperiode)" }
490490
}
491491
}
492492

app/src/main/kotlin/no/nav/tiltakspenger/saksbehandling/saksbehandling/domene/tiltak/ValgteTiltaksdeltakelser.kt

+11
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,15 @@ data class ValgteTiltaksdeltakelser(
2929
)
3030
}
3131
}
32+
33+
init {
34+
periodisering.perioderMedVerdi.forEach {
35+
require(it.verdi.deltagelseFraOgMed != null && it.verdi.deltagelseTilOgMed != null) {
36+
"Kan ikke velge tiltaksdeltakelse med id ${it.verdi.eksternDeltagelseId} som mangler start- eller sluttdato"
37+
}
38+
require(Periode(it.verdi.deltagelseFraOgMed!!, it.verdi.deltagelseTilOgMed!!).inneholderHele(it.periode)) {
39+
"Valgt periode for tiltak med id ${it.verdi.eksternDeltagelseId} må være innenfor deltakelsesperioden"
40+
}
41+
}
42+
}
3243
}

app/src/test/kotlin/no/nav/tiltakspenger/saksbehandling/routes/behandling/tilbeslutter/SendFørstegangsbehandlingTilBeslutningBuilder.kt

+46
Original file line numberDiff line numberDiff line change
@@ -108,4 +108,50 @@ interface SendFørstegangsbehandlingTilBeslutningBuilder {
108108
return bodyAsText
109109
}
110110
}
111+
112+
suspend fun ApplicationTestBuilder.sendFørstegangsbehandlingTilBeslutningReturnerResponskode(
113+
tac: TestApplicationContext,
114+
sakId: SakId,
115+
behandlingId: BehandlingId,
116+
saksbehandler: Saksbehandler = ObjectMother.saksbehandler(),
117+
fritekstTilVedtaksbrev: String = "fritekst",
118+
begrunnelseVilkårsvurdering: String = "begrunnelse",
119+
innvilgelsesperiode: Periode = Periode(1.januar(2023), 31.mars(2023)),
120+
eksternDeltagelseId: String,
121+
): HttpStatusCode {
122+
defaultRequest(
123+
HttpMethod.Post,
124+
url {
125+
protocol = URLProtocol.HTTPS
126+
path("/sak/$sakId/behandling/$behandlingId/sendtilbeslutning")
127+
},
128+
jwt = tac.jwtGenerator.createJwtForSaksbehandler(
129+
saksbehandler = saksbehandler,
130+
),
131+
) {
132+
setBody(
133+
"""
134+
{
135+
"fritekstTilVedtaksbrev": "$fritekstTilVedtaksbrev",
136+
"begrunnelseVilkårsvurdering": "$begrunnelseVilkårsvurdering",
137+
"innvilgelsesperiode": {
138+
"fraOgMed": "${innvilgelsesperiode.fraOgMed}",
139+
"tilOgMed": "${innvilgelsesperiode.tilOgMed}"
140+
},
141+
"valgteTiltaksdeltakelser": [
142+
{
143+
"eksternDeltagelseId": "$eksternDeltagelseId",
144+
"periode": {
145+
"fraOgMed": "${innvilgelsesperiode.fraOgMed}",
146+
"tilOgMed": "${innvilgelsesperiode.tilOgMed}"
147+
}
148+
}
149+
]
150+
}
151+
""".trimIndent(),
152+
)
153+
}.apply {
154+
return this.status
155+
}
156+
}
111157
}

app/src/test/kotlin/no/nav/tiltakspenger/saksbehandling/routes/behandling/tilbeslutter/SendFørstegangsbehandlingTilBeslutterTest.kt

+37
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package no.nav.tiltakspenger.saksbehandling.routes.behandling.tilbeslutter
22

33
import io.kotest.matchers.shouldBe
4+
import io.ktor.http.HttpStatusCode
45
import io.ktor.server.routing.routing
56
import io.ktor.server.testing.testApplication
67
import kotlinx.coroutines.test.runTest
78
import no.nav.tiltakspenger.common.TestApplicationContext
9+
import no.nav.tiltakspenger.libs.periodisering.Periode
810
import no.nav.tiltakspenger.saksbehandling.jacksonSerialization
911
import no.nav.tiltakspenger.saksbehandling.objectmothers.ObjectMother.saksbehandler
1012
import no.nav.tiltakspenger.saksbehandling.routes.RouteBuilder.sendFørstegangsbehandlingTilBeslutningForBehandlingId
13+
import no.nav.tiltakspenger.saksbehandling.routes.RouteBuilder.sendFørstegangsbehandlingTilBeslutningReturnerResponskode
1114
import no.nav.tiltakspenger.saksbehandling.routes.RouteBuilder.startBehandling
1215
import no.nav.tiltakspenger.saksbehandling.routes.routes
1316
import no.nav.tiltakspenger.saksbehandling.saksbehandling.domene.behandling.Behandlingsstatus
@@ -50,4 +53,38 @@ class SendFørstegangsbehandlingTilBeslutterTest {
5053
}
5154
}
5255
}
56+
57+
@Test
58+
fun `send til beslutter - feiler hvis innvilgelsesperioden er utenfor deltakelsesperioden`() = runTest {
59+
with(TestApplicationContext()) {
60+
val saksbehandler = saksbehandler()
61+
val tac = this
62+
testApplication {
63+
application {
64+
jacksonSerialization()
65+
routing { routes(tac) }
66+
}
67+
val (sak, søknad, behandling) = this.startBehandling(tac, saksbehandler = saksbehandler)
68+
val behandlingId = behandling.id
69+
tac.behandlingContext.behandlingRepo.hent(behandlingId).also {
70+
it.status shouldBe Behandlingsstatus.UNDER_BEHANDLING
71+
it.saksbehandler shouldBe saksbehandler.navIdent
72+
it.beslutter shouldBe null
73+
}
74+
val tiltaksdeltakelseFom = behandling.saksopplysninger.tiltaksdeltagelse.first().deltagelseFraOgMed!!
75+
val tiltaksdeltakelseTom = behandling.saksopplysninger.tiltaksdeltagelse.first().deltagelseTilOgMed!!
76+
77+
val responskode = sendFørstegangsbehandlingTilBeslutningReturnerResponskode(
78+
tac,
79+
sak.id,
80+
behandlingId,
81+
saksbehandler,
82+
innvilgelsesperiode = Periode(tiltaksdeltakelseFom.minusWeeks(1), tiltaksdeltakelseTom),
83+
eksternDeltagelseId = søknad.tiltak.id,
84+
)
85+
86+
responskode shouldBe HttpStatusCode.InternalServerError
87+
}
88+
}
89+
}
5390
}

0 commit comments

Comments
 (0)