From 315bc4f9fe912931ba564c52897a9bf744b270fa Mon Sep 17 00:00:00 2001 From: Anders Rognstad <79838644+andersrognstad@users.noreply.github.com> Date: Tue, 26 Mar 2024 08:35:32 +0100 Subject: [PATCH] IS-2158: Support friskmelding til arbeidsformidling dialogmeldingkode (#310) * IS-2158: Support friskmelding til arbeidsformidling * isfrisktilarbeid dialogmelding bestilling topic access --- .../behandler-dialogmelding-bestilling.yaml | 3 + build.gradle.kts | 5 +- .../converter/DialogmeldingConverter.kt | 1 + .../dialogmelding/DialogmeldingServiceSpek.kt | 26 ++++- .../no/nav/syfo/testhelper/TestDatabase.kt | 2 +- ...handlerDialogmeldingBestillingGenerator.kt | 83 +++++++------ ...dingFriskmeldingTilArbeidsformidlingXml.kt | 109 ++++++++++++++++++ 7 files changed, 188 insertions(+), 41 deletions(-) create mode 100644 src/test/kotlin/no/nav/syfo/testhelper/generator/FellesformatDialogmeldingFriskmeldingTilArbeidsformidlingXml.kt diff --git a/.nais/kafka/behandler-dialogmelding-bestilling.yaml b/.nais/kafka/behandler-dialogmelding-bestilling.yaml index d7f80eb6..64f55a5b 100644 --- a/.nais/kafka/behandler-dialogmelding-bestilling.yaml +++ b/.nais/kafka/behandler-dialogmelding-bestilling.yaml @@ -28,6 +28,9 @@ spec: - team: teamsykefravr application: isbehandlerdialog access: write + - team: teamsykefravr + application: isfrisktilarbeid + access: write - team: disykefravar application: dvh-sykefravar-airflow-kafka access: read diff --git a/build.gradle.kts b/build.gradle.kts index 2b7115b6..0e90e60e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,4 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import org.apache.tools.ant.taskdefs.condition.Os group = "no.nav.syfo" version = "1.0.0" @@ -25,7 +24,7 @@ object Versions { const val mq = "9.3.4.1" const val nimbusjosejwt = "9.37.3" const val postgres = "42.7.2" - val postgresEmbedded = if (Os.isFamily(Os.FAMILY_MAC)) "1.0.0" else "0.13.4" + const val postgresEmbedded = "2.0.6" const val spek = "2.0.19" const val syfotjenester = "1.2021.06.09-13.09-b3d30de9996e" } @@ -127,7 +126,7 @@ dependencies { implementation("org.flywaydb:flyway-core:${Versions.flyway}") implementation("com.zaxxer:HikariCP:${Versions.hikari}") implementation("org.postgresql:postgresql:${Versions.postgres}") - testImplementation("com.opentable.components:otj-pg-embedded:${Versions.postgresEmbedded}") + testImplementation("io.zonky.test:embedded-postgres:${Versions.postgresEmbedded}") testImplementation("com.nimbusds:nimbus-jose-jwt:${Versions.nimbusjosejwt}") testImplementation("io.ktor:ktor-server-test-host:${Versions.ktor}") diff --git a/src/main/kotlin/no/nav/syfo/dialogmelding/converter/DialogmeldingConverter.kt b/src/main/kotlin/no/nav/syfo/dialogmelding/converter/DialogmeldingConverter.kt index 0d83a417..82ed6c2a 100644 --- a/src/main/kotlin/no/nav/syfo/dialogmelding/converter/DialogmeldingConverter.kt +++ b/src/main/kotlin/no/nav/syfo/dialogmelding/converter/DialogmeldingConverter.kt @@ -20,6 +20,7 @@ fun createDialogmelding(melding: DialogmeldingToBehandlerBestilling): XMLDialogm fellesFactory.createXMLCV() .withDN( when (kode) { + 2 -> "Friskmelding til arbeidsformidling" 3 -> "Retur av legeerklæring" 4 -> "Avlysning dialogmøte" 8 -> "Melding fra NAV" diff --git a/src/test/kotlin/no/nav/syfo/dialogmelding/DialogmeldingServiceSpek.kt b/src/test/kotlin/no/nav/syfo/dialogmelding/DialogmeldingServiceSpek.kt index edafa4d6..df5ae21f 100644 --- a/src/test/kotlin/no/nav/syfo/dialogmelding/DialogmeldingServiceSpek.kt +++ b/src/test/kotlin/no/nav/syfo/dialogmelding/DialogmeldingServiceSpek.kt @@ -286,7 +286,7 @@ object DialogmeldingServiceSpek : Spek({ val messageSlot = slot() justRun { mqSender.sendMessageToEmottak(capture(messageSlot)) } - val melding = generateDialogmeldingToBehandlerBestillingNotatReturLegeerklæringDTO( + val melding = generateDialogmeldingToBehandlerBestillingNotatReturLegeerklaringDTO( behandlerRef = behandlerRef, uuid = uuid, arbeidstakerPersonident = arbeidstakerPersonident, @@ -305,6 +305,30 @@ object DialogmeldingServiceSpek : Spek({ expectedFellesformatMessageAsRegex.matches(actualFellesformatMessage), ) } + it("Sends correct message on MQ when friskmelding til arbeidsformidling") { + clearAllMocks() + val messageSlot = slot() + justRun { mqSender.sendMessageToEmottak(capture(messageSlot)) } + + val melding = generateDialogmeldingToBehandlerBestillingNotatFriskmeldingTilArbeidsformidlingDTO( + behandlerRef = behandlerRef, + uuid = uuid, + arbeidstakerPersonident = arbeidstakerPersonident, + ).toDialogmeldingToBehandlerBestilling( + behandler = behandler, + ) + + runBlocking { + dialogmeldingService.sendMelding(melding) + } + verify(exactly = 1) { mqSender.sendMessageToEmottak(any()) } + + val expectedFellesformatMessageAsRegex = defaultFellesformatDialogmeldingFriskmeldingTilArbeidsformidlingXmlRegex() + val actualFellesformatMessage = messageSlot.captured + assertTrue( + expectedFellesformatMessageAsRegex.matches(actualFellesformatMessage), + ) + } it("Sends correct message on MQ when melding fra NAV") { clearAllMocks() val messageSlot = slot() diff --git a/src/test/kotlin/no/nav/syfo/testhelper/TestDatabase.kt b/src/test/kotlin/no/nav/syfo/testhelper/TestDatabase.kt index 36430b33..9d2bae8d 100644 --- a/src/test/kotlin/no/nav/syfo/testhelper/TestDatabase.kt +++ b/src/test/kotlin/no/nav/syfo/testhelper/TestDatabase.kt @@ -1,6 +1,6 @@ package no.nav.syfo.testhelper -import com.opentable.db.postgres.embedded.EmbeddedPostgres +import io.zonky.test.db.postgres.embedded.EmbeddedPostgres import no.nav.syfo.application.database.DatabaseInterface import no.nav.syfo.application.database.toList import no.nav.syfo.behandler.database.* diff --git a/src/test/kotlin/no/nav/syfo/testhelper/generator/BehandlerDialogmeldingBestillingGenerator.kt b/src/test/kotlin/no/nav/syfo/testhelper/generator/BehandlerDialogmeldingBestillingGenerator.kt index 9abe823b..7c592346 100644 --- a/src/test/kotlin/no/nav/syfo/testhelper/generator/BehandlerDialogmeldingBestillingGenerator.kt +++ b/src/test/kotlin/no/nav/syfo/testhelper/generator/BehandlerDialogmeldingBestillingGenerator.kt @@ -42,34 +42,24 @@ fun generateDialogmeldingToBehandlerBestillingAvlysningDTO( behandlerRef: UUID, uuid: UUID, arbeidstakerPersonident: Personident = Personident("01010112345"), -) = DialogmeldingToBehandlerBestillingDTO( - behandlerRef = behandlerRef.toString(), - personIdent = arbeidstakerPersonident.value, - dialogmeldingUuid = uuid.toString(), - dialogmeldingRefParent = uuid.toString(), - dialogmeldingRefConversation = uuid.toString(), - dialogmeldingType = DialogmeldingType.DIALOG_NOTAT.name, - dialogmeldingKodeverk = DialogmeldingKodeverk.HENVENDELSE.name, - dialogmeldingKode = DialogmeldingKode.KODE4.value, - dialogmeldingTekst = "Møtet er avlyst", - dialogmeldingVedlegg = null, +) = generateDialogmeldingToBehandlerBestillingHenvendelseNotat( + behandlerRef = behandlerRef, + uuid = uuid, + arbeidstakerPersonident = arbeidstakerPersonident, + kode = DialogmeldingKode.KODE4, + tekst = "Møtet er avlyst", ) fun generateDialogmeldingToBehandlerBestillingReferatDTO( behandlerRef: UUID, uuid: UUID, arbeidstakerPersonident: Personident = Personident("01010112345"), -) = DialogmeldingToBehandlerBestillingDTO( - behandlerRef = behandlerRef.toString(), - personIdent = arbeidstakerPersonident.value, - dialogmeldingUuid = uuid.toString(), - dialogmeldingRefParent = uuid.toString(), - dialogmeldingRefConversation = uuid.toString(), - dialogmeldingType = DialogmeldingType.DIALOG_NOTAT.name, - dialogmeldingKodeverk = DialogmeldingKodeverk.HENVENDELSE.name, - dialogmeldingKode = DialogmeldingKode.KODE9.value, - dialogmeldingTekst = "Dette er et referat", - dialogmeldingVedlegg = null, +) = generateDialogmeldingToBehandlerBestillingHenvendelseNotat( + behandlerRef = behandlerRef, + uuid = uuid, + arbeidstakerPersonident = arbeidstakerPersonident, + kode = DialogmeldingKode.KODE9, + tekst = "Dette er et referat", ) fun generateDialogmeldingToBehandlerBestillingForesporselDTO( @@ -123,21 +113,28 @@ fun generateDialogmeldingToBehandlerBestillingForesporselLegeerklaringDTO( dialogmeldingVedlegg = null, ) -fun generateDialogmeldingToBehandlerBestillingNotatReturLegeerklæringDTO( +fun generateDialogmeldingToBehandlerBestillingNotatReturLegeerklaringDTO( behandlerRef: UUID, uuid: UUID, arbeidstakerPersonident: Personident = Personident("01010112345"), -) = DialogmeldingToBehandlerBestillingDTO( - behandlerRef = behandlerRef.toString(), - personIdent = arbeidstakerPersonident.value, - dialogmeldingUuid = uuid.toString(), - dialogmeldingRefParent = uuid.toString(), - dialogmeldingRefConversation = uuid.toString(), - dialogmeldingType = DialogmeldingType.DIALOG_NOTAT.name, - dialogmeldingKodeverk = DialogmeldingKodeverk.HENVENDELSE.name, - dialogmeldingKode = DialogmeldingKode.KODE3.value, - dialogmeldingTekst = "Dette er en henvendelse om retur av legeerklæring", - dialogmeldingVedlegg = null, +) = generateDialogmeldingToBehandlerBestillingHenvendelseNotat( + behandlerRef = behandlerRef, + uuid = uuid, + arbeidstakerPersonident = arbeidstakerPersonident, + kode = DialogmeldingKode.KODE3, + tekst = "Dette er en henvendelse om retur av legeerklæring", +) + +fun generateDialogmeldingToBehandlerBestillingNotatFriskmeldingTilArbeidsformidlingDTO( + behandlerRef: UUID, + uuid: UUID, + arbeidstakerPersonident: Personident = Personident("01010112345"), +) = generateDialogmeldingToBehandlerBestillingHenvendelseNotat( + behandlerRef = behandlerRef, + uuid = uuid, + arbeidstakerPersonident = arbeidstakerPersonident, + kode = DialogmeldingKode.KODE2, + tekst = "Dette er en henvendelse om friskmelding til arbeidsformidling", ) fun generateDialogmeldingToBehandlerBestillingOppfolgingsplanDTO( @@ -161,6 +158,20 @@ fun generateDialogmeldingToBehandlerBestillingHenvendelseMeldingFraNavDTO( behandlerRef: UUID, uuid: UUID, arbeidstakerPersonident: Personident = Personident("01010112345"), +) = generateDialogmeldingToBehandlerBestillingHenvendelseNotat( + behandlerRef = behandlerRef, + uuid = uuid, + arbeidstakerPersonident = arbeidstakerPersonident, + kode = DialogmeldingKode.KODE8, + tekst = "Dette er en generell henvendelse fra NAV som ikke utløser takst", +) + +private fun generateDialogmeldingToBehandlerBestillingHenvendelseNotat( + behandlerRef: UUID, + uuid: UUID, + kode: DialogmeldingKode, + tekst: String, + arbeidstakerPersonident: Personident = Personident("01010112345"), ) = DialogmeldingToBehandlerBestillingDTO( behandlerRef = behandlerRef.toString(), personIdent = arbeidstakerPersonident.value, @@ -169,7 +180,7 @@ fun generateDialogmeldingToBehandlerBestillingHenvendelseMeldingFraNavDTO( dialogmeldingRefConversation = uuid.toString(), dialogmeldingType = DialogmeldingType.DIALOG_NOTAT.name, dialogmeldingKodeverk = DialogmeldingKodeverk.HENVENDELSE.name, - dialogmeldingKode = DialogmeldingKode.KODE8.value, - dialogmeldingTekst = "Dette er en generell henvendelse fra NAV som ikke utløser takst", + dialogmeldingKode = kode.value, + dialogmeldingTekst = tekst, dialogmeldingVedlegg = null, ) diff --git a/src/test/kotlin/no/nav/syfo/testhelper/generator/FellesformatDialogmeldingFriskmeldingTilArbeidsformidlingXml.kt b/src/test/kotlin/no/nav/syfo/testhelper/generator/FellesformatDialogmeldingFriskmeldingTilArbeidsformidlingXml.kt new file mode 100644 index 00000000..38d9e309 --- /dev/null +++ b/src/test/kotlin/no/nav/syfo/testhelper/generator/FellesformatDialogmeldingFriskmeldingTilArbeidsformidlingXml.kt @@ -0,0 +1,109 @@ +package no.nav.syfo.testhelper.generator + +fun defaultFellesformatDialogmeldingFriskmeldingTilArbeidsformidlingXmlRegex(): Regex { + return Regex( + "<\\?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"\\?>\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " v1.2 2006-05-24\n" + + " \\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{0,9}\n" + + " [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\n" + + " \n" + + " \n" + + " [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\n" + + " [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\n" + + " \n" + + " \n" + + " \n" + + " NAV\n" + + " \n" + + " 889640782\n" + + " \n" + + " \n" + + " \n" + + " 79768\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " 99\n" + + " \n" + + " \n" + + " \n" + + " 123456789\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " adresse\n" + + " 1234\n" + + " poststed\n" + + " \n" + + " \n" + + " Scully\n" + + " Katherine\n" + + " Dana\n" + + " \n" + + " 12125678911\n" + + " \n" + + " \n" + + " \n" + + " 9\n" + + " \n" + + " \n" + + " \n" + + " 77\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " Etternavn\n" + + " Mellomnavn\n" + + " Fornavn\n" + + " \n" + + " 01010112345\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " text/xml\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " Dette er en henvendelse om friskmelding til arbeidsformidling\n" + + " [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " application/pdf\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "\n" + ) +}