Skip to content
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
Expand Up @@ -5,6 +5,8 @@ import io.ktor.client.call.*
import io.ktor.client.request.*
import io.ktor.http.*
import no.nav.tms.token.support.tokendings.exchange.TokendingsService
import no.nav.tms.varsel.api.varsel.v2.AktiveVarslerV2
import no.nav.tms.varsel.api.varsel.v2.AlleVarsler
import java.time.ZonedDateTime

class VarselConsumer(
Expand Down Expand Up @@ -32,6 +34,12 @@ class VarselConsumer(
return getVarsler(userToken, "/varsel/sammendrag/alle", preferertSpraak = preferertSpraak)
.let(AlleVarsler::fromVarsler)
}

suspend fun getAktiveVarslerV2(userToken: String, preferertSpraak: String?): AktiveVarslerV2 {
return getVarsler(userToken, "/varsel/sammendrag/aktive", preferertSpraak = preferertSpraak)
.let (AktiveVarslerV2::fromVarsler)
}

suspend fun postInaktiver(userToken: String, varselId: String) {
val authorityToken = tokendingsService.exchangeToken(userToken, varselAuthorityClientId)

Expand Down
78 changes: 0 additions & 78 deletions src/main/kotlin/no/nav/tms/varsel/api/varsel/alleVarsler.kt

This file was deleted.

39 changes: 39 additions & 0 deletions src/main/kotlin/no/nav/tms/varsel/api/varsel/v2/Varsel.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package no.nav.tms.varsel.api.varsel.v2

import no.nav.tms.varsel.api.varsel.VarselAuthority
import no.nav.tms.varsel.api.varsel.VarselType
import java.time.ZonedDateTime

data class Varsel(
@Deprecated("Use varselId") val eventId: String,
@Deprecated("Use tidspunkt") val forstBehandlet: ZonedDateTime,
val isMasked: Boolean,
val spraakkode: String?,
val tekst: String?,
val link: String?,
val eksternVarslingSendt: Boolean,
val eksternVarslingKanaler: List<String>,
val type: VarselType,
val isInaktiverbar: Boolean,

) {
companion object {
fun fromVarsel(varsel: VarselAuthority.Varsel): Varsel {
val isMasked = varsel.innhold == null
val isInaktivertOppgave = varsel.type == VarselType.oppgave && !varsel.aktiv

return Varsel(
eventId = varsel.varselId,
forstBehandlet = varsel.opprettet,
isMasked = isMasked,
spraakkode = varsel.innhold?.spraakkode,
tekst = varsel.innhold?.tekst,
link = if (isInaktivertOppgave) null else varsel.innhold?.link,
eksternVarslingSendt = varsel.eksternVarslingSendt,
eksternVarslingKanaler = varsel.eksternVarslingKanaler,
type = if (varsel.type == VarselType.oppgave) VarselType.oppgave else VarselType.beskjed,
isInaktiverbar = varsel.type == VarselType.beskjed && varsel.aktiv && !isMasked,
)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package no.nav.tms.varsel.api.varsel.v2

import no.nav.tms.varsel.api.varsel.VarselAuthority
import no.nav.tms.varsel.api.varsel.VarselType


data class AktiveVarslerV2(val beskjeder: List<Varsel>, val oppgaver: List<Varsel>) {
companion object {
fun fromVarsler(varsler: List<VarselAuthority.Varsel>): AktiveVarslerV2 {
val beskjeder = mutableListOf<Varsel>()
val oppgaver = mutableListOf<Varsel>()

varsler.map {
if (it.type == VarselType.oppgave) {
oppgaver.add(Varsel.fromVarsel(it))
} else {
beskjeder.add(Varsel.fromVarsel(it))
}
}
return AktiveVarslerV2(beskjeder = beskjeder, oppgaver = oppgaver)
}
}
}
40 changes: 40 additions & 0 deletions src/main/kotlin/no/nav/tms/varsel/api/varsel/v2/alleVarsler.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package no.nav.tms.varsel.api.varsel.v2

import no.nav.tms.varsel.api.varsel.VarselAuthority
import no.nav.tms.varsel.api.varsel.VarselType

data class AlleVarsler(
val hasMaskedVarsel: Boolean,
val aktive: AktiveVarslerV2,
val inaktive: List<Varsel>,
) {
companion object {
fun fromVarsler(varsler: List<VarselAuthority.Varsel>): AlleVarsler {
val aktivBeskjeder = mutableListOf<Varsel>()
val aktivOppgaver = mutableListOf<Varsel>()
val inaktivtVarseler = mutableListOf<Varsel>()
var hasMaskedVarsel = false

varsler.map {
if(it.innhold == null) {
hasMaskedVarsel = true
}

if (it.aktiv) {
if (it.type == VarselType.oppgave) {
aktivOppgaver.add(Varsel.fromVarsel(it))
} else {
aktivBeskjeder.add(Varsel.fromVarsel(it))
}
} else {
inaktivtVarseler.add(Varsel.fromVarsel(it))
}
}
return AlleVarsler(
hasMaskedVarsel = hasMaskedVarsel,
aktive = AktiveVarslerV2(aktivBeskjeder, aktivOppgaver),
inaktive = inaktivtVarseler
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,14 @@ fun Route.varsel(
}
}

get("v2/aktive"){
varselConsumer.getAktiveVarslerV2(
userToken = call.userToken,
preferertSpraak = call.request.preferertSpraak
).let { aktiveVarsler ->
call.respond(HttpStatusCode.OK, aktiveVarsler)
}
}

post("beskjed/inaktiver") {
varselConsumer.postInaktiver(varselId = call.varselId(), userToken = call.userToken)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,10 @@ import org.junit.jupiter.api.Test
import java.time.ZonedDateTime
import com.fasterxml.jackson.module.kotlin.readValue
import no.nav.tms.varsel.api.varsel.*
import no.nav.tms.varsel.api.varsel.v2.AktiveVarslerV2
import no.nav.tms.varsel.api.varsel.v2.AlleVarsler

class VarselRoutesTest {
class VarselRoutesTest{

private val objectMapper = jacksonObjectMapper().jsonConfig()

Expand Down Expand Up @@ -69,6 +71,31 @@ class VarselRoutesTest {

}

@Test
fun `Hent aktive varsler V2`() = varselRoutesTest{ client ->
val aktiveVarsler = listOf(
VarselTestData.varsel(type = VarselType.beskjed),
VarselTestData.varsel(type = VarselType.oppgave),
VarselTestData.varsel(type = VarselType.oppgave),
VarselTestData.varsel(type = VarselType.innboks),
VarselTestData.varsel(type = VarselType.innboks),
VarselTestData.varsel(type = VarselType.innboks),
)
setupVarselAuthority(aktiveVarslerFromEventHandler = aktiveVarsler)

mockVarselApi(
varselConsumer = setupVarselConsumer(),
authMockInstaller = installAuthenticatedMock(LevelOfAssurance.LEVEL_4)
)

val response = client.get("/v2/aktive")
response.status shouldBe HttpStatusCode.OK

val varsler: AktiveVarslerV2 = response.bodyFromJson()
varsler.beskjeder.size shouldBe 4
varsler.oppgaver.size shouldBe 2
}

@Test
fun `Henter inaktiverte varsler`() = varselRoutesTest { client ->
val varsler = listOf(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package no.nav.tms.varsel.api.varsel

import io.kotest.matchers.shouldBe
import no.nav.tms.varsel.api.varsel.v2.AktiveVarslerV2
import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.Test

class AktiveVarslerV2Test{
@Test
fun `Riktig antall varsler i output`(){
val incomingVarselList = listOf(
VarselV2TestData.incomingVarsel(type = VarselType.beskjed),
VarselV2TestData.incomingVarsel(type = VarselType.beskjed),
VarselV2TestData.incomingVarsel(type = VarselType.innboks),
VarselV2TestData.incomingVarsel(type = VarselType.oppgave),
VarselV2TestData.incomingVarsel(type = VarselType.oppgave),

)

val result = AktiveVarslerV2.fromVarsler(incomingVarselList)
assertEquals(3, result.beskjeder.size)
assertEquals(2, result.oppgaver.size)
}

@Test
fun `Ingen varsler i output`(){
val incomingVarselList = listOf<VarselAuthority.Varsel>()

val result = AktiveVarslerV2.fromVarsler(incomingVarselList)
assertEquals(0, result.beskjeder.size)
assertEquals(0, result.oppgaver.size)
}

@Test
fun `Kun aktive beskjeder skal være inaktiverbare`() {
val incomingVarselList = listOf(
VarselV2TestData.incomingVarsel(type = VarselType.beskjed),
VarselV2TestData.incomingVarsel(type = VarselType.beskjed),
VarselV2TestData.incomingVarsel(type = VarselType.innboks),
VarselV2TestData.incomingVarsel(type = VarselType.oppgave),
VarselV2TestData.incomingVarsel(type = VarselType.oppgave),
)

AktiveVarslerV2.fromVarsler(incomingVarselList).apply {
beskjeder[0].isInaktiverbar shouldBe true
beskjeder[1].isInaktiverbar shouldBe true
beskjeder[2].isInaktiverbar shouldBe false
oppgaver.forEach() {
it.isInaktiverbar shouldBe false
}

}
}
}
Loading