Skip to content

Commit

Permalink
Forenklet oppsett av regler
Browse files Browse the repository at this point in the history
  • Loading branch information
nilsmsa committed Aug 21, 2024
1 parent 59474b9 commit b934105
Show file tree
Hide file tree
Showing 19 changed files with 160 additions and 73 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class OpplysningerRequestHandler(
requestValidator.validerTilgang(identitetsnummer)
.mapLeft { problem ->
Feil(
melding = problem.regel.beskrivelse,
melding = problem.regel.id.beskrivelse,
feilKode = Feil.FeilKode.IKKE_TILGANG
)
}.bind()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ fun stoppResultatSomHendelse(id: Long, identitetsnummer: Identitetsnummer, resul
id = id,
hendelseId = UUID.randomUUID(),
identitetsnummer = identitetsnummer.verdi,
metadata = hendelseMetadata(resultat.value.regel.beskrivelse),
metadata = hendelseMetadata(resultat.value.regel.id.beskrivelse),
opplysninger = resultat.value.opplysning.map(::mapToHendelseOpplysning).toSet()
)

Expand All @@ -53,7 +53,7 @@ fun somHendelse(id: Long, identitetsnummer: Identitetsnummer, resultat: Either<P
id = id,
hendelseId = UUID.randomUUID(),
identitetsnummer = identitetsnummer.verdi,
metadata = hendelseMetadata(resultat.value.regel.beskrivelse),
metadata = hendelseMetadata(resultat.value.regel.id.beskrivelse),
opplysninger = resultat.value.opplysning.map(::mapToHendelseOpplysning).toSet(),
handling = path
)
Expand All @@ -62,7 +62,7 @@ fun somHendelse(id: Long, identitetsnummer: Identitetsnummer, resultat: Either<P
id = id,
hendelseId = UUID.randomUUID(),
identitetsnummer = identitetsnummer.verdi,
metadata = hendelseMetadata(resultat.value.regel.beskrivelse),
metadata = hendelseMetadata(resultat.value.regel.id.beskrivelse),
opplysninger = resultat.value.opplysning.map(::mapToHendelseOpplysning).toSet()
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,63 +5,57 @@ import no.nav.paw.arbeidssokerregisteret.application.authfaktka.*
import no.nav.paw.arbeidssokerregisteret.application.opplysninger.DomeneOpplysning

val tilgangsReglerIPrioritertRekkefolge: List<Regel> = listOf(
"Ansatt har tilgang til bruker"(
AnsattHarTilgangTilBruker(
AuthOpplysning.AnsattTilgang,
id = AnsattHarTilgangTilBruker,
vedTreff = ::ok
),
"Ikke ansatt har satt forhåndsgodkjenningAvVeileder"(
IkkeAnsattOgForhaandsgodkjentAvAnsatt(
DomeneOpplysning.ErForhaandsgodkjent,
AuthOpplysning.IkkeAnsatt,
id = IkkeAnsattOgForhaandsgodkjentAvAnsatt,
vedTreff = ::problem
),
"Bruker prøver å endre for seg selv"(
EndreEgenBruker(
AuthOpplysning.SammeSomInnloggetBruker,
AuthOpplysning.IkkeAnsatt,
id = EndreEgenBruker,
vedTreff = ::ok
),
"Prøver å endre for en annen bruker"(
EndreForAnnenBruker(
AuthOpplysning.IkkeSammeSomInnloggerBruker,
id = EndreForAnnenBruker,
vedTreff = ::problem
),
"Ansatt har ikke tilgang til bruker"(
AnsattIkkeTilgangTilBruker(
AuthOpplysning.AnsattIkkeTilgang,
id = AnsattIkkeTilgangTilBruker,
vedTreff = ::problem
),
"Ikke tilgang"(
id = IkkeTilgang,
IkkeTilgang(
vedTreff = ::problem
)
)

sealed interface AuthRegelId: RegelId

data object IkkeTilgang : AuthRegelId {
override val id: String = "IKKE_TILGANG"
override val beskrivelse: String = "Ikke tilgang"
}

data object AnsattIkkeTilgangTilBruker : AuthRegelId {
override val id: String = "ANSATT_IKKE_TILGANG_TIL_BRUKER"
override val beskrivelse: String = "Ansatt har ikke tilgang til bruker"
}

data object EndreForAnnenBruker : AuthRegelId {
override val id: String = "ENDRE_FOR_ANNEN_BRUKER"
override val beskrivelse: String = "Prøver å endre for en annen bruker"
}

data object EndreEgenBruker : AuthRegelId {
override val id: String = "ENDRE_EGEN_BRUKER"
override val beskrivelse: String = "Bruker prøver å endre for seg selv"
}

data object IkkeAnsattOgForhaandsgodkjentAvAnsatt : AuthRegelId {
override val id: String = "IKKE_ANSATT_OG_FORHAANDSGODKJENT_AV_ANSATT"
override val beskrivelse: String = "Ikke ansatt har satt forhaandsgodkjenningAvVeileder"
}

data object AnsattHarTilgangTilBruker : AuthRegelId {
override val id: String = "ANSATT_HAR_TILGANG_TIL_BRUKER"
override val beskrivelse: String = "Ansatt har tilgang til bruker"
}


Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ suspend fun respondWith(resultat: Either<Problem, OK>) =
suspend fun PipelineContext<Unit, ApplicationCall>.respondWithError(problem: Problem){
call.respond(
problem.httpCode(), Feil(
melding = problem.regel.beskrivelse,
melding = problem.regel.id.beskrivelse,
feilKode = problem.feilKode(),
aarsakTilAvvisning = if (problem.regel.id is DomeneRegelId) {
AarsakTilAvvisning(
beskrivelse = problem.regel.beskrivelse,
beskrivelse = problem.regel.id.beskrivelse,
regel = problem.regel.id.apiRegelId(),
detaljer = problem.opplysning.map(::opplysningTilApiOpplysning)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ class ApplicationPeriodeTest : FunSpec({
} returns Problem(
regel = Regel(
id = Under18Aar,
beskrivelse = "under 18 år",
opplysninger = listOf(DomeneOpplysning.ErUnder18Aar),
vedTreff = ::problem
),
Expand Down Expand Up @@ -66,8 +65,8 @@ class ApplicationPeriodeTest : FunSpec({
response.status shouldBe HttpStatusCode.Forbidden
val feil: Feil = response.body()
feil shouldBe Feil(
"under 18 år", Feil.FeilKode.AVVIST, AarsakTilAvvisning(
beskrivelse = "under 18 år",
Under18Aar.beskrivelse, Feil.FeilKode.AVVIST, AarsakTilAvvisning(
beskrivelse = Under18Aar.beskrivelse,
regel = ApiRegelId.UNDER_18_AAR,
detaljer = listOf(Opplysning.ER_UNDER_18_AAR, Opplysning.BOSATT_ETTER_FREG_LOVEN)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ class InngagnSomVeilederTest : FreeSpec({
} returns OK(
regel = Regel(
id = AnsattHarTilgangTilBruker,
beskrivelse = "",
opplysninger = emptyList(),
vedTreff = ::ok
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ class InngangSomBrukerTest : FreeSpec({
} returns OK(
regel = Regel(
id = Over18AarOgBosattEtterFregLoven,
beskrivelse = "",
opplysninger = emptyList(),
vedTreff = ::ok
),
Expand Down Expand Up @@ -109,7 +108,6 @@ class InngangSomBrukerTest : FreeSpec({
} returns Problem(
regel = Regel(
id = IkkeAnsattOgForhaandsgodkjentAvAnsatt,
beskrivelse = "",
opplysninger = emptyList(),
vedTreff = ::problem
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,12 @@ class TestCaseRunner : FreeSpec({
testCase.producesError?.also { expectedErrorResponse ->
val body = status.body<Feil>()
body.feilKode shouldBe expectedErrorResponse.feilKode
body.melding shouldBe expectedErrorResponse.melding
body.aarsakTilAvvisning?.regel shouldBe expectedErrorResponse.aarsakTilAvvisning?.regel
expectedErrorResponse.aarsakTilAvvisning?.detaljer?.also { expectedDetails ->
body.aarsakTilAvvisning?.detaljer.shouldNotBeNull()
body.aarsakTilAvvisning?.detaljer?.shouldContainExactlyInAnyOrder(expectedDetails)
body.aarsakTilAvvisning?.beskrivelse shouldBe expectedErrorResponse.aarsakTilAvvisning?.beskrivelse
}
}
val expectedRecord = testCase.producesRecord(kafkaKeys)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.AarsakTilAvvisni
import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.ApiRegelId
import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Feil
import no.nav.paw.arbeidssokerregisteret.*
import no.nav.paw.arbeidssokerregisteret.application.IkkeBosattINorgeIHenholdTilFolkeregisterloven
import no.nav.paw.arbeidssokerregisteret.domain.NavAnsatt
import no.nav.paw.arbeidssokerregisteret.intern.v1.Avvist
import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Bruker
Expand Down Expand Up @@ -41,10 +42,10 @@ data object AnsattRegistrererIkkeEuEoesBrukerIkkeBosattUtenForhaandgodkjenning:

override val producesHttpResponse: HttpStatusCode = HttpStatusCode.Forbidden
override val producesError: Feil = Feil(
melding = "any",
melding = IkkeBosattINorgeIHenholdTilFolkeregisterloven.beskrivelse,
feilKode = Feil.FeilKode.AVVIST,
aarsakTilAvvisning = AarsakTilAvvisning(
beskrivelse = "any",
beskrivelse = IkkeBosattINorgeIHenholdTilFolkeregisterloven.beskrivelse,
regel = ApiRegelId.IKKE_BOSATT_I_NORGE_I_HENHOLD_TIL_FOLKEREGISTERLOVEN,
detaljer = listOf(
ApiOpplysning.ER_OVER_18_AAR,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import io.kotest.common.runBlocking
import io.ktor.http.*
import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Feil
import no.nav.paw.arbeidssokerregisteret.*
import no.nav.paw.arbeidssokerregisteret.application.regler.AnsattIkkeTilgangTilBruker
import no.nav.paw.arbeidssokerregisteret.domain.NavAnsatt
import no.nav.paw.arbeidssokerregisteret.intern.v1.Avvist
import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Bruker
Expand Down Expand Up @@ -38,7 +39,7 @@ data object AnsattRegistrererUtenTilgangTilBruker: TestCase {

override val producesHttpResponse: HttpStatusCode = HttpStatusCode.Forbidden
override val producesError: Feil = Feil(
melding = "any",
melding = AnsattIkkeTilgangTilBruker.beskrivelse,
feilKode = Feil.FeilKode.IKKE_TILGANG,
aarsakTilAvvisning = null
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.AarsakTilAvvisni
import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.ApiRegelId
import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Feil
import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Opplysning
import no.nav.paw.arbeidssokerregisteret.application.IkkeFunnet
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 All @@ -26,10 +27,10 @@ data object HentPersonReturnererNull: TestCase {

override val producesHttpResponse: HttpStatusCode = HttpStatusCode.Forbidden
override val producesError: Feil = Feil(
melding = "any",
melding = IkkeFunnet.beskrivelse,
feilKode = Feil.FeilKode.AVVIST,
aarsakTilAvvisning = AarsakTilAvvisning(
beskrivelse = "any",
beskrivelse = IkkeFunnet.beskrivelse,
regel = ApiRegelId.IKKE_FUNNET,
detaljer = listOf(
Opplysning.PERSON_IKKE_FUNNET,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.AarsakTilAvvisni
import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.ApiRegelId
import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Feil
import no.nav.paw.arbeidssokerregisteret.*
import no.nav.paw.arbeidssokerregisteret.application.IkkeBosattINorgeIHenholdTilFolkeregisterloven
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 @@ -40,10 +41,10 @@ data object IkkeEuEoesBrukerIkkeBosatt: TestCase {

override val producesHttpResponse: HttpStatusCode = HttpStatusCode.Forbidden
override val producesError: Feil = Feil(
melding = "any",
melding = IkkeBosattINorgeIHenholdTilFolkeregisterloven.beskrivelse,
feilKode = Feil.FeilKode.AVVIST,
aarsakTilAvvisning = AarsakTilAvvisning(
beskrivelse = "any",
beskrivelse = IkkeBosattINorgeIHenholdTilFolkeregisterloven.beskrivelse,
regel = ApiRegelId.IKKE_BOSATT_I_NORGE_I_HENHOLD_TIL_FOLKEREGISTERLOVEN,
detaljer = listOf(
ApiOpplysning.ER_OVER_18_AAR,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package no.nav.paw.arbeidssokerregisteret.testdata

import io.kotest.common.runBlocking
import io.ktor.http.*
import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.AarsakTilAvvisning
import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.ApiRegelId
import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Feil
import no.nav.paw.arbeidssokerregisteret.*
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
import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Opplysning
import no.nav.paw.kafkakeygenerator.client.KafkaKeysClient
import no.nav.paw.pdl.graphql.generated.hentperson.Foedsel
import no.nav.paw.pdl.graphql.generated.hentperson.Person
import no.nav.paw.pdl.graphql.generated.hentperson.Vegadresse
import org.apache.kafka.clients.producer.ProducerRecord
import java.time.Instant
import java.time.ZoneId
import java.time.format.DateTimeFormatter
import java.util.*

data object NorskBrukerBosattINorgeUnder18aar: TestCase {
val dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
.withZone(ZoneId.systemDefault())
val yearFormatter = DateTimeFormatter.ofPattern("yyyy")
.withZone(ZoneId.systemDefault())
override val id = "12345678909"
override val person = Person(
foedsel = Instant.now().let { dato ->
Foedsel(dateFormatter.format(dato), yearFormatter.format(dato).toInt()).list()
},
statsborgerskap = "NOR".statsborgerskap(),
opphold = emptyList(),
folkeregisterpersonstatus = bosatt.folkeregisterpersonstatus(),
bostedsadresse = bostedsadresse(
vegadresse = Vegadresse("1201")
),
innflyttingTilNorge = "2018-01-02T13:23:12".innflytting(),
utflyttingFraNorge = "2017-01-02".utflytting()
)

override val configure: TestCaseBuilder.() -> Unit = {
authToken = mockOAuth2Server.personToken(id)
}

override val producesHttpResponse: HttpStatusCode = HttpStatusCode.Forbidden
override val producesError: Feil = Feil(
melding = Under18Aar.beskrivelse,
feilKode = Feil.FeilKode.AVVIST,
aarsakTilAvvisning = AarsakTilAvvisning(
beskrivelse = Under18Aar.beskrivelse,
regel = ApiRegelId.UNDER_18_AAR,
detaljer = listOf(
no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Opplysning.ER_UNDER_18_AAR,
no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Opplysning.HAR_NORSK_ADRESSE,
no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Opplysning.HAR_REGISTRERT_ADRESSE_I_EU_EOES,
no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Opplysning.SISTE_FLYTTING_VAR_INN_TIL_NORGE,
no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Opplysning.ER_NORSK_STATSBORGER,
no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Opplysning.ER_EU_EOES_STATSBORGER,
no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Opplysning.IKKE_ANSATT,
no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Opplysning.SAMME_SOM_INNLOGGET_BRUKER,
no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Opplysning.INGEN_INFORMASJON_OM_OPPHOLDSTILLATELSE,
no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Opplysning.BOSATT_ETTER_FREG_LOVEN
)
)
)
override fun producesRecord(
kafkaKeysClient: KafkaKeysClient
) = ProducerRecord(
"any",
runBlocking { kafkaKeysClient.getIdAndKey(id).key },
Avvist(
hendelseId = UUID.randomUUID(),
id = runBlocking { kafkaKeysClient.getIdAndKey(id).id },
identitetsnummer = id,
metadata = no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Metadata(
tidspunkt = Instant.now(),
kilde = "paw-arbeidssokerregisteret-api-start-stopp-perioder",
utfoertAv = Bruker(
id = id,
type = BrukerType.SLUTTBRUKER
),
aarsak = "any",
tidspunktFraKilde = null
),
opplysninger = setOf(
Opplysning.ER_UNDER_18_AAR,
Opplysning.BOSATT_ETTER_FREG_LOVEN,
Opplysning.ER_EU_EOES_STATSBORGER,
Opplysning.HAR_NORSK_ADRESSE,
Opplysning.HAR_REGISTRERT_ADRESSE_I_EU_EOES,
Opplysning.SISTE_FLYTTING_VAR_INN_TIL_NORGE,
Opplysning.IKKE_ANSATT,
Opplysning.SAMME_SOM_INNLOGGET_BRUKER,
Opplysning.INGEN_INFORMASJON_OM_OPPHOLDSTILLATELSE,
Opplysning.ER_NORSK_STATSBORGER
)
)
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.AarsakTilAvvisni
import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.ApiRegelId
import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.Feil
import no.nav.paw.arbeidssokerregisteret.*
import no.nav.paw.arbeidssokerregisteret.application.IkkeBosattINorgeIHenholdTilFolkeregisterloven
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 @@ -39,10 +40,10 @@ data object NorskBrukerBosattISverige: TestCase {

override val producesHttpResponse: HttpStatusCode = HttpStatusCode.Forbidden
override val producesError: Feil = Feil(
melding = "any",
melding = IkkeBosattINorgeIHenholdTilFolkeregisterloven.beskrivelse,
feilKode = Feil.FeilKode.AVVIST,
aarsakTilAvvisning = AarsakTilAvvisning(
beskrivelse = "any",
beskrivelse = IkkeBosattINorgeIHenholdTilFolkeregisterloven.beskrivelse,
regel = ApiRegelId.IKKE_BOSATT_I_NORGE_I_HENHOLD_TIL_FOLKEREGISTERLOVEN,
detaljer = listOf(
ApiOpplysning.ER_OVER_18_AAR,
Expand Down
Loading

0 comments on commit b934105

Please sign in to comment.