Skip to content

Commit

Permalink
Håndterer Person lik null, lagt til en test for versjon 2
Browse files Browse the repository at this point in the history
  • Loading branch information
robertkittilsen committed Aug 22, 2024
1 parent 5f7847b commit 277f6a4
Show file tree
Hide file tree
Showing 6 changed files with 239 additions and 57 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ private fun List<ForenkletStatusBolkResult>.processResults(
}
.toAarsak()

logger.info("Versjon 2: PROBLEM, negative opplysninger fra pdl: ${folkeregisterpersonstatus.filterAvsluttPeriodeGrunnlag(hendelseState.opplysninger)}, generert aarsak: $aarsak")
logger.info("Versjon 1: PROBLEM, negative opplysninger fra pdl: ${folkeregisterpersonstatus.filterAvsluttPeriodeGrunnlag(hendelseState.opplysninger)}, generert aarsak: $aarsak")

val avsluttetHendelse = genererAvsluttetHendelseRecord(hendelseState, aarsak)

Expand All @@ -139,20 +139,26 @@ private fun List<HentPersonBolkResult>.processResultsV2(
return@forEach
}

val person = result.person ?: throw IllegalStateException("Versjon 2: Person mangler")
val hendelseOpplysninger = chunk.find { it.value.identitetsnummer == result.ident }
?.value?.opplysninger ?: throw IllegalStateException("Versjon 2: HendelseState mangler")
val hendelseState = chunk.find { it.value.identitetsnummer == result.ident }
?.value

val person = if (result.person !== null) result.person else {
logger.error("Versjon 2: Person er null: ${hendelseState?.periodeId}")
return@forEach
}

val hendelseOpplysninger = hendelseState?.opplysninger

val domeneOpplysninger = hendelseOpplysninger
.filterNot { it == Opplysning.FORHAANDSGODKJENT_AV_ANSATT }
.map { hendelseOpplysningTilDomeneOpplysninger(it) as no.nav.paw.arbeidssokerregisteret.application.opplysninger.Opplysning }
.toSet()
?.filterNot { it == Opplysning.FORHAANDSGODKJENT_AV_ANSATT }
?.map { hendelseOpplysningTilDomeneOpplysninger(it) as no.nav.paw.arbeidssokerregisteret.application.opplysninger.Opplysning }
?.toSet()

val opplysningerEvaluering = InngangsRegler.evaluer(domeneOpplysninger)
val pdlEvaluering = InngangsRegler.evaluer(genererPersonFakta(person.toPerson())
)

val erForhaandsgodkjent = hendelseOpplysninger.contains(Opplysning.FORHAANDSGODKJENT_AV_ANSATT)
val erForhaandsgodkjent = hendelseOpplysninger?.contains(Opplysning.FORHAANDSGODKJENT_AV_ANSATT) ?: false

when {
pdlEvaluering.isLeft() -> handleLeftEvaluation(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import java.util.*

class ApplicationTest : FreeSpec({
val periodeId = UUID.randomUUID()

"Sender Avsluttet hendelse for person med forenkletStatus 'doedIFolkeregisteret' i PDL og ingen opplysninger fra hendelser" {
with(testScope(generatePdlMockResponse("12345678901", listOf("doedIFolkeregisteret")))) {
verifyEmptyTopic(hendelseloggOutputTopic)
Expand Down Expand Up @@ -466,52 +467,3 @@ fun generatePdlMockResponse(ident: String, forenkletStatus: List<String>, status
)
)

/*
fun generatePdlHentPersonMockResponse(ident: String, forenkletStatus: List<String>): List<PersonBolkResult> =
listOf(
PersonBolkResult(
ident,
PersonBolk(
foedsel = listOf(
FoedselBolk(
foedselsdato = "1990-01-01",
foedselsaar = 1990
)
),
statsborgerskap = listOf(
StatsborgerskapBolk(
land = "NOR",
metadata = MetadataBolk(
endringer = emptyList()
)
)
),
opphold = listOf(
OppholdBolk(
oppholdFra = "2020-01-01",
oppholdTil = "2021-01-01",
type = Oppholdstillatelse.PERMANENT,
metadata = MetadataBolk(
endringer = emptyList()
)
)
),
folkeregisterpersonstatus = forenkletStatus.map {
FolkeregisterpersonstatusBolk(
forenkletStatus = it,
metadata = MetadataBolk(
endringer = emptyList()
)
)
},
bostedsadresse = listOf(
BostedsadresseBolk(
angittFlyttedato = null,
)
),
innflyttingTilNorge = emptyList(),
utflyttingFraNorge = emptyList(),
),
"ok"
)
)*/
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package no.nav.paw.arbeidssoekerregisteret.utgang.pdl

import io.kotest.core.spec.style.FreeSpec
import io.kotest.matchers.shouldBe
import no.nav.paw.arbeidssokerregisteret.api.v1.Periode
import no.nav.paw.arbeidssokerregisteret.intern.v1.Startet
import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Bruker as InternBruker
import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.BrukerType as InternBrukerType
import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Metadata as InternMetadata
import no.nav.paw.arbeidssokerregisteret.api.v1.Metadata
import no.nav.paw.arbeidssokerregisteret.api.v1.Bruker
import no.nav.paw.arbeidssokerregisteret.api.v1.BrukerType
import org.slf4j.LoggerFactory
import java.time.Duration
import java.time.Instant
import java.util.*
import ch.qos.logback.classic.Logger as LogbackLogger

class ApplicationTestV2 : FreeSpec({
val periodeId = UUID.randomUUID()

"Sender ikke AvsluttetHendelse og logger error for PersonIkkeFunnet" {
val logger = LoggerFactory.getLogger("scheduleAvsluttPerioder") as LogbackLogger
val testAppender = TestAppender()
logger.addAppender(testAppender)
testAppender.start()
with(
testScopeV2(
generatePdlHentPersonMockResponse(
"12345678901",
null,
"PersonIkkeFunnet"
)
)
) {
verifyEmptyTopic(hendelseloggOutputTopic)
hendelseloggInputTopic.pipeInput(1234L,
Startet(
periodeId,
1234L,
"12345678901",
InternMetadata(
Instant.now(),
InternBruker(
InternBrukerType.SLUTTBRUKER,
"12345678901"
),
"",
""
),
emptySet()
)
)
periodeTopic.pipeInput(
1234L,
Periode(
periodeId,
"12345678901",
Metadata(
Instant.now(),
Bruker(
BrukerType.SLUTTBRUKER,
"12345678901"
),
"",
"",
null
),
null
)
)

topologyTestDriver.advanceWallClockTime(Duration.ofDays(2))
hendelseloggOutputTopic.isEmpty shouldBe true
val logEvents = testAppender.events
logEvents.any {
it.level == ch.qos.logback.classic.Level.ERROR
&& it.message.contains("Versjon 2: Person er null")
} shouldBe true
}
testAppender.stop()
}
})
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package no.nav.paw.arbeidssoekerregisteret.utgang.pdl

import ch.qos.logback.classic.spi.ILoggingEvent
import ch.qos.logback.core.AppenderBase

class TestAppender : AppenderBase<ILoggingEvent>() {
val events = mutableListOf<ILoggingEvent>()

override fun append(eventObject: ILoggingEvent) {
events.add(eventObject)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
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.Folkeregisterpersonstatus
import no.nav.paw.pdl.graphql.generated.hentpersonbolk.HentPersonBolkResult
import no.nav.paw.pdl.graphql.generated.hentpersonbolk.Metadata
import no.nav.paw.pdl.graphql.generated.hentpersonbolk.Opphold
import no.nav.paw.pdl.graphql.generated.hentpersonbolk.Person
import no.nav.paw.pdl.graphql.generated.hentpersonbolk.Statsborgerskap

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<HentPersonBolkResult> =
listOf(
HentPersonBolkResult(
ident,
person,
status
)
)
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ 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
import org.apache.kafka.common.serialization.Serdes
Expand All @@ -35,6 +36,64 @@ data class TestScope(
val topologyTestDriver: TopologyTestDriver
)

fun testScopeV2(pdlMockResponse: List<HentPersonBolkResult>?): TestScope {
val applicationConfig = loadNaisOrLocalConfiguration<ApplicationConfiguration>(
APPLICATION_CONFIG_FILE
)

val periodeSerde = createAvroSerde<Periode>()

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 = { _, _, _ ->
null
},
pdlHentPerson = { _, _, _ ->
pdlMockResponse
},
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
)
}

fun testScope(pdlMockResponse: List<HentForenkletStatusBolkResult>): TestScope {
val applicationConfig = loadNaisOrLocalConfiguration<ApplicationConfiguration>(
APPLICATION_CONFIG_FILE
Expand Down

0 comments on commit 277f6a4

Please sign in to comment.