Skip to content

Commit

Permalink
Hent pdf kvittering (#1027)
Browse files Browse the repository at this point in the history
* Hent pdf kvittering - controller, service og klient

* test for om mottak retunrerer kvittering

* mock søknadkvittering klient

* flytter funksjonalitet for å hente ut søknad på søknadID inn i eksisterende servicer og klienter

* skal ikke kunne hente ut søknader i prod

---------

Co-authored-by: Viktor Solberg <[email protected]>
  • Loading branch information
marcuasc and ViktorGSolberg authored Nov 25, 2024
1 parent 5ef66b0 commit e40fce4
Show file tree
Hide file tree
Showing 11 changed files with 66 additions and 48 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package no.nav.familie.ef.søknad.ettersending

import no.nav.familie.ef.søknad.søknad.SøknadClient
import no.nav.familie.ef.søknad.søknad.MottakClient
import no.nav.familie.kontrakter.ef.ettersending.SøknadMedDokumentasjonsbehovDto
import no.nav.familie.sikkerhet.EksternBrukerUtils
import no.nav.security.token.support.core.api.ProtectedWithClaims
Expand All @@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.RestController
@RequestMapping(path = ["/api/dokumentasjonsbehov"])
@ProtectedWithClaims(issuer = EksternBrukerUtils.ISSUER_TOKENX, claimMap = ["acr=Level4"])
class DokumentasjonsbehovController(
private valknadClient: SøknadClient,
private valknadClient: MottakClient,
) {
@GetMapping("/person")
fun hentDokumentasjonsbehovForPerson(): ResponseEntity<List<SøknadMedDokumentasjonsbehovDto>> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package no.nav.familie.ef.søknad.ettersending

import no.nav.familie.ef.søknad.ettersending.mapper.EttersendingMapper
import no.nav.familie.ef.søknad.søknad.SøknadClient
import no.nav.familie.ef.søknad.søknad.MottakClient
import no.nav.familie.ef.søknad.søknad.domain.Kvittering
import no.nav.familie.ef.søknad.søknad.mapper.KvitteringMapper
import no.nav.familie.kontrakter.ef.ettersending.EttersendelseDto
Expand All @@ -11,7 +11,7 @@ import java.time.LocalDateTime

@Service
class EttersendingService(
private valknadClient: SøknadClient,
private valknadClient: MottakClient,
) {
fun sendInn(
ettersending: EttersendelseDto,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ data class MottakConfig(
internal val sendInnEttersendingUri = byggUri(PATH_SEND_INN_ETTERSENDING)
internal val hentEttersendingForPersonUri = byggUri(PATH_HENT_ETTERSENDING_FOR_PERSON)
internal val hentForrigeBarnetilsynSøknadUri = byggUri(PATH_HENT_FORRIGE_BARNETILSYNSØKNAD)
internal val hentSøknadKvitteringUri = byggUri(PATH_HENT_SOKNADKVITTERING)

internal val pingUri = byggUri(PATH_PING)

Expand All @@ -37,5 +38,6 @@ data class MottakConfig(
private const val PATH_HENT_ETTERSENDING_FOR_PERSON = "/ettersending/person"
private const val PATH_HENT_FORRIGE_BARNETILSYNSØKNAD = "/soknad/barnetilsyn/forrige"
private const val PATH_PING = "/ping"
private const val PATH_HENT_SOKNADKVITTERING = "/soknadskvittering"
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package no.nav.familie.ef.søknad.infrastruktur.health

import no.nav.familie.ef.søknad.søknad.SøknadClient
import no.nav.familie.ef.søknad.søknad.MottakClient
import no.nav.familie.http.health.AbstractHealthIndicator
import org.springframework.stereotype.Component

@Component
internal class SøknadHealthIndicator(
knadClient: SøknadClient,
knadClient: MottakClient,
) : AbstractHealthIndicator(søknadClient, "familie.ef.mottak")
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@ import org.springframework.beans.factory.annotation.Qualifier
import org.springframework.http.HttpHeaders
import org.springframework.stereotype.Service
import org.springframework.web.client.RestOperations
import org.springframework.web.util.UriComponentsBuilder
import java.net.URI

@Service
class SøknadClient(
class MottakClient(
private val config: MottakConfig,
@Qualifier("tokenExchange") operations: RestOperations,
) : AbstractPingableRestClient(operations, "søknad.innsending") {
Expand Down Expand Up @@ -60,6 +61,16 @@ class SøknadClient(
HttpHeaders().medContentTypeJsonUTF8(),
)

fun hentSøknadKvittering(søknadId: String): ByteArray =
getForEntity<ByteArray>(
UriComponentsBuilder
.fromUriString(
"${config.hentSøknadKvitteringUri}/$søknadId",
).build()
.toUri(),
HttpHeaders().medContentTypeJsonUTF8(),
)

private fun HttpHeaders.medContentTypeJsonUTF8(): HttpHeaders {
this.add("Content-Type", "application/json;charset=UTF-8")
this.add("behandlingsnummer", Tema.ENF.behandlingsnummer)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import java.time.LocalDateTime

@Service
class SkjemaService(
valknadClient: SøknadClient,
valknadClient: MottakClient,
) {
fun sendInn(
arbeidssøker: Arbeidssøker,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import org.springframework.http.HttpStatus
import org.springframework.http.MediaType
import org.springframework.validation.annotation.Validated
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
Expand All @@ -25,7 +26,7 @@ import java.time.LocalDateTime
@RequestMapping(path = ["/api/soknadskvittering"], produces = [MediaType.APPLICATION_JSON_VALUE])
@ProtectedWithClaims(issuer = EksternBrukerUtils.ISSUER_TOKENX, claimMap = ["acr=Level4"])
@Validated
class SøknadController(
class SøknadKvitteringController(
valknadService: SøknadService,
) {
@PostMapping("overgangsstonad")
Expand Down Expand Up @@ -67,4 +68,10 @@ class SøknadController(
søknadService.sendInn(søknad, innsendingMottatt)
return Kvittering("ok", mottattDato = innsendingMottatt)
}

@Profile("!prod")
@GetMapping("{søknadId}")
fun hentSøknad(
@PathVariable søknadId: String,
): ByteArray = søknadService.hentSøknadPdf(søknadId)
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import java.time.LocalDateTime

@Service
class SøknadService(
private val knadClient: SøknadClient,
private val mottakClient: MottakClient,
private val overgangsstønadMapper: SøknadOvergangsstønadMapper,
private val barnetilsynMapper: SøknadBarnetilsynMapper,
private val skolepengerMapper: SøknadSkolepengerMapper,
Expand All @@ -24,7 +24,7 @@ class SøknadService(
innsendingMottatt: LocalDateTime,
): Kvittering {
val søknadRequestData = overgangsstønadMapper.mapTilIntern(søknad, innsendingMottatt)
val kvittering = søknadClient.sendInn(søknadRequestData)
val kvittering = mottakClient.sendInn(søknadRequestData)
return KvitteringMapper.mapTilEkstern(kvittering, innsendingMottatt)
}

Expand All @@ -33,7 +33,7 @@ class SøknadService(
innsendingMottatt: LocalDateTime,
): Kvittering {
val søknadRequestData = barnetilsynMapper.mapTilIntern(søknad, innsendingMottatt)
val kvittering = søknadClient.sendInnBarnetilsynsøknad(søknadRequestData)
val kvittering = mottakClient.sendInnBarnetilsynsøknad(søknadRequestData)
return KvitteringMapper.mapTilEkstern(kvittering, innsendingMottatt)
}

Expand All @@ -42,9 +42,11 @@ class SøknadService(
innsendingMottatt: LocalDateTime,
): Kvittering {
val søknadRequestData = skolepengerMapper.mapTilIntern(søknad, innsendingMottatt)
val kvittering = søknadClient.sendInnSkolepenger(søknadRequestData)
val kvittering = mottakClient.sendInnSkolepenger(søknadRequestData)
return KvitteringMapper.mapTilEkstern(kvittering, innsendingMottatt)
}

fun hentForrigeBarnetilsynSøknad(): SøknadBarnetilsynGjenbrukDto? = SøknadBarnetilsynMapper().mapTilDto(søknadClient.hentForrigeBarnetilsynSøknad())
fun hentSøknadPdf(søknadId: String): ByteArray = mottakClient.hentSøknadKvittering(søknadId)

fun hentForrigeBarnetilsynSøknad(): SøknadBarnetilsynGjenbrukDto? = SøknadBarnetilsynMapper().mapTilDto(mottakClient.hentForrigeBarnetilsynSøknad())
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package no.nav.familie.ef.søknad.ettersending

import io.mockk.mockk
import no.nav.familie.ef.søknad.infrastruktur.OppslagSpringRunnerTest
import no.nav.familie.ef.søknad.søknad.SøknadClient
import no.nav.familie.ef.søknad.søknad.SøknadClientUtil.filtrerVekkEldreDokumentasjonsbehov
import no.nav.familie.kontrakter.ef.ettersending.SøknadMedDokumentasjonsbehovDto
import no.nav.familie.kontrakter.ef.søknad.SøknadType
Expand All @@ -11,27 +9,10 @@ import no.nav.familie.kontrakter.felles.ef.StønadType
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Primary
import org.springframework.context.annotation.Profile
import org.springframework.test.context.ActiveProfiles
import java.time.LocalDate
import java.util.UUID

@Profile("dokumentasjonsbehov-test")
@Configuration
class DokumentasjonsbehovControllerTestConfiguration {
@Primary
@Bean
fun søknadClient(): SøknadClient = mockk()
}

@ActiveProfiles("dokumentasjonsbehov-test")
internal class DokumentasjonsbehovControllerTest : OppslagSpringRunnerTest() {
@Autowired
lateinit var søknadClient: SøknadClient

val tokenSubject = "12345678911"

Expand Down
27 changes: 14 additions & 13 deletions src/test/kotlin/no/nav/familie/ef/søknad/mock/MottakClientMock.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package no.nav.familie.ef.søknad.mock

import io.mockk.every
import io.mockk.mockk
import no.nav.familie.ef.søknad.søknad.SøknadClient
import no.nav.familie.ef.søknad.søknad.MottakClient
import no.nav.familie.ef.søknad.søknad.dto.KvitteringDto
import no.nav.familie.kontrakter.ef.ettersending.EttersendelseDto
import no.nav.familie.kontrakter.ef.ettersending.SøknadMedDokumentasjonsbehovDto
Expand All @@ -26,20 +26,21 @@ import java.util.UUID
class MottakClientMock {
@Bean
@Primary
fun søknadClient(): SøknadClient {
val søknadClient: SøknadClient = mockk()
fun mottakClient(): MottakClient {
val mottakClient: MottakClient = mockk()

every { søknadClient.sendInn(any()) } returns KvitteringDto("OK MOCK")
every { søknadClient.sendInnArbeidsRegistreringsskjema(any()) } returns KvitteringDto("OK MOCK")
every { søknadClient.sendInnBarnetilsynsøknad(any()) } returns KvitteringDto("OK MOCK")
every { søknadClient.sendInnSkolepenger(any()) } returns KvitteringDto("OK MOCK")
every { søknadClient.sendInnEttersending(any()) } returns KvitteringDto("OK MOCK")
every { søknadClient.ping() } returns Unit
every { søknadClient.hentSøknaderMedDokumentasjonsbehov(any()) } returns søknaderMedDokumentasjonsbehov
every { søknadClient.hentEttersendingForPerson(any()) } returns listOf(ettersendingResponseData)
every { søknadClient.hentForrigeBarnetilsynSøknad() } returns null
every { mottakClient.sendInn(any()) } returns KvitteringDto("OK MOCK")
every { mottakClient.sendInnArbeidsRegistreringsskjema(any()) } returns KvitteringDto("OK MOCK")
every { mottakClient.sendInnBarnetilsynsøknad(any()) } returns KvitteringDto("OK MOCK")
every { mottakClient.sendInnSkolepenger(any()) } returns KvitteringDto("OK MOCK")
every { mottakClient.sendInnEttersending(any()) } returns KvitteringDto("OK MOCK")
every { mottakClient.ping() } returns Unit
every { mottakClient.hentSøknaderMedDokumentasjonsbehov(any()) } returns søknaderMedDokumentasjonsbehov
every { mottakClient.hentEttersendingForPerson(any()) } returns listOf(ettersendingResponseData)
every { mottakClient.hentForrigeBarnetilsynSøknad() } returns null
every { mottakClient.hentSøknadKvittering(any()) } returns "pdf".toByteArray()

return søknadClient
return mottakClient
}

private val dokumentasjonsbehovDto =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,9 @@ import org.springframework.http.HttpStatus
import org.springframework.test.context.ActiveProfiles
import java.io.File
import java.time.LocalDateTime
import kotlin.test.assertTrue

class SøknadControllerTest {
class SøknadKvitteringControllerTest {
@Profile("soknad-controller-test")
@Configuration
class SøknadControllerTestConfiguration {
Expand All @@ -45,7 +46,7 @@ class SøknadControllerTest {

@Nested
@ActiveProfiles("soknad-controller-test")
internal inner class SøknadControllerTest : OppslagSpringRunnerTest() {
internal inner class SøknadKvitteringControllerTest : OppslagSpringRunnerTest() {
@Autowired
lateinit var søknadService: SøknadService

Expand Down Expand Up @@ -197,5 +198,18 @@ class SøknadControllerTest {
assertThat(response.statusCode).isEqualTo(HttpStatus.FORBIDDEN)
verify(exactly = 0) { søknadService.sendInn(søknadSkolepengerDto, any()) }
}

@Test
fun `mottak returnerer pdf kvittering`() {
every { søknadService.hentSøknadPdf("1") } returns "pdf".toByteArray()

val response =
restTemplate.exchange<ByteArray>(
localhost("/api/soknadskvittering/1"),
HttpMethod.GET,
HttpEntity(null, headers),
)
assertTrue { response.body?.contentEquals("pdf".toByteArray()) ?: false }
}
}
}

0 comments on commit e40fce4

Please sign in to comment.