Skip to content

Commit

Permalink
Legg til endepunkt for å sjekke om foresatte har innsynsrett (#823)
Browse files Browse the repository at this point in the history
* lag endepunkt for å avgjøre om fåresatte er har innsynsrett eller ikke

* Lagt til tester for å finne ut alder av ekster bruker

* Sørg for at test brukere får tilfeldig fnr

* Rydda opp koden
  • Loading branch information
henriktheboss authored Sep 27, 2024
1 parent 725b06e commit b2e3c02
Show file tree
Hide file tree
Showing 4 changed files with 147 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package no.nav.veilarbaktivitet.foresatteinnsynsrett

import no.nav.poao.dab.spring_a2_annotations.auth.AuthorizeFnr
import no.nav.poao.dab.spring_auth.IAuthService
import org.springframework.http.HttpStatus
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import org.springframework.web.server.ResponseStatusException
import java.time.LocalDate
import java.time.Period


@RestController
@RequestMapping("/api/ekstern/innsynsrett")
class InnsynrettController(private val authService: IAuthService) {

@GetMapping()
@AuthorizeFnr(auditlogMessage = "sjekker foresatte innsynsrett")
fun foresatteHarInnsynsrett(): InnsynsrettDTO {
val fnr = if (authService.erEksternBruker()) {
authService.getLoggedInnUser()
} else {
throw ResponseStatusException(HttpStatus.FORBIDDEN)
}

return InnsynsrettDTO(foresatteHarInnsynsrett = isUnder18(fnr.get())) // Adjust return value as needed
}

data class InnsynsrettDTO(
val foresatteHarInnsynsrett: Boolean
)

fun isUnder18(fnr: String): Boolean {
val dag = fnr.substring(0, 2).toInt()
val måned = fnr.substring(2, 4).toInt()
val år = fnr.substring(4, 6).toInt()

val indexTilSifferSomBestemerÅrHundre = 6
val århundre = if (Integer.parseInt(fnr[indexTilSifferSomBestemerÅrHundre].toString()) < 4) 1900 else 2000
val fødselsår = århundre + år

val fødselsdato = LocalDate.of(fødselsår, måned, dag)
val dagensdato = LocalDate.now()
val alder = Period.between(fødselsdato, dagensdato).years

return alder < 18
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import lombok.Builder;
import lombok.Getter;
import no.nav.poao_tilgang.poao_tilgang_test_core.fnr_generator.FoedselsnummerGenerator;
import no.nav.poao_tilgang.poao_tilgang_test_core.fnr_generator.Kjoenn;
import no.nav.veilarbaktivitet.person.Navn;

@Builder(toBuilder = true)
Expand All @@ -17,6 +19,9 @@ public class BrukerOptions {
private Navn navn;
private Long sakId;
private String mål;
private String fnr;

private static FoedselsnummerGenerator foedselsnummerGenerator = new FoedselsnummerGenerator();

/*
@TODO
Expand All @@ -39,6 +44,8 @@ public static BrukerOptionsBuilder happyBrukerBuilder() {
.erUnderKvp(false)
.navn(new Navn("Navn", null, "Navnesen"))
.sakId(1000L)
.mål("Å få meg jobb");
.mål("Å få meg jobb")
.fnr(foedselsnummerGenerator.foedselsnummer(null, Kjoenn.MANN,false).getAsString());

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public class MockBruker extends RestassuredUser {
private List<Oppfolgingsperiode> oppfolgingsperioder = new ArrayList<>();

MockBruker(BrukerOptions brukerOptions, PrivatBruker privatBruker) {
super(privatBruker.getNorskIdent(), UserRole.EKSTERN);
super(brukerOptions.getFnr(),UserRole.EKSTERN);
this.brukerOptions = brukerOptions;
if (brukerOptions.isUnderOppfolging()) {
oppfolgingsperiodeId = UUID.randomUUID();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package no.nav.veilarbaktivitet.foresatteinnsynsrett

import no.nav.veilarbaktivitet.SpringBootTestBase
import no.nav.veilarbaktivitet.mock_nav_modell.BrukerOptions
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test


import java.time.LocalDate


internal class InnsynrettControllerTest: SpringBootTestBase() {
@Test
fun `for bruker som er over 18 har ikke foresatte innsynsrett`() {
val fødselsdato = LocalDate.now().minusYears(18)
val brukerOptions = BrukerOptions.happyBruker().toBuilder().fnr("${fødselsdato.tilFødselsDato()}60000").build()
val bruker = navMockService.createHappyBruker(brukerOptions)

val response = bruker
.createRequest()
.get( "http://localhost:$port/veilarbaktivitet/api/ekstern/innsynsrett")
.then()
.assertThat()
.statusCode(200)
.extract()
.response()
.`as`(InnsynrettController.InnsynsrettDTO::class.java)

assertThat(response.foresatteHarInnsynsrett).isFalse()
}

@Test
fun `for bruker som er under 18 har foresatte innsynsrett`() {
val fødselsdato = LocalDate.now().minusYears(18).plusDays(1)
val brukerOptions = BrukerOptions.happyBruker().toBuilder().fnr("${fødselsdato.tilFødselsDato()}60000").build()
val bruker = navMockService.createHappyBruker(brukerOptions)

val response = bruker
.createRequest()
.get( "http://localhost:$port/veilarbaktivitet/api/ekstern/innsynsrett")
.then()
.assertThat()
.statusCode(200)
.extract()
.response()
.`as`(InnsynrettController.InnsynsrettDTO::class.java)

assertThat(response.foresatteHarInnsynsrett).isTrue()
}

@Test
fun `for bruker som er født på 1900 tallet har foresatte aldri innsynsrett`() {

val brukerOptions = BrukerOptions.happyBruker().toBuilder().fnr("01012320000").build()
val bruker = navMockService.createHappyBruker(brukerOptions)

val response = bruker
.createRequest()
.get( "http://localhost:$port/veilarbaktivitet/api/ekstern/innsynsrett")
.then()
.assertThat()
.statusCode(200)
.extract()
.response()
.`as`(InnsynrettController.InnsynsrettDTO::class.java)

assertThat(response.foresatteHarInnsynsrett).isFalse()
}

@Test
fun `veilleder skal ikke kunne sjekke om foresatte har innsynsrett`() {
val bruker = navMockService.createHappyBruker()
val veileder = navMockService.createVeileder("Z123456" ,bruker)

veileder
.createRequest()
.get( "http://localhost:$port/veilarbaktivitet/api/ekstern/innsynsrett")
.then()
.assertThat()
.statusCode(403)
}

fun LocalDate.tilFødselsDato(): String {
val dag = this.dayOfMonth.toString().padStart(2, '0')
val måned = this.monthValue.toString().padStart(2, '0')
val år = this.year.toString().substring(2)
return "$dag$måned$år"
}
}

0 comments on commit b2e3c02

Please sign in to comment.