Skip to content

Commit

Permalink
Oppdaterte regelsett for inngang slik at flere regler kombineres i en…
Browse files Browse the repository at this point in the history
… response
  • Loading branch information
nilsmsa committed Aug 27, 2024
1 parent c70f118 commit cf9fd87
Show file tree
Hide file tree
Showing 7 changed files with 164 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,8 @@ class ApiV2TestCaseRunner : FreeSpec({
if (aarsak == null) {
fakitskAarsak.shouldBeNull()
} else {
aarsak.detaljer shouldContainExactlyInAnyOrder fakitskAarsak?.detaljer
aarsak.regler shouldContainExactlyInAnyOrder fakitskAarsak?.regler
fakitskAarsak?.detaljer shouldContainExactlyInAnyOrder aarsak.detaljer
fakitskAarsak?.regler shouldContainExactlyInAnyOrder aarsak.regler
}
}
expectedErrorResponse.aarsakTilAvvisning?.detaljer?.also { expectedDetails ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.ApiRegelId
import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.FeilV2
import no.nav.paw.arbeidssokerregisteret.*
import no.nav.paw.arbeidssokerregisteret.application.IkkeBosattINorgeIHenholdTilFolkeregisterloven
import no.nav.paw.arbeidssokerregisteret.application.Under18Aar
import no.nav.paw.arbeidssokerregisteret.intern.v1.Avvist
import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Bruker
import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.BrukerType
Expand Down Expand Up @@ -55,7 +56,10 @@ data object NorskBrukerBosattISverigeUnder18aar : TestCase {
melding = IkkeBosattINorgeIHenholdTilFolkeregisterloven.beskrivelse,
feilKode = FeilV2.FeilKode.AVVIST,
aarsakTilAvvisning = AarsakTilAvvisningV2(
regler = listOf(IkkeBosattINorgeIHenholdTilFolkeregisterloven.apiRegel()),
regler = listOf(
Under18Aar.apiRegel(),
IkkeBosattINorgeIHenholdTilFolkeregisterloven.apiRegel()
),
detaljer = listOf(
ApiOpplysning.ER_UNDER_18_AAR,
ApiOpplysning.HAR_UTENLANDSK_ADRESSE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ object InngangsRegler: Regler {
),
Under18Aar(
ErUnder18Aar,
BosattEtterFregLoven,
vedTreff = ::muligGrunnlagForAvvisning
),
UkjentAlder(
Expand All @@ -34,6 +33,10 @@ object InngangsRegler: Regler {
ErOver18Aar,
BosattEtterFregLoven,
vedTreff = ::grunnlagForGodkjenning
),
IkkeBosattINorgeIHenholdTilFolkeregisterloven(
!BosattEtterFregLoven,
vedTreff = ::muligGrunnlagForAvvisning
)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ operator fun RegelId.invoke(

fun Regel.evaluer(samletOpplysning: Iterable<Opplysning>): Boolean =
opplysninger
.filter { it !is Not<*> }
.filterNot { it is Not<*> }
.all { samletOpplysning.contains(it) } &&
opplysninger
.filterIsInstance<Not<*>>()
.filterIsInstance<Not<Opplysning>>()
.none { samletOpplysning.contains(it.value) }

/**
Expand All @@ -38,13 +38,15 @@ fun Regler.evaluer(
.filterIsInstance<Either.Left<Problem>>()
.map { it.value }
.let {
it.filterIsInstance<SkalAvvises>() to it
it.filterIsInstance<SkalAvvises>()
.firstOrNull() to it
}
val grunnlagForGodkjenning = results
.filterIsInstance<Either.Right<GrunnlagForGodkjenning>>()
.map { it.value }
when {
skalAvvises.isNotEmpty() -> nonEmptyListOf(skalAvvises.first(), *skalAvvises.tail().toTypedArray()).left()
skalAvvises?.regel?.id == IkkeFunnet -> nonEmptyListOf(skalAvvises).left()
skalAvvises != null -> nonEmptyListOf(skalAvvises, *(alleProblemer - skalAvvises).toTypedArray()).left()
grunnlagForGodkjenning.isNotEmpty() -> grunnlagForGodkjenning.first().right()
alleProblemer.isNotEmpty() -> nonEmptyListOf(alleProblemer.first(), *alleProblemer.tail().toTypedArray()).left()
else -> standardRegel.vedTreff(opplysninger).mapLeft { nonEmptyListOf(it) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ data object Doed : DomeneRegelId {
}

data object Under18Aar : DomeneRegelId {
override val beskrivelse: String = "Er bosatt i Norge i henhold Folkeregisterloven, men er under 18 år"
override val beskrivelse: String = "Er under 18 år"
}

data object IkkeBosattINorgeIHenholdTilFolkeregisterloven : DomeneRegelId {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,14 @@ import no.nav.paw.arbeidssokerregisteret.application.opplysninger.Opplysning
interface Regler {
val regler: List<Regel>
val standardRegel: Regel
operator fun Opplysning.not(): Opplysning = HarIkke(this).value
operator fun Opplysning.not(): Opplysning = HarIkke(this)
}

interface Not<A> {
val value: A
}

data class HarIkke(override val value: Opplysning) : Not<Opplysning>
data class HarIkke(override val value: Opplysning) : Not<Opplysning>, Opplysning {
override val id: String get() = "IKKE_${value.id}"
override val beskrivelse: String get() = "IKKE_${value.beskrivelse}"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
package no.nav.paw.arbeidssokerregisteret.application

import arrow.core.Either
import arrow.core.NonEmptyList
import io.kotest.core.spec.style.FreeSpec
import io.kotest.matchers.collections.shouldContainExactlyInAnyOrder
import io.kotest.matchers.should
import io.kotest.matchers.types.shouldBeInstanceOf
import no.nav.paw.arbeidssokerregisteret.application.opplysninger.DomeneOpplysning

typealias Avvist = Either.Left<NonEmptyList<Problem>>
typealias Godkjent = Either.Right<GrunnlagForGodkjenning>

class RegelEvalTest : FreeSpec({
"Verifiser regel evaluering" - {
"Person under 18 år" - {
"og forhåndsgodkjent" - {
"skal avvises når" - {
"er doed" {
InngangsRegler.evaluer(
listOf(
DomeneOpplysning.ErDoed,
DomeneOpplysning.ErForhaandsgodkjent,
DomeneOpplysning.ErUnder18Aar
)
) should { result ->
result.shouldBeInstanceOf<Avvist>()
result.value.map { problem -> problem.regel.id } shouldContainExactlyInAnyOrder listOf(
Doed,
Under18Aar,
IkkeBosattINorgeIHenholdTilFolkeregisterloven
)
}
}
"er savnet" {
InngangsRegler.evaluer(
listOf(
DomeneOpplysning.ErSavnet,
DomeneOpplysning.ErForhaandsgodkjent,
DomeneOpplysning.ErUnder18Aar
)
) should { result ->
result.shouldBeInstanceOf<Avvist>()
result.value.map { problem -> problem.regel.id } shouldContainExactlyInAnyOrder listOf(
Savnet,
Under18Aar,
IkkeBosattINorgeIHenholdTilFolkeregisterloven
)
}
}
"ikke funnet i PDL" {
InngangsRegler.evaluer(
listOf(
DomeneOpplysning.PersonIkkeFunnet
)
) should { result ->
result.shouldBeInstanceOf<Avvist>()
result.value.map { problem -> problem.regel.id } shouldContainExactlyInAnyOrder listOf(
IkkeFunnet
)
}
}
}
"skal godkjennes når" - {
"ikke bosatt" {
InngangsRegler.evaluer(
listOf(
DomeneOpplysning.IkkeBosatt,
DomeneOpplysning.ErUnder18Aar,
DomeneOpplysning.ErForhaandsgodkjent
)
) should { result ->
result.shouldBeInstanceOf<Godkjent>()
}
}
"ingen informasjon om bosatt" {
InngangsRegler.evaluer(
listOf(
DomeneOpplysning.ErUnder18Aar,
DomeneOpplysning.ErForhaandsgodkjent
)
) should { result ->
result.shouldBeInstanceOf<Godkjent>()
}
}
}
}
}
"Person over 18 år" - {
"skal avvises når" - {
"Norsk statsborger, ikke bosatt" {
InngangsRegler.evaluer(
listOf(
DomeneOpplysning.ErNorskStatsborger,
DomeneOpplysning.ErEuEoesStatsborger,
DomeneOpplysning.ErOver18Aar,
DomeneOpplysning.IkkeBosatt
)
) should { result ->
result.shouldBeInstanceOf<Avvist>()
result.value.map { it.regel.id } shouldContainExactlyInAnyOrder listOf(
IkkeBosattINorgeIHenholdTilFolkeregisterloven
)
}
}
"3. lands borger, ikke bosatt" {
InngangsRegler.evaluer(
listOf(
DomeneOpplysning.ErOver18Aar,
DomeneOpplysning.IkkeBosatt
)
) should { result ->
result.shouldBeInstanceOf<Avvist>()
result.value.map { it.regel.id } shouldContainExactlyInAnyOrder listOf(
IkkeBosattINorgeIHenholdTilFolkeregisterloven
)
}
}
}
"skal godkjennes når" - {
"bosatt" {
InngangsRegler.evaluer(
listOf(
DomeneOpplysning.ErOver18Aar,
DomeneOpplysning.BosattEtterFregLoven
)
).shouldBeInstanceOf<Godkjent>()
}
"forhåndsgodkjent" {
InngangsRegler.evaluer(
listOf(
DomeneOpplysning.ErOver18Aar,
DomeneOpplysning.IkkeBosatt,
DomeneOpplysning.ErForhaandsgodkjent
)
).shouldBeInstanceOf<Godkjent>()
}
}
}
}
})

0 comments on commit cf9fd87

Please sign in to comment.