-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Task og forvalterendepunkt for å oppdatere valutakurs for en behandli…
…ng fra et gitt tidspunkt (#4879) ### 💰 Hva skal gjøres, og hvorfor? Som en følge av en tidligere bug, der saksbehandler kunne legge inn kompetanse frem i tid, er det en behandling som har fått feil valutakurser som saksbehandler ikke får fikset. Oppretter endepunkt for å trigge automatisk oppdatering av valutakurser fra et gitt tidspunkt, slik at SB kan gå videre i behandlingen ### ✅ Checklist _Har du husket alle punktene i listen?_ - [ ] Jeg har testet mine endringer i henhold til akseptansekriteriene 🕵️ - [ ] Jeg har config- eller sql-endringer. I så fall, husk manuell deploy til miljø for å verifisere endringene. - [x] Jeg har skrevet tester. Hvis du ikke har skrevet tester, beskriv hvorfor under 👇 ### 💬 Ønsker du en muntlig gjennomgang? - [ ] Ja - [x] Nei
- Loading branch information
1 parent
70a8b66
commit 29ec8e3
Showing
5 changed files
with
194 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
57 changes: 57 additions & 0 deletions
57
src/main/kotlin/no/nav/familie/ba/sak/task/OppdaterValutakursTask.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
package no.nav.familie.ba.sak.task | ||
|
||
import com.fasterxml.jackson.module.kotlin.readValue | ||
import no.nav.familie.ba.sak.kjerne.behandling.BehandlingHentOgPersisterService | ||
import no.nav.familie.ba.sak.kjerne.behandling.domene.BehandlingStatus | ||
import no.nav.familie.ba.sak.kjerne.eøs.felles.BehandlingId | ||
import no.nav.familie.ba.sak.kjerne.eøs.valutakurs.AutomatiskOppdaterValutakursService | ||
import no.nav.familie.ba.sak.kjerne.steg.StegType | ||
import no.nav.familie.kontrakter.felles.objectMapper | ||
import no.nav.familie.prosessering.AsyncTaskStep | ||
import no.nav.familie.prosessering.TaskStepBeskrivelse | ||
import no.nav.familie.prosessering.domene.Task | ||
import org.springframework.stereotype.Service | ||
import java.time.YearMonth | ||
|
||
@Service | ||
@TaskStepBeskrivelse( | ||
taskStepType = OppdaterValutakursTask.TASK_STEP_TYPE, | ||
beskrivelse = "Oppdater valutakurs i behandling etter endringstidspunkt.", | ||
maxAntallFeil = 3, | ||
) | ||
class OppdaterValutakursTask( | ||
private val automatiskOppdaterValutakursService: AutomatiskOppdaterValutakursService, | ||
private val behandlingHentOgPersisterService: BehandlingHentOgPersisterService, | ||
) : AsyncTaskStep { | ||
override fun doTask(task: Task) { | ||
val dto: OppdaterValutakursTaskDTO = objectMapper.readValue(task.payload) | ||
|
||
val behandling = behandlingHentOgPersisterService.hent(dto.behandlingId) | ||
require(behandling.steg == StegType.BEHANDLINGSRESULTAT && behandling.aktiv && behandling.status == BehandlingStatus.UTREDES) { | ||
"Behandling ${dto.behandlingId} er ikke i behandlingresultatsteg." | ||
} | ||
|
||
automatiskOppdaterValutakursService.oppdaterValutakurserEtterEndringstidspunkt( | ||
behandlingId = BehandlingId(dto.behandlingId), | ||
endringstidspunkt = dto.endringstidspunkt, | ||
) | ||
} | ||
|
||
companion object { | ||
fun opprettTask( | ||
behandlingId: Long, | ||
endringstidspunkt: YearMonth, | ||
): Task = | ||
Task( | ||
type = TASK_STEP_TYPE, | ||
payload = objectMapper.writeValueAsString(OppdaterValutakursTaskDTO(behandlingId, endringstidspunkt)), | ||
) | ||
|
||
const val TASK_STEP_TYPE = "oppdaterValutakurs" | ||
} | ||
|
||
private data class OppdaterValutakursTaskDTO( | ||
val behandlingId: Long, | ||
val endringstidspunkt: YearMonth = YearMonth.now(), | ||
) | ||
} |
61 changes: 61 additions & 0 deletions
61
src/test/enhetstester/kotlin/no/nav/familie/ba/sak/internal/ForvalterControllerTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
package no.nav.familie.ba.sak.internal | ||
|
||
import io.mockk.every | ||
import io.mockk.justRun | ||
import io.mockk.mockk | ||
import io.mockk.slot | ||
import no.nav.familie.ba.sak.common.lagBehandling | ||
import no.nav.familie.ba.sak.sikkerhet.TilgangService | ||
import no.nav.familie.prosessering.domene.Task | ||
import no.nav.familie.prosessering.internal.TaskService | ||
import org.assertj.core.api.Assertions.assertThat | ||
import org.junit.jupiter.api.BeforeEach | ||
import org.junit.jupiter.api.Test | ||
import java.time.YearMonth | ||
|
||
class ForvalterControllerTest { | ||
val tilgangService: TilgangService = mockk() | ||
val taskService: TaskService = mockk() | ||
val forvalterController = | ||
ForvalterController( | ||
oppgaveRepository = mockk(), | ||
integrasjonClient = mockk(), | ||
restartAvSmåbarnstilleggService = mockk(), | ||
forvalterService = mockk(), | ||
ecbService = mockk(), | ||
testVerktøyService = mockk(), | ||
tilgangService = tilgangService, | ||
økonomiService = mockk(), | ||
opprettTaskService = mockk(), | ||
taskService = taskService, | ||
satskjøringRepository = mockk(), | ||
autovedtakMånedligValutajusteringService = mockk(), | ||
månedligValutajusteringScheduler = mockk(), | ||
fagsakService = mockk(), | ||
unleashNextMedContextService = mockk(), | ||
taskRepository = mockk(), | ||
behandlingHentOgPersisterService = mockk(), | ||
stønadsstatistikkService = mockk(), | ||
persongrunnlagService = mockk(), | ||
hentAlleIdenterTilPsysTask = mockk(), | ||
) | ||
|
||
@BeforeEach | ||
fun setUp() { | ||
justRun { tilgangService.verifiserHarTilgangTilHandling(any(), any()) } | ||
} | ||
|
||
@Test | ||
fun oppdaterValutakurs() { | ||
val behandling = lagBehandling() | ||
val endringstidspunkt = YearMonth.of(2024, 1) | ||
val task = slot<Task>() | ||
|
||
every { taskService.save(capture(task)) } returns Task(type = "", payload = "") | ||
|
||
forvalterController.oppdaterValutakurs(behandlingId = behandling.id, endringstidspunkt = endringstidspunkt) | ||
|
||
assertThat(task.captured.type).isEqualTo("oppdaterValutakurs") | ||
assertThat(task.captured.payload).isEqualTo("{\"behandlingId\":${behandling.id},\"endringstidspunkt\":\"$endringstidspunkt\"}") | ||
} | ||
} |
58 changes: 58 additions & 0 deletions
58
src/test/enhetstester/kotlin/no/nav/familie/ba/sak/task/OppdaterValutakursTaskTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
package no.nav.familie.ba.sak.task | ||
|
||
import io.mockk.every | ||
import io.mockk.just | ||
import io.mockk.mockk | ||
import io.mockk.runs | ||
import io.mockk.verify | ||
import no.nav.familie.ba.sak.common.lagBehandling | ||
import no.nav.familie.ba.sak.kjerne.behandling.BehandlingHentOgPersisterService | ||
import no.nav.familie.ba.sak.kjerne.eøs.felles.BehandlingId | ||
import no.nav.familie.ba.sak.kjerne.eøs.valutakurs.AutomatiskOppdaterValutakursService | ||
import no.nav.familie.ba.sak.kjerne.steg.StegType | ||
import org.junit.jupiter.api.Test | ||
import org.junit.jupiter.api.assertThrows | ||
import java.time.YearMonth | ||
|
||
class OppdaterValutakursTaskTest { | ||
private val behandlingHentOgPersisterService: BehandlingHentOgPersisterService = mockk() | ||
private val automatiskOppdaterValutakursService: AutomatiskOppdaterValutakursService = mockk() | ||
private val oppdaterValutakursTask = | ||
OppdaterValutakursTask( | ||
automatiskOppdaterValutakursService = automatiskOppdaterValutakursService, | ||
behandlingHentOgPersisterService = behandlingHentOgPersisterService, | ||
) | ||
|
||
@Test | ||
fun `skal kaste feil hvis behandling ikke er i behandlingsresultatsteg`() { | ||
val behandling = lagBehandling() | ||
val endringstidspunkt = YearMonth.of(2024, 1) | ||
|
||
every { behandlingHentOgPersisterService.hent(any()) } returns behandling | ||
|
||
assertThrows<IllegalArgumentException> { | ||
oppdaterValutakursTask.doTask(OppdaterValutakursTask.opprettTask(behandling.id, endringstidspunkt)) | ||
} | ||
} | ||
|
||
@Test | ||
fun `skal oppdatere valutakurs fra gitt dato`() { | ||
val behandling = | ||
lagBehandling( | ||
førsteSteg = StegType.BEHANDLINGSRESULTAT, | ||
) | ||
val endringstidspunkt = YearMonth.of(2024, 1) | ||
|
||
every { behandlingHentOgPersisterService.hent(any()) } returns behandling | ||
every { automatiskOppdaterValutakursService.oppdaterValutakurserEtterEndringstidspunkt(any<BehandlingId>(), any(), any()) } just runs | ||
|
||
oppdaterValutakursTask.doTask(OppdaterValutakursTask.opprettTask(behandling.id, endringstidspunkt)) | ||
|
||
verify(exactly = 1) { | ||
automatiskOppdaterValutakursService.oppdaterValutakurserEtterEndringstidspunkt( | ||
behandlingId = BehandlingId(behandling.id), | ||
endringstidspunkt = endringstidspunkt, | ||
) | ||
} | ||
} | ||
} |