From d56f603c72b833c610769a9e8a934278f368ed38 Mon Sep 17 00:00:00 2001 From: Uy Quang Nguyen Date: Sat, 30 Sep 2023 16:57:13 +0200 Subject: [PATCH 1/3] master_til_main --- .github/workflows/build-and-deploy-preprod.yml | 2 +- .github/workflows/build-and-deploy-prod.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-and-deploy-preprod.yml b/.github/workflows/build-and-deploy-preprod.yml index 6924e189..f9bc4764 100644 --- a/.github/workflows/build-and-deploy-preprod.yml +++ b/.github/workflows/build-and-deploy-preprod.yml @@ -2,7 +2,7 @@ name: Build-Deploy-Preprod on: push: branches-ignore: - - 'master' + - 'main' workflow_dispatch: env: diff --git a/.github/workflows/build-and-deploy-prod.yml b/.github/workflows/build-and-deploy-prod.yml index 6ee3b6a7..039324cd 100644 --- a/.github/workflows/build-and-deploy-prod.yml +++ b/.github/workflows/build-and-deploy-prod.yml @@ -2,7 +2,7 @@ name: Build-Deploy-Prod on: push: branches: - - 'master' + - 'main' env: IMAGE: ghcr.io/navikt/familie-oppdrag:${{ github.sha }} IMAGE_LATEST: ghcr.io/navikt/familie-oppdrag:latest From 405e7fd944e3d65cf1b63ea3b818bcf9980cb52c Mon Sep 17 00:00:00 2001 From: Uy Quang Nguyen Date: Wed, 1 Nov 2023 14:25:57 +0700 Subject: [PATCH 2/3] =?UTF-8?q?Vi=20oppretter=20et=20endepunkt=20som=20til?= =?UTF-8?q?later=20oss=20=C3=A5=20opprette=20manuelle=20kvittering=20p?= =?UTF-8?q?=C3=A5=20oppdrag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../familie/oppdrag/rest/OppdragController.kt | 23 +++++++++- .../familie/oppdrag/service/OppdragService.kt | 1 + .../oppdrag/service/OppdragServiceE2E.kt | 4 ++ .../oppdrag/service/OppdragServiceImpl.kt | 21 ++++++++++ .../rest/OppdragControllerIntegrationTest.kt | 2 +- .../oppdrag/rest/OppdragControllerTest.kt | 42 +++++++++++++++++++ 6 files changed, 91 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/no/nav/familie/oppdrag/rest/OppdragController.kt b/src/main/kotlin/no/nav/familie/oppdrag/rest/OppdragController.kt index 64918ae7..a0dc7482 100644 --- a/src/main/kotlin/no/nav/familie/oppdrag/rest/OppdragController.kt +++ b/src/main/kotlin/no/nav/familie/oppdrag/rest/OppdragController.kt @@ -11,6 +11,7 @@ import no.nav.familie.oppdrag.common.RessursUtils.notFound import no.nav.familie.oppdrag.common.RessursUtils.ok import no.nav.familie.oppdrag.iverksetting.OppdragMapper import no.nav.familie.oppdrag.service.OppdragAlleredeSendtException +import no.nav.familie.oppdrag.service.OppdragHarAlleredeKvitteringException import no.nav.familie.oppdrag.service.OppdragService import no.nav.security.token.support.core.api.ProtectedWithClaims import org.springframework.beans.factory.annotation.Autowired @@ -76,7 +77,7 @@ class OppdragController( } @PostMapping("resend") - fun resentOppdrag( + fun resendOppdrag( @Valid @RequestBody oppdragId: OppdragId, ) { @@ -98,4 +99,24 @@ class OppdragController( }, ) } + + @PostMapping(consumes = [MediaType.APPLICATION_JSON_VALUE], path = ["/oppdrag/manuell-kvittering"]) + fun opprettManuellKvitteringPåOppdrag( + @Valid @RequestBody + oppdragId: OppdragId, + ): ResponseEntity> { + return Result.runCatching { oppdragService.opprettManuellKvitteringPåOppdrag(oppdragId) } + .fold( + onFailure = { + if (it is OppdragHarAlleredeKvitteringException) { + conflict("Oppdrag med id $oppdragId er allerede kvittert ut.") + } else { + illegalState("Klarte ikke opprette manuell kvittering for oppdrag med id $oppdragId", it) + } + }, + onSuccess = { + ok(it.status, it.kvitteringsmelding?.beskrMelding ?: "Savner kvitteringsmelding") + }, + ) + } } diff --git a/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragService.kt b/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragService.kt index 1f0d4a71..5e3e9154 100644 --- a/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragService.kt +++ b/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragService.kt @@ -9,4 +9,5 @@ interface OppdragService { fun opprettOppdrag(utbetalingsoppdrag: Utbetalingsoppdrag, oppdrag: Oppdrag, versjon: Int) fun hentStatusForOppdrag(oppdragId: OppdragId): OppdragLager fun resendOppdrag(oppdragId: OppdragId) + fun opprettManuellKvitteringPåOppdrag(oppdragId: OppdragId): OppdragLager } diff --git a/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragServiceE2E.kt b/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragServiceE2E.kt index fb5bd292..c23204db 100644 --- a/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragServiceE2E.kt +++ b/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragServiceE2E.kt @@ -36,6 +36,10 @@ class OppdragServiceE2E( throw NotImplementedError("Ikke implementert") } + override fun opprettManuellKvitteringPåOppdrag(oppdragId: OppdragId): OppdragLager { + throw NotImplementedError("Ikke implementert") + } + companion object { val LOG = LoggerFactory.getLogger(OppdragServiceE2E::class.java) diff --git a/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragServiceImpl.kt b/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragServiceImpl.kt index f98798ee..9fe23114 100644 --- a/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragServiceImpl.kt +++ b/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragServiceImpl.kt @@ -8,6 +8,7 @@ import no.nav.familie.oppdrag.iverksetting.Jaxb import no.nav.familie.oppdrag.iverksetting.OppdragSender import no.nav.familie.oppdrag.repository.OppdragLager import no.nav.familie.oppdrag.repository.OppdragLagerRepository +import no.trygdeetaten.skjema.oppdrag.Mmel import no.trygdeetaten.skjema.oppdrag.Oppdrag import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Autowired @@ -52,6 +53,25 @@ class OppdragServiceImpl( oppdragSender.sendOppdrag(oppdragXml) } + override fun opprettManuellKvitteringPåOppdrag(oppdragId: OppdragId): OppdragLager { + val oppdrag = oppdragLagerRepository.hentOppdrag(oppdragId) + + if (oppdrag.status != OppdragStatus.LAGT_PÅ_KØ) { + throw OppdragHarAlleredeKvitteringException("Oppdrag med id $oppdragId er allerede kvittert ut.") + } + + val manuellKvittering = Mmel().apply { beskrMelding = "Manuelt kvittert ut" } + + oppdragLagerRepository.oppdaterKvitteringsmelding( + oppdragId = oppdragId, + oppdragStatus = OppdragStatus.KVITTERT_OK, + kvittering = manuellKvittering, + versjon = oppdrag.versjon + 1, + ) + + return oppdrag + } + companion object { val LOG = LoggerFactory.getLogger(OppdragServiceImpl::class.java) @@ -59,3 +79,4 @@ class OppdragServiceImpl( } class OppdragAlleredeSendtException() : RuntimeException() +class OppdragHarAlleredeKvitteringException(melding: String) : RuntimeException(melding) diff --git a/src/test/kotlin/no/nav/familie/oppdrag/rest/OppdragControllerIntegrationTest.kt b/src/test/kotlin/no/nav/familie/oppdrag/rest/OppdragControllerIntegrationTest.kt index f0ed7363..1d5065ae 100644 --- a/src/test/kotlin/no/nav/familie/oppdrag/rest/OppdragControllerIntegrationTest.kt +++ b/src/test/kotlin/no/nav/familie/oppdrag/rest/OppdragControllerIntegrationTest.kt @@ -83,7 +83,7 @@ internal class OppdragControllerIntegrationTest { oppdragController.sendOppdrag(utbetalingsoppdrag) oppdragLagerRepository.oppdaterStatus(utbetalingsoppdrag.oppdragId, OppdragStatus.KVITTERT_FUNKSJONELL_FEIL) - oppdragController.resentOppdrag(utbetalingsoppdrag.oppdragId) + oppdragController.resendOppdrag(utbetalingsoppdrag.oppdragId) assertOppdragStatus(utbetalingsoppdrag.oppdragId, OppdragStatus.KVITTERT_OK) } diff --git a/src/test/kotlin/no/nav/familie/oppdrag/rest/OppdragControllerTest.kt b/src/test/kotlin/no/nav/familie/oppdrag/rest/OppdragControllerTest.kt index d78c3704..8ab05f3b 100644 --- a/src/test/kotlin/no/nav/familie/oppdrag/rest/OppdragControllerTest.kt +++ b/src/test/kotlin/no/nav/familie/oppdrag/rest/OppdragControllerTest.kt @@ -4,8 +4,10 @@ import io.mockk.Runs import io.mockk.every import io.mockk.just import io.mockk.mockk +import io.mockk.runs import io.mockk.verify import no.nav.familie.kontrakter.felles.Ressurs +import no.nav.familie.kontrakter.felles.oppdrag.OppdragId import no.nav.familie.kontrakter.felles.oppdrag.OppdragStatus import no.nav.familie.kontrakter.felles.oppdrag.Opphør import no.nav.familie.kontrakter.felles.oppdrag.Utbetalingsoppdrag @@ -15,6 +17,7 @@ import no.nav.familie.oppdrag.iverksetting.OppdragSender import no.nav.familie.oppdrag.repository.OppdragLager import no.nav.familie.oppdrag.repository.OppdragLagerRepository import no.nav.familie.oppdrag.service.OppdragServiceImpl +import no.trygdeetaten.skjema.oppdrag.Mmel import org.junit.jupiter.api.Test import org.springframework.http.HttpStatus import java.math.BigDecimal @@ -81,6 +84,45 @@ internal class OppdragControllerTest { verify(exactly = 1) { oppdragLagerRepository.opprettOppdrag(any()) } } + @Test + fun `Skal kaste 409 feil om oppdrag allerede er kvittert ut`() { + val (oppdragLagerRepository, oppdragController) = mockkOppdragController(false) + val oppdragId = OppdragId(fagsystem = "BA", personIdent = "test", behandlingsId = "0") + val mocketOppdragLager = mockk() + + every { mocketOppdragLager.status } returns OppdragStatus.KVITTERT_OK + every { oppdragLagerRepository.hentOppdrag(oppdragId) } returns mocketOppdragLager + + val response = oppdragController.opprettManuellKvitteringPåOppdrag(oppdragId) + + assertEquals(HttpStatus.CONFLICT, response.statusCode) + assertEquals(Ressurs.Status.FEILET, response.body?.status) + + verify(exactly = 1) { oppdragLagerRepository.hentOppdrag(any()) } + } + + @Test + fun `Skal returnere 200 OK om oppdrag ble manuelt kvittert ut`() { + val (oppdragLagerRepository, oppdragController) = mockkOppdragController(false) + val oppdragId = OppdragId(fagsystem = "BA", personIdent = "test", behandlingsId = "0") + val mocketOppdragLager = mockk() + + every { mocketOppdragLager.status } returns OppdragStatus.LAGT_PÅ_KØ + every { mocketOppdragLager.versjon } returns 0 + every { mocketOppdragLager.kvitteringsmelding } returns Mmel().apply { beskrMelding = "Manuelt kvittert ut" } + + every { oppdragLagerRepository.hentOppdrag(oppdragId) } returns mocketOppdragLager + every { oppdragLagerRepository.oppdaterKvitteringsmelding(oppdragId, OppdragStatus.KVITTERT_OK, any(), 1) } just runs + + val response = oppdragController.opprettManuellKvitteringPåOppdrag(oppdragId) + + assertEquals(HttpStatus.OK, response.statusCode) + assertEquals("Manuelt kvittert ut", response.body?.melding) + + verify(exactly = 1) { oppdragLagerRepository.hentOppdrag(any()) } + verify(exactly = 1) { oppdragLagerRepository.oppdaterKvitteringsmelding(oppdragId, OppdragStatus.KVITTERT_OK, any(), 1) } + } + private fun mockkOppdragController(alleredeOpprettet: Boolean = false): Pair { val mapper = OppdragMapper() val oppdragSender = mockk(relaxed = true) From e33090d44e00315779e216815d5bbe3eaede8736 Mon Sep 17 00:00:00 2001 From: Uy Quang Nguyen Date: Wed, 15 Nov 2023 10:47:51 +0100 Subject: [PATCH 3/3] Legg til @Transactional --- .../kotlin/no/nav/familie/oppdrag/service/OppdragServiceImpl.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragServiceImpl.kt b/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragServiceImpl.kt index 9fe23114..cf147cb6 100644 --- a/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragServiceImpl.kt +++ b/src/main/kotlin/no/nav/familie/oppdrag/service/OppdragServiceImpl.kt @@ -53,6 +53,7 @@ class OppdragServiceImpl( oppdragSender.sendOppdrag(oppdragXml) } + @Transactional override fun opprettManuellKvitteringPåOppdrag(oppdragId: OppdragId): OppdragLager { val oppdrag = oppdragLagerRepository.hentOppdrag(oppdragId)