Skip to content

Commit e667610

Browse files
committed
Fjern overflødig Pair, for lesbarhetens skyld
1 parent c691401 commit e667610

File tree

2 files changed

+56
-18
lines changed

2 files changed

+56
-18
lines changed

src/main/kotlin/no/nav/helse/behovsakkumulator/Behovsakkumulator.kt

+18-18
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class Behovsakkumulator(rapidsConnection: RapidsConnection) : River.PacketListen
1414
private val log = LoggerFactory.getLogger(this::class.java)
1515
private val sikkerLog = LoggerFactory.getLogger("tjenestekall")
1616

17-
private val behovUtenLøsning = mutableMapOf<String, Pair<MessageContext, JsonMessage>>()
17+
private val behovUtenLøsning = mutableMapOf<String, JsonMessage>()
1818

1919
init {
2020
River(rapidsConnection).apply {
@@ -39,14 +39,14 @@ class Behovsakkumulator(rapidsConnection: RapidsConnection) : River.PacketListen
3939
loggBehov(sikkerLog, packet)
4040

4141
val id = packet.behovId()
42-
val resultat = behovUtenLøsning[id]?.let { context to it.second.kombinerLøsninger(packet) } ?: (context to packet)
43-
44-
if (resultat.second.erKomplett()) {
45-
resultat.second["@final"] = true
46-
resultat.second["@besvart"] = LocalDateTime.now().toString()
47-
loggLøstBehov(log, resultat.second)
48-
loggLøstBehov(sikkerLog, resultat.second)
49-
resultat.first.publish(resultat.second.toJson())
42+
val resultat = behovUtenLøsning[id]?.kombinerLøsninger(packet) ?: packet
43+
44+
if (resultat.erKomplett()) {
45+
resultat["@final"] = true
46+
resultat["@besvart"] = LocalDateTime.now().toString()
47+
loggLøstBehov(log, resultat)
48+
loggLøstBehov(sikkerLog, resultat)
49+
context.publish(resultat.toJson())
5050
behovUtenLøsning.remove(id)
5151
} else {
5252
fjernGamleBehovUtenSvar(context)
@@ -57,27 +57,27 @@ class Behovsakkumulator(rapidsConnection: RapidsConnection) : River.PacketListen
5757
private fun fjernGamleBehovUtenSvar(context: MessageContext) {
5858
val grense = LocalDateTime.now().minusMinutes(30)
5959
behovUtenLøsning
60-
.filterValues { (_, packet) -> packet["@opprettet"].asLocalDateTime().isBefore(grense) }
61-
.forEach { (key, value) ->
62-
val forventninger = value.second["@behov"].map(JsonNode::asText)
63-
val løsninger = value.second["@løsning"].feltnavn()
60+
.filterValues { packet -> packet["@opprettet"].asLocalDateTime().isBefore(grense) }
61+
.forEach { (key, packet) ->
62+
val forventninger = packet["@behov"].map(JsonNode::asText)
63+
val løsninger = packet["@løsning"].feltnavn()
6464
val mangler = forventninger.filter { it !in løsninger }
6565

66-
loggFjerneGammeltBehov(log, value.second, mangler)
67-
loggFjerneGammeltBehov(sikkerLog, value.second, mangler)
66+
loggFjerneGammeltBehov(log, packet, mangler)
67+
loggFjerneGammeltBehov(sikkerLog, packet, mangler)
6868
behovUtenLøsning.remove(key)
6969

70-
val behovId = value.second.behovId()
70+
val behovId = packet.behovId()
7171
context.publish(behovId, JsonMessage.newMessage(mapOf(
7272
"@event_name" to "behov_uten_fullstendig_løsning",
7373
"@id" to UUID.randomUUID(),
7474
"@opprettet" to LocalDateTime.now(),
7575
"behov_id" to behovId,
76-
"behov_opprettet" to value.second["@opprettet"].asLocalDateTime(),
76+
"behov_opprettet" to packet["@opprettet"].asLocalDateTime(),
7777
"forventet" to forventninger,
7878
"løsninger" to løsninger,
7979
"mangler" to mangler,
80-
"ufullstendig_behov" to value.second.toJson()
80+
"ufullstendig_behov" to packet.toJson()
8181
)).toJson().also {
8282
sikkerLog.info("sender event=behov_uten_fullstendig_løsning:\n\t$it")
8383
})

src/test/kotlin/no/nav/helse/behovsakkumulator/BehovsakkumulatorTest.kt

+38
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
99
import no.nav.helse.rapids_rivers.MessageContext
1010
import no.nav.helse.rapids_rivers.RapidsConnection
1111
import org.junit.jupiter.api.Assertions.assertEquals
12+
import org.junit.jupiter.api.Assertions.assertNotEquals
1213
import org.junit.jupiter.api.Assertions.assertTrue
1314
import org.junit.jupiter.api.BeforeEach
1415
import org.junit.jupiter.api.Test
@@ -128,6 +129,43 @@ internal class BehovsakkumulatorTest {
128129
assertEquals(1, rapid.sentMessages.size)
129130
}
130131

132+
@Test
133+
fun `publiserer endelig svar med samme key som siste melding`() {
134+
val behov = objectMapper.readTree("""{"@id": "${UUID.randomUUID()}", "@behovId": "en_behovId", "@opprettet": "${LocalDateTime.now()}", "vedtaksperiodeId": "id", "@behov": ["AndreYtelser", "HeltAndreYtelser"]}""")
135+
val løsning1 = behov.medLøsning("""{ "AndreYtelser": { "felt1": null, "felt2": {}} }""")
136+
val løsning2 = behov.medLøsning("""{ "HeltAndreYtelser": { "felt1": null, "felt2": {}} }""")
137+
rapid.sendTestMessage("behov_nøkkel", behov.toString())
138+
rapid.sendTestMessage("behov_nøkkel", løsning1)
139+
// I virkeligheten skjer det neppe at en løsning kommer på en annen key enn behovet, dette er bare for å vise
140+
// hva aktuell oppførsel er
141+
val usannsynligKey = "behov_nøkkel_sist"
142+
rapid.sendTestMessage(usannsynligKey, løsning2)
143+
144+
assertEquals(1, rapid.sentMessages.size)
145+
val (key, packet) = rapid.sentMessages.first()
146+
assertEquals(usannsynligKey, key)
147+
assertTrue(packet["@final"].asBoolean())
148+
}
149+
150+
@Test
151+
fun `publiserer behov_uten_fullstendig_løsning med en annen key enn mottatt melding`() {
152+
val behovId_somIkkeBlirKomplett = "en_behovId"
153+
val behov = objectMapper.readTree("""{"@id": "${UUID.randomUUID()}", "@behovId": "$behovId_somIkkeBlirKomplett", "@opprettet": "${LocalDateTime.now().minusMinutes(31)}", "vedtaksperiodeId": "id", "@behov": ["AndreYtelser", "NoenAndreYtelser", "HeltAndreYtelser"]}""")
154+
val løsning1 = behov.medLøsning("""{ "AndreYtelser": { "felt1": null, "felt2": {}} }""")
155+
val løsningBehov2 =
156+
objectMapper.readTree("""{"@id": "${UUID.randomUUID()}", "@behovId": "en_annen_behovId", "@opprettet": "${LocalDateTime.now()}", "vedtaksperiodeId": "id2", "@behov": ["AndreYtelser", "NoenAndreYtelser"]}""")
157+
.medLøsning("""{ "AndreYtelser": { "felt1": null, "felt2": {}} }""")
158+
rapid.sendTestMessage("behov_nøkkel", behov.toString())
159+
rapid.sendTestMessage("behov_nøkkel", løsning1)
160+
rapid.sendTestMessage("behov_nøkkel", løsningBehov2)
161+
162+
assertEquals(1, rapid.sentMessages.size)
163+
val (key, packet) = rapid.sentMessages.first()
164+
assertNotEquals("behov_nøkkel", key)
165+
assertEquals(behovId_somIkkeBlirKomplett, key)
166+
assertEquals("behov_uten_fullstendig_løsning", packet["@event_name"].asText())
167+
}
168+
131169
private fun JsonNode.medLøsning(løsning: String) =
132170
(this.deepCopy() as ObjectNode).apply {
133171
put("@id", UUID.randomUUID().toString())

0 commit comments

Comments
 (0)