Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kontonummer #397

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,24 +1,57 @@
package no.nav.arbeidsgiver.min_side.kontostatus

import no.nav.arbeidsgiver.min_side.services.altinn.AltinnService
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RestController

const val kontonummerTilgangTjenesetekode = "2896:87"

@RestController
class KontostatusController(
val kontoregisterClient: KontoregisterClient,
val altinnService: AltinnService
) {

@PostMapping("/api/kontonummerStatus/v1")
fun get(
@RequestBody body: Request,
fun getKontonummerStatus(
@RequestBody body: StatusRequest,
) = when (kontoregisterClient.hentKontonummer(body.virksomhetsnummer)) {
null -> Response(KontonummerStatus.MANGLER_KONTONUMMER)
else -> Response(KontonummerStatus.OK)
null -> StatusResponse(KontonummerStatus.MANGLER_KONTONUMMER)
else -> StatusResponse(KontonummerStatus.OK)
}

data class Request(val virksomhetsnummer: String)

data class Response(val status: KontonummerStatus)
/**
* Henter kontonummer for en gitt organisasjon.
* Kontonummer tilgangstyres på overordnet enhet, ikke på underenhet.
* Dersom bruker har tilgang på overordnet enhet, har hen også tilgang på underenhet (https://nav-it.slack.com/archives/CKZADNFBP/p1736263494923189)
*/
@PostMapping("/api/kontonummer/v1")
fun getKontoNummer(
@RequestBody body: OppslagRequest,
): OppslagResponse? {
val harTilgang = altinnService.harTilgang(body.orgnrForTilgangstyring, kontonummerTilgangTjenesetekode)
if (!harTilgang) {
return null
}
return when (val oppslag = kontoregisterClient.hentKontonummer(body.orgnrForOppslag)) {
null -> OppslagResponse(KontonummerStatus.MANGLER_KONTONUMMER)
else -> OppslagResponse(status = KontonummerStatus.OK, kontonummer = oppslag.kontonr, orgnr = oppslag.mottaker)
}
}

data class StatusRequest(val virksomhetsnummer: String)
data class StatusResponse(val status: KontonummerStatus)


data class OppslagRequest(val orgnrForTilgangstyring: String, val orgnrForOppslag: String)

data class OppslagResponse(
val status: KontonummerStatus,
val kontonummer: String? = null,
val orgnr: String? = null
)

enum class KontonummerStatus {
OK,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ package no.nav.arbeidsgiver.min_side.kontostatus

import no.nav.arbeidsgiver.min_side.azuread.AzureService
import no.nav.arbeidsgiver.min_side.controller.SecurityMockMvcUtil.Companion.jwtWithPid
import no.nav.arbeidsgiver.min_side.services.altinn.AltinnService
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.mockito.Mockito.`when`
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
import org.springframework.boot.test.context.SpringBootTest
Expand Down Expand Up @@ -36,6 +38,9 @@ class KontostatusTest {
@MockBean
lateinit var azureService: AzureService

@MockBean
lateinit var altinnService: AltinnService

@Autowired
lateinit var kontoregisterClient: KontoregisterClient

Expand Down Expand Up @@ -106,4 +111,112 @@ class KontostatusTest {
content { json("""{"status": "MANGLER_KONTONUMMER"}""") }
}
}

@Test
fun `henter kontonummer fra kontoregister og returnerer kontonummer og orgnr`() {
val virksomhetsnummer = "42"
server.expect {
requestTo("/kontoregister/api/v1/hent-kontonummer-for-organisasjon/$virksomhetsnummer")
method(POST)
}.andRespond(
withSuccess(
"""
{
"mottaker": "42",
"kontonr": "12345678901"
}
""",
APPLICATION_JSON
)
)

kontoregisterClient.hentKontonummer(virksomhetsnummer).let {
Assertions.assertEquals("42", it?.mottaker)
Assertions.assertEquals("12345678901", it?.kontonr)
}
`when`(altinnService.harTilgang(virksomhetsnummer, "2896:87")).thenReturn(true)
mockMvc.post("/api/kontonummer/v1") {
content = """
{
"orgnrForOppslag": "$virksomhetsnummer",
"orgnrForTilgangstyring": "$virksomhetsnummer"
}
""".trimIndent()
contentType = APPLICATION_JSON
accept = APPLICATION_JSON
with(jwtWithPid("42"))
}.andExpect {
status { isOk() }
content { json("""{"status": "OK", "orgnr": "42", "kontonummer": "12345678901"}""") }
}
}

@Test
fun `bruker har ikke tilgang til å se kontonummer returnerer unauthorized`() {
val virksomhetsnummer = "42"
server.expect {
requestTo("/kontoregister/api/v1/hent-kontonummer-for-organisasjon/$virksomhetsnummer")
method(POST)
}.andRespond(
withSuccess(
"""
{
"mottaker": "42",
"kontonr": "12345678901"
}
""",
APPLICATION_JSON
)
)

kontoregisterClient.hentKontonummer(virksomhetsnummer).let {
Assertions.assertEquals("42", it?.mottaker)
Assertions.assertEquals("12345678901", it?.kontonr)
}
`when`(altinnService.harTilgang(virksomhetsnummer, "2896:87")).thenReturn(false)
mockMvc.post("/api/kontonummer/v1") {
content = """
{
"orgnrForOppslag": "$virksomhetsnummer",
"orgnrForTilgangstyring": "$virksomhetsnummer"
}
""".trimIndent()
contentType = APPLICATION_JSON
accept = APPLICATION_JSON
with(jwtWithPid("42"))
}.andExpect {
status { isOk() }
content { null }
}
}

@Test
fun `kontnummer finnes ikke for virksomhet`() {
val virksomhetsnummer = "123"
server.expect {
requestTo("/kontoregister/api/v1/hent-kontonummer-for-organisasjon/$virksomhetsnummer")
method(POST)
}.andRespond(withStatus(NOT_FOUND))

kontoregisterClient.hentKontonummer(virksomhetsnummer).let {
Assertions.assertNull(it)
}

`when`(altinnService.harTilgang(virksomhetsnummer, "2896:87")).thenReturn(true)

mockMvc.post("/api/kontonummer/v1") {
content = """
{
"orgnrForOppslag": "$virksomhetsnummer",
"orgnrForTilgangstyring": "$virksomhetsnummer"
}
""".trimIndent()
contentType = APPLICATION_JSON
accept = APPLICATION_JSON
with(jwtWithPid("123"))
}.andExpect {
status { isOk() }
content { json("""{"status": "MANGLER_KONTONUMMER", "orgnr": null, "kontonummer": null}""") }
}
}
}
Loading