From 747c9aa6647714d5b28e0a81964856e58a548ba8 Mon Sep 17 00:00:00 2001 From: Martine Enger Date: Wed, 8 Mar 2023 14:47:00 +0100 Subject: [PATCH 1/4] =?UTF-8?q?f=20Hent=20perioder=20basert=20p=C3=A5=20al?= =?UTF-8?q?le=20f=C3=B8dselsnummer=20p=C3=A5=20en=20person,=20ikke=20bare?= =?UTF-8?q?=20gjeldende?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ArbeidssokerperiodeRepository.kt | 1 + .../ArbeidssokerperiodeService.kt | 6 ++++++ .../perioder/ArbeidssokerService.kt | 2 +- .../ArbeidssokerperiodeRepositoryImpl.kt | 10 +++++++++ ...okerServiceHentArbeidssokerperioderTest.kt | 4 ++-- .../ArbeidssokerperiodeRepositoryImplTest.kt | 21 +++++++++++++++++++ 6 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeRepository.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeRepository.kt index 84033505d..0c5427c9d 100644 --- a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeRepository.kt +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeRepository.kt @@ -7,4 +7,5 @@ interface ArbeidssokerperiodeRepository { fun startPeriode(foedselsnummer: Foedselsnummer, fraDato: LocalDateTime) fun avsluttPeriode(foedselsnummer: Foedselsnummer, tilDato: LocalDateTime) fun hentPerioder(foedselsnummer: Foedselsnummer): List + fun hentPerioder(gjeldendeFoedselsnummer: Foedselsnummer, historiskeFoedselsnummer: List): List } diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeService.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeService.kt index 89592428f..7711d4d2a 100644 --- a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeService.kt +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeService.kt @@ -1,6 +1,7 @@ package no.nav.fo.veilarbregistrering.arbeidssoker import no.nav.fo.veilarbregistrering.arbeidssoker.formidlingsgruppe.FormidlingsgruppeEndretEvent +import no.nav.fo.veilarbregistrering.bruker.Bruker import no.nav.fo.veilarbregistrering.bruker.Foedselsnummer import no.nav.fo.veilarbregistrering.bruker.Periode import java.time.LocalDateTime @@ -31,6 +32,11 @@ class ArbeidssokerperiodeService(val repository: ArbeidssokerperiodeRepository) return repository.hentPerioder(foedselsnummer).map { Periode(it.fra.toLocalDate(), it.til?.toLocalDate()) } } + fun hentPerioder(bruker: Bruker): List { + return repository.hentPerioder(bruker.gjeldendeFoedselsnummer, bruker.historiskeFoedselsnummer) + .map { Periode(it.fra.toLocalDate(), it.til?.toLocalDate()) } + } + private fun harAktivPeriode(foedselsnummer: Foedselsnummer): Boolean { return harAktivPeriode(repository.hentPerioder(foedselsnummer)) } diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/perioder/ArbeidssokerService.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/perioder/ArbeidssokerService.kt index fba914958..f26e23133 100644 --- a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/perioder/ArbeidssokerService.kt +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/perioder/ArbeidssokerService.kt @@ -11,7 +11,7 @@ class ArbeidssokerService( ) { fun hentArbeidssokerperioder(bruker: Bruker, forespurtPeriode: Periode?): Arbeidssokerperioder { - val lagredePerioder = arbeidssokerperiodeService.hentPerioder(bruker.gjeldendeFoedselsnummer) + val lagredePerioder = arbeidssokerperiodeService.hentPerioder(bruker) forespurtPeriode?.let { return Arbeidssokerperioder.of(lagredePerioder.filter { it.overlapperMed(forespurtPeriode) }.map { Arbeidssokerperiode(it) }) diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImpl.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImpl.kt index 7dc9f5470..f7b6814b1 100644 --- a/src/main/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImpl.kt +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImpl.kt @@ -45,6 +45,16 @@ class ArbeidssokerperiodeRepositoryImpl(private val db: NamedParameterJdbcTempla return db.query(sql, params, arbeidssokerperiodeMapper) } + override fun hentPerioder( + gjeldendeFoedselsnummer: Foedselsnummer, + historiskeFoedselsnummer: List + ): List { + val foedselsnummerList = historiskeFoedselsnummer + gjeldendeFoedselsnummer + val params = mapOf("foedselsnummerList" to foedselsnummerList.map(Foedselsnummer::stringValue)) + val sql = "SELECT * FROM $ARBEIDSSOKERPERIODE_TABELL WHERE foedselsnummer IN (:foedselsnummerList)" + return db.query(sql, params, arbeidssokerperiodeMapper) + } + companion object { const val ARBEIDSSOKERPERIODE_TABELL = "arbeidssokerperiode" private val arbeidssokerperiodeMapper = RowMapper { rs, _ -> diff --git a/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/perioder/ArbeidssokerServiceHentArbeidssokerperioderTest.kt b/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/perioder/ArbeidssokerServiceHentArbeidssokerperioderTest.kt index da271a228..f004aa8f2 100644 --- a/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/perioder/ArbeidssokerServiceHentArbeidssokerperioderTest.kt +++ b/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/perioder/ArbeidssokerServiceHentArbeidssokerperioderTest.kt @@ -23,7 +23,7 @@ class ArbeidssokerServiceHentArbeidssokerperioderTest { arbeidssokerperiodeService ) - every { arbeidssokerperiodeService.hentPerioder(any()) } returns emptyList() + every { arbeidssokerperiodeService.hentPerioder(any()) } returns emptyList() } @Test @@ -32,7 +32,7 @@ class ArbeidssokerServiceHentArbeidssokerperioderTest { LocalDate.of(2020, 1, 2), LocalDate.of(2020, 5, 1) ) - every { arbeidssokerperiodeService.hentPerioder(BRUKER_3.gjeldendeFoedselsnummer) } returns finnArbeissokerperioder(BRUKER_3.gjeldendeFoedselsnummer) + every { arbeidssokerperiodeService.hentPerioder(BRUKER_3) } returns finnArbeissokerperioder(BRUKER_3.gjeldendeFoedselsnummer) val arbeidssokerperiodes = arbeidssokerService.hentArbeidssokerperioder(BRUKER_3, forespurtPeriode) assertThat(arbeidssokerperiodes.eldsteFoerst()).containsExactly( ARBEIDSSOKERPERIODE_1, diff --git a/src/test/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImplTest.kt b/src/test/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImplTest.kt index f2e4a9079..5f3985d9d 100644 --- a/src/test/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImplTest.kt +++ b/src/test/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImplTest.kt @@ -1,5 +1,8 @@ package no.nav.fo.veilarbregistrering.db.arbeidssoker +import no.nav.fo.veilarbregistrering.bruker.AktorId +import no.nav.fo.veilarbregistrering.bruker.Bruker +import no.nav.fo.veilarbregistrering.bruker.Foedselsnummer import no.nav.fo.veilarbregistrering.bruker.FoedselsnummerTestdataBuilder.aremark import no.nav.fo.veilarbregistrering.config.db.DatabaseConfig import no.nav.fo.veilarbregistrering.config.db.RepositoryConfig @@ -36,4 +39,22 @@ internal class ArbeidssokerperiodeRepositoryImplTest(@Autowired private val arbe val arbeidssokerperioder = arbeidssokerperiodeRepositoryImpl.hentPerioder(aremark()) assertNotEquals(null, arbeidssokerperioder.first().til) } + + @Test + fun `skal hente alle perioder for en person med historiske og gjeldende fødselsnummer`() { + val historiskeFoedselsnummer = listOf(Foedselsnummer("12345678911"), Foedselsnummer("12345678910")) + val bruker = Bruker(aremark(), AktorId("1234"), historiskeFoedselsnummer) + arbeidssokerperiodeRepositoryImpl.startPeriode(historiskeFoedselsnummer.first(), LocalDateTime.now().minusYears(5)) + arbeidssokerperiodeRepositoryImpl.avsluttPeriode(historiskeFoedselsnummer.first(), LocalDateTime.now().minusYears(5).plusMonths(7)) + + arbeidssokerperiodeRepositoryImpl.startPeriode(historiskeFoedselsnummer.last(), LocalDateTime.now().minusYears(3)) + arbeidssokerperiodeRepositoryImpl.avsluttPeriode(historiskeFoedselsnummer.last(), LocalDateTime.now().minusYears(3).plusMonths(7)) + + arbeidssokerperiodeRepositoryImpl.startPeriode(aremark(), LocalDateTime.now().minusDays(21)) + + val arbeidssokerperioder = arbeidssokerperiodeRepositoryImpl.hentPerioder(bruker.gjeldendeFoedselsnummer, bruker.historiskeFoedselsnummer) + + assertEquals(3, arbeidssokerperioder.size) + + } } \ No newline at end of file From b3c55c91cbda2978bc84a6a8fb5ce4a72bed28e5 Mon Sep 17 00:00:00 2001 From: Martine Enger Date: Thu, 9 Mar 2023 10:23:57 +0100 Subject: [PATCH 2/4] =?UTF-8?q?f=20St=C3=B8tte=20for=20=C3=A5=20avslutte?= =?UTF-8?q?=20periode=20for=20en=20person=20med=20flere=20identer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit En person som har byttet ident (feks fra D-nr til fødselsnummer), kan ha startet en periode på sin tidligere ident. Når denne personen skal meldes ut av arbeidssøkerregisteret, må vi hente alle perioder for denne personens identer og finne den aktive perioden uavhengig av ident. Så avslutter vi denne perioden selv dersom den står oppført på tidligere fnr. --- .../ArbeidssokerperiodeRepository.kt | 1 + .../ArbeidssokerperiodeService.kt | 29 +++++++++++----- .../FormidlingsgruppeMottakService.kt | 4 +-- .../veilarbregistrering/bruker/UserService.kt | 2 ++ .../config/ServiceBeansConfig.kt | 9 ++--- .../ArbeidssokerperiodeRepositoryImpl.kt | 14 ++++++++ .../ArbeidssokerperiodeServiceTest.kt | 34 ++++++++++++------- .../FormidlingsgruppeMottakServiceTest.kt | 1 - .../ArbeidssokerperiodeRepositoryImplTest.kt | 19 +++++++++-- 9 files changed, 82 insertions(+), 31 deletions(-) diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeRepository.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeRepository.kt index 0c5427c9d..ce382135b 100644 --- a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeRepository.kt +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeRepository.kt @@ -6,6 +6,7 @@ import java.time.LocalDateTime interface ArbeidssokerperiodeRepository { fun startPeriode(foedselsnummer: Foedselsnummer, fraDato: LocalDateTime) fun avsluttPeriode(foedselsnummer: Foedselsnummer, tilDato: LocalDateTime) + fun avsluttPeriode(id: Int, tilDato: LocalDateTime) fun hentPerioder(foedselsnummer: Foedselsnummer): List fun hentPerioder(gjeldendeFoedselsnummer: Foedselsnummer, historiskeFoedselsnummer: List): List } diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeService.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeService.kt index 7711d4d2a..d1828c95a 100644 --- a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeService.kt +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeService.kt @@ -4,9 +4,14 @@ import no.nav.fo.veilarbregistrering.arbeidssoker.formidlingsgruppe.Formidlingsg import no.nav.fo.veilarbregistrering.bruker.Bruker import no.nav.fo.veilarbregistrering.bruker.Foedselsnummer import no.nav.fo.veilarbregistrering.bruker.Periode +import no.nav.fo.veilarbregistrering.bruker.UserService +import no.nav.fo.veilarbregistrering.log.logger import java.time.LocalDateTime -class ArbeidssokerperiodeService(val repository: ArbeidssokerperiodeRepository) { +class ArbeidssokerperiodeService( + private val repository: ArbeidssokerperiodeRepository, + private val userService: UserService +) { fun startPeriode(foedselsnummer: Foedselsnummer) { if (harAktivPeriode(foedselsnummer)) { @@ -21,15 +26,15 @@ class ArbeidssokerperiodeService(val repository: ArbeidssokerperiodeRepository) return } - if (!harAktivPeriode(formidlingsgruppeEndretEvent.foedselsnummer)) { - return - } + val bruker = userService.finnBrukerGjennomPdlForSystemkontekst(formidlingsgruppeEndretEvent.foedselsnummer) + val aktivPeriode = hentAktivPeriode(bruker) ?: return - repository.avsluttPeriode(foedselsnummer = formidlingsgruppeEndretEvent.foedselsnummer, LocalDateTime.now()) - } + if (aktivPeriode.foedselsnummer != bruker.gjeldendeFoedselsnummer) { + // TODO skal vi i dette tilfellet oppdatere fødselsnummeret på perioden? + logger.warn("Avslutter periode for person som har et annet gjeldende fødselsnummer enn den aktive perioden") + } - fun hentPerioder(foedselsnummer: Foedselsnummer): List { - return repository.hentPerioder(foedselsnummer).map { Periode(it.fra.toLocalDate(), it.til?.toLocalDate()) } + repository.avsluttPeriode(id = aktivPeriode.id, LocalDateTime.now()) } fun hentPerioder(bruker: Bruker): List { @@ -48,4 +53,12 @@ class ArbeidssokerperiodeService(val repository: ArbeidssokerperiodeRepository) return perioder.first().til == null } + + private fun hentAktivPeriode(bruker: Bruker): ArbeidssokerperiodeDto? { + val perioder = repository.hentPerioder(bruker.gjeldendeFoedselsnummer, bruker.historiskeFoedselsnummer) + + if (perioder.isEmpty()) return null + + return perioder.find { it.til == null } + } } diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/formidlingsgruppe/FormidlingsgruppeMottakService.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/formidlingsgruppe/FormidlingsgruppeMottakService.kt index 8c40aec08..d380e6325 100644 --- a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/formidlingsgruppe/FormidlingsgruppeMottakService.kt +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/formidlingsgruppe/FormidlingsgruppeMottakService.kt @@ -1,9 +1,8 @@ package no.nav.fo.veilarbregistrering.arbeidssoker.formidlingsgruppe -import no.nav.common.featuretoggle.UnleashClient import no.nav.fo.veilarbregistrering.aktorIdCache.AktorIdCacheService -import no.nav.fo.veilarbregistrering.arbeidssoker.ArbeidssokerperiodeService import no.nav.fo.veilarbregistrering.arbeidssoker.Arbeidssoker +import no.nav.fo.veilarbregistrering.arbeidssoker.ArbeidssokerperiodeService import no.nav.fo.veilarbregistrering.arbeidssoker.perioder.ArbeidssokerperiodeAvsluttetProducer import no.nav.fo.veilarbregistrering.arbeidssoker.perioder.PopulerArbeidssokerperioderService import no.nav.fo.veilarbregistrering.bruker.Foedselsnummer @@ -18,7 +17,6 @@ class FormidlingsgruppeMottakService( private val aktorIdCacheService: AktorIdCacheService, private val populerArbeidssokerperioderService: PopulerArbeidssokerperioderService, private val arbeidssokerperiodeAvsluttetProducer: ArbeidssokerperiodeAvsluttetProducer, - private val unleashClient: UnleashClient, private val arbeidssokerperiodeService: ArbeidssokerperiodeService ) { diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/bruker/UserService.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/bruker/UserService.kt index 2b14130f2..3c8c12d68 100644 --- a/src/main/kotlin/no/nav/fo/veilarbregistrering/bruker/UserService.kt +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/bruker/UserService.kt @@ -36,6 +36,8 @@ class UserService( } fun finnBrukerGjennomPdl(fnr: Foedselsnummer): Bruker = map(pdlOppslagGateway.hentIdenter(fnr)) + fun finnBrukerGjennomPdlForSystemkontekst(fnr: Foedselsnummer): Bruker = map(pdlOppslagGateway.hentIdenter(fnr, true)) + fun hentBruker(aktorId: AktorId): Bruker = map(pdlOppslagGateway.hentIdenter(aktorId)) fun getEnhetIdFromUrlOrThrow(): String = diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/config/ServiceBeansConfig.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/config/ServiceBeansConfig.kt index dc959611e..efa65ffba 100644 --- a/src/main/kotlin/no/nav/fo/veilarbregistrering/config/ServiceBeansConfig.kt +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/config/ServiceBeansConfig.kt @@ -329,7 +329,6 @@ class ServiceBeansConfig { aktorIdCacheService: AktorIdCacheService, populerArbeidssokerperioderService: PopulerArbeidssokerperioderService, arbeidssokerperiodeAvsluttetProducer: ArbeidssokerperiodeAvsluttetProducer, - unleashClient: UnleashClient, arbeidssokerperiodeService: ArbeidssokerperiodeService ): FormidlingsgruppeMottakService { return FormidlingsgruppeMottakService( @@ -337,7 +336,6 @@ class ServiceBeansConfig { aktorIdCacheService, populerArbeidssokerperioderService, arbeidssokerperiodeAvsluttetProducer, - unleashClient, arbeidssokerperiodeService ) } @@ -439,7 +437,10 @@ class ServiceBeansConfig { } @Bean - fun arbeidssokerperiodeService(arbeidssokerperiodeRepository: ArbeidssokerperiodeRepository): ArbeidssokerperiodeService { - return ArbeidssokerperiodeService(arbeidssokerperiodeRepository) + fun arbeidssokerperiodeService( + arbeidssokerperiodeRepository: ArbeidssokerperiodeRepository, + userService: UserService + ): ArbeidssokerperiodeService { + return ArbeidssokerperiodeService(arbeidssokerperiodeRepository, userService) } } diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImpl.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImpl.kt index f7b6814b1..5fa7f45dd 100644 --- a/src/main/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImpl.kt +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImpl.kt @@ -39,6 +39,20 @@ class ArbeidssokerperiodeRepositoryImpl(private val db: NamedParameterJdbcTempla } } + override fun avsluttPeriode(id: Int, tilDato: LocalDateTime) { + val params = mapOf( + "id" to id, + "tilOgMed" to tilDato + ) + val sql = "UPDATE $ARBEIDSSOKERPERIODE_TABELL SET til_og_med = :tilOgMed WHERE id = :id" + + try { + db.update(sql, params) + } catch (e: DataIntegrityViolationException) { + throw DataIntegrityViolationException("Avslutning av arbeidssøkerperiode feilet", e) + } + } + override fun hentPerioder(foedselsnummer: Foedselsnummer): List { val params = mapOf("foedselsnummer" to foedselsnummer.foedselsnummer) val sql = "SELECT * FROM $ARBEIDSSOKERPERIODE_TABELL WHERE foedselsnummer = :foedselsnummer ORDER BY id DESC" diff --git a/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeServiceTest.kt b/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeServiceTest.kt index 1dba9b209..c4bcb20e0 100644 --- a/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeServiceTest.kt +++ b/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeServiceTest.kt @@ -1,10 +1,11 @@ package no.nav.fo.veilarbregistrering.arbeidssoker -import io.mockk.every -import io.mockk.mockk -import io.mockk.verify +import io.mockk.* import no.nav.fo.veilarbregistrering.arbeidssoker.formidlingsgruppe.FormidlingsgruppeEndretEventTestdataBuilder.formidlingsgruppeEndret +import no.nav.fo.veilarbregistrering.bruker.AktorId +import no.nav.fo.veilarbregistrering.bruker.Bruker import no.nav.fo.veilarbregistrering.bruker.Foedselsnummer +import no.nav.fo.veilarbregistrering.bruker.UserService import org.junit.jupiter.api.Assertions.assertThrows import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test @@ -13,11 +14,13 @@ import java.time.LocalDateTime internal class ArbeidssokerperiodeServiceTest { private lateinit var repository: ArbeidssokerperiodeRepository private lateinit var service: ArbeidssokerperiodeService + private lateinit var userService: UserService @BeforeEach fun setUp () { repository = mockk() - service = ArbeidssokerperiodeService(repository) + userService = mockk() + service = ArbeidssokerperiodeService(repository, userService) } @Test @@ -34,7 +37,7 @@ internal class ArbeidssokerperiodeServiceTest { fun `starter periode for bruker`() { val fnr = Foedselsnummer("42") every { repository.hentPerioder(any()) } returns emptyList() - every { repository.startPeriode(any(), any()) } returns Unit + every { repository.startPeriode(any(), any()) } just Runs service.startPeriode(fnr) @@ -43,29 +46,34 @@ internal class ArbeidssokerperiodeServiceTest { @Test fun `gjør ingenting hvis ikke formidlingsgruppe er ISERV eller IARBS`() { - every { repository.avsluttPeriode(any(), any()) } returns Unit + every { repository.avsluttPeriode(any(), any()) } just Runs service.behandleFormidlingsgruppeEvent(formidlingsgruppeEndretEvent = formidlingsgruppeEndret(LocalDateTime.now(), formidlingsgruppe = "ARBS")) - verify(exactly = 0) { repository.avsluttPeriode(any(), any()) } + verify(exactly = 0) { repository.avsluttPeriode(any(), any()) } } @Test fun `gjør ingenting hvis ikke bruker har en aktiv periode` () { - every { repository.avsluttPeriode(any(), any()) } returns Unit - every { repository.hentPerioder(any())} returns emptyList() + every { userService.finnBrukerGjennomPdlForSystemkontekst(any()) } returns + Bruker(Foedselsnummer("12345678910"), AktorId("1234"), emptyList()) + every { repository.avsluttPeriode(any(), any()) } just Runs + every { repository.hentPerioder(any(), any()) } returns emptyList() service.behandleFormidlingsgruppeEvent(formidlingsgruppeEndretEvent = formidlingsgruppeEndret(LocalDateTime.now(), formidlingsgruppe = "ISERV")) - verify(exactly = 0) { repository.avsluttPeriode(any(), any()) } + verify(exactly = 0) { repository.avsluttPeriode(any(), any()) } } @Test fun `avslutte periode for bruker`() { - every { repository.avsluttPeriode(any(), any()) } returns Unit - every { repository.hentPerioder(Foedselsnummer("12345678910"))} returns listOf(ArbeidssokerperiodeDto(1, Foedselsnummer("12345678910"), LocalDateTime.now())) + every { userService.finnBrukerGjennomPdlForSystemkontekst(any()) } returns + Bruker(Foedselsnummer("12345678910"), AktorId("1234"), emptyList()) + every { repository.avsluttPeriode(any(), any()) } just Runs + every { repository.hentPerioder(Foedselsnummer("12345678910"), any()) } returns + listOf(ArbeidssokerperiodeDto(1, Foedselsnummer("12345678910"), LocalDateTime.now())) service.behandleFormidlingsgruppeEvent(formidlingsgruppeEndretEvent = formidlingsgruppeEndret(LocalDateTime.now(), formidlingsgruppe = "ISERV")) - verify(exactly = 1) { repository.avsluttPeriode(Foedselsnummer("12345678910"), any()) } + verify(exactly = 1) { repository.avsluttPeriode(any(), any()) } } } diff --git a/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/formidlingsgruppe/FormidlingsgruppeMottakServiceTest.kt b/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/formidlingsgruppe/FormidlingsgruppeMottakServiceTest.kt index d3d91b0a4..1574963fd 100644 --- a/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/formidlingsgruppe/FormidlingsgruppeMottakServiceTest.kt +++ b/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/formidlingsgruppe/FormidlingsgruppeMottakServiceTest.kt @@ -21,7 +21,6 @@ class FormidlingsgruppeMottakServiceTest { mockk(relaxed = true), mockk(relaxed = true), mockk(relaxed = true), - mockk(relaxed = true), mockk(relaxed = true) ) } diff --git a/src/test/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImplTest.kt b/src/test/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImplTest.kt index 5f3985d9d..84a37d588 100644 --- a/src/test/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImplTest.kt +++ b/src/test/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImplTest.kt @@ -14,7 +14,7 @@ import org.springframework.boot.test.autoconfigure.jdbc.JdbcTest import org.springframework.test.context.ContextConfiguration import java.time.LocalDateTime import kotlin.test.assertEquals -import kotlin.test.assertNotEquals +import kotlin.test.assertNotNull @JdbcTest @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) @@ -37,7 +37,22 @@ internal class ArbeidssokerperiodeRepositoryImplTest(@Autowired private val arbe arbeidssokerperiodeRepositoryImpl.startPeriode(aremark(), LocalDateTime.now()) arbeidssokerperiodeRepositoryImpl.avsluttPeriode(aremark(), LocalDateTime.now()) val arbeidssokerperioder = arbeidssokerperiodeRepositoryImpl.hentPerioder(aremark()) - assertNotEquals(null, arbeidssokerperioder.first().til) + assertNotNull(arbeidssokerperioder.first().til) + } + + @Test + fun `skal avslutte periode for id`() { + val gjeldendeFnr = aremark() + val start = LocalDateTime.now().minusYears(3) + val slutt = LocalDateTime.now() + arbeidssokerperiodeRepositoryImpl.startPeriode(gjeldendeFnr, start) + val aktivPeriode = arbeidssokerperiodeRepositoryImpl.hentPerioder(gjeldendeFnr, emptyList()) + arbeidssokerperiodeRepositoryImpl.avsluttPeriode(aktivPeriode.first().id, slutt) + val arbeidssokerperioder = arbeidssokerperiodeRepositoryImpl.hentPerioder(gjeldendeFnr, emptyList()) + + assertEquals(1, arbeidssokerperioder.size) + assertEquals(start, arbeidssokerperioder.first().fra) + assertEquals(slutt, arbeidssokerperioder.first().til) } @Test From 5b85baa088ba149d1aeb9e74e8b548a4c8f5a86a Mon Sep 17 00:00:00 2001 From: Martine Enger Date: Thu, 9 Mar 2023 11:51:25 +0100 Subject: [PATCH 3/4] =?UTF-8?q?f=20Sjekk=20for=20aktiv=20periode=20p=C3=A5?= =?UTF-8?q?=20tvers=20av=20alle=20brukers=20identer=20f=C3=B8r=20start=20a?= =?UTF-8?q?v=20ny=20periode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ArbeidssokerperiodeService.kt | 19 +++++-------------- .../ordinaer/BrukerRegistreringService.kt | 2 +- .../reaktivering/ReaktiveringBrukerService.kt | 3 +-- .../ArbeidssokerperiodeServiceTest.kt | 12 ++++++------ 4 files changed, 13 insertions(+), 23 deletions(-) diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeService.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeService.kt index d1828c95a..3e1b8e04b 100644 --- a/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeService.kt +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeService.kt @@ -2,7 +2,6 @@ package no.nav.fo.veilarbregistrering.arbeidssoker import no.nav.fo.veilarbregistrering.arbeidssoker.formidlingsgruppe.FormidlingsgruppeEndretEvent import no.nav.fo.veilarbregistrering.bruker.Bruker -import no.nav.fo.veilarbregistrering.bruker.Foedselsnummer import no.nav.fo.veilarbregistrering.bruker.Periode import no.nav.fo.veilarbregistrering.bruker.UserService import no.nav.fo.veilarbregistrering.log.logger @@ -13,12 +12,12 @@ class ArbeidssokerperiodeService( private val userService: UserService ) { - fun startPeriode(foedselsnummer: Foedselsnummer) { - if (harAktivPeriode(foedselsnummer)) { + fun startPeriode(bruker: Bruker) { + if (harAktivPeriode(bruker)) { throw IllegalStateException("Bruker har allerede en aktiv periode") } - repository.startPeriode(foedselsnummer, LocalDateTime.now()) + repository.startPeriode(bruker.gjeldendeFoedselsnummer, LocalDateTime.now()) } fun behandleFormidlingsgruppeEvent(formidlingsgruppeEndretEvent: FormidlingsgruppeEndretEvent) { @@ -42,16 +41,8 @@ class ArbeidssokerperiodeService( .map { Periode(it.fra.toLocalDate(), it.til?.toLocalDate()) } } - private fun harAktivPeriode(foedselsnummer: Foedselsnummer): Boolean { - return harAktivPeriode(repository.hentPerioder(foedselsnummer)) - } - - private fun harAktivPeriode(perioder: List): Boolean { - if (perioder.isEmpty()) { - return false - } - - return perioder.first().til == null + private fun harAktivPeriode(bruker: Bruker): Boolean { + return hentAktivPeriode(bruker) != null } private fun hentAktivPeriode(bruker: Bruker): ArbeidssokerperiodeDto? { diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/registrering/ordinaer/BrukerRegistreringService.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/registrering/ordinaer/BrukerRegistreringService.kt index 0eb8e5e42..c15078fcc 100644 --- a/src/main/kotlin/no/nav/fo/veilarbregistrering/registrering/ordinaer/BrukerRegistreringService.kt +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/registrering/ordinaer/BrukerRegistreringService.kt @@ -150,7 +150,7 @@ open class BrukerRegistreringService( } try { - arbeidssokerperiodeService.startPeriode(bruker.gjeldendeFoedselsnummer) + arbeidssokerperiodeService.startPeriode(bruker) } catch (e: RuntimeException) { LOG.error("Feil ved starting av ny arbeidssøkerperiode", e) } diff --git a/src/main/kotlin/no/nav/fo/veilarbregistrering/registrering/reaktivering/ReaktiveringBrukerService.kt b/src/main/kotlin/no/nav/fo/veilarbregistrering/registrering/reaktivering/ReaktiveringBrukerService.kt index 59eca9dce..827ce9a74 100644 --- a/src/main/kotlin/no/nav/fo/veilarbregistrering/registrering/reaktivering/ReaktiveringBrukerService.kt +++ b/src/main/kotlin/no/nav/fo/veilarbregistrering/registrering/reaktivering/ReaktiveringBrukerService.kt @@ -11,7 +11,6 @@ import no.nav.fo.veilarbregistrering.oppfolging.OppfolgingGateway import no.nav.fo.veilarbregistrering.registrering.Tilstandsfeil import no.nav.fo.veilarbregistrering.registrering.bruker.BrukerTilstandService import no.nav.fo.veilarbregistrering.registrering.bruker.RegistreringType -import no.nav.fo.veilarbregistrering.registrering.ordinaer.BrukerRegistreringService import org.springframework.transaction.annotation.Transactional open class ReaktiveringBrukerService( @@ -39,7 +38,7 @@ open class ReaktiveringBrukerService( oppfolgingGateway.reaktiverBruker(bruker.gjeldendeFoedselsnummer) try { - arbeidssokerperiodeService.startPeriode(bruker.gjeldendeFoedselsnummer) + arbeidssokerperiodeService.startPeriode(bruker) } catch (e: RuntimeException) { LOG.error("Feil ved starting av ny arbeidssøkerperiode", e) } diff --git a/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeServiceTest.kt b/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeServiceTest.kt index c4bcb20e0..73b9f671c 100644 --- a/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeServiceTest.kt +++ b/src/test/kotlin/no/nav/fo/veilarbregistrering/arbeidssoker/ArbeidssokerperiodeServiceTest.kt @@ -26,22 +26,22 @@ internal class ArbeidssokerperiodeServiceTest { @Test fun `kaster exception hvis bruker har en aktiv periode`() { val fnr = Foedselsnummer("42") - every { repository.hentPerioder(any()) } returns listOf(ArbeidssokerperiodeDto(1, fnr, LocalDateTime.now())) + every { repository.hentPerioder(any(), any()) } returns listOf(ArbeidssokerperiodeDto(1, fnr, LocalDateTime.now())) assertThrows(IllegalStateException::class.java) { - service.startPeriode(fnr) + service.startPeriode(Bruker(fnr, AktorId("1234"), emptyList())) } } @Test fun `starter periode for bruker`() { - val fnr = Foedselsnummer("42") - every { repository.hentPerioder(any()) } returns emptyList() + val bruker = Bruker(Foedselsnummer("42"), AktorId("1234"), emptyList()) + every { repository.hentPerioder(any(), any()) } returns emptyList() every { repository.startPeriode(any(), any()) } just Runs - service.startPeriode(fnr) + service.startPeriode(bruker) - verify(exactly = 1) { repository.startPeriode(foedselsnummer = fnr, any())} + verify(exactly = 1) { repository.startPeriode(bruker.gjeldendeFoedselsnummer, any()) } } @Test From 8bb0ad6b9cc23fa1b96088e399bf284bd5cc1675 Mon Sep 17 00:00:00 2001 From: Martine Enger Date: Thu, 9 Mar 2023 11:56:56 +0100 Subject: [PATCH 4/4] =?UTF-8?q?Trunker=20timestamps=20i=20assert=20for=20?= =?UTF-8?q?=C3=A5=20slippe=20ustabilitet=20ifm=20presisjon=20p=C3=A5=20lin?= =?UTF-8?q?ux=20vs=20postgres?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/arbeidssoker/ArbeidssokerperiodeRepositoryImplTest.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImplTest.kt b/src/test/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImplTest.kt index 84a37d588..47839878f 100644 --- a/src/test/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImplTest.kt +++ b/src/test/kotlin/no/nav/fo/veilarbregistrering/db/arbeidssoker/ArbeidssokerperiodeRepositoryImplTest.kt @@ -13,6 +13,7 @@ import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabas import org.springframework.boot.test.autoconfigure.jdbc.JdbcTest import org.springframework.test.context.ContextConfiguration import java.time.LocalDateTime +import java.time.temporal.ChronoUnit import kotlin.test.assertEquals import kotlin.test.assertNotNull @@ -51,8 +52,8 @@ internal class ArbeidssokerperiodeRepositoryImplTest(@Autowired private val arbe val arbeidssokerperioder = arbeidssokerperiodeRepositoryImpl.hentPerioder(gjeldendeFnr, emptyList()) assertEquals(1, arbeidssokerperioder.size) - assertEquals(start, arbeidssokerperioder.first().fra) - assertEquals(slutt, arbeidssokerperioder.first().til) + assertEquals(start.truncatedTo(ChronoUnit.MILLIS), arbeidssokerperioder.first().fra.truncatedTo(ChronoUnit.MILLIS)) + assertEquals(slutt.truncatedTo(ChronoUnit.MILLIS), arbeidssokerperioder.first().til?.truncatedTo(ChronoUnit.MILLIS)) } @Test