From b7c5976cf83500848884bd6c8f408c45f8f71216 Mon Sep 17 00:00:00 2001 From: Andreas Sagen Aspaas Date: Fri, 29 Sep 2023 15:59:15 +0200 Subject: [PATCH] add test to show that all rules are run --- .../syfo/services/RuleExecutionServiceTest.kt | 180 +++++++++++------- 1 file changed, 116 insertions(+), 64 deletions(-) diff --git a/src/test/kotlin/no/nav/syfo/services/RuleExecutionServiceTest.kt b/src/test/kotlin/no/nav/syfo/services/RuleExecutionServiceTest.kt index 1ef1928f..a9b4d4ed 100644 --- a/src/test/kotlin/no/nav/syfo/services/RuleExecutionServiceTest.kt +++ b/src/test/kotlin/no/nav/syfo/services/RuleExecutionServiceTest.kt @@ -3,6 +3,11 @@ package no.nav.syfo.services import io.kotest.core.spec.style.FunSpec import io.mockk.every import io.mockk.mockk +import java.time.LocalDate +import no.nav.syfo.client.Behandler +import no.nav.syfo.client.Godkjenning +import no.nav.syfo.client.Kode +import no.nav.syfo.generateSykmelding import no.nav.syfo.model.Status import no.nav.syfo.model.Sykmelding import no.nav.syfo.rules.common.RuleExecution @@ -10,6 +15,8 @@ import no.nav.syfo.rules.common.RuleHit import no.nav.syfo.rules.common.RuleResult import no.nav.syfo.rules.common.UtenJuridisk import no.nav.syfo.rules.dsl.TreeOutput +import no.nav.syfo.rules.tilbakedatering.toRuleMetadata +import no.nav.syfo.rules.validation.ruleMetadataSykmelding import org.amshove.kluent.shouldBeEqualTo enum class TestRules { @@ -19,71 +26,116 @@ enum class TestRules { } class RuleExecutionServiceTest : - FunSpec({ - val sykmeldnig = mockk(relaxed = true) - val ruleMetadataSykmelding = mockk(relaxed = true) - val rulesExecution = mockk>(relaxed = true) - val ruleExecutionService = RuleExecutionService() + FunSpec( + { + val sykmeldnig = mockk(relaxed = true) + val ruleMetadataSykmelding = mockk(relaxed = true) + val rulesExecution = mockk>(relaxed = true) + val ruleExecutionService = RuleExecutionService() - test("Run ruleTrees") { - every { - rulesExecution.runRules( - any(), - any(), - ) - } returns - (TreeOutput( - treeResult = - RuleResult( - status = Status.OK, - ruleHit = null, + test("Should include all rules") { + val sykmelding = generateSykmelding() + val behandler = + Behandler( + listOf( + Godkjenning( + autorisasjon = + Kode( + aktiv = true, + oid = 7704, + verdi = "1", + ), + helsepersonellkategori = + Kode( + aktiv = true, + oid = 0, + verdi = "LE", + ), + ), ), - ) to UtenJuridisk) + ) + val result = + ruleExecutionService.runRules( + generateSykmelding(), + ruleMetadataSykmelding( + sykmelding + .toRuleMetadata() + .copy( + pasientFodselsdato = LocalDate.now().minusYears(20), + ), + ) + .copy( + behandlerOgStartdato = + BehandlerOgStartdato( + behandler, + sykmelding.perioder.sortedFOMDate().first(), + ), + ), + ) - val (rule, juridisk) = - ruleExecutionService - .runRules(sykmeldnig, ruleMetadataSykmelding, sequenceOf(rulesExecution)) - .first() - rule.treeResult.status shouldBeEqualTo Status.OK - juridisk shouldBeEqualTo UtenJuridisk - } + result.size shouldBeEqualTo 10 + } - test("should not run all rules if first no OK") { - val okRule = - mockk>().also { - every { it.runRules(any(), any()) } returns - (TreeOutput( - treeResult = - RuleResult( - status = Status.OK, - ruleHit = null, - ), - ) to UtenJuridisk) - } - val invalidRuleExecution = - mockk>().also { - every { it.runRules(any(), any()) } returns - (TreeOutput( - treeResult = - RuleResult( - status = Status.INVALID, - ruleHit = - RuleHit( - Status.INVALID, - TestRules.RULE2.name, - "message", - "message" - ), - ), - ) to UtenJuridisk) - } - val results = - ruleExecutionService.runRules( - sykmeldnig, - ruleMetadataSykmelding, - sequenceOf(invalidRuleExecution, okRule) - ) - results.size shouldBeEqualTo 1 - results.first().first.treeResult.status shouldBeEqualTo Status.INVALID - } - }) + test("Run ruleTrees") { + every { + rulesExecution.runRules( + any(), + any(), + ) + } returns + (TreeOutput( + treeResult = + RuleResult( + status = Status.OK, + ruleHit = null, + ), + ) to UtenJuridisk) + + val (rule, juridisk) = + ruleExecutionService + .runRules(sykmeldnig, ruleMetadataSykmelding, sequenceOf(rulesExecution)) + .first() + rule.treeResult.status shouldBeEqualTo Status.OK + juridisk shouldBeEqualTo UtenJuridisk + } + + test("should not run all rules if first no OK") { + val okRule = + mockk>().also { + every { it.runRules(any(), any()) } returns + (TreeOutput( + treeResult = + RuleResult( + status = Status.OK, + ruleHit = null, + ), + ) to UtenJuridisk) + } + val invalidRuleExecution = + mockk>().also { + every { it.runRules(any(), any()) } returns + (TreeOutput( + treeResult = + RuleResult( + status = Status.INVALID, + ruleHit = + RuleHit( + Status.INVALID, + TestRules.RULE2.name, + "message", + "message", + ), + ), + ) to UtenJuridisk) + } + val results = + ruleExecutionService.runRules( + sykmeldnig, + ruleMetadataSykmelding, + sequenceOf(invalidRuleExecution, okRule), + ) + results.size shouldBeEqualTo 1 + results.first().first.treeResult.status shouldBeEqualTo Status.INVALID + } + }, + )