Skip to content

Commit

Permalink
Add POST single
Browse files Browse the repository at this point in the history
  • Loading branch information
andersrognstad committed Sep 3, 2024
1 parent 34d183d commit 6bb76c2
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import no.nav.syfo.personstatus.domain.VeilederBrukerKnytningListe
import no.nav.syfo.personstatus.infrastructure.clients.veiledertilgang.VeilederTilgangskontrollClient
import no.nav.syfo.personstatus.PersonoversiktStatusService
import no.nav.syfo.personstatus.api.v2.model.VeilederBrukerKnytningDTO
import no.nav.syfo.personstatus.domain.PersonIdent
import no.nav.syfo.util.*
import no.nav.syfo.util.getBearerHeader
import no.nav.syfo.util.getCallId
Expand Down Expand Up @@ -72,6 +73,32 @@ fun Route.registerPersonTildelingApiV2(
}
}

post("/personer/single") {
val callId = getCallId()
val token = getBearerHeader()
?: throw java.lang.IllegalArgumentException("No Authorization header supplied")
try {
val veilederBrukerKnytning: VeilederBrukerKnytning = call.receive()

val tilgang = veilederTilgangskontrollClient.getVeilederAccessToPerson(
personident = PersonIdent(veilederBrukerKnytning.fnr),
token = token,
callId = callId
)
if (tilgang?.erGodkjent == true) {
personTildelingService.lagreKnytningMellomVeilederOgBruker(listOf(veilederBrukerKnytning))
call.respond(HttpStatusCode.OK)
} else {
log.error("Kan ikke registrere tilknytning fordi veileder ikke har tilgang til bruker, {}", callIdArgument(callId))
call.respond(HttpStatusCode.Forbidden)
}
} catch (e: Error) {
val navIdent = getNAVIdentFromToken(token)
log.error("Feil under tildeling av bruker for navIdent=$navIdent, ${e.message}", e.cause)
call.respond(HttpStatusCode.InternalServerError)
}
}

get("/personer/single") {
try {
val token = getBearerHeader()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import no.nav.syfo.personstatus.db.*
import no.nav.syfo.testutil.*
import no.nav.syfo.testutil.UserConstants.ARBEIDSTAKER_2_FNR
import no.nav.syfo.testutil.UserConstants.ARBEIDSTAKER_FNR
import no.nav.syfo.testutil.UserConstants.ARBEIDSTAKER_NO_ACCESS
import no.nav.syfo.testutil.UserConstants.NAV_ENHET
import no.nav.syfo.testutil.UserConstants.VEILEDER_ID
import no.nav.syfo.util.NAV_PERSONIDENT_HEADER
Expand Down Expand Up @@ -66,35 +67,80 @@ object PersontildelingApiV2Spek : Spek({
}

describe("/personer") {
it("returns person with correct values") {
val tilknytning = VeilederBrukerKnytning(VEILEDER_ID, ARBEIDSTAKER_FNR)
database.lagreVeilederForBruker(tilknytning)
describe("GET veilederknytning for person") {
it("returns person with correct values") {
val tilknytning = VeilederBrukerKnytning(VEILEDER_ID, ARBEIDSTAKER_FNR)
database.lagreVeilederForBruker(tilknytning)

val url = "$personTildelingApiV2Path/personer/single"
with(
handleRequest(HttpMethod.Get, url) {
addHeader(HttpHeaders.Authorization, bearerHeader(validToken))
addHeader(NAV_PERSONIDENT_HEADER, ARBEIDSTAKER_FNR)
val url = "$personTildelingApiV2Path/personer/single"
with(
handleRequest(HttpMethod.Get, url) {
addHeader(HttpHeaders.Authorization, bearerHeader(validToken))
addHeader(NAV_PERSONIDENT_HEADER, ARBEIDSTAKER_FNR)
}
) {
response.status() shouldBeEqualTo HttpStatusCode.OK
val personinfo = objectMapper.readValue<VeilederBrukerKnytningDTO>(response.content!!)
personinfo.tildeltVeilederident shouldBeEqualTo tilknytning.veilederIdent
personinfo.personident.value shouldBeEqualTo tilknytning.fnr
}
) {
response.status() shouldBeEqualTo HttpStatusCode.OK
val personinfo = objectMapper.readValue<VeilederBrukerKnytningDTO>(response.content!!)
personinfo.tildeltVeilederident shouldBeEqualTo tilknytning.veilederIdent
personinfo.personident.value shouldBeEqualTo tilknytning.fnr
}
}
it("returns 404 when person does not exist") {
val tilknytning = VeilederBrukerKnytning(VEILEDER_ID, ARBEIDSTAKER_FNR)
database.lagreVeilederForBruker(tilknytning)
it("returns 404 when person does not exist") {
val tilknytning = VeilederBrukerKnytning(VEILEDER_ID, ARBEIDSTAKER_FNR)
database.lagreVeilederForBruker(tilknytning)

val url = "$personTildelingApiV2Path/personer/single"
with(
handleRequest(HttpMethod.Get, url) {
addHeader(HttpHeaders.Authorization, bearerHeader(validToken))
addHeader(NAV_PERSONIDENT_HEADER, ARBEIDSTAKER_2_FNR)
}
) {
response.status() shouldBeEqualTo HttpStatusCode.NoContent
}
}
}
describe("POST veilederknytning for person") {
val url = "$personTildelingApiV2Path/personer/single"
with(
handleRequest(HttpMethod.Get, url) {
addHeader(HttpHeaders.Authorization, bearerHeader(validToken))
addHeader(NAV_PERSONIDENT_HEADER, ARBEIDSTAKER_2_FNR)

val veilederBrukerKnytning = VeilederBrukerKnytning(VEILEDER_ID, ARBEIDSTAKER_FNR)

it("returns OK when request is successful") {
with(
handleRequest(HttpMethod.Post, url) {
addHeader(HttpHeaders.ContentType, ContentType.Application.Json.toString())
addHeader(HttpHeaders.Authorization, bearerHeader(validToken))
setBody(objectMapper.writeValueAsString(veilederBrukerKnytning))
}
) {
response.status() shouldBeEqualTo HttpStatusCode.OK

val person = database.getPersonOversiktStatusList(fnr = veilederBrukerKnytning.fnr).first()
person.veilederIdent shouldBeEqualTo veilederBrukerKnytning.veilederIdent
}
}

it("returns Unauthorized when missing token") {
with(
handleRequest(HttpMethod.Post, url) {
addHeader(HttpHeaders.ContentType, ContentType.Application.Json.toString())
setBody(objectMapper.writeValueAsString(veilederBrukerKnytning))
}
) {
response.status() shouldBeEqualTo HttpStatusCode.Unauthorized
}
}

it("returns Forbidden when no access to person") {
with(
handleRequest(HttpMethod.Post, url) {
addHeader(HttpHeaders.ContentType, ContentType.Application.Json.toString())
addHeader(HttpHeaders.Authorization, bearerHeader(validToken))
setBody(objectMapper.writeValueAsString(VeilederBrukerKnytning(VEILEDER_ID, ARBEIDSTAKER_NO_ACCESS)))
}
) {
response.status() shouldBeEqualTo HttpStatusCode.Forbidden
}
) {
response.status() shouldBeEqualTo HttpStatusCode.NoContent
}
}
}
Expand Down
1 change: 1 addition & 0 deletions src/test/kotlin/no/nav/syfo/testutil/UserConstants.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ object UserConstants {
const val ARBEIDSTAKER_2_FNR = "12345678911"
const val ARBEIDSTAKER_3_FNR = "12345678913"
const val ARBEIDSTAKER_4_FNR_WITH_ERROR = "12345678666"
const val ARBEIDSTAKER_NO_ACCESS = "12345678915"

val ARBEIDSTAKER_NO_NAME_FNR = ARBEIDSTAKER_FNR.replace("2", "1")
val ARBEIDSTAKER_ENHET_ERROR_PERSONIDENT = PersonIdent(ARBEIDSTAKER_FNR.replace("2", "3"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import io.ktor.client.request.*
import io.ktor.http.*
import no.nav.syfo.personstatus.infrastructure.clients.veiledertilgang.Tilgang
import no.nav.syfo.testutil.UserConstants
import no.nav.syfo.util.NAV_PERSONIDENT_HEADER

suspend fun MockRequestHandleScope.tilgangskontrollResponse(request: HttpRequestData): HttpResponseData {
val responseAccess = Tilgang(erGodkjent = true)
Expand All @@ -18,7 +19,15 @@ suspend fun MockRequestHandleScope.tilgangskontrollResponse(request: HttpRequest

return when {
requestUrl.endsWith("tilgang/navident/person") -> {
respondOk(responseAccess)
val personident = request.headers[NAV_PERSONIDENT_HEADER]
when (personident) {
UserConstants.ARBEIDSTAKER_NO_ACCESS -> {
respondOk(body = Tilgang(erGodkjent = false))
}
else -> {
respondOk(responseAccess)
}
}
}
requestUrl.endsWith("tilgang/navident/brukere") -> {
respondOk(responseAccessPersons)
Expand Down

0 comments on commit 6bb76c2

Please sign in to comment.