diff --git a/src/main/kotlin/no/nav/veilarbaktivitet/foresatteinnsynsrett/InnsynrettController.kt b/src/main/kotlin/no/nav/veilarbaktivitet/foresatteinnsynsrett/InnsynrettController.kt new file mode 100644 index 000000000..9e5234c99 --- /dev/null +++ b/src/main/kotlin/no/nav/veilarbaktivitet/foresatteinnsynsrett/InnsynrettController.kt @@ -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 + } +} \ No newline at end of file diff --git a/src/test/java/no/nav/veilarbaktivitet/mock_nav_modell/BrukerOptions.java b/src/test/java/no/nav/veilarbaktivitet/mock_nav_modell/BrukerOptions.java index 679c47f4f..edb7ebb5d 100644 --- a/src/test/java/no/nav/veilarbaktivitet/mock_nav_modell/BrukerOptions.java +++ b/src/test/java/no/nav/veilarbaktivitet/mock_nav_modell/BrukerOptions.java @@ -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) @@ -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 @@ -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()); + } } diff --git a/src/test/java/no/nav/veilarbaktivitet/mock_nav_modell/MockBruker.java b/src/test/java/no/nav/veilarbaktivitet/mock_nav_modell/MockBruker.java index c103e47e2..4eb005520 100644 --- a/src/test/java/no/nav/veilarbaktivitet/mock_nav_modell/MockBruker.java +++ b/src/test/java/no/nav/veilarbaktivitet/mock_nav_modell/MockBruker.java @@ -25,7 +25,7 @@ public class MockBruker extends RestassuredUser { private List 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(); diff --git a/src/test/kotlin/no/nav/veilarbaktivitet/foresatteinnsynsrett/InnsynrettControllerTest.kt b/src/test/kotlin/no/nav/veilarbaktivitet/foresatteinnsynsrett/InnsynrettControllerTest.kt new file mode 100644 index 000000000..f16672a3b --- /dev/null +++ b/src/test/kotlin/no/nav/veilarbaktivitet/foresatteinnsynsrett/InnsynrettControllerTest.kt @@ -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" + } +} \ No newline at end of file