Skip to content

Commit

Permalink
Legg til aktivitet-query med historikk i graphql (#797)
Browse files Browse the repository at this point in the history
  • Loading branch information
tu55eladd authored May 27, 2024
1 parent be5e83f commit 7d40665
Show file tree
Hide file tree
Showing 7 changed files with 98 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import no.nav.veilarbaktivitet.aktivitet.Historikk;
import no.nav.veilarbaktivitet.aktivitet.domain.AktivitetStatus;
import no.nav.veilarbaktivitet.aktivitet.domain.AktivitetTransaksjonsType;
import no.nav.veilarbaktivitet.avtalt_med_nav.ForhaandsorienteringDTO;
Expand Down Expand Up @@ -80,4 +81,6 @@ public class AktivitetDTO {
private StillingFraNavData stillingFraNavData;

private EksternAktivitetDTO eksternAktivitet;

private Historikk historikk;
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,18 @@ import no.nav.common.types.identer.EnhetId
import no.nav.common.types.identer.Fnr
import no.nav.poao.dab.spring_auth.IAuthService
import no.nav.veilarbaktivitet.aktivitet.AktivitetAppService
import no.nav.veilarbaktivitet.aktivitet.AktivitetService
import no.nav.veilarbaktivitet.aktivitet.Historikk
import no.nav.veilarbaktivitet.aktivitet.HistorikkService
import no.nav.veilarbaktivitet.aktivitet.domain.AktivitetData
import no.nav.veilarbaktivitet.aktivitet.dto.AktivitetDTO
import no.nav.veilarbaktivitet.aktivitet.mappers.AktivitetDTOMapper
import no.nav.veilarbaktivitet.aktivitetskort.MigreringService
import no.nav.veilarbaktivitet.config.ownerProviders.AktivitetOwnerProvider
import no.nav.veilarbaktivitet.person.Person
import org.springframework.graphql.data.method.annotation.Argument
import org.springframework.graphql.data.method.annotation.QueryMapping
import org.springframework.graphql.data.method.annotation.SchemaMapping
import org.springframework.http.HttpStatus
import org.springframework.stereotype.Controller
import org.springframework.web.server.ResponseStatusException
Expand All @@ -20,6 +25,10 @@ import org.springframework.web.server.ResponseStatusException
class AktivitetskortController(
val appService: AktivitetAppService,
val migreringService: MigreringService,
val historikkService: HistorikkService,
val ownerProvider: AktivitetOwnerProvider,
val aktivitetService: AktivitetService,
val aktivitetAppService: AktivitetAppService,
val authService: IAuthService
) {

Expand All @@ -44,6 +53,22 @@ class AktivitetskortController(
return migreringService.visMigrerteArenaAktiviteterHvisToggleAktiv(aktiviter)
}

@QueryMapping
fun aktivitet(@Argument aktivitetId: Long): AktivitetDTO {
val erEksternBruker = authService.erEksternBruker()
val eksternBrukerId = ownerProvider.getOwner(aktivitetId.toString())
?: throw ResponseStatusException(HttpStatus.BAD_REQUEST, "No owner found for aktivitetId")
authService.sjekkTilgangTilPerson(eksternBrukerId)
return aktivitetAppService.hentAktivitet(aktivitetId)
.let { AktivitetDTOMapper.mapTilAktivitetDTO(it, erEksternBruker) }
}

@SchemaMapping(typeName="AktivitetDTO", field="historikk")
fun getHistorikk(aktivitet: AktivitetDTO): Historikk {
val aktivitetId = aktivitet.id.toLong()
return historikkService.hentHistorikk(listOf(aktivitetId))[aktivitetId]!!
}

private fun getContextUserIdent(fnr: String): Person {
return when {
authService.erEksternBruker() -> Person.fnr(authService.getLoggedInnUser().get())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import graphql.schema.CoercingParseValueException
import graphql.schema.GraphQLScalarType
import no.nav.veilarbaktivitet.util.DateUtils
import java.time.ZoneOffset
import java.time.ZonedDateTime
import java.util.*

object DateScalar {
Expand Down Expand Up @@ -39,6 +40,7 @@ object DateScalar {
fun serializeDate(dataFetcherResult: Any): String {
return when (dataFetcherResult) {
is Date -> DateUtils.iso8601Fromdate(dataFetcherResult, ZoneOffset.systemDefault())
is ZonedDateTime -> dataFetcherResult.toString()
else -> throw CoercingParseValueException("Failed to parse input in serializeDate")
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ class Location(val line: String, val column: Int)
class Extension(val classification: String)

class QueryAktivitetsPerioder(
val perioder: List<OppfolgingsPeriode>? = emptyList()
val perioder: List<OppfolgingsPeriode>? = emptyList(),
val aktivitet: AktivitetDTO? = null
)

class GraphqlResult(
Expand Down
18 changes: 18 additions & 0 deletions src/main/resources/graphql/schema.graphqls
Original file line number Diff line number Diff line change
@@ -1,9 +1,25 @@
type Query {
perioder(fnr: String!): [OppfolgingsPeriode]
aktivitet(aktivitetId: String): AktivitetDTO
}

type Historikk {
endringer: [Endring]
}

type Endring {
endretAvType: Innsender
endretAv: String
tidspunkt: Date
beskrivelseForVeileder: String!
beskrivelseForBruker: String!
beskrivelseForArkiv: String!
}

type OppfolgingsPeriode {
id: String
start: Date
slutt: Date
aktiviteter: [AktivitetDTO]
}

Expand Down Expand Up @@ -70,6 +86,8 @@ type AktivitetDTO {
stillingFraNavData: StillingFraNavData

eksternAktivitet: EksternAktivitetDTO

historikk: Historikk
}

type EksternAktivitetDTO {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,20 @@ public GraphqlResult queryAktivitetskort(MockBruker mockBruker, RestassuredUser
return response.as(GraphqlResult.class);
}

public GraphqlResult queryHistorikk(MockBruker mockBruker, RestassuredUser user, String query, Long aktivitetId) {
var validatableResponse = user
.createRequest()
.body("{ \"query\": \""+ query +"\", \"variables\": { \"aktivitetId\": " + aktivitetId + " } }")
.post("http://localhost:" + port + "/veilarbaktivitet/graphql")
.then();
var response = validatableResponse
.assertThat()
.statusCode(HttpStatus.OK.value())
.extract()
.response();
return response.as(GraphqlResult.class);
}

public List<AktivitetDTO> hentVersjoner(String aktivitetId, MockBruker mockBruker, RestassuredUser user) {
Response response = user
.createRequest()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
package no.nav.veilarbaktivitet.aktivitetskort.graphql

import no.nav.veilarbaktivitet.SpringBootTestBase
import no.nav.veilarbaktivitet.aktivitet.AktivitetsplanController
import no.nav.veilarbaktivitet.aktivitet.domain.AktivitetStatus
import no.nav.veilarbaktivitet.aktivitet.dto.AktivitetTypeDTO
import no.nav.veilarbaktivitet.arkivering.ArkiveringsController
import no.nav.veilarbaktivitet.mock_nav_modell.BrukerOptions
import no.nav.veilarbaktivitet.mock_nav_modell.MockNavService
import no.nav.veilarbaktivitet.mock_nav_modell.MockVeileder
import no.nav.veilarbaktivitet.testutils.AktivitetDtoTestBuilder
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import java.time.ZonedDateTime
import java.util.*

class AktivitetskortControllerTest: SpringBootTestBase() {
Expand Down Expand Up @@ -140,9 +137,41 @@ class AktivitetskortControllerTest: SpringBootTestBase() {
.put("http://localhost:$port/veilarbaktivitet/api/aktivitet/${opprettetAktivitet.id}/status")

assertThat(result.statusCode).isEqualTo(400)
assertThat(result.body.asString()).isEqualTo("""
assertThat(result.body.asString()).isEqualTo(
"""
{"message":"Kan ikke endre aktivitet i en ferdig status","statusCode":400}
""".trimIndent())
""".trimIndent()
)
}

@Test
fun `skal kunne hente historikk`() {
val nyPeriode = UUID.randomUUID()
val jobbAktivitet = AktivitetDtoTestBuilder.nyAktivitet(AktivitetTypeDTO.IJOBB)
.toBuilder().oppfolgingsperiodeId(nyPeriode).build()
val aktivitet = aktivitetTestService.opprettAktivitet(mockBruker, mockBruker, jobbAktivitet)
aktivitetTestService.oppdaterAktivitetStatus(mockBruker, mockVeileder, aktivitet, AktivitetStatus.GJENNOMFORES)
val aktivitetIdParam = "\$aktivitetId"
val query = """
query($aktivitetIdParam: String) {
aktivitet(aktivitetId: $aktivitetIdParam) {
historikk {
endringer {
endretAvType,
endretAv,
tidspunkt,
beskrivelseForVeileder,
beskrivelseForBruker,
beskrivelseForArkiv,
}
}
}
}
""".trimIndent().replace("\n", "")
val result = aktivitetTestService.queryHistorikk(mockBruker, mockBruker, query, aktivitet.id.toLong())
assertThat(result.errors).isNull()
assertThat(result.data?.aktivitet?.historikk).isNotNull()
assertThat(result.data?.aktivitet?.historikk?.endringer).hasSize(2)
}

}

0 comments on commit 7d40665

Please sign in to comment.