Skip to content

Commit

Permalink
Merge branch 'main' into prod_bytt_til_psql_15_db
Browse files Browse the repository at this point in the history
  • Loading branch information
UyQuangNguyen authored Nov 23, 2023
2 parents 613f4df + bef52a2 commit 0258808
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 4 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build-and-deploy-preprod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Build-Deploy-Preprod
on:
push:
branches-ignore:
- 'master'
- 'main'
workflow_dispatch:

env:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-and-deploy-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
23 changes: 22 additions & 1 deletion src/main/kotlin/no/nav/familie/oppdrag/rest/OppdragController.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -76,7 +77,7 @@ class OppdragController(
}

@PostMapping("resend")
fun resentOppdrag(
fun resendOppdrag(
@Valid @RequestBody
oppdragId: OppdragId,
) {
Expand All @@ -98,4 +99,24 @@ class OppdragController(
},
)
}

@PostMapping(consumes = [MediaType.APPLICATION_JSON_VALUE], path = ["/oppdrag/manuell-kvittering"])
fun opprettManuellKvitteringPåOppdrag(
@Valid @RequestBody
oppdragId: OppdragId,
): ResponseEntity<Ressurs<OppdragStatus>> {
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")
},
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -52,10 +53,31 @@ class OppdragServiceImpl(
oppdragSender.sendOppdrag(oppdragXml)
}

@Transactional
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)
}
}

class OppdragAlleredeSendtException() : RuntimeException()
class OppdragHarAlleredeKvitteringException(melding: String) : RuntimeException(melding)
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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<OppdragLager>()

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<OppdragLager>()

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<OppdragLagerRepository, OppdragController> {
val mapper = OppdragMapper()
val oppdragSender = mockk<OppdragSender>(relaxed = true)
Expand Down

0 comments on commit 0258808

Please sign in to comment.