diff --git a/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/Startup.kt b/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/Startup.kt index 541ee59a..981f9404 100644 --- a/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/Startup.kt +++ b/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/Startup.kt @@ -4,7 +4,6 @@ import io.confluent.kafka.streams.serdes.avro.SpecificAvroSerde import io.micrometer.core.instrument.binder.kafka.KafkaStreamsMetrics import io.micrometer.prometheusmetrics.PrometheusConfig import io.micrometer.prometheusmetrics.PrometheusMeterRegistry -import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.clients.pdl.PdlHentForenkletStatus import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.clients.pdl.PdlHentPerson import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.health.Health import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.health.initKtor @@ -51,7 +50,6 @@ fun main() { applicationConfiguration.periodeTopic, applicationConfiguration.hendelseloggTopic, applicationConfiguration.hendelseStateStoreName, - pdlHentForenkletStatus = PdlHentForenkletStatus.create(), pdlHentPerson = PdlHentPerson.create(), ) val kafkaStreams = KafkaStreams( diff --git a/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/ScheduleAvsluttPerioder.kt b/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/ScheduleAvsluttPerioder.kt index 90f75b48..4489966b 100644 --- a/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/ScheduleAvsluttPerioder.kt +++ b/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/ScheduleAvsluttPerioder.kt @@ -1,14 +1,10 @@ package no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka -import arrow.core.Either -import arrow.core.NonEmptyList import io.micrometer.prometheusmetrics.PrometheusMeterRegistry import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.ApplicationInfo -import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.clients.pdl.PdlHentForenkletStatus import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.clients.pdl.PdlHentPerson import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.serdes.HendelseState import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.metrics.tellPdlAvsluttetHendelser -import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.metrics.tellStatusFraPdlHentPersonBolk import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.utils.* import no.nav.paw.arbeidssokerregisteret.application.* import no.nav.paw.arbeidssokerregisteret.application.opplysninger.DomeneOpplysning @@ -18,7 +14,6 @@ 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.Metadata import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Opplysning -import no.nav.paw.pdl.graphql.generated.hentforenkletstatusbolk.Folkeregisterpersonstatus import no.nav.paw.pdl.graphql.generated.hentpersonbolk.HentPersonBolkResult import no.nav.paw.pdl.graphql.generated.hentpersonbolk.Person import org.apache.kafka.streams.KeyValue @@ -32,22 +27,19 @@ import org.slf4j.LoggerFactory import java.time.Duration import java.time.Instant import java.util.* -import no.nav.paw.pdl.graphql.generated.hentforenkletstatusbolk.HentPersonBolkResult as ForenkletStatusBolkResult data class EvalueringResultat( - val grunnlagV1: List? = null, - val grunnlagV2: Set? = null, val hendelseState: HendelseState, + val grunnlag: Set, + val detaljer: Set, val avsluttPeriode: Boolean, val slettForhaandsGodkjenning: Boolean, - val detaljer: Set = emptySet() ) fun scheduleAvsluttPerioder( ctx: ProcessorContext, hendelseStateStore: KeyValueStore, interval: Duration, - pdlHentForenkletStatus: PdlHentForenkletStatus, pdlHentPersonBolk: PdlHentPerson, prometheusMeterRegistry: PrometheusMeterRegistry, regler: Regler @@ -63,9 +55,8 @@ fun scheduleAvsluttPerioder( .chunked(1000) { chunk -> val identitetsnummere = chunk.map { it.value.identitetsnummer } - // Versjon 2 val pdlHentPersonResults = hentPersonBolk(identitetsnummere, pdlHentPersonBolk) - val resultaterV2: List = if (pdlHentPersonResults == null) { + val resultater: List = if (pdlHentPersonResults == null) { logger.warn("PDL hentPersonBolk returnerte null") emptyList() } else { @@ -76,35 +67,18 @@ fun scheduleAvsluttPerioder( ) } - // Versjon 1 - val pdlHentForenkletStatusResults = hentForenkletStatus(identitetsnummere, pdlHentForenkletStatus) - val resultaterV1: List = if (pdlHentForenkletStatusResults == null) { - logger.warn("PDL hentForenkletStatus returnerte null") - emptyList() - } else { - pdlHentForenkletStatusResults.processResults( - chunk, - prometheusMeterRegistry, - logger - ) - } - - resultaterV1.sortedByDescending { it.hendelseState.startetTidspunkt } - .compareResults(resultaterV2.sortedByDescending { it.hendelseState.startetTidspunkt }, logger) - resultaterV1.onEach { resultat -> - val folkeregisterpersonstatus = resultat.grunnlagV1 + resultater.forEach { resultat -> val hendelseState = resultat.hendelseState - if (resultat.avsluttPeriode && folkeregisterpersonstatus != null) { + if (resultat.avsluttPeriode) { sendAvsluttetHendelse( - folkeregisterpersonstatus, + resultat.grunnlag, + resultat.detaljer, hendelseState, hendelseStateStore, ctx, prometheusMeterRegistry ) } - }.forEach { resultat -> - val hendelseState = resultat.hendelseState if (resultat.slettForhaandsGodkjenning) { slettForhaandsGodkjenning(hendelseState, hendelseStateStore) } @@ -113,33 +87,6 @@ fun scheduleAvsluttPerioder( } } -fun List.processResults( - chunk: List>, - prometheusMeterRegistry: PrometheusMeterRegistry, - logger: Logger -): List = - this.filter { result -> - prometheusMeterRegistry.tellStatusFraPdlHentPersonBolk(result.code) - if (result.code in pdlErrorResponses) { - logger.error("Feil ved henting av forenklet status fra PDL: ${result.code}") - false - } else true - }.mapNotNull { result -> - hentFolkeregisterpersonstatusOgHendelseState(result, chunk) - }.map { (folkeregisterpersonstatus, hendelseState) -> - - val avsluttPeriode = !folkeregisterpersonstatus.erBosattEtterFolkeregisterloven && - folkeregisterpersonstatus.filterAvsluttPeriodeGrunnlag(hendelseState.opplysninger).isNotEmpty() - val skalSletteForhaandsGodkjenning = skalSletteForhaandsGodkjenning(hendelseState, avsluttPeriode) - - EvalueringResultat( - grunnlagV1 = folkeregisterpersonstatus, - hendelseState = hendelseState, - avsluttPeriode = avsluttPeriode, - slettForhaandsGodkjenning = skalSletteForhaandsGodkjenning - ) - } - fun isPdlResultOK(code: String, logger: Logger): Boolean = if (code in pdlErrorResponses) { logger.error("Feil ved henting av Person fra PDL: $code") @@ -166,28 +113,6 @@ fun Set.toDomeneOpplysninger() = this .mapNotNull { hendelseOpplysningTilDomeneOpplysninger(it) } .toSet() -fun Set.erForhaandsGodkjent() = Opplysning.FORHAANDSGODKJENT_AV_ANSATT in this - -fun skalAvsluttePeriode( - pdlEvaluering: Either, GrunnlagForGodkjenning>, - opplysningerEvaluering: Either, GrunnlagForGodkjenning>, - erForhaandsgodkjent: Boolean -) = pdlEvaluering.fold( - { pdlEvalueringLeft -> - when (opplysningerEvaluering) { - is Either.Left -> { - !(erForhaandsgodkjent && opplysningerEvaluering.value.map { it.regel.id } - .containsAll(pdlEvalueringLeft.map { it.regel.id })) - } - - is Either.Right -> { - true - } - } - }, - { false } -) - fun List.processPdlResultsV2( regler: Regler, chunk: List>, @@ -205,46 +130,27 @@ fun List.processPdlResultsV2( gjeldeneOpplysninger = gjeldeneOpplysninger ) EvalueringResultat( - grunnlagV2 = resultat.grunnlag, hendelseState = hendelseState, + grunnlag = resultat.grunnlag, + detaljer = gjeldeneOpplysninger.toSet(), avsluttPeriode = resultat.periodeSkalAvsluttes, slettForhaandsGodkjenning = resultat.forhaandsgodkjenningSkalSlettes, - detaljer = gjeldeneOpplysninger.toSet() ) } -fun Either, GrunnlagForGodkjenning>.toAarsak(): String = - this.fold( - { problems -> - problems.joinToString(", ") { problem -> problem.regel.id.beskrivelse } - }, - { "Ingen årsak" } - ) - -fun skalSletteForhaandsGodkjenning( - hendelseState: HendelseState, - avsluttPeriode: Boolean -) = Opplysning.FORHAANDSGODKJENT_AV_ANSATT in hendelseState.opplysninger - && hendelseState.opplysninger.any { it in negativeOpplysninger } && !avsluttPeriode fun sendAvsluttetHendelse( - folkeregisterpersonstatus: List, + grunnlag: Set, + detaljer: Set, hendelseState: HendelseState, hendelseStateStore: KeyValueStore, ctx: ProcessorContext, prometheusMeterRegistry: PrometheusMeterRegistry, ) { - val aarsak = folkeregisterpersonstatus - .filterAvsluttPeriodeGrunnlag(hendelseState.opplysninger) - .ifEmpty { - return - } - .toAarsak() - - val avsluttetHendelse = genererAvsluttetHendelseRecord(hendelseState, aarsak) + val avsluttetHendelse = genererAvsluttetHendelseRecord(hendelseState, grunnlag, detaljer) ctx.forward(avsluttetHendelse) .also { - prometheusMeterRegistry.tellPdlAvsluttetHendelser(aarsak) + prometheusMeterRegistry.tellPdlAvsluttetHendelser(grunnlag.joinToString { it.beskrivelse }) hendelseStateStore.delete(hendelseState.periodeId) } } @@ -258,72 +164,6 @@ fun slettForhaandsGodkjenning(hendelseState: HendelseState, hendelseStateStore: hendelseStateStore.put(hendelseState.periodeId, oppdatertHendelseState) } -fun List.compareResults( - other: List, - logger: Logger -) { - val evalueringResultaterV1 = this.associateBy { it.hendelseState.periodeId } - val evalueringResultaterV2 = other.associateBy { it.hendelseState.periodeId } - - val matchingPeriodeIder = evalueringResultaterV1.keys.intersect(evalueringResultaterV2.keys) - - matchingPeriodeIder.forEach { periodeId -> - val resultatV1 = evalueringResultaterV1[periodeId] - val resultatV2 = evalueringResultaterV2[periodeId] - - if (resultatV1 == null || resultatV2 == null) { - logger.error("Missing result for periodeId: $periodeId in either v1 or v2") - return@forEach - } - - if (resultatV1.avsluttPeriode != resultatV2.avsluttPeriode) { - logger.warn( - "AvsluttPeriode mismatch for periodeId: $periodeId, med startet tidspunkt: ${resultatV1.hendelseState.startetTidspunkt}" + - "v1: ${resultatV1.avsluttPeriode}, aarsak: ${ - resultatV1.grunnlagV1?.filterAvsluttPeriodeGrunnlag( - resultatV1.hendelseState.opplysninger - )?.toAarsak() - }, " + - "v2: ${resultatV2.avsluttPeriode}, aarsak: ${resultatV2.grunnlagV2}, detaljer: ${resultatV2.detaljer}" - ) - } - - if (resultatV1.slettForhaandsGodkjenning != resultatV2.slettForhaandsGodkjenning && - resultatV2.grunnlagV2 != setOf(EuEoesStatsborgerOver18Aar) - ) { - logger.warn( - "SlettForhaandsGodkjenning mismatch for periodeId: $periodeId, " + - "v1: ${resultatV1.slettForhaandsGodkjenning}, " + - "v2: ${resultatV2.slettForhaandsGodkjenning}, " + - "v2 grunnlag: ${resultatV2.grunnlagV2}" - ) - } - } - logger.info("Finished comparing results") -} - -fun hentFolkeregisterpersonstatusOgHendelseState( - result: ForenkletStatusBolkResult, - chunk: List> -): Pair, HendelseState>? { - val person = result.person ?: return null - val hendelseState = chunk.find { it.value.identitetsnummer == result.ident } - ?.value ?: return null - - return Pair(person.folkeregisterpersonstatus, hendelseState) -} - -fun hentForenkletStatus( - identitetsnummere: List, - pdlHentForenkletStatus: PdlHentForenkletStatus, -): List? { - return pdlHentForenkletStatus.hentForenkletStatus( - identitetsnummere, - UUID.randomUUID().toString(), - "paw-arbeidssoekerregisteret-utgang-pdl", - ) -} - fun hentPersonBolk( identitetsnummere: List, pdlHentPersonBolk: PdlHentPerson, @@ -341,24 +181,6 @@ fun List>.filterValidHendelseStates(): List.filterAvsluttPeriodeGrunnlag( - opplysningerFraStartetHendelse: Set -): Set { - val isForhaandsGodkjent = Opplysning.FORHAANDSGODKJENT_AV_ANSATT in opplysningerFraStartetHendelse - - return this.asSequence() - .mapNotNull { status -> statusToOpplysningMap[status.forenkletStatus] } - .filter { it in negativeOpplysninger } - // Opplysning FORHAANDSGODKJENT_AV_ANSATT + DOED/SAVNET/IKKE_BOSATT/OPPHOERT_IDENTITET skal overstyre tilsvarende forenkletStatus fra PDL - .filterNot { it in opplysningerFraStartetHendelse && isForhaandsGodkjent } - .toSet() -} - - -val List.erBosattEtterFolkeregisterloven - get(): Boolean = - this.any { it.forenkletStatus == "bosattEtterFolkeregisterloven" } - val pdlErrorResponses = setOf( "bad_request", "not_found" @@ -366,7 +188,8 @@ val pdlErrorResponses = setOf( fun genererAvsluttetHendelseRecord( hendelseState: HendelseState, - aarsak: String, + grunnlag: Set, + detaljer: Set ): Record = Record( hendelseState.recordKey, Avsluttet( @@ -375,13 +198,14 @@ fun genererAvsluttetHendelseRecord( identitetsnummer = hendelseState.identitetsnummer, metadata = Metadata( tidspunkt = Instant.now(), - aarsak = aarsak, + aarsak = grunnlag.joinToString { it.beskrivelse }, kilde = "paw-arbeidssoekerregisteret-utgang-pdl", utfoertAv = Bruker( type = BrukerType.SYSTEM, id = ApplicationInfo.id ) - ) + ), + opplysninger = detaljer.filterIsInstance().map(::domeneOpplysningTilHendelseOpplysning).toSet() ), Instant.now().toEpochMilli() ) diff --git a/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/Topology.kt b/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/Topology.kt index 56dd3b33..17cc5d2a 100644 --- a/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/Topology.kt +++ b/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/Topology.kt @@ -1,7 +1,6 @@ package no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka import io.micrometer.prometheusmetrics.PrometheusMeterRegistry -import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.clients.pdl.PdlHentForenkletStatus import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.clients.pdl.PdlHentPerson import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.processors.oppdaterHendelseState import no.nav.paw.arbeidssokerregisteret.api.v1.Periode @@ -18,7 +17,6 @@ fun StreamsBuilder.appTopology( periodeTopic: String, hendelseLoggTopic: String, hendelseStateStoreName: String, - pdlHentForenkletStatus: PdlHentForenkletStatus, pdlHentPerson: PdlHentPerson ): Topology { stream(hendelseLoggTopic, Consumed.with(Serdes.Long(), HendelseSerde())) @@ -30,7 +28,6 @@ fun StreamsBuilder.appTopology( .oppdaterHendelseState( hendelseStateStoreName = hendelseStateStoreName, prometheusMeterRegistry = prometheusRegistry, - pdlHentForenkletStatus = pdlHentForenkletStatus, pdlHentPerson = pdlHentPerson ) .to(hendelseLoggTopic, Produced.with(Serdes.Long(), HendelseSerde())) diff --git a/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/processors/PeriodeProcessor.kt b/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/processors/PeriodeProcessor.kt index d1ee5bc1..357ef7a4 100644 --- a/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/processors/PeriodeProcessor.kt +++ b/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/processors/PeriodeProcessor.kt @@ -1,7 +1,6 @@ package no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.processors import io.micrometer.prometheusmetrics.PrometheusMeterRegistry -import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.clients.pdl.PdlHentForenkletStatus import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.clients.pdl.PdlHentPerson import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.scheduleAvsluttPerioder import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.serdes.HendelseState @@ -20,14 +19,12 @@ import java.util.UUID fun KStream.oppdaterHendelseState( hendelseStateStoreName: String, prometheusMeterRegistry: PrometheusMeterRegistry, - pdlHentForenkletStatus: PdlHentForenkletStatus, pdlHentPerson: PdlHentPerson ): KStream { val processor = { PeriodeProcessor( hendelseStateStoreName, prometheusMeterRegistry, - pdlHentForenkletStatus, pdlHentPerson ) } @@ -37,7 +34,6 @@ fun KStream.oppdaterHendelseState( class PeriodeProcessor( private val hendelseStateStoreName: String, private val prometheusMeterRegistry: PrometheusMeterRegistry, - private val pdlHentForenkletStatus: PdlHentForenkletStatus, private val pdlHentPersonBolk: PdlHentPerson, ) : Processor { private var hendelseStateStore: KeyValueStore? = null @@ -48,12 +44,11 @@ class PeriodeProcessor( this.context = context hendelseStateStore = context?.getStateStore(hendelseStateStoreName) scheduleAvsluttPerioder( - requireNotNull(context), - requireNotNull(hendelseStateStore), - Duration.ofMinutes(10), - pdlHentForenkletStatus, - pdlHentPersonBolk, - prometheusMeterRegistry, + ctx = requireNotNull(context), + hendelseStateStore = requireNotNull(hendelseStateStore), + interval = Duration.ofMinutes(10), + pdlHentPersonBolk = pdlHentPersonBolk, + prometheusMeterRegistry = prometheusMeterRegistry, regler = InngangsReglerV3 ) } diff --git a/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/ApplicationTest.kt b/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/ApplicationTest.kt index 37c5aad0..77c6c7a6 100644 --- a/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/ApplicationTest.kt +++ b/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/ApplicationTest.kt @@ -4,16 +4,12 @@ import io.kotest.assertions.fail import io.kotest.core.spec.style.FreeSpec import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe -import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.filterAvsluttPeriodeGrunnlag import no.nav.paw.arbeidssokerregisteret.api.v1.Bruker import no.nav.paw.arbeidssokerregisteret.api.v1.BrukerType import no.nav.paw.arbeidssokerregisteret.api.v1.Metadata import no.nav.paw.arbeidssokerregisteret.api.v1.Periode import no.nav.paw.arbeidssokerregisteret.intern.v1.Startet import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Opplysning -import no.nav.paw.pdl.graphql.generated.hentforenkletstatusbolk.Folkeregisterpersonstatus -import no.nav.paw.pdl.graphql.generated.hentforenkletstatusbolk.HentPersonBolkResult -import no.nav.paw.pdl.graphql.generated.hentforenkletstatusbolk.Person import org.apache.kafka.streams.TestOutputTopic import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Metadata as MetadataIntern import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Bruker as BrukerIntern @@ -24,20 +20,31 @@ import java.util.* class ApplicationTest : FreeSpec({ val periodeId = UUID.randomUUID() + val identitetsnummer = "12345678901" "Sender Avsluttet hendelse for person med forenkletStatus 'doedIFolkeregisteret' i PDL og ingen opplysninger fra hendelser" { - with(testScope(generatePdlMockResponse("12345678901", listOf("doedIFolkeregisteret")))) { + with( + testScope( + generatePdlMockResponse( + identitetsnummer, + getPerson( + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("doedIFolkeregisteret") + ), + "ok", + ) + ) + ) { verifyEmptyTopic(hendelseloggOutputTopic) hendelseloggInputTopic.pipeInput(1234L, Startet( periodeId, 1234L, - "12345678901", + identitetsnummer, MetadataIntern( Instant.now(), BrukerIntern( BrukerTypeIntern.SLUTTBRUKER, - "12345678901" + identitetsnummer ), "", "" @@ -49,12 +56,12 @@ class ApplicationTest : FreeSpec({ 1234L, Periode( periodeId, - "12345678901", + identitetsnummer, Metadata( Instant.now(), Bruker( BrukerType.SLUTTBRUKER, - "12345678901" + identitetsnummer ), "", "", @@ -70,19 +77,29 @@ class ApplicationTest : FreeSpec({ } "Sender ikke Avsluttet hendelse for person med forenkletStatus 'bosattEtterFolkeregisterloven' i PDL og ingen opplysninger fra hendelser" { - with(testScope(generatePdlMockResponse("12345678902", listOf("bosattEtterFolkeregisterloven")))) { + with( + testScope( + generatePdlMockResponse( + identitetsnummer, + getPerson( + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("bosattEtterFolkeregisterloven") + ), + "ok", + ) + ) + ) { verifyEmptyTopic(hendelseloggOutputTopic) hendelseloggInputTopic.pipeInput( 1234L, Startet( periodeId, 1234, - "12345678902", + identitetsnummer, MetadataIntern( Instant.now(), BrukerIntern( BrukerTypeIntern.SLUTTBRUKER, - "12345678902" + identitetsnummer ), "", "" @@ -94,12 +111,12 @@ class ApplicationTest : FreeSpec({ 1234L, Periode( periodeId, - "12345678902", + identitetsnummer, Metadata( Instant.now(), Bruker( BrukerType.SLUTTBRUKER, - "12345678902" + identitetsnummer ), "", "", @@ -114,18 +131,28 @@ class ApplicationTest : FreeSpec({ } "Sender ikke Avsluttet hendelse om hentPersonBolk status er 'bad_request' eller 'not_found' i PDL" { - with(testScope(generatePdlMockResponse("12345678903", listOf("doedIFolkeregisteret", "dNummer"), "not_found"))) { + with( + testScope( + generatePdlMockResponse( + identitetsnummer, + getPerson( + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("doedIFolkeregisteret", "dNummer") + ), + "not_found", + ) + ) + ) { verifyEmptyTopic(hendelseloggOutputTopic) periodeTopic.pipeInput( 1234L, Periode( periodeId, - "12345678903", + identitetsnummer, Metadata( Instant.now(), Bruker( BrukerType.SLUTTBRUKER, - "12345678903" + identitetsnummer ), "", "", @@ -138,12 +165,12 @@ class ApplicationTest : FreeSpec({ 1234L, Periode( periodeId, - "12345678903", + identitetsnummer, Metadata( Instant.now(), Bruker( BrukerType.SLUTTBRUKER, - "12345678903" + identitetsnummer ), "", "", @@ -158,14 +185,24 @@ class ApplicationTest : FreeSpec({ } "Sender ikke Avsluttet hendelse for person med forenkletStatus 'ikkeBosatt' i PDL og opplysninger FORHAANDSGODKJENT_AV_ANSATT og IKKE_BOSATT fra hendelser" { - with(testScope(generatePdlMockResponse("12345678904", listOf("ikkeBosatt", "dNummer")))) { + with( + testScope( + generatePdlMockResponse( + identitetsnummer, + getPerson( + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("ikkeBosatt", "dNummer") + ), + "ok", + ) + ) + ) { verifyEmptyTopic(hendelseloggOutputTopic) hendelseloggInputTopic.pipeInput( 1234L, Startet( periodeId, 1L, - "12345678904", + identitetsnummer, MetadataIntern( Instant.now(), BrukerIntern( @@ -186,12 +223,12 @@ class ApplicationTest : FreeSpec({ 1234L, Periode( periodeId, - "12345678904", + identitetsnummer, Metadata( Instant.now(), Bruker( BrukerType.SLUTTBRUKER, - "12345678904" + identitetsnummer ), "", "", @@ -205,27 +242,38 @@ class ApplicationTest : FreeSpec({ } } - "Sender Avsluttet hendelse for person med forenkletStatus 'ikkeBosatt' i PDL og opplysninger FORHAANDSGODKJENT_AV_ANSATT og ER_UNDER_18_AAR fra hendelser" { - with(testScope(generatePdlMockResponse("12345678904", listOf("ikkeBosatt")))) { + "Sender Avsluttet hendelse for person med forenkletStatus 'ikkeBosatt' i PDL og opplysninger FORHAANDSGODKJENT_AV_ANSATT, ER_UNDER_18_AAR og BOSATT_ETTER_FREG_LOVEN fra hendelser" { + with( + testScope( + generatePdlMockResponse( + identitetsnummer, + getPerson( + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("ikkeBosatt") + ), + "ok", + ) + ) + ) { verifyEmptyTopic(hendelseloggOutputTopic) hendelseloggInputTopic.pipeInput( 1234L, Startet( periodeId, - 12344568904, - "12345678904", + 1234L, + identitetsnummer, MetadataIntern( Instant.now(), BrukerIntern( BrukerTypeIntern.SLUTTBRUKER, - "12345678904" + identitetsnummer ), "", "" ), setOf( Opplysning.FORHAANDSGODKJENT_AV_ANSATT, - Opplysning.ER_UNDER_18_AAR + Opplysning.ER_UNDER_18_AAR, + Opplysning.BOSATT_ETTER_FREG_LOVEN ) ) ) @@ -233,12 +281,12 @@ class ApplicationTest : FreeSpec({ 1234L, Periode( periodeId, - "12345678904", + identitetsnummer, Metadata( Instant.now(), Bruker( BrukerType.SLUTTBRUKER, - "12345678904" + identitetsnummer ), "", "", @@ -254,26 +302,36 @@ class ApplicationTest : FreeSpec({ } "Sender Avsluttet hendelse for person om forenkletStatus er 'opphoert' i PDL og opplysninger er 'FORHAANDSGODKJENT_AV_ANSATT' og 'DNUMMER'" { - with(testScope(generatePdlMockResponse("12345678905", listOf("opphoert"), "ok"))) { + with( + testScope( + generatePdlMockResponse( + identitetsnummer, + getPerson( + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("opphoert") + ), + "ok", + ) + ) + ) { verifyEmptyTopic(hendelseloggOutputTopic) hendelseloggInputTopic.pipeInput( 1234L, Startet( periodeId, 1234L, - "12345678905", + identitetsnummer, MetadataIntern( Instant.now(), BrukerIntern( BrukerTypeIntern.SLUTTBRUKER, - "12345678905" + identitetsnummer ), "", "" ), setOf( Opplysning.DNUMMER, - Opplysning.FORHAANDSGODKJENT_AV_ANSATT + Opplysning.FORHAANDSGODKJENT_AV_ANSATT, ) ) ) @@ -281,12 +339,12 @@ class ApplicationTest : FreeSpec({ 1234L, Periode( periodeId, - "12345678905", + identitetsnummer, Metadata( Instant.now(), Bruker( BrukerType.SLUTTBRUKER, - "12345678905" + identitetsnummer ), "", "", @@ -302,19 +360,29 @@ class ApplicationTest : FreeSpec({ } "Fjerner hendelse fra hendelse state store hvis ingen tilhørende periode har kommet innen 30 dager" { - with(testScope(generatePdlMockResponse("12345678906", listOf("opphoert"), "ok"))) { + with( + testScope( + generatePdlMockResponse( + identitetsnummer, + getPerson( + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("opphoert") + ), + "ok", + ) + ) + ) { verifyEmptyTopic(hendelseloggOutputTopic) hendelseloggInputTopic.pipeInput( 1234L, Startet( periodeId, 1234L, - "12345678906", + identitetsnummer, MetadataIntern( Instant.now(), BrukerIntern( BrukerTypeIntern.SLUTTBRUKER, - "12345678906" + identitetsnummer ), "", "" @@ -331,19 +399,29 @@ class ApplicationTest : FreeSpec({ } "Fjerner ikke hendelse fra hendelse state store hvis ingen tilhørende periode har kommet innen 29 dager" { - with(testScope(generatePdlMockResponse("12345678906", listOf("opphoert"), "ok"))) { + with( + testScope( + generatePdlMockResponse( + identitetsnummer, + getPerson( + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("opphoert") + ), + "ok", + ) + ) + ) { verifyEmptyTopic(hendelseloggOutputTopic) hendelseloggInputTopic.pipeInput( 1234L, Startet( periodeId, 1234L, - "12345678906", + identitetsnummer, MetadataIntern( Instant.now(), BrukerIntern( BrukerTypeIntern.SLUTTBRUKER, - "12345678906" + identitetsnummer ), "", "" @@ -360,19 +438,29 @@ class ApplicationTest : FreeSpec({ } "Fjerner ikke hendelse fra hendelse state store hvis tilhørende periode har kommet innen 30 dager" { - with(testScope(generatePdlMockResponse("12345678906", listOf("bosattEtterFolkeregisterloven"), "ok"))) { + with( + testScope( + generatePdlMockResponse( + identitetsnummer, + getPerson( + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("bosattEtterFolkeregisterloven") + ), + "ok", + ) + ) + ) { verifyEmptyTopic(hendelseloggOutputTopic) hendelseloggInputTopic.pipeInput( 1234L, Startet( periodeId, 1234L, - "12345678906", + identitetsnummer, MetadataIntern( Instant.now(), BrukerIntern( BrukerTypeIntern.SLUTTBRUKER, - "12345678906" + identitetsnummer ), "", "" @@ -385,12 +473,12 @@ class ApplicationTest : FreeSpec({ 1234L, Periode( periodeId, - "12345678906", + identitetsnummer, Metadata( Instant.now(), Bruker( BrukerType.SLUTTBRUKER, - "12345678906" + identitetsnummer ), "", "", @@ -403,43 +491,6 @@ class ApplicationTest : FreeSpec({ hendelseKeyValueStore.get(periodeId) shouldNotBe null } } - - "filterAvsluttPeriodeGrunnlag() skal returnere en liste med opplysning DOED om forenkletStatus er 'doedIFolkeregisteret'" { - val folkeregisterpersonstatus = - listOf( - Folkeregisterpersonstatus("doedIFolkeregisteret"), - Folkeregisterpersonstatus("dNummer") - ) - - val opplysningerFraHendelseState = emptySet() - folkeregisterpersonstatus.filterAvsluttPeriodeGrunnlag(opplysningerFraHendelseState) shouldBe listOf(Opplysning.DOED) - } - - "filterAvsluttPeriodeGrunnlag() skal returnere en tom liste med grunnlag for avsluttet periode om forenkletStatus er 'ikkeBosatt' og opplysninger FORHAANDSGODKJENT_AV_ANSATT og IKKE_BOSATT fra hendelser" { - val folkeregisterpersonstatus = - listOf( - Folkeregisterpersonstatus("ikkeBosatt"), - ) - - val opplysningerFraHendelseState = setOf( - Opplysning.FORHAANDSGODKJENT_AV_ANSATT, - Opplysning.IKKE_BOSATT - ) - folkeregisterpersonstatus.filterAvsluttPeriodeGrunnlag(opplysningerFraHendelseState) shouldBe emptySet() - } - - "filterAvsluttPeriodeGrunnlag() skal retunere en liste med opplysning opphoert om forenkletStatus er 'opphoert' og opplysninger FORHAANDSGODKJENT_AV_ANSATT og DNUMMER fra hendelser" { - val folkeregisterpersonstatus = - listOf( - Folkeregisterpersonstatus("opphoert"), - ) - - val opplysningerFraHendelseState = setOf( - Opplysning.DNUMMER, - Opplysning.FORHAANDSGODKJENT_AV_ANSATT - ) - folkeregisterpersonstatus.filterAvsluttPeriodeGrunnlag(opplysningerFraHendelseState) shouldBe listOf(Opplysning.OPPHOERT_IDENTITET) - } }) fun verifyEmptyTopic(hendelseloggOutputTopic: TestOutputTopic) { @@ -452,18 +503,3 @@ fun verifyEmptyTopic(hendelseloggOutputTopic: TestOutputTopic) }" ) } - -fun generatePdlMockResponse(ident: String, forenkletStatus: List, status: String = "ok") = listOf( - HentPersonBolkResult( - ident, - person = Person( - forenkletStatus.map { - Folkeregisterpersonstatus( - it, - ) - }, - ), - code = status, - ) -) - diff --git a/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/ProcessPdlResultsV2Test.kt b/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/ProcessPdlResultsTest.kt similarity index 80% rename from apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/ProcessPdlResultsV2Test.kt rename to apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/ProcessPdlResultsTest.kt index 435c89b5..0d51bc4b 100644 --- a/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/ProcessPdlResultsV2Test.kt +++ b/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/ProcessPdlResultsTest.kt @@ -6,19 +6,13 @@ import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.nulls.shouldBeNull import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe -import io.micrometer.prometheusmetrics.PrometheusMeterRegistry import io.mockk.mockk import io.mockk.verify -import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.filterAvsluttPeriodeGrunnlag import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.filterValidHendelseStates import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.getHendelseStateAndPerson import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.isPdlResultOK import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.processPdlResultsV2 -import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.processResults import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.serdes.HendelseState -import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.toAarsak -import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.utils.toAarsak -import no.nav.paw.arbeidssokerregisteret.application.IkkeBosattINorgeIHenholdTilFolkeregisterloven import no.nav.paw.arbeidssokerregisteret.application.InngangsReglerV3 import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Opplysning import no.nav.paw.pdl.graphql.generated.hentpersonbolk.Foedsel @@ -29,73 +23,14 @@ import java.time.Duration import java.time.Instant import java.util.* -class ProcessPdlResultsV2Test : FreeSpec({ +class ProcessPdlResultsTest : FreeSpec({ - "processResults v1 and v2 should yield same results" { - val logger = mockk(relaxed = true) - val prometheusMeterRegistry = mockk(relaxed = true) - - val ikkeBosattPerson = getPerson( - foedsel = Foedsel("2000-01-01"), - statsborgerskap = getStatsborgerskap("BRA"), - opphold = null, - folkeregisterpersonstatus = getFolkeregisterpersonstatus("ikkeBosatt"), - bostedsadresse = null, - innflyttingTilNorge = emptyList(), - utflyttingFraNorge = emptyList() - ) - - val resultV1 = generatePdlMockResponse( - "12345678911", - listOf("ikkeBosatt"), - "ok" - ) - - val resultV2 = HentPersonBolkResult( - "12345678911", - ikkeBosattPerson, - "ok" - ) - - val hendelseState = HendelseState( - brukerId = 1L, - periodeId = UUID.randomUUID(), - recordKey = 1L, - identitetsnummer = "12345678911", - opplysninger = setOf( - Opplysning.SAMME_SOM_INNLOGGET_BRUKER, - Opplysning.ER_OVER_18_AAR, - Opplysning.IKKE_ANSATT, - Opplysning.INGEN_INFORMASJON_OM_OPPHOLDSTILLATELSE, - Opplysning.INGEN_FLYTTE_INFORMASJON, - Opplysning.INGEN_ADRESSE_FUNNET, - Opplysning.DNUMMER - ), - startetTidspunkt = Instant.now().minus(Duration.ofDays(30)), - harTilhoerendePeriode = true - ) - - val chunk = listOf(KeyValue(hendelseState.periodeId, hendelseState)) - - val outputV1 = resultV1.processResults(chunk, prometheusMeterRegistry, logger) - val outputV2 = listOf(resultV2).processPdlResultsV2(InngangsReglerV3, chunk, logger) - - outputV1.shouldHaveSize(1) - outputV2.shouldHaveSize(1) - - outputV1[0].avsluttPeriode shouldBe outputV2[0].avsluttPeriode - outputV1[0].slettForhaandsGodkjenning shouldBe outputV2[0].slettForhaandsGodkjenning - outputV1[0].hendelseState shouldBe outputV2[0].hendelseState - outputV1[0].grunnlagV1?.filterAvsluttPeriodeGrunnlag(hendelseState.opplysninger)?.toAarsak() shouldBe "Personen er ikke bosatt etter folkeregisterloven" - outputV2[0].grunnlagV2 shouldBe setOf(IkkeBosattINorgeIHenholdTilFolkeregisterloven) - } - - "processPdlResultsV2 should correctly set avsluttPeriode to true if multiple problems in pdlEvaluering" { + "processPdlResults should correctly set avsluttPeriode to true if multiple problems in pdlEvaluering" { val person = getPerson( foedsel = Foedsel("2014-01-01"), statsborgerskap = getStatsborgerskap("NOR"), opphold = null, - folkeregisterpersonstatus = getFolkeregisterpersonstatus("ikkeBosatt"), + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("ikkeBosatt"), bostedsadresse = null, innflyttingTilNorge = emptyList(), utflyttingFraNorge = emptyList() @@ -128,7 +63,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ } - "processPdlResultsV2 should correctly set avsluttPeriode to true" - { + "processPdlResults should correctly set avsluttPeriode to true" - { "if Folkeregisterpersonstatus 'ikkeBosatt'" { val logger = mockk(relaxed = true) @@ -137,7 +72,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ foedsel = Foedsel("2000-01-01"), statsborgerskap = getStatsborgerskap("BRA"), opphold = null, - folkeregisterpersonstatus = getFolkeregisterpersonstatus("ikkeBosatt"), + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("ikkeBosatt"), bostedsadresse = null, innflyttingTilNorge = emptyList(), utflyttingFraNorge = emptyList() @@ -171,7 +106,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ foedsel = Foedsel("2006-01-01"), statsborgerskap = getStatsborgerskap("NOR"), opphold = null, - folkeregisterpersonstatus = getFolkeregisterpersonstatus("doedIFolkeregisteret"), + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("doedIFolkeregisteret"), bostedsadresse = null, innflyttingTilNorge = emptyList(), utflyttingFraNorge = emptyList() @@ -205,7 +140,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ foedsel = Foedsel("2006-01-01"), statsborgerskap = getStatsborgerskap("NOR"), opphold = null, - folkeregisterpersonstatus = getFolkeregisterpersonstatus("forsvunnet"), + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("forsvunnet"), bostedsadresse = null, innflyttingTilNorge = emptyList(), utflyttingFraNorge = emptyList() @@ -233,7 +168,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ } } - "processPdlResultsV2 should correctly set avsluttPeriode to false and slettForhaandsGodkjenning to false" - { + "processPdlResults should correctly set avsluttPeriode to false and slettForhaandsGodkjenning to false" - { "if Folkeregisterpersonstatus is 'bosattEtterFolkeregisterloven'" { val logger = mockk(relaxed = true) @@ -241,7 +176,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ foedsel = Foedsel("2000-01-01"), statsborgerskap = getStatsborgerskap("NOR"), opphold = getOppholdstillatelse(), - folkeregisterpersonstatus = getFolkeregisterpersonstatus("bosattEtterFolkeregisterloven"), + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("bosattEtterFolkeregisterloven"), bostedsadresse = getBostedsadresse(), innflyttingTilNorge = emptyList(), utflyttingFraNorge = emptyList() @@ -274,7 +209,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ foedsel = Foedsel("2000-01-01"), statsborgerskap = getStatsborgerskap("NOR"), opphold = getOppholdstillatelse(), - folkeregisterpersonstatus = getFolkeregisterpersonstatus("forsvunnet"), + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("forsvunnet"), bostedsadresse = getBostedsadresse(), innflyttingTilNorge = emptyList(), utflyttingFraNorge = emptyList() @@ -303,7 +238,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ } } - "processPdlResultsV2 should correctly set slettForhaandsGodkjenning to true" - { + "processPdlResults should correctly set slettForhaandsGodkjenning to true" - { "if has negative opplysning and is forhaandsgodkjent and PDL gives positive results" { val logger = mockk(relaxed = true) @@ -312,7 +247,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ foedsel = Foedsel("2000-01-01"), statsborgerskap = getStatsborgerskap("NOR"), opphold = getOppholdstillatelse(), - folkeregisterpersonstatus = getFolkeregisterpersonstatus("bosattEtterFolkeregisterloven"), + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("bosattEtterFolkeregisterloven"), bostedsadresse = getBostedsadresse(), innflyttingTilNorge = emptyList(), utflyttingFraNorge = emptyList() @@ -340,7 +275,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ } } - "processPdlResultsV2 should correctly evaluate negative pdl results" - { + "processPdlResults should correctly evaluate negative pdl results" - { "should return an empty list when all results have error codes" { val logger = mockk(relaxed = true) @@ -433,7 +368,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ foedsel = Foedsel("2000-01-01"), statsborgerskap = getStatsborgerskap("NOR"), opphold = getOppholdstillatelse(), - folkeregisterpersonstatus = getFolkeregisterpersonstatus("bosatt"), + folkeregisterpersonstatus = getListOfFolkeregisterpersonstatus("bosatt"), bostedsadresse = getBostedsadresse(), innflyttingTilNorge = emptyList(), utflyttingFraNorge = emptyList() diff --git a/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/TestData.kt b/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/TestData.kt index 4142a8c2..d1870cba 100644 --- a/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/TestData.kt +++ b/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/TestData.kt @@ -3,7 +3,6 @@ package no.nav.paw.arbeidssoekerregisteret.utgang.pdl import no.nav.paw.pdl.graphql.generated.enums.Oppholdstillatelse import no.nav.paw.pdl.graphql.generated.hentpersonbolk.Bostedsadresse import no.nav.paw.pdl.graphql.generated.hentpersonbolk.Foedsel -import no.nav.paw.pdl.graphql.generated.hentpersonbolk.Folkeregistermetadata import no.nav.paw.pdl.graphql.generated.hentpersonbolk.Folkeregisterpersonstatus import no.nav.paw.pdl.graphql.generated.hentpersonbolk.HentPersonBolkResult import no.nav.paw.pdl.graphql.generated.hentpersonbolk.Metadata @@ -12,57 +11,8 @@ import no.nav.paw.pdl.graphql.generated.hentpersonbolk.Person import no.nav.paw.pdl.graphql.generated.hentpersonbolk.Statsborgerskap import no.nav.paw.pdl.graphql.generated.hentpersonbolk.UtflyttingFraNorge -fun generatePdlPerson( - foedsel: Foedsel? = null, - statsborgerskap: Statsborgerskap? = null, - opphold: Opphold? = null, - folkeregisterpersonstatus: Folkeregisterpersonstatus? = null, - bostedsadresse: Bostedsadresse? = null, -): Person = - Person( - foedsel = listOf( - foedsel ?: Foedsel( - foedselsdato = "1990-01-01", - foedselsaar = 1990 - ) - ), - statsborgerskap = listOf( - statsborgerskap ?: Statsborgerskap( - land = "NOR", - metadata = Metadata( - endringer = emptyList() - ) - ) - ), - opphold = listOf( - opphold ?: Opphold( - oppholdFra = "2020-01-01", - oppholdTil = "2021-01-01", - type = Oppholdstillatelse.PERMANENT, - metadata = Metadata( - endringer = emptyList() - ) - ) - ), - folkeregisterpersonstatus = listOf( - folkeregisterpersonstatus ?: Folkeregisterpersonstatus( - forenkletStatus = "bosattEtterFolkeregisterloven", - metadata = Metadata( - endringer = emptyList() - ) - ) - ), - bostedsadresse = listOf( - bostedsadresse ?: Bostedsadresse( - angittFlyttedato = null, - ) - ), - innflyttingTilNorge = emptyList(), - utflyttingFraNorge = emptyList(), - ) - -fun generatePdlHentPersonMockResponse(ident: String, person: Person?, status: String): List = +fun generatePdlMockResponse(ident: String, person: Person?, status: String): List = listOf( HentPersonBolkResult( ident, @@ -80,18 +30,15 @@ fun getOppholdstillatelse( ) = Opphold(fra, til, type, Metadata(emptyList())) fun getFolkeregisterpersonstatus(status: String = "bosatt") = Folkeregisterpersonstatus(status, Metadata(emptyList())) +fun getListOfFolkeregisterpersonstatus(vararg status: String) = status.map { getFolkeregisterpersonstatus(it) } fun getBostedsadresse(angittFlyttedato: String? = null) = Bostedsadresse(angittFlyttedato) -fun getUtflyttingFraNorge(utflyttingsdato: String, metadata: Folkeregistermetadata? = null) = UtflyttingFraNorge(utflyttingsdato, metadata) - -fun getInnflyttingTilNorge(metadata: Folkeregistermetadata? = null) = no.nav.paw.pdl.graphql.generated.hentpersonbolk.InnflyttingTilNorge(metadata) - fun getPerson( foedsel: Foedsel? = null, statsborgerskap: Statsborgerskap? = null, opphold: Opphold? = null, - folkeregisterpersonstatus: Folkeregisterpersonstatus? = null, + folkeregisterpersonstatus: List? = null, bostedsadresse: Bostedsadresse? = null, innflyttingTilNorge: List = emptyList(), utflyttingFraNorge: List = emptyList() @@ -99,7 +46,7 @@ fun getPerson( foedsel = listOf(foedsel ?: Foedsel("2000-01-01")), statsborgerskap = listOf(statsborgerskap ?: getStatsborgerskap()), opphold = listOf(opphold ?: getOppholdstillatelse()), - folkeregisterpersonstatus = listOf(folkeregisterpersonstatus ?: getFolkeregisterpersonstatus()), + folkeregisterpersonstatus = folkeregisterpersonstatus ?: listOf(getFolkeregisterpersonstatus()), bostedsadresse = listOf(bostedsadresse ?: getBostedsadresse()), innflyttingTilNorge = innflyttingTilNorge, utflyttingFraNorge = utflyttingFraNorge diff --git a/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/TestScope.kt b/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/TestScope.kt index 3e17885a..cbb90420 100644 --- a/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/TestScope.kt +++ b/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/TestScope.kt @@ -12,7 +12,6 @@ import no.nav.paw.arbeidssokerregisteret.api.v1.Periode import no.nav.paw.arbeidssokerregisteret.intern.v1.Hendelse import no.nav.paw.arbeidssokerregisteret.intern.v1.HendelseSerde import no.nav.paw.config.hoplite.loadNaisOrLocalConfiguration -import no.nav.paw.pdl.graphql.generated.hentforenkletstatusbolk.HentPersonBolkResult as HentForenkletStatusBolkResult import no.nav.paw.pdl.graphql.generated.hentpersonbolk.HentPersonBolkResult import org.apache.avro.specific.SpecificRecord import org.apache.kafka.common.serialization.Serde @@ -36,7 +35,7 @@ data class TestScope( val topologyTestDriver: TopologyTestDriver ) -fun testScopeV2(pdlMockResponse: List?): TestScope { +fun testScope(pdlMockResponse: List?): TestScope { val applicationConfig = loadNaisOrLocalConfiguration( APPLICATION_CONFIG_FILE ) @@ -60,9 +59,6 @@ fun testScopeV2(pdlMockResponse: List?): TestScope { hendelseStateStoreName = hendelseStateStoreName, periodeTopic = applicationConfig.periodeTopic, hendelseLoggTopic = applicationConfig.hendelseloggTopic, - pdlHentForenkletStatus = { _, _, _ -> - null - }, pdlHentPerson = { _, _, _ -> pdlMockResponse }, @@ -94,64 +90,6 @@ fun testScopeV2(pdlMockResponse: List?): TestScope { ) } -fun testScope(pdlMockResponse: List): TestScope { - val applicationConfig = loadNaisOrLocalConfiguration( - APPLICATION_CONFIG_FILE - ) - - val periodeSerde = createAvroSerde() - - val hendelseStateStoreName = applicationConfig.hendelseStateStoreName - - val streamBuilder = StreamsBuilder() - .addStateStore( - KeyValueStoreBuilder( - InMemoryKeyValueBytesStoreSupplier(hendelseStateStoreName), - Serdes.UUID(), - HendelseStateSerde(), - Time.SYSTEM - ) - ) - - val testDriver = TopologyTestDriver( - streamBuilder.appTopology( - hendelseStateStoreName = hendelseStateStoreName, - periodeTopic = applicationConfig.periodeTopic, - hendelseLoggTopic = applicationConfig.hendelseloggTopic, - pdlHentForenkletStatus = { _, _, _ -> - pdlMockResponse - }, - pdlHentPerson = { _, _, _ -> - null - }, - prometheusRegistry = PrometheusMeterRegistry(PrometheusConfig.DEFAULT) - ), - kafkaStreamProperties - ) - val periodeInputTopic = testDriver.createInputTopic( - applicationConfig.periodeTopic, - Serdes.Long().serializer(), - periodeSerde.serializer() - ) - val hendelseInputTopic = testDriver.createInputTopic( - applicationConfig.hendelseloggTopic, - Serdes.Long().serializer(), - HendelseSerde().serializer() - ) - val hendelseOutputTopic = testDriver.createOutputTopic( - applicationConfig.hendelseloggTopic, - Serdes.Long().deserializer(), - HendelseSerde().deserializer() - ) - return TestScope( - periodeTopic = periodeInputTopic, - hendelseloggInputTopic = hendelseInputTopic, - hendelseloggOutputTopic = hendelseOutputTopic, - hendelseKeyValueStore = testDriver.getKeyValueStore(hendelseStateStoreName), - topologyTestDriver = testDriver - ) -} - const val SCHEMA_REGISTRY_SCOPE = "mock" inline fun createAvroSerde(): Serde {