Skip to content

Commit

Permalink
Hindre flytting mellom samarbeid av behovsvurderinger som ikke er AVS…
Browse files Browse the repository at this point in the history
…LUTTET

Sende til Salesforce behovsvurdering som har blitt flyttet

Co-authored-by: Nima Jimale <nima.jimale@nav.no>
  • Loading branch information
thomasdufourd and nimajimale committed Nov 27, 2024
1 parent 61579cf commit eb6a108
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 12 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ jobs:
id-token: write
name: Deploy app to dev
needs: build
if: github.ref == 'refs/heads/nye-undertemaer'
if: github.ref == 'refs/heads/sende-melding-til-sf-ved-flytt-behovsv'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand Down
14 changes: 12 additions & 2 deletions src/main/kotlin/no/nav/lydia/ia/sak/SpørreundersøkelseService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ class SpørreundersøkelseService(
)
}

fun oppdaterBehovsvurdering(
fun oppdaterSamarbeidIdIBehovsvurdering(
behovsvurderingId: String,
oppdaterBehovsvurderingDto: OppdaterBehovsvurderingDto,
): Either<Feil, Spørreundersøkelse> {
Expand All @@ -301,8 +301,11 @@ class SpørreundersøkelseService(
if (behovsvurdering.saksnummer != oppdaterBehovsvurderingDto.saksnummer) {
return IASakSpørreundersøkelseError.`feil under oppdatering`.left()
}
if (behovsvurdering.status != AVSLUTTET) {
return IASakSpørreundersøkelseError.`ikke avsluttet, kan ikke bytte samarbeid`.left()
}

return iaSakService.hentIASak(behovsvurdering.saksnummer).flatMap {
val oppdatertBehovsvurdering = iaSakService.hentIASak(behovsvurdering.saksnummer).flatMap {
iaProsessService.hentIAProsesser(it)
}.map { prosess ->
prosess.map { it.id }
Expand All @@ -313,6 +316,13 @@ class SpørreundersøkelseService(
IASakSpørreundersøkelseError.`feil under oppdatering`.left()
}
}

oppdatertBehovsvurdering.getOrNull()?.let { oppdatertSpørreundersøkelse ->
if (oppdatertSpørreundersøkelse.status == AVSLUTTET) {
spørreundersøkelseObservers.forEach { it.receive(oppdatertSpørreundersøkelse) }
}
}
return oppdatertBehovsvurdering
}

private fun sendResultaterForTemaPåKafka(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,10 @@ fun Route.iaSakSpørreundersøkelse(
val input = call.receive<OppdaterBehovsvurderingDto>()

call.somSaksbehandler(adGrupper) {
spørreundersøkelseService.oppdaterBehovsvurdering(id, input)
spørreundersøkelseService.oppdaterSamarbeidIdIBehovsvurdering(
behovsvurderingId = id,
oppdaterBehovsvurderingDto = input,
)
}.also { spørreundersøkelseEither ->
auditLog.auditloggEither(
call = call,
Expand Down Expand Up @@ -251,7 +254,15 @@ object IASakSpørreundersøkelseError {
val `feil status kan ikke starte` =
Feil("Kan ikke starte spørreundersøkelse, feil status", HttpStatusCode.Forbidden)
val `ikke avsluttet` =
Feil("Spørreundersøkelse er ikke i status '${AVSLUTTET.name}', kan ikke hente resultat", HttpStatusCode.Forbidden)
Feil(
"Spørreundersøkelse er ikke i status '${AVSLUTTET.name}', kan ikke hente resultat",
HttpStatusCode.Forbidden,
)
val `ikke avsluttet, kan ikke bytte samarbeid` =
Feil(
"Spørreundersøkelse er ikke i status '${AVSLUTTET.name}', kan ikke bytte samarbeid",
HttpStatusCode.BadRequest,
)
val `generell feil under uthenting` =
Feil("Generell feil under uthenting av en spørreundersøkelse", HttpStatusCode.InternalServerError)
val `feil under oppdatering` =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import io.kotest.matchers.collections.shouldHaveSize
import io.kotest.matchers.collections.shouldNotBeEmpty
import io.kotest.matchers.shouldBe
import io.kotest.matchers.shouldNotBe
import io.kotest.matchers.string.shouldContain
import io.kotest.matchers.string.shouldMatch
import io.kotest.matchers.string.shouldNotBeEmpty
import io.ktor.http.HttpStatusCode
Expand Down Expand Up @@ -39,6 +40,7 @@ import no.nav.lydia.helper.forExactlyOne
import no.nav.lydia.helper.hentAlleSamarbeid
import no.nav.lydia.helper.opprettNyttSamarbeid
import no.nav.lydia.helper.tilSingelRespons
import no.nav.lydia.ia.eksport.FullførtBehovsvurdering
import no.nav.lydia.ia.eksport.SpørreundersøkelseProdusent.SerializableSpørreundersøkelse
import no.nav.lydia.ia.sak.api.spørreundersøkelse.SPØRREUNDERSØKELSE_BASE_ROUTE
import no.nav.lydia.ia.sak.api.spørreundersøkelse.SpørreundersøkelseDto
Expand All @@ -49,14 +51,18 @@ import kotlin.test.Test

class BehovsvurderingApiTest {
private val spørreundersøkelseKonsument = kafkaContainerHelper.nyKonsument(this::class.java.name)
private val fullførtBehovsvurderingKonsument = kafkaContainerHelper.nyKonsument(this::class.java.name)

@Before
fun setUp() {
spørreundersøkelseKonsument.subscribe(mutableListOf(Topic.SPORREUNDERSOKELSE_TOPIC.navn))
fullførtBehovsvurderingKonsument.subscribe(mutableListOf(Topic.FULLFØRT_BEHOVSVURDERING_TOPIC.navn))
}

@After
fun tearDown() {
fullførtBehovsvurderingKonsument.unsubscribe()
fullførtBehovsvurderingKonsument.close()
spørreundersøkelseKonsument.unsubscribe()
spørreundersøkelseKonsument.close()
}
Expand Down Expand Up @@ -583,14 +589,58 @@ class BehovsvurderingApiTest {
val behovsvurdering = sak.opprettSpørreundersøkelse(prosessId = førsteSamarbeid.id)
hentSpørreundersøkelse(sak.orgnr, sak.saksnummer, førsteSamarbeid.id, type = "Behovsvurdering")
.map { it.id } shouldBe listOf(behovsvurdering.id)
behovsvurdering.start(orgnummer = sak.orgnr, saksnummer = sak.saksnummer)
behovsvurdering.avslutt(orgnummer = sak.orgnr, saksnummer = sak.saksnummer)

oppdaterBehovsvurdering(behovsvurdering, sak, sisteSamarbeid.id)

hentSpørreundersøkelse(sak.orgnr, sak.saksnummer, førsteSamarbeid.id, type = "Behovsvurdering")
.map { it.id } shouldBe emptyList()
hentSpørreundersøkelse(sak.orgnr, sak.saksnummer, sisteSamarbeid.id, type = "Behovsvurdering")
.map { it.id } shouldBe listOf(behovsvurdering.id)
}

@Test
fun `skal sende på nytt til SF en Kafka melding om at en fullført behhovsvurdering er flyttet`() {
val sak = nySakIKartlegges()
.opprettNyttSamarbeid(navn = "Først")
.opprettNyttSamarbeid(navn = "Sist")
val alleSamarbeid = sak.hentAlleSamarbeid()
val førsteSamarbeid = alleSamarbeid.first()
val sisteSamarbeid = alleSamarbeid.last()

val behovsvurdering = sak.opprettSpørreundersøkelse(prosessId = førsteSamarbeid.id)
behovsvurdering.start(orgnummer = sak.orgnr, saksnummer = sak.saksnummer)
behovsvurdering.avslutt(orgnummer = sak.orgnr, saksnummer = sak.saksnummer)
runBlocking {
kafkaContainerHelper.ventOgKonsumerKafkaMeldinger(
key = behovsvurdering.id,
konsument = fullførtBehovsvurderingKonsument,
) {
it.forExactlyOne { melding ->
val behovsvurderingIKafkaMelding = Json.decodeFromString<FullførtBehovsvurdering>(melding)
behovsvurderingIKafkaMelding.behovsvurderingId shouldBe behovsvurdering.id
behovsvurderingIKafkaMelding.prosessId shouldBe førsteSamarbeid.id.toString()
}
}
}

oppdaterBehovsvurdering(behovsvurdering, sak, sisteSamarbeid.id)

runBlocking {
kafkaContainerHelper.ventOgKonsumerKafkaMeldinger(
key = behovsvurdering.id,
konsument = fullførtBehovsvurderingKonsument,
) {
it.forExactlyOne { melding ->
val behovsvurderingIKafkaMelding = Json.decodeFromString<FullførtBehovsvurdering>(melding)
behovsvurderingIKafkaMelding.behovsvurderingId shouldBe behovsvurdering.id
behovsvurderingIKafkaMelding.prosessId shouldBe sisteSamarbeid.id.toString()
}
}
}
}

@Test
fun `skal ikke kunne flytte kartlegging en ugyldig prosess eller som lesebruker`() {
val sak = nySakIKartlegges()
Expand Down Expand Up @@ -623,7 +673,7 @@ class BehovsvurderingApiTest {
}

@Test
fun `skal kunne avslutte en flyttet behovsvurdering`() {
fun `skal IKKE kunne flytte en behovsvurdering som ikke er avsluttet (fullført)`() {
val sak = nySakIKartlegges()
.opprettNyttSamarbeid(navn = "Først")
.opprettNyttSamarbeid(navn = "Sist")
Expand All @@ -637,23 +687,22 @@ class BehovsvurderingApiTest {
val behovsvurdering = sak.opprettSpørreundersøkelse(prosessId = førsteSamarbeid.id)
behovsvurdering.start(orgnummer = sak.orgnr, saksnummer = sak.saksnummer)

val flyttetBehovsvurdering = oppdaterBehovsvurdering(behovsvurdering, sak, andreSamarbeid.id)
flyttetBehovsvurdering.avslutt(orgnummer = sak.orgnr, saksnummer = sak.saksnummer)
shouldFail { oppdaterBehovsvurdering(behovsvurdering, sak, andreSamarbeid.id) }.message shouldContain "kan ikke bytte samarbeid"

hentSpørreundersøkelse(
orgnr = sak.orgnr,
saksnummer = sak.saksnummer,
prosessId = andreSamarbeid.id,
prosessId = førsteSamarbeid.id,
type = "Behovsvurdering",
).forExactlyOne {
it.status shouldBe AVSLUTTET
it.samarbeidId shouldBe andreSamarbeid.id
it.status shouldBe PÅBEGYNT
it.samarbeidId shouldBe førsteSamarbeid.id
}

hentSpørreundersøkelse(
orgnr = sak.orgnr,
saksnummer = sak.saksnummer,
prosessId = førsteSamarbeid.id,
prosessId = andreSamarbeid.id,
type = "Behovsvurdering",
) shouldHaveSize 0
}
Expand Down

0 comments on commit eb6a108

Please sign in to comment.