diff --git a/src/main/kotlin/no/nav/familie/baks/mottak/config/featureToggle/FeatureToggleConfig.kt b/src/main/kotlin/no/nav/familie/baks/mottak/config/featureToggle/FeatureToggleConfig.kt index ff059c7d5..e7108564c 100644 --- a/src/main/kotlin/no/nav/familie/baks/mottak/config/featureToggle/FeatureToggleConfig.kt +++ b/src/main/kotlin/no/nav/familie/baks/mottak/config/featureToggle/FeatureToggleConfig.kt @@ -3,8 +3,11 @@ package no.nav.familie.baks.mottak.config.featureToggle class FeatureToggleConfig { companion object { // Operasjonelle + const val HOPP_OVER_INFOTRYGD_SJEKK = "familie-ba-sak.hopp-over-infotrygd-sjekk" + + // Release const val AUTOMATISK_JOURNALFØRING_AV_KONTANTSTØTTE_SØKNADER = "familie-baks-mottak.automatisk-journalforing-av-ks-soknad" const val AUTOMATISK_JOURNALFØRING_AV_BARNETRYGD_SØKNADER = "familie-baks-mottak.automatisk-journalforing-av-ba-soknad" - const val HOPP_OVER_INFOTRYGD_SJEKK = "familie-ba-sak.hopp-over-infotrygd-sjekk" + const val BRUK_ENHETSNUMMERSERVICE = "familie-baks-mottak.bruk-enhetsnummerservice" } } diff --git a/src/main/kotlin/no/nav/familie/baks/mottak/domene/personopplysning/Person.kt b/src/main/kotlin/no/nav/familie/baks/mottak/domene/personopplysning/Person.kt index c7392fe41..f1add797c 100644 --- a/src/main/kotlin/no/nav/familie/baks/mottak/domene/personopplysning/Person.kt +++ b/src/main/kotlin/no/nav/familie/baks/mottak/domene/personopplysning/Person.kt @@ -1,5 +1,6 @@ package no.nav.familie.baks.mottak.domene.personopplysning +import no.nav.familie.baks.mottak.integrasjoner.Adressebeskyttelsesgradering import no.nav.familie.kontrakter.felles.personopplysning.Bostedsadresse import no.nav.familie.kontrakter.felles.personopplysning.ForelderBarnRelasjon @@ -7,7 +8,7 @@ data class Person( val navn: String?, val forelderBarnRelasjoner: Set, val bostedsadresse: Bostedsadresse? = null, - val adressebeskyttelseGradering: String? = null, + val adressebeskyttelseGradering: List = emptyList(), ) data class Familierelasjon( @@ -20,10 +21,6 @@ data class PersonIdent( ) fun Person.harAdresseGradering(): Boolean = - if (this.adressebeskyttelseGradering == null) { - false - } else { - this.adressebeskyttelseGradering != "UGRADERT" - } + this.adressebeskyttelseGradering.any { it.erFortrolig() || it.erStrengtFortrolig() } fun Person.harBostedsadresse(): Boolean = this.bostedsadresse != null diff --git a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/AbstractOppgaveMapper.kt b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/AbstractOppgaveMapper.kt index 1e02ddf3c..4a5e70686 100644 --- a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/AbstractOppgaveMapper.kt +++ b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/AbstractOppgaveMapper.kt @@ -1,5 +1,6 @@ package no.nav.familie.baks.mottak.integrasjoner +import no.nav.familie.baks.mottak.config.featureToggle.FeatureToggleConfig import no.nav.familie.baks.mottak.util.erDnummer import no.nav.familie.baks.mottak.util.erOrgnr import no.nav.familie.baks.mottak.util.fristFerdigstillelse @@ -10,12 +11,15 @@ import no.nav.familie.kontrakter.felles.oppgave.IdentGruppe import no.nav.familie.kontrakter.felles.oppgave.OppgaveIdentV2 import no.nav.familie.kontrakter.felles.oppgave.Oppgavetype import no.nav.familie.kontrakter.felles.oppgave.OpprettOppgaveRequest +import no.nav.familie.unleash.UnleashService import org.slf4j.LoggerFactory import org.springframework.stereotype.Service import java.util.Locale abstract class AbstractOppgaveMapper( private val hentEnhetClient: HentEnhetClient, + private val unleashService: UnleashService, + private val enhetsnummerService: EnhetsnummerService, val pdlClient: PdlClient, val arbeidsfordelingClient: ArbeidsfordelingClient, ) : IOppgaveMapper { @@ -34,7 +38,12 @@ abstract class AbstractOppgaveMapper( oppgavetype = oppgavetype, fristFerdigstillelse = fristFerdigstillelse(), beskrivelse = tilBeskrivelse(journalpost, beskrivelse), - enhetsnummer = utledEnhetsnummer(journalpost), + enhetsnummer = + if (unleashService.isEnabled(FeatureToggleConfig.BRUK_ENHETSNUMMERSERVICE)) { + enhetsnummerService.hentEnhetsnummer(journalpost) + } else { + utledEnhetsnummer(journalpost) + }, behandlingstema = hentBehandlingstemaVerdi(journalpost), behandlingstype = hentBehandlingstypeVerdi(journalpost), ) diff --git a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/BarnetrygdOppgaveMapper.kt b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/BarnetrygdOppgaveMapper.kt index 909c1c400..4b1e8758e 100644 --- a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/BarnetrygdOppgaveMapper.kt +++ b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/BarnetrygdOppgaveMapper.kt @@ -5,15 +5,18 @@ import no.nav.familie.baks.mottak.søknad.barnetrygd.domene.harEøsSteg import no.nav.familie.kontrakter.felles.Behandlingstema import no.nav.familie.kontrakter.felles.Tema import no.nav.familie.kontrakter.felles.oppgave.Behandlingstype +import no.nav.familie.unleash.UnleashService import org.springframework.stereotype.Service @Service class BarnetrygdOppgaveMapper( hentEnhetClient: HentEnhetClient, + unleashService: UnleashService, + enhetsnummerService: EnhetsnummerService, arbeidsfordelingClient: ArbeidsfordelingClient, pdlClient: PdlClient, val søknadRepository: SøknadRepository, -) : AbstractOppgaveMapper(hentEnhetClient, pdlClient, arbeidsfordelingClient) { +) : AbstractOppgaveMapper(hentEnhetClient, unleashService, enhetsnummerService, pdlClient, arbeidsfordelingClient) { override val tema: Tema = Tema.BAR // Behandlingstema og behandlingstype settes basert på regelsettet som er dokumentert nederst her: https://confluence.adeo.no/display/TFA/Mottak+av+dokumenter diff --git a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/EnhetsnummerService.kt b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/EnhetsnummerService.kt new file mode 100644 index 000000000..9ba81b4a0 --- /dev/null +++ b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/EnhetsnummerService.kt @@ -0,0 +1,115 @@ +package no.nav.familie.baks.mottak.integrasjoner + +import no.nav.familie.kontrakter.felles.Tema +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import org.springframework.stereotype.Service +import java.util.Locale + +@Service +class EnhetsnummerService( + private val hentEnhetClient: HentEnhetClient, + private val pdlClient: PdlClient, + private val søknadsidenterService: SøknadsidenterService, + private val arbeidsfordelingClient: ArbeidsfordelingClient, +) { + private val logger = LoggerFactory.getLogger(this::class.java) + private val secureLogger: Logger = LoggerFactory.getLogger("secureLogger") + + fun hentEnhetsnummer( + journalpost: Journalpost, + ): String? { + if (journalpost.tema == null) { + logger.error("Journalpost tema er null for journalpost ${journalpost.journalpostId}.") + throw IllegalStateException("Tema er null") + } + + if (journalpost.bruker == null) { + logger.error("Bruker for journalpost ${journalpost.journalpostId} er null. Usikker på hvordan dette burde håndteres. Se SecureLogs.") + secureLogger.error("Bruker for journalpost $journalpost er null. Usikker på hvordan dette burde håndteres.") + throw IllegalStateException("Bruker for journalpost ${journalpost.journalpostId} er null. Usikker på hvordan dette burde håndteres.") + } + + val erDigitalSøknad = journalpost.erDigitalKanal() && (journalpost.erKontantstøtteSøknad() || journalpost.erBarnetrygdSøknad()) + val tema = Tema.valueOf(journalpost.tema) + + val (søkersIdent, barnasIdenter) = + when (tema) { + Tema.BAR -> finnIdenterForBarnetrygd(tema, journalpost.bruker, journalpost.journalpostId, erDigitalSøknad) + Tema.KON -> finnIdenterForKontantstøtte(tema, journalpost.bruker, journalpost.journalpostId, erDigitalSøknad) + Tema.ENF, + Tema.OPP, + -> { + throw IllegalStateException("Støtter ikke tema $tema") + } + } + + val alleIdenter = barnasIdenter + søkersIdent + + val erEnAvPersoneneStrengtFortrolig = + alleIdenter + .map { pdlClient.hentPerson(it, "hentperson-med-adressebeskyttelse", tema) } + .flatMap { it.adressebeskyttelse } + .any { it.gradering.erStrengtFortrolig() } + + return when { + erEnAvPersoneneStrengtFortrolig -> "2103" + journalpost.journalforendeEnhet == "2101" -> "4806" // Enhet 2101 er nedlagt. Rutes til 4806 + journalpost.journalforendeEnhet == "4847" -> "4817" // Enhet 4847 skal legges ned. Rutes til 4817 + erDigitalSøknad -> + arbeidsfordelingClient.hentBehandlendeEnhetPåIdent(søkersIdent, tema).enhetId + journalpost.journalforendeEnhet.isNullOrBlank() -> null + hentEnhetClient.hentEnhet(journalpost.journalforendeEnhet).status.uppercase(Locale.getDefault()) == "NEDLAGT" -> null + hentEnhetClient.hentEnhet(journalpost.journalforendeEnhet).oppgavebehandler -> journalpost.journalforendeEnhet + else -> { + logger.warn("Enhet ${journalpost.journalforendeEnhet} kan ikke ta i mot oppgaver") + null + } + } + } + + private fun finnIdenterForKontantstøtte( + tema: Tema, + bruker: Bruker, + journalpostId: String, + erDigitalSøknad: Boolean, + ): Pair> = + if (erDigitalSøknad) { + søknadsidenterService.hentIdenterForKontantstøtteViaJournalpost(journalpostId) + } else { + Pair( + tilPersonIdent( + bruker, + tema, + ), + emptyList(), + ) + } + + private fun finnIdenterForBarnetrygd( + tema: Tema, + bruker: Bruker, + journalpostId: String, + erDigitalSøknad: Boolean, + ): Pair> = + if (erDigitalSøknad) { + søknadsidenterService.hentIdenterForBarnetrygdViaJournalpost(journalpostId) + } else { + Pair( + tilPersonIdent( + bruker, + tema, + ), + emptyList(), + ) + } + + private fun tilPersonIdent( + bruker: Bruker, + tema: Tema, + ): String = + when (bruker.type) { + BrukerIdType.AKTOERID -> pdlClient.hentPersonident(bruker.id, tema) + else -> bruker.id + } +} diff --git "a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/Kontantst\303\270tteOppgaveMapper.kt" "b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/Kontantst\303\270tteOppgaveMapper.kt" index 449733827..7a260cb2b 100644 --- "a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/Kontantst\303\270tteOppgaveMapper.kt" +++ "b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/Kontantst\303\270tteOppgaveMapper.kt" @@ -5,15 +5,18 @@ import no.nav.familie.baks.mottak.søknad.kontantstøtte.domene.harEøsSteg import no.nav.familie.kontrakter.felles.Behandlingstema import no.nav.familie.kontrakter.felles.Tema import no.nav.familie.kontrakter.felles.oppgave.Behandlingstype +import no.nav.familie.unleash.UnleashService import org.springframework.stereotype.Service @Service class KontantstøtteOppgaveMapper( hentEnhetClient: HentEnhetClient, + unleashService: UnleashService, + enhetsnummerService: EnhetsnummerService, arbeidsfordelingClient: ArbeidsfordelingClient, pdlClient: PdlClient, val kontantstøtteSøknadRepository: KontantstøtteSøknadRepository, -) : AbstractOppgaveMapper(hentEnhetClient, pdlClient, arbeidsfordelingClient) { +) : AbstractOppgaveMapper(hentEnhetClient, unleashService, enhetsnummerService, pdlClient, arbeidsfordelingClient) { override val tema: Tema = Tema.KON override fun hentBehandlingstema(journalpost: Journalpost): Behandlingstema? = null diff --git a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/PdlClient.kt b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/PdlClient.kt index 66f088414..c2b4e7d85 100644 --- a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/PdlClient.kt +++ b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/PdlClient.kt @@ -112,11 +112,7 @@ class PdlClient( Person( navn = null, forelderBarnRelasjoner = forelderBarnRelasjoner, - adressebeskyttelseGradering = - it.adressebeskyttelse - .firstOrNull() - ?.gradering - ?.name, + adressebeskyttelseGradering = it.adressebeskyttelse.map { it.gradering }, bostedsadresse = it.bostedsadresse.firstOrNull(), ) } @@ -328,6 +324,11 @@ enum class Adressebeskyttelsesgradering { FORTROLIG, // Kode 7 STRENGT_FORTROLIG, // Kode 6 UGRADERT, + ; + + fun erStrengtFortrolig() = this == STRENGT_FORTROLIG || this == STRENGT_FORTROLIG_UTLAND + + fun erFortrolig(): Boolean = this == FORTROLIG } enum class Identgruppe { diff --git "a/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/S\303\270knadsidenterService.kt" "b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/S\303\270knadsidenterService.kt" new file mode 100644 index 000000000..3881c3f95 --- /dev/null +++ "b/src/main/kotlin/no/nav/familie/baks/mottak/integrasjoner/S\303\270knadsidenterService.kt" @@ -0,0 +1,71 @@ +package no.nav.familie.baks.mottak.integrasjoner + +import no.nav.familie.baks.mottak.søknad.barnetrygd.BarnetrygdSøknadService +import no.nav.familie.baks.mottak.søknad.barnetrygd.domene.BarnetrygdSøknadV8 +import no.nav.familie.baks.mottak.søknad.barnetrygd.domene.BarnetrygdSøknadV9 +import no.nav.familie.baks.mottak.søknad.kontantstøtte.KontantstøtteSøknadService +import no.nav.familie.baks.mottak.søknad.kontantstøtte.domene.KontantstøtteSøknadV4 +import no.nav.familie.baks.mottak.søknad.kontantstøtte.domene.KontantstøtteSøknadV5 +import org.springframework.stereotype.Service + +@Service +class SøknadsidenterService( + private val barnetrygdSøknadService: BarnetrygdSøknadService, + private val kontantstøtteSøknadService: KontantstøtteSøknadService, +) { + fun hentIdenterForKontantstøtteViaJournalpost(journalpostId: String): Pair> { + val versjonertSøknad = + kontantstøtteSøknadService + .hentDBKontantstøtteSøknadForJournalpost(journalpostId) + .hentVersjonertKontantstøtteSøknad() + return when (versjonertSøknad) { + is KontantstøtteSøknadV4 -> + Pair( + versjonertSøknad.kontantstøtteSøknad.søker.ident.verdi.values + .first(), + versjonertSøknad.kontantstøtteSøknad.barn.map { + it.ident.verdi.values + .first() + }, + ) + + is KontantstøtteSøknadV5 -> + Pair( + versjonertSøknad.kontantstøtteSøknad.søker.ident.verdi.values + .first(), + versjonertSøknad.kontantstøtteSøknad.barn.map { + it.ident.verdi.values + .first() + }, + ) + } + } + + fun hentIdenterForBarnetrygdViaJournalpost(journalpostId: String): Pair> { + val versjonertSøknad = + barnetrygdSøknadService + .hentDBSøknadFraJournalpost(journalpostId) + .hentVersjonertSøknad() + return when (versjonertSøknad) { + is BarnetrygdSøknadV8 -> + Pair( + versjonertSøknad.barnetrygdSøknad.søker.ident.verdi.values + .first(), + versjonertSøknad.barnetrygdSøknad.barn.map { + it.ident.verdi.values + .first() + }, + ) + + is BarnetrygdSøknadV9 -> + Pair( + versjonertSøknad.barnetrygdSøknad.søker.ident.verdi.values + .first(), + versjonertSøknad.barnetrygdSøknad.barn.map { + it.ident.verdi.values + .first() + }, + ) + } + } +} diff --git "a/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/barnetrygd/BarnetrygdS\303\270knadService.kt" "b/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/barnetrygd/BarnetrygdS\303\270knadService.kt" index c9c57cbe8..d7dcc9be7 100644 --- "a/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/barnetrygd/BarnetrygdS\303\270knadService.kt" +++ "b/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/barnetrygd/BarnetrygdS\303\270knadService.kt" @@ -61,6 +61,13 @@ class BarnetrygdSøknadService( fun hentDBSøknad(søknadId: Long): DBBarnetrygdSøknad? = søknadRepository.hentDBSøknad(søknadId) + fun finnDBSøknadFraJournalpost(journalpostId: String): DBBarnetrygdSøknad? = + søknadRepository.finnDBSøknadForJournalpost(journalpostId = journalpostId) + + fun hentDBSøknadFraJournalpost(journalpostId: String): DBBarnetrygdSøknad = + søknadRepository.finnDBSøknadForJournalpost(journalpostId = journalpostId) + ?: throw IllegalStateException("Fant ikke søknad for journalpost $journalpostId") + fun hentLagredeVedlegg(søknad: DBBarnetrygdSøknad): Map { val map = mutableMapOf() vedleggRepository.hentAlleVedlegg(søknad.id).forEach { diff --git "a/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/barnetrygd/domene/BarnetrygdS\303\270knadRepository.kt" "b/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/barnetrygd/domene/BarnetrygdS\303\270knadRepository.kt" index e23c06e30..48209693d 100644 --- "a/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/barnetrygd/domene/BarnetrygdS\303\270knadRepository.kt" +++ "b/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/barnetrygd/domene/BarnetrygdS\303\270knadRepository.kt" @@ -11,6 +11,9 @@ interface SøknadRepository : JpaRepository { @Query(value = "SELECT s FROM Soknad s WHERE s.id = :soknadId") fun hentDBSøknad(soknadId: Long): DBBarnetrygdSøknad? + @Query(value = "SELECT s FROM Soknad s WHERE s.journalpostId = :journalpostId") + fun finnDBSøknadForJournalpost(journalpostId: String): DBBarnetrygdSøknad? + @Query( "SELECT s FROM Soknad s ORDER BY s.opprettetTid DESC LIMIT 1", ) diff --git "a/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/kontantst\303\270tte/Kontantst\303\270tteS\303\270knadService.kt" "b/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/kontantst\303\270tte/Kontantst\303\270tteS\303\270knadService.kt" index 7bd470da7..9c62b2cd8 100644 --- "a/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/kontantst\303\270tte/Kontantst\303\270tteS\303\270knadService.kt" +++ "b/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/kontantst\303\270tte/Kontantst\303\270tteS\303\270knadService.kt" @@ -69,6 +69,13 @@ class KontantstøtteSøknadService( fun hentDBKontantstøtteSøknad(søknadId: Long): DBKontantstøtteSøknad? = kontantstøtteSøknadRepository.hentSøknad(søknadId) + fun finnDBKontantstøtteSøknadForJournalpost(journalpostId: String): DBKontantstøtteSøknad? = + kontantstøtteSøknadRepository.finnSøknadForJournalpost(journalpostId = journalpostId) + + fun hentDBKontantstøtteSøknadForJournalpost(journalpostId: String): DBKontantstøtteSøknad = + kontantstøtteSøknadRepository.finnSøknadForJournalpost(journalpostId = journalpostId) + ?: throw IllegalStateException("Fant ikke søknad for journalpost $journalpostId") + fun hentLagredeDBKontantstøtteVedlegg(søknad: DBKontantstøtteSøknad): Map { val vedleggMap = mutableMapOf() kontantstøtteVedleggRepository.hentAlleVedlegg(søknad.id).forEach { diff --git "a/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/kontantst\303\270tte/domene/Kontantst\303\270tteS\303\270knadRepository.kt" "b/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/kontantst\303\270tte/domene/Kontantst\303\270tteS\303\270knadRepository.kt" index e3e5f6d24..d20c17faa 100644 --- "a/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/kontantst\303\270tte/domene/Kontantst\303\270tteS\303\270knadRepository.kt" +++ "b/src/main/kotlin/no/nav/familie/baks/mottak/s\303\270knad/kontantst\303\270tte/domene/Kontantst\303\270tteS\303\270knadRepository.kt" @@ -11,6 +11,9 @@ interface KontantstøtteSøknadRepository : JpaRepository { + enhetsnummerService.hentEnhetsnummer(journalpost) + } + + assertThat(exception.message).isEqualTo("Tema er null") + } + + @Test + fun `skal kaste exception hvis journalpost bruker er null`() { + // Arrange + val journalpostId = "123" + + val journalpost = + Journalpost( + journalpostId = journalpostId, + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + tema = Tema.BAR.name, + journalforendeEnhet = "1", + kanal = digitalKanal, + dokumenter = hentDokumenterMedRiktigBrevkode(Tema.BAR), + bruker = null, + ) + + // Act & Assert + val exception = + assertThrows { + enhetsnummerService.hentEnhetsnummer(journalpost) + } + + assertThat(exception.message).isEqualTo("Bruker for journalpost $journalpostId er null. Usikker på hvordan dette burde håndteres.") + } + + @ParameterizedTest + @EnumSource( + value = Tema::class, + names = ["BAR", "KON"], + mode = EnumSource.Mode.EXCLUDE, + ) + fun `skal kaste feil når tema ikke er støttet`( + tema: Tema, + ) { + // Arrange + val journalpost = + Journalpost( + journalpostId = "123", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + tema = tema.name, + journalforendeEnhet = "1", + kanal = digitalKanal, + dokumenter = hentDokumenterMedRiktigBrevkode(tema), + bruker = Bruker("312", BrukerIdType.FNR), + ) + + // Act & Assert + val exception = + assertThrows { + enhetsnummerService.hentEnhetsnummer(journalpost) + } + + assertThat(exception.message).isEqualTo("Støtter ikke tema $tema") + } + + @ParameterizedTest + @EnumSource( + value = Tema::class, + names = ["BAR", "KON"], + ) + fun `skal sette enhet 2103 Vikafossen for papirsøkand hvor søker er strengt fortrolig`( + tema: Tema, + ) { + // Arrange + val fnr = "321" + + val journalpost = + Journalpost( + journalpostId = "123", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + tema = tema.name, + journalforendeEnhet = "2101", + bruker = Bruker(fnr, BrukerIdType.FNR), + kanal = "SKAN_NETS", + dokumenter = hentDokumenterMedRiktigBrevkode(tema), + ) + + every { + mockedPdlClient.hentPerson(fnr, "hentperson-med-adressebeskyttelse", tema) + } returns PdlPersonData(adressebeskyttelse = listOf(Adressebeskyttelse(gradering = Adressebeskyttelsesgradering.STRENGT_FORTROLIG))) + + // Act + val enhetsnummer = enhetsnummerService.hentEnhetsnummer(journalpost) + + // Assert + assertThat(enhetsnummer).isEqualTo("2103") + } + + @ParameterizedTest + @EnumSource( + value = Tema::class, + names = ["BAR", "KON"], + ) + fun `skal finne og sette geografisk behandlende enhet på digitale søknader dersom ingen adressebeskyttelse er nødvendig`( + tema: Tema, + ) { + // Arrange + val fnr = "321" + + val journalpost = + Journalpost( + journalpostId = "123", + journalposttype = Journalposttype.I, + journalstatus = Journalstatus.MOTTATT, + tema = tema.name, + journalforendeEnhet = "1234", + bruker = Bruker(fnr, BrukerIdType.FNR), + kanal = digitalKanal, + dokumenter = hentDokumenterMedRiktigBrevkode(tema), + ) + + every { + mockedSøknadsidenterService.hentIdenterForKontantstøtteViaJournalpost(journalpost.journalpostId) + } returns Pair(fnr, listOf("123", "456")) + + every { + mockedSøknadsidenterService.hentIdenterForBarnetrygdViaJournalpost(journalpost.journalpostId) + } returns Pair(fnr, listOf("123", "456")) + + every { + mockedPdlClient.hentPerson(any(), any(), any()) + } returns PdlPersonData(adressebeskyttelse = listOf(Adressebeskyttelse(gradering = Adressebeskyttelsesgradering.UGRADERT))) + + every { + mockedArbeidsfordelingClient.hentBehandlendeEnhetPåIdent(any(), any()) + } returns + no.nav.familie.kontrakter.felles.arbeidsfordeling + .Enhet(enhetId = "789", "Hønefoss") + // Act + val enhetsnummer = enhetsnummerService.hentEnhetsnummer(journalpost) + + // Assert + assertThat(enhetsnummer).isEqualTo("789") + } + + private fun hentDokumenterMedRiktigBrevkode(tema: Tema): List { + val brevkode = + when (tema) { + Tema.BAR -> "NAV 33-00.07" + Tema.KON -> "NAV 34-00.08" + else -> "" + } + return listOf(DokumentInfo(brevkode = brevkode, tittel = "Søknad", dokumentstatus = Dokumentstatus.FERDIGSTILT, dokumentvarianter = emptyList())) + } +} diff --git a/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/OppgaveClientTest.kt b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/OppgaveClientTest.kt index a0efaac0e..379c6c990 100644 --- a/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/OppgaveClientTest.kt +++ b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/OppgaveClientTest.kt @@ -68,12 +68,23 @@ class OppgaveClientTest { ) stubFor( post(urlEqualTo("/api/graphql")) + .withRequestBody(equalToJson(PdlClientTest.gyldigRequest("hentIdenter.graphql", journalPost.bruker!!.id))) .willReturn( aResponse() .withHeader("Content-Type", "application/json") .withBody(readfile("mockIdentInformasjonResponse.json")), ), ) + + stubFor( + post(urlEqualTo("/api/graphql")) + .withRequestBody(equalToJson(PdlClientTest.gyldigRequest("hentperson-med-adressebeskyttelse.graphql", "12345678901"))) + .willReturn( + aResponse() + .withHeader("Content-Type", "application/json") + .withBody(readfile("mock-hentperson-adressebeskyttelse.json")), + ), + ) } @AfterEach @@ -133,7 +144,6 @@ class OppgaveClientTest { .withBody(objectMapper.writeValueAsString(Ressurs.failure("test"))), ), ) - assertThatThrownBy { oppgaveClient.opprettJournalføringsoppgave(journalPost) }.isInstanceOf(IntegrasjonException::class.java) diff --git a/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/OppgaveMapperTest.kt b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/OppgaveMapperTest.kt index ad1cfca6c..1ecaec495 100644 --- a/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/OppgaveMapperTest.kt +++ b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/OppgaveMapperTest.kt @@ -3,6 +3,7 @@ package no.nav.familie.baks.mottak.integrasjoner import io.mockk.every import io.mockk.mockk import no.nav.familie.baks.mottak.DevLauncher +import no.nav.familie.baks.mottak.config.featureToggle.FeatureToggleConfig import no.nav.familie.baks.mottak.søknad.barnetrygd.domene.SøknadRepository import no.nav.familie.baks.mottak.søknad.kontantstøtte.domene.KontantstøtteSøknadRepository import no.nav.familie.kontrakter.felles.Behandlingstema @@ -11,8 +12,10 @@ import no.nav.familie.kontrakter.felles.oppgave.Behandlingstype import no.nav.familie.kontrakter.felles.oppgave.IdentGruppe import no.nav.familie.kontrakter.felles.oppgave.OppgaveIdentV2 import no.nav.familie.kontrakter.felles.oppgave.Oppgavetype +import no.nav.familie.unleash.UnleashService import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest @@ -32,13 +35,36 @@ class OppgaveMapperTest( @Autowired private val kontantstøtteSøknadRepository: KontantstøtteSøknadRepository, ) { + private val mockUnleashService: UnleashService = mockk() private val mockHentEnhetClient: HentEnhetClient = mockk(relaxed = true) - + private val mockEnhetsnummerService: EnhetsnummerService = mockk() private val mockArbeidsfordelingClient: ArbeidsfordelingClient = mockk(relaxed = true) - private val barnetrygdOppgaveMapper: IOppgaveMapper = BarnetrygdOppgaveMapper(mockHentEnhetClient, mockArbeidsfordelingClient, mockPdlClient, barnetrygdSøknadRepository) + private val barnetrygdOppgaveMapper: IOppgaveMapper = + BarnetrygdOppgaveMapper( + hentEnhetClient = mockHentEnhetClient, + unleashService = mockUnleashService, + enhetsnummerService = mockEnhetsnummerService, + pdlClient = mockPdlClient, + søknadRepository = barnetrygdSøknadRepository, + arbeidsfordelingClient = mockArbeidsfordelingClient, + ) + + private val kontantstøtteOppgaveMapper: IOppgaveMapper = + KontantstøtteOppgaveMapper( + hentEnhetClient = mockHentEnhetClient, + unleashService = mockUnleashService, + enhetsnummerService = mockEnhetsnummerService, + pdlClient = mockPdlClient, + kontantstøtteSøknadRepository = kontantstøtteSøknadRepository, + arbeidsfordelingClient = mockArbeidsfordelingClient, + ) - private val kontantstøtteOppgaveMapper: IOppgaveMapper = KontantstøtteOppgaveMapper(mockHentEnhetClient, mockArbeidsfordelingClient, mockPdlClient, kontantstøtteSøknadRepository) + @BeforeEach + fun beforeEach() { + every { mockEnhetsnummerService.hentEnhetsnummer(any()) } returns "1234" + every { mockUnleashService.isEnabled(FeatureToggleConfig.BRUK_ENHETSNUMMERSERVICE) } returns true + } @Test fun `skal kaste exception dersom dokumentlisten er tom`() { @@ -343,129 +369,6 @@ class OppgaveMapperTest( assertEquals("beskrivelsefelt", oppgaveUtenBeskrivelse2.beskrivelse) } - @Test - fun `skal sette enhet 4806 hvis enhet på journalpost er 2101`() { - val oppgave = - barnetrygdOppgaveMapper.tilOpprettOppgaveRequest( - Oppgavetype.Journalføring, - journalpostClient - .hentJournalpost("123") - .copy( - journalforendeEnhet = "2101", - dokumenter = - listOf( - DokumentInfo( - tittel = null, - brevkode = "kode", - dokumentstatus = null, - dokumentvarianter = null, - ), - ), - behandlingstema = "btema", - ), - ) - assertThat(oppgave.enhetsnummer).isEqualTo("4806") - } - - @Test - fun `skal sette enhet null hvis enhet på journalpost er null`() { - val oppgave = - barnetrygdOppgaveMapper.tilOpprettOppgaveRequest( - Oppgavetype.Journalføring, - journalpostClient - .hentJournalpost("123") - .copy( - journalforendeEnhet = null, - dokumenter = - listOf( - DokumentInfo( - tittel = null, - brevkode = "kode", - dokumentstatus = null, - dokumentvarianter = null, - ), - ), - behandlingstema = "btema", - ), - ) - assertThat(oppgave.enhetsnummer).isNull() - } - - @Test - fun `skal sette enhet fra journalpost hvis enhet kan behandle oppgaver`() { - every { mockHentEnhetClient.hentEnhet("4") } returns Enhet("4", "enhetnavn", true, "Aktiv") - val oppgave = - barnetrygdOppgaveMapper.tilOpprettOppgaveRequest( - Oppgavetype.Journalføring, - journalpostClient - .hentJournalpost("123") - .copy( - journalforendeEnhet = "4", - dokumenter = - listOf( - DokumentInfo( - tittel = null, - brevkode = "kode", - dokumentstatus = null, - dokumentvarianter = null, - ), - ), - behandlingstema = "btema", - ), - ) - assertThat(oppgave.enhetsnummer).isEqualTo("4") - } - - @Test - fun `skal sette enhet null hvis enhet ikke kan behandle oppgaver`() { - every { mockHentEnhetClient.hentEnhet("5") } returns Enhet("4", "enhetnavn", false, "Aktiv") - val oppgave = - barnetrygdOppgaveMapper.tilOpprettOppgaveRequest( - Oppgavetype.Journalføring, - journalpostClient - .hentJournalpost("123") - .copy( - journalforendeEnhet = "5", - dokumenter = - listOf( - DokumentInfo( - tittel = null, - brevkode = "kode", - dokumentstatus = null, - dokumentvarianter = null, - ), - ), - behandlingstema = "btema", - ), - ) - assertThat(oppgave.enhetsnummer).isNull() - } - - @Test - fun `skal sette enhet null hvis enhet er nedlagt`() { - every { mockHentEnhetClient.hentEnhet("5") } returns Enhet("4", "enhetnavn", true, "Nedlagt") - val oppgave = - barnetrygdOppgaveMapper.tilOpprettOppgaveRequest( - Oppgavetype.Journalføring, - journalpostClient - .hentJournalpost("123") - .copy( - journalforendeEnhet = "5", - dokumenter = - listOf( - DokumentInfo( - tittel = null, - brevkode = "kode", - dokumentstatus = null, - dokumentvarianter = null, - ), - ), - behandlingstema = "btema", - ), - ) - assertThat(oppgave.enhetsnummer).isNull() - } - @Test fun `skal sette bruker null hvis Orgnr er 000000000`() { val oppgave = diff --git a/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/PdlClientTest.kt b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/PdlClientTest.kt index e2a44c486..103e62fdf 100644 --- a/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/PdlClientTest.kt +++ b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/PdlClientTest.kt @@ -48,7 +48,7 @@ class PdlClientTest { ) val personInfo = pdlClient.hentPersonMedRelasjoner(testIdent, Tema.BAR) - assertThat(personInfo.adressebeskyttelseGradering).isEqualTo(Adressebeskyttelsesgradering.UGRADERT.name) + assertThat(personInfo.adressebeskyttelseGradering).isEqualTo(listOf(Adressebeskyttelsesgradering.UGRADERT)) assertThat(personInfo.forelderBarnRelasjoner.size).isEqualTo(2) assertThat(personInfo.bostedsadresse?.vegadresse).isNotNull } @@ -80,6 +80,27 @@ class PdlClientTest { assertThat(pdlPersonData.fødested.first().fødeland).isEqualTo("NOR") } + @Test + fun `skal hente person med adressebeskyttelse fra pdl`() { + // Arrange + mockResponseForPdlQuery( + pdlRequestBody = gyldigRequest("hentperson-med-adressebeskyttelse.graphql", testIdent), + mockResponse = readfile("mock-hentperson-adressebeskyttelse.json"), + ) + + // Act + val pdlPersonData = + pdlClient.hentPerson( + personIdent = testIdent, + graphqlfil = "hentperson-med-adressebeskyttelse", + tema = Tema.BAR, + ) + + // Assert + assertThat(pdlPersonData.adressebeskyttelse).hasSize(1) + assertThat(pdlPersonData.adressebeskyttelse.first().gradering).isEqualTo(Adressebeskyttelsesgradering.UGRADERT) + } + @Test fun hentPersonFeilerMedInternalServerOgKasterIntegrasjonsException() { stubFor( @@ -113,7 +134,7 @@ class PdlClientTest { companion object { val testIdent = "12345678901" - private fun mockResponseForPdlQuery( + fun mockResponseForPdlQuery( pdlRequestBody: String, mockResponse: String, ) { @@ -128,12 +149,12 @@ class PdlClientTest { ) } - private fun gyldigRequest( + fun gyldigRequest( queryFilnavn: String, ident: String, ): String = "{\"variables\":{\"ident\":\"$ident\"},\"query\":\"${readfile(queryFilnavn).graphqlCompatible()}\"}" - private fun readfile(filnavn: String): String = this::class.java.getResource("/pdl/$filnavn").readText() + fun readfile(filnavn: String): String = this::class.java.getResource("/pdl/$filnavn").readText() private fun String.graphqlCompatible(): String = StringUtils.normalizeSpace(this.replace("\n", "")) } diff --git "a/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/S\303\270knadsidenterServiceTest.kt" "b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/S\303\270knadsidenterServiceTest.kt" new file mode 100644 index 000000000..a26d8f31a --- /dev/null +++ "b/src/test/kotlin/no/nav/familie/baks/mottak/integrasjoner/S\303\270knadsidenterServiceTest.kt" @@ -0,0 +1,111 @@ +package no.nav.familie.baks.mottak.integrasjoner + +import io.mockk.every +import io.mockk.mockk +import no.nav.familie.baks.mottak.søknad.SøknadTestData +import no.nav.familie.baks.mottak.søknad.SøknadTestData.barnetrygdSøknad +import no.nav.familie.baks.mottak.søknad.barnetrygd.BarnetrygdSøknadService +import no.nav.familie.baks.mottak.søknad.barnetrygd.domene.DBBarnetrygdSøknad +import no.nav.familie.baks.mottak.søknad.kontantstøtte.KontantstøtteSøknadService +import no.nav.familie.baks.mottak.søknad.kontantstøtte.KontantstøtteSøknadTestData.kontantstøtteSøknad +import no.nav.familie.baks.mottak.søknad.kontantstøtte.KontantstøtteSøknadTestData.lagBarn +import no.nav.familie.baks.mottak.søknad.kontantstøtte.KontantstøtteSøknadTestData.lagSøker +import no.nav.familie.baks.mottak.søknad.kontantstøtte.domene.DBKontantstøtteSøknad +import no.nav.familie.kontrakter.felles.objectMapper +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test + +class SøknadsidenterServiceTest { + private val mockedBarnetrygdSøknadService: BarnetrygdSøknadService = mockk() + private val mockedKontantstøtteSøknadService: KontantstøtteSøknadService = mockk() + private val søknadsidenterService: SøknadsidenterService = + SøknadsidenterService( + mockedBarnetrygdSøknadService, + mockedKontantstøtteSøknadService, + ) + + private val søkersFødselsnummer: String = "123" + + @Nested + inner class HentIdenterForKontantstøtteViaJournalpostTest { + @Test + fun `skal hente identer for barna`() { + // Arrange + val journalpostId = "1" + + val kontantstøtteSøknad = + kontantstøtteSøknad( + søker = + lagSøker( + søkersFødselsnummer, + ), + barn = + listOf( + lagBarn("815"), + lagBarn("493"), + lagBarn("00"), + ), + ) + + val dbKontantstøtteSøknad = + DBKontantstøtteSøknad( + søknadJson = objectMapper.writeValueAsString(kontantstøtteSøknad), + fnr = søkersFødselsnummer, + journalpostId = journalpostId, + ) + + every { + mockedKontantstøtteSøknadService.hentDBKontantstøtteSøknadForJournalpost(journalpostId) + } returns dbKontantstøtteSøknad + + // Act + val identer = søknadsidenterService.hentIdenterForKontantstøtteViaJournalpost(journalpostId) + + // Assert + assertThat(identer.first).isEqualTo(søkersFødselsnummer) + assertThat(identer.second).isEqualTo(listOf("815", "493", "00")) + } + } + + @Nested + inner class HentIdenterForBarnetrygdViaJournalpostTest { + @Test + fun `skal hente identer for barna`() { + // Arrange + val journalpostId = "1" + + val kontantstøtteSøknad = + barnetrygdSøknad( + søker = + SøknadTestData.lagSøker( + søkersFødselsnummer, + ), + barn = + listOf( + SøknadTestData.lagBarn("815"), + SøknadTestData.lagBarn("493"), + SøknadTestData.lagBarn("00"), + ), + ) + + val dbBarnetrygdSøknad = + DBBarnetrygdSøknad( + søknadJson = objectMapper.writeValueAsString(kontantstøtteSøknad), + fnr = søkersFødselsnummer, + journalpostId = journalpostId, + ) + + every { + mockedBarnetrygdSøknadService.hentDBSøknadFraJournalpost(journalpostId) + } returns dbBarnetrygdSøknad + + // Act + val identer = søknadsidenterService.hentIdenterForBarnetrygdViaJournalpost(journalpostId) + + // Assert + assertThat(identer.first).isEqualTo(søkersFødselsnummer) + assertThat(identer.second).isEqualTo(listOf("815", "493", "00")) + } + } +} diff --git "a/src/test/kotlin/no/nav/familie/baks/mottak/s\303\270knad/S\303\270knadTestData.kt" "b/src/test/kotlin/no/nav/familie/baks/mottak/s\303\270knad/S\303\270knadTestData.kt" index 678c79c61..12bfdd710 100644 --- "a/src/test/kotlin/no/nav/familie/baks/mottak/s\303\270knad/S\303\270knadTestData.kt" +++ "b/src/test/kotlin/no/nav/familie/baks/mottak/s\303\270knad/S\303\270knadTestData.kt" @@ -18,11 +18,11 @@ fun søknadsfelt( ): SøknadsfeltV4 = SøknadsfeltV4(label = mapOf("nb" to label), verdi = mapOf("nb" to verdi)) object SøknadTestData { - private fun søkerV8(): SøkerV8 = + fun lagSøker(fnr: String = "21234578901"): SøkerV8 = SøkerV8( harEøsSteg = true, navn = søknadsfelt("navn", "Navn Navnessen"), - ident = søknadsfelt("fødselsnummer", "1234578901"), + ident = søknadsfelt("fødselsnummer", fnr), statsborgerskap = søknadsfelt("statsborgerskap", listOf("NOR")), adressebeskyttelse = false, adresse = @@ -44,47 +44,29 @@ object SøknadTestData { arbeidsperioderUtland = listOf(), ) - private fun barnV8(): List = - listOf( - BarnV8( - harEøsSteg = true, - navn = søknadsfelt("Barnets fulle navn", "barn1"), - ident = søknadsfelt("Fødselsnummer", "12345678999"), - registrertBostedType = søknadsfelt("Skal ha samme adresse", RegistrertBostedType.REGISTRERT_ANNEN_ADRESSE), - alder = søknadsfelt("alder", "4 år"), - spørsmål = mapOf(), - utenlandsperioder = listOf(), - eøsBarnetrygdsperioder = listOf(), - ), - BarnV8( - harEøsSteg = false, - navn = søknadsfelt("Barnets fulle navn", "barn2"), - ident = søknadsfelt("Fødselsnummer", "12345678987"), - registrertBostedType = søknadsfelt("Skal ha samme adresse", RegistrertBostedType.IKKE_FYLT_INN), - alder = søknadsfelt("alder", "1 år"), - spørsmål = mapOf(), - utenlandsperioder = listOf(), - eøsBarnetrygdsperioder = listOf(), - ), - BarnV8( - harEøsSteg = true, - navn = søknadsfelt("Barnets fulle navn", "barn3"), - ident = søknadsfelt("Fødselsnummer", "12345678988"), - registrertBostedType = søknadsfelt("Skal ha samme adresse", RegistrertBostedType.REGISTRERT_SOKERS_ADRESSE), - alder = søknadsfelt("alder", "2 år"), - spørsmål = mapOf(), - utenlandsperioder = listOf(), - eøsBarnetrygdsperioder = listOf(), - ), + fun lagBarn(fnr: String = "12345678999"): BarnV8 = + + BarnV8( + harEøsSteg = true, + navn = søknadsfelt("Barnets fulle navn", "barn1"), + ident = søknadsfelt("Fødselsnummer", fnr), + registrertBostedType = søknadsfelt("Skal ha samme adresse", RegistrertBostedType.REGISTRERT_ANNEN_ADRESSE), + alder = søknadsfelt("alder", "4 år"), + spørsmål = mapOf(), + utenlandsperioder = listOf(), + eøsBarnetrygdsperioder = listOf(), ) - fun barnetrygdSøknad(): BarnetrygdSøknad = + fun barnetrygdSøknad( + søker: SøkerV8 = lagSøker(), + barn: List = listOf(lagBarn()), + ): BarnetrygdSøknad = BarnetrygdSøknad( antallEøsSteg = 3, kontraktVersjon = 9, søknadstype = Søknadstype.ORDINÆR, - søker = søkerV8(), - barn = barnV8(), + søker = søker, + barn = barn, spørsmål = mapOf(), dokumentasjon = listOf( diff --git "a/src/test/kotlin/no/nav/familie/baks/mottak/s\303\270knad/barnetrygd/BarnetrygdS\303\270knadServiceTest.kt" "b/src/test/kotlin/no/nav/familie/baks/mottak/s\303\270knad/barnetrygd/BarnetrygdS\303\270knadServiceTest.kt" new file mode 100644 index 000000000..116e135dc --- /dev/null +++ "b/src/test/kotlin/no/nav/familie/baks/mottak/s\303\270knad/barnetrygd/BarnetrygdS\303\270knadServiceTest.kt" @@ -0,0 +1,122 @@ +package no.nav.familie.baks.mottak.søknad.barnetrygd + +import io.mockk.every +import io.mockk.mockk +import no.nav.familie.baks.mottak.integrasjoner.FamilieDokumentClient +import no.nav.familie.baks.mottak.søknad.barnetrygd.domene.DBBarnetrygdSøknad +import no.nav.familie.baks.mottak.søknad.barnetrygd.domene.SøknadRepository +import no.nav.familie.baks.mottak.søknad.barnetrygd.domene.SøknadVedleggRepository +import no.nav.familie.prosessering.internal.TaskService +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertThrows + +class BarnetrygdSøknadServiceTest { + private val mockSøknadRepository: SøknadRepository = mockk() + private val mockVedleggRepository: SøknadVedleggRepository = mockk() + private val mockTaskService: TaskService = mockk() + private val mockVedleggClient: FamilieDokumentClient = mockk() + + private val barnetrygdSøknadService: BarnetrygdSøknadService = + BarnetrygdSøknadService( + søknadRepository = mockSøknadRepository, + vedleggRepository = mockVedleggRepository, + taskService = mockTaskService, + vedleggClient = mockVedleggClient, + ) + + @Nested + inner class FinnDBSøknadFraJournalpostTest { + @Test + fun `skal finne søknad`() { + // Arrange + val journalpostId = "1" + + val søknad = + DBBarnetrygdSøknad( + søknadJson = "", + fnr = "123", + ) + + every { + mockSøknadRepository.finnDBSøknadForJournalpost(journalpostId) + } returns søknad + + // Act + val resultat = + barnetrygdSøknadService.finnDBSøknadFraJournalpost( + journalpostId = journalpostId, + ) + + // assert + assertThat(resultat).isEqualTo(søknad) + } + + @Test + fun `skal ikke finne søknad om den ikke eksiterer i repoet`() { + // Arrange + val journalpostId = "1" + + every { + mockSøknadRepository.finnDBSøknadForJournalpost(journalpostId) + } returns null + + // Act + val resultat = + barnetrygdSøknadService.finnDBSøknadFraJournalpost( + journalpostId = journalpostId, + ) + + // assert + assertThat(resultat).isNull() + } + } + + @Nested + inner class HentDBSøknadFraJournalpostTest { + @Test + fun `skal hente søknad`() { + // Arrange + val journalpostId = "1" + + val søknad = + DBBarnetrygdSøknad( + søknadJson = "", + fnr = "123", + ) + + every { + mockSøknadRepository.finnDBSøknadForJournalpost(journalpostId) + } returns søknad + + // Act + val resultat = + barnetrygdSøknadService.hentDBSøknadFraJournalpost( + journalpostId = journalpostId, + ) + + // assert + assertThat(resultat).isEqualTo(søknad) + } + + @Test + fun `skal kaste exception om søknaden ikke eksiterer i repoet`() { + // Arrange + val journalpostId = "1" + + every { + mockSøknadRepository.finnDBSøknadForJournalpost(journalpostId) + } returns null + + // Act & assert + val exception = + assertThrows { + barnetrygdSøknadService.hentDBSøknadFraJournalpost( + journalpostId = journalpostId, + ) + } + assertThat(exception.message).isEqualTo("Fant ikke søknad for journalpost $journalpostId") + } + } +} diff --git "a/src/test/kotlin/no/nav/familie/baks/mottak/s\303\270knad/kontantst\303\270tte/Kontantst\303\270tteS\303\270knadServiceTest.kt" "b/src/test/kotlin/no/nav/familie/baks/mottak/s\303\270knad/kontantst\303\270tte/Kontantst\303\270tteS\303\270knadServiceTest.kt" new file mode 100644 index 000000000..6a6393c96 --- /dev/null +++ "b/src/test/kotlin/no/nav/familie/baks/mottak/s\303\270knad/kontantst\303\270tte/Kontantst\303\270tteS\303\270knadServiceTest.kt" @@ -0,0 +1,122 @@ +package no.nav.familie.baks.mottak.søknad.kontantstøtte + +import io.mockk.every +import io.mockk.mockk +import no.nav.familie.baks.mottak.integrasjoner.FamilieDokumentClient +import no.nav.familie.baks.mottak.søknad.kontantstøtte.domene.DBKontantstøtteSøknad +import no.nav.familie.baks.mottak.søknad.kontantstøtte.domene.KontantstøtteSøknadRepository +import no.nav.familie.baks.mottak.søknad.kontantstøtte.domene.KontantstøtteVedleggRepository +import no.nav.familie.prosessering.internal.TaskService +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertThrows + +class KontantstøtteSøknadServiceTest { + private val mockKontantstøtteSøknadRepository: KontantstøtteSøknadRepository = mockk() + private val mockKontantstøtteVedleggRepository: KontantstøtteVedleggRepository = mockk() + private val mockTaskService: TaskService = mockk() + private val mockVedleggClient: FamilieDokumentClient = mockk() + + private val kontantstøtteSøknadService: KontantstøtteSøknadService = + KontantstøtteSøknadService( + kontantstøtteSøknadRepository = mockKontantstøtteSøknadRepository, + kontantstøtteVedleggRepository = mockKontantstøtteVedleggRepository, + taskService = mockTaskService, + vedleggClient = mockVedleggClient, + ) + + @Nested + inner class FinnDBKontantstøtteSøknadForJournalpostTest { + @Test + fun `skal finne søknad`() { + // Arrange + val journalpostId = "1" + + val søknad = + DBKontantstøtteSøknad( + søknadJson = "", + fnr = "123", + ) + + every { + mockKontantstøtteSøknadRepository.finnSøknadForJournalpost(journalpostId) + } returns søknad + + // Act + val resultat = + kontantstøtteSøknadService.finnDBKontantstøtteSøknadForJournalpost( + journalpostId = journalpostId, + ) + + // assert + assertThat(resultat).isEqualTo(søknad) + } + + @Test + fun `skal ikke finne søknad om den ikke eksiterer i repoet`() { + // Arrange + val journalpostId = "1" + + every { + mockKontantstøtteSøknadRepository.finnSøknadForJournalpost(journalpostId) + } returns null + + // Act + val resultat = + kontantstøtteSøknadService.finnDBKontantstøtteSøknadForJournalpost( + journalpostId = journalpostId, + ) + + // assert + assertThat(resultat).isNull() + } + } + + @Nested + inner class HentDBKontantstøtteSøknadForJournalpostTest { + @Test + fun `skal hente søknad`() { + // Arrange + val journalpostId = "1" + + val søknad = + DBKontantstøtteSøknad( + søknadJson = "", + fnr = "123", + ) + + every { + mockKontantstøtteSøknadRepository.finnSøknadForJournalpost(journalpostId) + } returns søknad + + // Act + val resultat = + kontantstøtteSøknadService.hentDBKontantstøtteSøknadForJournalpost( + journalpostId = journalpostId, + ) + + // assert + assertThat(resultat).isEqualTo(søknad) + } + + @Test + fun `skal kaste exception om søknaden ikke eksiterer i repoet`() { + // Arrange + val journalpostId = "1" + + every { + mockKontantstøtteSøknadRepository.finnSøknadForJournalpost(journalpostId) + } returns null + + // Act & assert + val exception = + assertThrows { + kontantstøtteSøknadService.hentDBKontantstøtteSøknadForJournalpost( + journalpostId = journalpostId, + ) + } + assertThat(exception.message).isEqualTo("Fant ikke søknad for journalpost $journalpostId") + } + } +} diff --git "a/src/test/kotlin/no/nav/familie/baks/mottak/s\303\270knad/kontantst\303\270tte/Kontantst\303\270tteS\303\270knadTestData.kt" "b/src/test/kotlin/no/nav/familie/baks/mottak/s\303\270knad/kontantst\303\270tte/Kontantst\303\270tteS\303\270knadTestData.kt" index 84f7d8c18..1ebdd58f3 100644 --- "a/src/test/kotlin/no/nav/familie/baks/mottak/s\303\270knad/kontantst\303\270tte/Kontantst\303\270tteS\303\270knadTestData.kt" +++ "b/src/test/kotlin/no/nav/familie/baks/mottak/s\303\270knad/kontantst\303\270tte/Kontantst\303\270tteS\303\270knadTestData.kt" @@ -1,7 +1,9 @@ package no.nav.familie.baks.mottak.søknad.kontantstøtte +import no.nav.familie.kontrakter.ks.søknad.v1.RegistrertBostedType import no.nav.familie.kontrakter.ks.søknad.v1.SIVILSTANDTYPE import no.nav.familie.kontrakter.ks.søknad.v1.Søknadsfelt +import no.nav.familie.kontrakter.ks.søknad.v4.Barn import no.nav.familie.kontrakter.ks.søknad.v4.Søker import no.nav.familie.kontrakter.ks.søknad.v5.KontantstøtteSøknad @@ -11,12 +13,15 @@ fun søknadsfelt( ): Søknadsfelt = Søknadsfelt(label = mapOf("nb" to label), verdi = mapOf("nb" to verdi)) object KontantstøtteSøknadTestData { - fun kontantstøtteSøknad(): KontantstøtteSøknad = + fun kontantstøtteSøknad( + søker: Søker = lagSøker(), + barn: List = listOf(lagBarn()), + ): KontantstøtteSøknad = KontantstøtteSøknad( kontraktVersjon = 5, antallEøsSteg = 2, - søker = lagSøker(), - barn = emptyList(), + søker = søker, + barn = barn, dokumentasjon = emptyList(), teksterTilPdf = emptyMap(), originalSpråk = "nb", @@ -31,10 +36,12 @@ object KontantstøtteSøknadTestData { finnesPersonMedAdressebeskyttelse = false, ) - private fun lagSøker(): Søker = + fun lagSøker( + fnr: String = "12345678910", + ): Søker = Søker( harEøsSteg = false, - ident = søknadsfelt("Fødselsnummer", "12345678910"), + ident = søknadsfelt("Fødselsnummer", fnr), navn = søknadsfelt("Navn", "Ola Norman"), statsborgerskap = søknadsfelt("Statsborgerskap", listOf("Norge")), adresse = søknadsfelt("Adresse", null), @@ -60,4 +67,40 @@ object KontantstøtteSøknadTestData { andreUtbetalinger = søknadsfelt("Andre utbetalinger", "NEI"), adresseISøkeperiode = søknadsfelt("Adresse i søknadsperiode", "Testgate 123"), ) + + fun lagBarn( + fnr: String = "12345678999", + ): Barn = + Barn( + harEøsSteg = true, + navn = søknadsfelt("Barnets fulle navn", "barn1"), + ident = søknadsfelt("Fødselsnummer", fnr), + registrertBostedType = søknadsfelt("Skal ha samme adresse", RegistrertBostedType.REGISTRERT_ANNEN_ADRESSE), + alder = søknadsfelt("alder", "4 år"), + utenlandsperioder = emptyList(), + teksterTilPdf = emptyMap(), + erFosterbarn = søknadsfelt("erFosterbarn", "JA"), + oppholderSegIInstitusjon = søknadsfelt("oppholderSegIInstitusjon", "JA"), + adresse = søknadsfelt("adresse", "Galtvort 123"), + andreForelder = null, + andreForelderErDød = null, + boddMindreEnn12MndINorge = søknadsfelt("boddMindreEnn12MndINorge", "JA"), + borFastMedSøker = søknadsfelt("borFastMedSøker", "JA"), + borMedAndreForelder = null, + borMedOmsorgsperson = null, + erAdoptert = søknadsfelt("erAdoptert", "NEI"), + erAsylsøker = søknadsfelt("erAsylsøker", "NEI"), + foreldreBorSammen = null, + harBarnehageplass = søknadsfelt("harBarnehageplass", "NEI"), + kontantstøtteFraAnnetEøsland = søknadsfelt("kontantstøtteFraAnnetEøsland", "NEI"), + mottarEllerMottokEøsKontantstøtte = null, + omsorgsperson = null, + planleggerÅBoINorge12Mnd = null, + pågåendeSøknadHvilketLand = null, + pågåendeSøknadFraAnnetEøsLand = null, + søkerDeltKontantstøtte = null, + søkersSlektsforhold = null, + søkersSlektsforholdSpesifisering = null, + utbetaltForeldrepengerEllerEngangsstønad = null, + ) } diff --git a/src/test/resources/pdl/mock-hentperson-adressebeskyttelse.json b/src/test/resources/pdl/mock-hentperson-adressebeskyttelse.json new file mode 100644 index 000000000..c3b81a6a9 --- /dev/null +++ b/src/test/resources/pdl/mock-hentperson-adressebeskyttelse.json @@ -0,0 +1,11 @@ +{ + "data": { + "person": { + "adressebeskyttelse": [ + { + "gradering": "UGRADERT" + } + ] + } + } +} \ No newline at end of file