diff --git a/bro-spinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/App.kt b/bro-spinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/App.kt index 9ed33b055..804af23a8 100644 --- a/bro-spinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/App.kt +++ b/bro-spinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/App.kt @@ -3,7 +3,6 @@ package no.nav.helsearbeidsgiver.inntektsmelding.brospinn import no.nav.helse.rapids_rivers.RapidApplication import no.nav.helse.rapids_rivers.RapidsConnection import no.nav.helsearbeidsgiver.felles.oauth2.OAuth2ClientConfig -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.utils.log.logger @@ -27,13 +26,13 @@ fun RapidsConnection.createEksternInntektsmeldingLoeser(spinnKlient: SpinnKlient EksternInntektsmeldingLoeser(this, spinnKlient) } -fun RapidsConnection.createSpinnService(redisStore: IRedisStore): RapidsConnection = +fun RapidsConnection.createSpinnService(redisStore: RedisStore): RapidsConnection = also { logger.info("Starter ${SpinnService::class.simpleName}...") SpinnService(this, redisStore) } -fun buildRedisStore(): IRedisStore { +fun buildRedisStore(): RedisStore { return RedisStore(Env.redisUrl) } diff --git a/bro-spinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/SpinnService.kt b/bro-spinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/SpinnService.kt index 5aa329c08..a69088e7c 100644 --- a/bro-spinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/SpinnService.kt +++ b/bro-spinn/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/SpinnService.kt @@ -17,8 +17,8 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.StatefullEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.CompositeEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.Transaction import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.toJsonMap import no.nav.helsearbeidsgiver.felles.utils.Log import no.nav.helsearbeidsgiver.felles.utils.randomUuid @@ -34,7 +34,7 @@ private const val AVSENDER_NAV_NO = "NAV_NO" class SpinnService( private val rapid: RapidsConnection, - override val redisStore: IRedisStore + override val redisStore: RedisStore ) : CompositeEventListener(redisStore) { private val logger = logger() diff --git a/bro-spinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/SpinnServiceTest.kt b/bro-spinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/SpinnServiceTest.kt index 268d9e699..4b6cb7964 100644 --- a/bro-spinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/SpinnServiceTest.kt +++ b/bro-spinn/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/brospinn/SpinnServiceTest.kt @@ -4,6 +4,7 @@ import io.kotest.core.spec.style.FunSpec import io.kotest.matchers.ints.shouldBeExactly import io.kotest.matchers.shouldBe import io.mockk.clearAllMocks +import io.mockk.verify import no.nav.helse.rapids_rivers.testsupport.TestRapid import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.DataFelt @@ -13,7 +14,8 @@ import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.json.les import no.nav.helsearbeidsgiver.felles.json.toJson import no.nav.helsearbeidsgiver.felles.json.toMap -import no.nav.helsearbeidsgiver.felles.test.mock.MockRedisStore +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.test.mock.MockRedis import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.firstMessage import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.sendJson import no.nav.helsearbeidsgiver.felles.utils.randomUuid @@ -25,13 +27,14 @@ import no.nav.helsearbeidsgiver.utils.test.date.januar class SpinnServiceTest : FunSpec({ val testRapid = TestRapid() - val testRedis = MockRedisStore() + val mockRedis = MockRedis() - SpinnService(testRapid, testRedis) + SpinnService(testRapid, mockRedis.store) beforeEach { testRapid.reset() clearAllMocks() + mockRedis.setup() } test("Publiser nytt behov med inntektsmeldingId ved nytt event") { @@ -52,8 +55,6 @@ class SpinnServiceTest : FunSpec({ test("EksternInntektsmelding blir skrevet til redis") { - testRedis.set("${Mock.transaksjonsId}${DataFelt.FORESPOERSEL_ID.str}", Mock.forespoerselId.toString()) - testRapid.sendJson( Key.EVENT_NAME to EventName.EKSTERN_INNTEKTSMELDING_REQUESTED.toJson(), Key.DATA to "".toJson(), @@ -62,9 +63,13 @@ class SpinnServiceTest : FunSpec({ DataFelt.SPINN_INNTEKTSMELDING_ID to Mock.spinnInntektsmeldingId.toJson(), DataFelt.EKSTERN_INNTEKTSMELDING to Mock.eksternInntektsmelding.toJson(EksternInntektsmelding.serializer()) ) - testRedis.get(Mock.transaksjonsId.toString() + DataFelt.EKSTERN_INNTEKTSMELDING.str) shouldBe Mock.eksternInntektsmelding.toJsonStr( - EksternInntektsmelding.serializer() - ) + + verify { + mockRedis.store.set( + RedisKey.of(Mock.transaksjonsId, DataFelt.EKSTERN_INNTEKTSMELDING), + Mock.eksternInntektsmelding.toJsonStr(EksternInntektsmelding.serializer()) + ) + } } }) diff --git a/felles-test/src/main/kotlin/no/nav/helsearbeidsgiver/felles/test/mock/MockRedis.kt b/felles-test/src/main/kotlin/no/nav/helsearbeidsgiver/felles/test/mock/MockRedis.kt new file mode 100644 index 000000000..9bd1ac821 --- /dev/null +++ b/felles-test/src/main/kotlin/no/nav/helsearbeidsgiver/felles/test/mock/MockRedis.kt @@ -0,0 +1,45 @@ +package no.nav.helsearbeidsgiver.felles.test.mock + +import io.mockk.every +import io.mockk.mockk +import io.mockk.slot +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore + +class MockRedis { + val store = mockk() + + private val mockStorage = mutableMapOf() + + private val redisKey = slot() + private val newValue = slot() + + // Fungerer som en capture slot for vararg + private val keysToCheck = mutableListOf() + + init { + setup() + } + + fun setup() { + mockStorage.clear() + + every { store.set(capture(redisKey), capture(newValue)) } answers { + mockStorage[redisKey.captured] = newValue.captured + } + + every { store.get(capture(redisKey)) } answers { + mockStorage[redisKey.captured] + } + + every { store.exist(*varargAll { keysToCheck.add(it) }) } answers { + val allKeys = mockStorage.keys.toSet() + + val keysExist = keysToCheck.intersect(allKeys).size.toLong() + + keysToCheck.clear() + + keysExist + } + } +} diff --git a/felles-test/src/main/kotlin/no/nav/helsearbeidsgiver/felles/test/mock/MockRedisStore.kt b/felles-test/src/main/kotlin/no/nav/helsearbeidsgiver/felles/test/mock/MockRedisStore.kt deleted file mode 100644 index 478cb8b75..000000000 --- a/felles-test/src/main/kotlin/no/nav/helsearbeidsgiver/felles/test/mock/MockRedisStore.kt +++ /dev/null @@ -1,66 +0,0 @@ -package no.nav.helsearbeidsgiver.felles.test.mock - -import com.fasterxml.jackson.databind.JsonNode -import no.nav.helsearbeidsgiver.felles.json.Jackson -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey -class MockRedisStore : IRedisStore { - - val store = HashMap() - - override fun set(key: String, value: String, ttl: Long) { - println("Setter inn: $key -> $value") - if (key.endsWith("uuid")) { - println("Setter inn uuid $value") - store.put("uuid", value) // CollectData() lager *ny* UUID så i test må vi finne den... - // denne funker bare når uuid er lagt inn i service sine datafelter - } - if (key.endsWith("forespoerselId")) { - println("Setter inn forespoerselId") - store.put("uuid", key.substring(0, key.indexOf("forespoerselId"))) // CollectData() lager *ny* UUID så i test må vi finne den... - } - store.put(key, value) - } - - override fun set(key: RedisKey, value: String, ttl: Long) { - println("Setter inn: $key -> $value") - set(key.toString(), value) - } - - override fun set(key: RedisKey, value: JsonNode, ttl: Long) { - TODO("Not yet implemented") - } - - override fun get(key: String): String? { - return store.get(key) - } - - override fun get(key: RedisKey): String? { - println("Henter: $key") - return store.get(key.toString()) - } - - override fun get(key: RedisKey, clazz: Class): T? { - val value = get(key) - return if (value.isNullOrEmpty()) null else Jackson.objectMapper.readValue(value, clazz) - } - - override fun exist(vararg keys: String): Long { - val s = - keys.filter { - store.containsKey(it) - }.size.toLong() - return s - } - - override fun exist(vararg keys: RedisKey): Long { - val s = keys.filter { - store.containsKey(it.toString()) - }.size.toLong() - return s - } - - override fun shutdown() { - TODO("Not yet implemented") - } -} diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/json/JacksonUtils.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/json/JacksonUtils.kt index 3468ca410..5040a4f11 100644 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/json/JacksonUtils.kt +++ b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/json/JacksonUtils.kt @@ -13,6 +13,7 @@ private val objectMapper = customObjectMapper() fun JsonElement.toJsonNode(): JsonNode = toString().let(objectMapper::readTree) +// TODO slett object Jackson { val objectMapper = customObjectMapper() diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/StatefullDataKanal.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/StatefullDataKanal.kt index dc82d8cfa..58fa3fe1c 100644 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/StatefullDataKanal.kt +++ b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/StatefullDataKanal.kt @@ -7,8 +7,8 @@ import no.nav.helsearbeidsgiver.felles.DataFelt import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.createFail -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.utils.log.logger import no.nav.helsearbeidsgiver.utils.log.sikkerLogger import java.util.UUID @@ -18,10 +18,12 @@ class StatefullDataKanal( override val eventName: EventName, private val mainListener: River.PacketListener, rapidsConnection: RapidsConnection, - val redisStore: IRedisStore + val redisStore: RedisStore ) : DataKanal( rapidsConnection ) { + private val logger = logger() + private val sikkerLogger = sikkerLogger() override fun accept(): River.PacketValidation { return River.PacketValidation { @@ -35,21 +37,21 @@ class StatefullDataKanal( override fun onData(packet: JsonMessage) { if (packet[Key.FORESPOERSEL_ID.str].asText().isEmpty()) { - logger().warn("Mangler forespørselId!") - sikkerLogger().warn("Mangler forespørselId!") + logger.warn("Mangler forespørselId!") + sikkerLogger.warn("Mangler forespørselId!") } if (packet[Key.UUID.str].asText().isNullOrEmpty()) { - sikkerLogger().error("TransaksjonsID er ikke initialisert for\n${packet.toPretty()}") + sikkerLogger.error("TransaksjonsID er ikke initialisert for\n${packet.toPretty()}") rapidsConnection.publish( packet.createFail( "TransaksjonsID / UUID kan ikke vare tom da man bruker Composite Service" ).toJsonMessage().toJson() ) } else if (collectData(packet)) { - sikkerLogger().info("data collected for event ${eventName.name} med packet\n${packet.toPretty()}") + sikkerLogger.info("data collected for event ${eventName.name} med packet\n${packet.toPretty()}") mainListener.onPacket(packet, rapidsConnection) } else { - sikkerLogger().warn("Mangler data for ${packet.toPretty()}") + sikkerLogger.warn("Mangler data for ${packet.toPretty()}") // @TODO fiks logging logger.warn("Unrecognized package with uuid:" + packet[Key.UUID.str]) } } @@ -81,13 +83,13 @@ class StatefullDataKanal( return dataMap.isNotEmpty() } - fun isAllDataCollected(key: RedisKey): Boolean { - val numKeysInRedis = redisStore.exist(*dataFelter.map { key.toString() + it }.toTypedArray()) - logger().info("found " + numKeysInRedis) + fun isAllDataCollected(transaksjonId: UUID): Boolean { + val allKeys = dataFelter.map { RedisKey.of(transaksjonId, it) }.toTypedArray() + val numKeysInRedis = redisStore.exist(*allKeys) + logger.info("found " + numKeysInRedis) return numKeysInRedis == dataFelter.size.toLong() } fun isDataCollected(vararg keys: RedisKey): Boolean { - val keysAsString = keys.map { it.toString() }.toTypedArray() - return redisStore.exist(*keysAsString) == keys.size.toLong() + return redisStore.exist(*keys) == keys.size.toLong() } } diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/StatefullEventListener.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/StatefullEventListener.kt index 044670b09..f575d0f8b 100644 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/StatefullEventListener.kt +++ b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/StatefullEventListener.kt @@ -7,14 +7,14 @@ import no.nav.helsearbeidsgiver.felles.DataFelt import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.IKey import no.nav.helsearbeidsgiver.felles.Key -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.felles.utils.randomUuid import no.nav.helsearbeidsgiver.utils.log.sikkerLogger import java.lang.IllegalStateException class StatefullEventListener( - val redisStore: IRedisStore, + val redisStore: RedisStore, override val event: EventName, private val dataFelter: Array, private val mainListener: River.PacketListener, @@ -22,6 +22,8 @@ class StatefullEventListener( ) : EventListener( rapidsConnection ) { + private val sikkerLogger = sikkerLogger() + override fun accept(): River.PacketValidation { return River.PacketValidation { it.interestedIn(*dataFelter) @@ -55,7 +57,7 @@ class StatefullEventListener( } override fun onEvent(packet: JsonMessage) { - sikkerLogger().info("Statefull event listener for event ${event.name} med packet \n${packet.toPretty()}") + sikkerLogger.info("Statefull event listener for event ${event.name} med packet \n${packet.toPretty()}") collectData(packet) mainListener.onPacket(packet, rapidsConnection) } diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/composite/CompositeEventListener.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/composite/CompositeEventListener.kt index 9b25dbfda..263b82ea6 100644 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/composite/CompositeEventListener.kt +++ b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/composite/CompositeEventListener.kt @@ -11,8 +11,8 @@ import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.rapidsrivers.EventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.FailKanal import no.nav.helsearbeidsgiver.felles.rapidsrivers.StatefullDataKanal -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.toPretty import no.nav.helsearbeidsgiver.felles.toFeilMessage import no.nav.helsearbeidsgiver.utils.log.logger @@ -20,7 +20,7 @@ import no.nav.helsearbeidsgiver.utils.log.sikkerLogger import no.nav.helsearbeidsgiver.utils.pipe.orDefault import java.util.UUID -abstract class CompositeEventListener(open val redisStore: IRedisStore) : River.PacketListener { +abstract class CompositeEventListener(open val redisStore: RedisStore) : River.PacketListener { private val logger = logger() private val sikkerLogger = sikkerLogger() @@ -129,6 +129,6 @@ abstract class CompositeEventListener(open val redisStore: IRedisStore) : River. return this } - open fun isDataCollected(uuid: UUID): Boolean = dataKanal.isAllDataCollected(RedisKey.of(uuid)) + open fun isDataCollected(uuid: UUID): Boolean = dataKanal.isAllDataCollected(uuid) open fun isDataCollected(vararg keys: RedisKey): Boolean = dataKanal.isDataCollected(*keys) } diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/redis/IRedisStore.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/redis/IRedisStore.kt deleted file mode 100644 index d7b31f02f..000000000 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/redis/IRedisStore.kt +++ /dev/null @@ -1,15 +0,0 @@ -package no.nav.helsearbeidsgiver.felles.rapidsrivers.redis - -import com.fasterxml.jackson.databind.JsonNode - -interface IRedisStore { - fun set(key: String, value: String, ttl: Long = 60L) - fun set(key: RedisKey, value: String, ttl: Long = 60L) - fun set(key: RedisKey, value: JsonNode, ttl: Long = 60L) - fun get(key: String): String? - fun get(key: RedisKey): String? - fun get(key: RedisKey, clazz: Class): T? - fun exist(vararg keys: String): Long - fun exist(vararg keys: RedisKey): Long - fun shutdown() -} diff --git a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/redis/RedisStore.kt b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/redis/RedisStore.kt index cc5e0215c..e33330af7 100644 --- a/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/redis/RedisStore.kt +++ b/felles/src/main/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/redis/RedisStore.kt @@ -1,61 +1,35 @@ package no.nav.helsearbeidsgiver.felles.rapidsrivers.redis -import com.fasterxml.jackson.databind.JsonNode import io.lettuce.core.RedisClient import io.lettuce.core.SetArgs -import no.nav.helsearbeidsgiver.felles.json.Jackson import no.nav.helsearbeidsgiver.utils.log.sikkerLogger -class RedisStore(redisUrl: String) : IRedisStore { +class RedisStore(redisUrl: String) { + private val sikkerLogger = sikkerLogger() + private val redisClient = redisUrl.let(RedisClient::create) private val connection = redisClient.connect() private val syncCommands = connection.sync() - override fun set(key: String, value: String, ttl: Long) { - sikkerLogger().debug("Setting in redis: $key -> $value") - syncCommands.set(key, value, SetArgs().ex(ttl)) - } - - override fun set(key: RedisKey, value: String, ttl: Long) { - sikkerLogger().debug("Setting in redis: $key -> $value") + fun set(key: RedisKey, value: String, ttl: Long = 60L) { + sikkerLogger.debug("Setting in redis: $key -> $value") syncCommands.set(key.toString(), value, SetArgs().ex(ttl)) } - override fun set(key: RedisKey, value: JsonNode, ttl: Long) { - sikkerLogger().debug("Setting in redis: $key -> $value") - syncCommands.set(key.toString(), value.toString(), SetArgs().ex(ttl)) - } - - override fun get(key: String): String? { - val value = syncCommands.get(key) - sikkerLogger().debug("Getting from redis: $key -> $value") - return value - } - - override fun get(key: RedisKey): String? { + fun get(key: RedisKey): String? { val value = syncCommands.get(key.toString()) - sikkerLogger().debug("Getting from redis: $key -> $value") + sikkerLogger.debug("Getting from redis: $key -> $value") return value } - override fun get(key: RedisKey, clazz: Class): T? { - val value = syncCommands.get(key.toString()) - return if (value.isNullOrEmpty()) null else Jackson.objectMapper.readValue(value, clazz) - } - - override fun exist(vararg keys: String): Long { - val count = syncCommands.exists(*keys) - sikkerLogger().debug("Checking exist in redis: ${keys.contentToString()} -> $count") - return count - } - - override fun exist(vararg keys: RedisKey): Long { - val count = syncCommands.exists(*keys.map { it.toString() }.toTypedArray()) - sikkerLogger().debug("Checking exist in redis: ${keys.contentToString()} -> $count") + fun exist(vararg keys: RedisKey): Long { + val keysAsString = keys.map { it.toString() }.toTypedArray() + val count = syncCommands.exists(*keysAsString) + sikkerLogger.debug("Checking exist in redis: ${keys.contentToString()} -> $count") return count } - override fun shutdown() { + fun shutdown() { connection.close() redisClient.shutdown() } diff --git a/felles/src/test/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/DataKanalTest.kt b/felles/src/test/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/DataKanalTest.kt index 4b9d1f4f7..52fbdc62f 100644 --- a/felles/src/test/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/DataKanalTest.kt +++ b/felles/src/test/kotlin/no/nav/helsearbeidsgiver/felles/rapidsrivers/DataKanalTest.kt @@ -1,5 +1,7 @@ package no.nav.helsearbeidsgiver.felles.rapidsrivers +import io.mockk.clearAllMocks +import io.mockk.verify import no.nav.helse.rapids_rivers.JsonMessage import no.nav.helse.rapids_rivers.MessageContext import no.nav.helse.rapids_rivers.RapidsConnection @@ -10,23 +12,30 @@ import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.PersonDato import no.nav.helsearbeidsgiver.felles.json.toJson -import no.nav.helsearbeidsgiver.felles.test.mock.MockRedisStore +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.test.mock.MockRedis import no.nav.helsearbeidsgiver.felles.test.rapidsrivers.sendJson -import no.nav.helsearbeidsgiver.utils.json.fromJson import no.nav.helsearbeidsgiver.utils.json.toJson -import org.junit.jupiter.api.Assertions +import no.nav.helsearbeidsgiver.utils.json.toJsonStr +import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import java.util.UUID class DataKanalTest { - val testRapid: TestRapid = TestRapid() + private val testRapid: TestRapid = TestRapid() - val redis = MockRedisStore() + private val mockRedis = MockRedis() - val dummyListener = object : River.PacketListener { - override fun onPacket(packet: JsonMessage, context: MessageContext) { - } + private val dummyListener = object : River.PacketListener { + override fun onPacket(packet: JsonMessage, context: MessageContext) {} + } + + @BeforeEach + fun setup() { + testRapid.reset() + clearAllMocks() + mockRedis.setup() } @Test @@ -73,8 +82,8 @@ class DataKanalTest { @Test fun `Test DATA collection, Primitive`() { val testFelter = arrayOf(DataFelt.FNR, DataFelt.INNTEKT) - StatefullDataKanal(testFelter, EventName.INNTEKTSMELDING_MOTTATT, dummyListener, testRapid, redis) - val uuid = UUID.randomUUID().toString() + StatefullDataKanal(testFelter, EventName.INNTEKTSMELDING_MOTTATT, dummyListener, testRapid, mockRedis.store) + val uuid = UUID.randomUUID() testRapid.sendTestMessage( JsonMessage.newMessage( mapOf( @@ -85,8 +94,13 @@ class DataKanalTest { ) ).toJson() ) - Assertions.assertEquals("mytestfield", redis.get(uuid + DataFelt.FNR.str)) - Assertions.assertNull(redis.get(uuid + DataFelt.INNTEKT.str)) + + verify { + mockRedis.store.set(RedisKey.of(uuid, DataFelt.FNR), "mytestfield") + } + verify(exactly = 0) { + mockRedis.store.set(RedisKey.of(uuid, DataFelt.INNTEKT), any()) + } testRapid.sendTestMessage( JsonMessage.newMessage( @@ -98,26 +112,30 @@ class DataKanalTest { ) ).toJson() ) - Assertions.assertEquals("mytestfield", redis.get(uuid + DataFelt.FNR.str)) - Assertions.assertEquals("mytestfield2", redis.get(uuid + DataFelt.INNTEKT.str)) + + verify { + mockRedis.store.set(RedisKey.of(uuid, DataFelt.FNR), "mytestfield") + mockRedis.store.set(RedisKey.of(uuid, DataFelt.INNTEKT), "mytestfield2") + } } @Test fun `Test DATA collection, Object`() { val testFelter = arrayOf(DataFelt.ARBEIDSGIVER_INFORMASJON) - StatefullDataKanal(testFelter, EventName.INNTEKTSMELDING_MOTTATT, dummyListener, testRapid, redis) - val uuid = UUID.randomUUID().toString() + StatefullDataKanal(testFelter, EventName.INNTEKTSMELDING_MOTTATT, dummyListener, testRapid, mockRedis.store) + val uuid = UUID.randomUUID() + val personDato = PersonDato("X", null, "") testRapid.sendJson( Key.EVENT_NAME to EventName.INNTEKTSMELDING_MOTTATT.toJson(), Key.UUID to uuid.toJson(), Key.DATA to "".toJson(), - DataFelt.ARBEIDSGIVER_INFORMASJON to PersonDato("X", null, "").toJson(PersonDato.serializer()) + DataFelt.ARBEIDSGIVER_INFORMASJON to personDato.toJson(PersonDato.serializer()) ) - val personDato = redis.get(uuid + DataFelt.ARBEIDSGIVER_INFORMASJON.str)?.fromJson(PersonDato.serializer()) - - Assertions.assertEquals("X", personDato?.navn) + verify { + mockRedis.store.set(RedisKey.of(uuid, DataFelt.ARBEIDSGIVER_INFORMASJON), personDato.toJsonStr(PersonDato.serializer())) + } } } diff --git a/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/App.kt b/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/App.kt index 3b94c1876..8e4f968e4 100644 --- a/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/App.kt +++ b/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/App.kt @@ -2,7 +2,6 @@ package no.nav.helsearbeidsgiver.inntektsmelding.innsending import no.nav.helse.rapids_rivers.RapidApplication import no.nav.helse.rapids_rivers.RapidsConnection -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.utils.log.logger import no.nav.helsearbeidsgiver.utils.log.sikkerLogger @@ -17,7 +16,7 @@ fun main() { .start() } -fun RapidsConnection.createInnsending(redisStore: IRedisStore): RapidsConnection = +fun RapidsConnection.createInnsending(redisStore: RedisStore): RapidsConnection = also { logger.info("Starter ${InnsendingService::class.simpleName}...") InnsendingService(this, redisStore) @@ -26,7 +25,7 @@ fun RapidsConnection.createInnsending(redisStore: IRedisStore): RapidsConnection KvitteringService(this, redisStore) } -fun buildRedisStore(environment: Environment): IRedisStore { +fun buildRedisStore(environment: Environment): RedisStore { sikkerLogger.info("Redis url er " + environment.redisUrl) return RedisStore(environment.redisUrl) } diff --git a/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/InnsendingService.kt b/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/InnsendingService.kt index abf3c1470..60706e313 100644 --- a/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/InnsendingService.kt +++ b/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/InnsendingService.kt @@ -16,8 +16,8 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.StatefullEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.CompositeEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.Transaction import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.felles.utils.Log import no.nav.helsearbeidsgiver.utils.json.fromJson import no.nav.helsearbeidsgiver.utils.json.parseJson @@ -31,7 +31,7 @@ import java.util.UUID class InnsendingService( private val rapid: RapidsConnection, - override val redisStore: IRedisStore + override val redisStore: RedisStore ) : CompositeEventListener(redisStore) { override val event: EventName = EventName.INSENDING_STARTED diff --git a/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/KvitteringService.kt b/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/KvitteringService.kt index 3e8c8cdc0..8376c9658 100644 --- a/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/KvitteringService.kt +++ b/innsending/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/innsending/KvitteringService.kt @@ -15,8 +15,8 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.StatefullDataKanal import no.nav.helsearbeidsgiver.felles.rapidsrivers.StatefullEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.CompositeEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.Transaction -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.felles.utils.Log import no.nav.helsearbeidsgiver.utils.json.fromJson import no.nav.helsearbeidsgiver.utils.json.toJsonStr @@ -27,7 +27,7 @@ import java.util.UUID // TODO : Duplisert mesteparten av InnsendingService, skal trekke ut i super / generisk løsning. class KvitteringService( private val rapidsConnection: RapidsConnection, - override val redisStore: IRedisStore + override val redisStore: RedisStore ) : CompositeEventListener(redisStore) { override val event: EventName = EventName.KVITTERING_REQUESTED diff --git a/innsending/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.innsending/GenericDataPackageListenerTest.kt b/innsending/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.innsending/GenericDataPackageListenerTest.kt index 7a8c980c8..c3450d63d 100644 --- a/innsending/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.innsending/GenericDataPackageListenerTest.kt +++ b/innsending/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.innsending/GenericDataPackageListenerTest.kt @@ -1,6 +1,7 @@ package no.nav.helsearbeidsgiver.inntektsmelding.innsending -import io.mockk.every +import io.kotest.matchers.shouldBe +import io.mockk.clearAllMocks import io.mockk.mockk import io.mockk.verify import no.nav.helse.rapids_rivers.JsonMessage @@ -11,7 +12,7 @@ import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.rapidsrivers.StatefullDataKanal import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore +import no.nav.helsearbeidsgiver.felles.test.mock.MockRedis import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import java.util.UUID @@ -22,33 +23,33 @@ class GenericDataPackageListenerTest { FELT } - private var mockListener: River.PacketListener = mockk() + private var mockListener = mockk(relaxed = true) - private lateinit var dataListener: StatefullDataKanal - - private val redisStore = mockk() + private val mockRedis = MockRedis() private val testRapid: TestRapid = TestRapid() - @BeforeEach - fun beforeAll() { - dataListener = StatefullDataKanal( - arrayOf(DataFelt.FNR), + init { + StatefullDataKanal( + arrayOf(DataFelt.FNR, DataFelt.INNTEKT), EventName.INSENDING_STARTED, mockListener, testRapid, - redisStore + mockRedis.store ) } + @BeforeEach + fun setup() { + testRapid.reset() + clearAllMocks() + mockRedis.setup() + } + @Test fun `Listener fanger data`() { - every { mockListener.onPacket(any(), any()) } answers { - val jsonMessages: JsonMessage = it.invocation.args[0] as JsonMessage - assert(jsonMessages[DataFelt.FNR.str].asText() == "Hello") - } - every { redisStore.set(any(), any(), 60L) } returns Unit val uuid: UUID = UUID.randomUUID() + testRapid.sendTestMessage( JsonMessage.newMessage( mapOf( @@ -60,9 +61,15 @@ class GenericDataPackageListenerTest { ) ).toJson() ) + verify(exactly = 1) { - redisStore.set(RedisKey.of(uuid, DataFelt.FNR), "Hello", 60L) - mockListener.onPacket(any(), any()) + mockRedis.store.set(RedisKey.of(uuid, DataFelt.FNR), "Hello") + mockListener.onPacket( + withArg { + it[DataFelt.FNR.str].asText() shouldBe "Hello" + }, + any() + ) } } @@ -80,7 +87,7 @@ class GenericDataPackageListenerTest { ).toJson() ) verify(exactly = 0) { - redisStore.set(any(), any()) + mockRedis.store.set(any(), any()) mockListener.onPacket(any(), any()) } } diff --git a/innsending/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.innsending/KvitteringServiceTest.kt b/innsending/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.innsending/KvitteringServiceTest.kt index 04a15cdf1..d805dbfb6 100644 --- a/innsending/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.innsending/KvitteringServiceTest.kt +++ b/innsending/src/test/kotlin/no.nav.helsearbeidsgiver.inntektsmelding.innsending/KvitteringServiceTest.kt @@ -1,59 +1,70 @@ package no.nav.helsearbeidsgiver.inntektsmelding.innsending +import io.mockk.clearAllMocks +import io.mockk.verify import no.nav.helse.rapids_rivers.JsonMessage import no.nav.helse.rapids_rivers.testsupport.TestRapid import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.DataFelt +import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Behov -import no.nav.helsearbeidsgiver.felles.test.mock.MockRedisStore +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.test.mock.MockRedis import no.nav.helsearbeidsgiver.felles.utils.randomUuid -import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test class KvitteringServiceTest { - private val redisStore = MockRedisStore() - private val testRapid: TestRapid = TestRapid() + private val mockRedis = MockRedis() private val foresporselid = "abc" + init { + KvitteringService(testRapid, mockRedis.store) + } + @BeforeEach fun setup() { testRapid.reset() + clearAllMocks() + mockRedis.setup() } @Test fun kvitteringServiceTest() { - val service = KvitteringService(testRapid, redisStore) + val uuid = randomUuid() + val im = "inntektsmelding_FTW" val packet: JsonMessage = JsonMessage.newMessage( mapOf( - Key.EVENT_NAME.str to service.event.name, + Key.EVENT_NAME.str to EventName.KVITTERING_REQUESTED.name, Key.FORESPOERSEL_ID.str to foresporselid ) ) testRapid.sendTestMessage(packet.toJson()) - val uuid = randomUuid().toString() - val im = "inntektsmelding_FTW" val behov = Behov( - service.event, + EventName.KVITTERING_REQUESTED, BehovType.HENT_PERSISTERT_IM, foresporselid, JsonMessage.newMessage( mapOf( Key.BEHOV.str to BehovType.HENT_PERSISTERT_IM, - Key.EVENT_NAME.str to service.event.name, + Key.EVENT_NAME.str to EventName.KVITTERING_REQUESTED.name, Key.FORESPOERSEL_ID.str to foresporselid, Key.UUID.str to uuid.toString() ) ) ) + testRapid.reset() testRapid.sendTestMessage(behov.createData(mapOf(DataFelt.INNTEKTSMELDING_DOKUMENT to im)).jsonMessage.toJson()) - assertEquals(im, redisStore.get(uuid + DataFelt.INNTEKTSMELDING_DOKUMENT)) + + verify { + mockRedis.store.set(RedisKey.of(uuid, DataFelt.INNTEKTSMELDING_DOKUMENT), im) + } } } diff --git a/inntektservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/App.kt b/inntektservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/App.kt index e61748180..c8de4f561 100644 --- a/inntektservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/App.kt +++ b/inntektservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/App.kt @@ -2,7 +2,6 @@ package no.nav.helsearbeidsgiver.inntektsmelding.inntektservice import no.nav.helse.rapids_rivers.RapidApplication import no.nav.helse.rapids_rivers.RapidsConnection -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.utils.log.logger @@ -15,7 +14,7 @@ fun main() { .start() } -fun RapidsConnection.createInntektService(redisStore: IRedisStore): RapidsConnection = +fun RapidsConnection.createInntektService(redisStore: RedisStore): RapidsConnection = also { logger.info("Starter ${InntektService::class.simpleName}...") InntektService(this, redisStore) diff --git a/inntektservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektService.kt b/inntektservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektService.kt index 381242356..73ed82e9b 100644 --- a/inntektservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektService.kt +++ b/inntektservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektService.kt @@ -22,8 +22,8 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.StatefullEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.CompositeEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.Transaction import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.toJsonMap import no.nav.helsearbeidsgiver.felles.utils.Log import no.nav.helsearbeidsgiver.utils.json.fromJson @@ -38,7 +38,7 @@ import java.util.UUID class InntektService( private val rapid: RapidsConnection, - override val redisStore: IRedisStore + override val redisStore: RedisStore ) : CompositeEventListener(redisStore) { private val sikkerLogger = sikkerLogger() diff --git a/inntektservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektServiceTest.kt b/inntektservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektServiceTest.kt index bc2940ed0..8b993f770 100644 --- a/inntektservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektServiceTest.kt +++ b/inntektservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/InntektServiceTest.kt @@ -5,19 +5,19 @@ import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.Transaction -import no.nav.helsearbeidsgiver.felles.test.mock.MockRedisStore +import no.nav.helsearbeidsgiver.felles.test.mock.MockRedis import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test import java.util.UUID class InntektServiceTest { - val mockRedisStore = MockRedisStore() - val testRapid = TestRapid() + private val testRapid = TestRapid() + private val mockRedis = MockRedis() @Test fun terminate() { - val service = InntektService(testRapid, mockRedisStore) + val service = InntektService(testRapid, mockRedis.store) val feil = Fail( eventName = EventName.INNTEKT_REQUESTED, behov = BehovType.INNTEKT, diff --git a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ManuellOpprettSakService.kt b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ManuellOpprettSakService.kt index 59e6cfd75..bddfccb3c 100644 --- a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ManuellOpprettSakService.kt +++ b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/ManuellOpprettSakService.kt @@ -14,13 +14,13 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.StatefullDataKanal import no.nav.helsearbeidsgiver.felles.rapidsrivers.StatefullEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.CompositeEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.Transaction -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.utils.json.fromJson import no.nav.helsearbeidsgiver.utils.log.sikkerLogger import java.util.UUID -class ManuellOpprettSakService(private val rapidsConnection: RapidsConnection, override val redisStore: IRedisStore) : CompositeEventListener(redisStore) { +class ManuellOpprettSakService(private val rapidsConnection: RapidsConnection, override val redisStore: RedisStore) : CompositeEventListener(redisStore) { override val event: EventName = EventName.MANUELL_OPPRETT_SAK_REQUESTED private val sikkerLogger = sikkerLogger() diff --git a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettOppgaveService.kt b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettOppgaveService.kt index bc4db6082..b9c1263b8 100644 --- a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettOppgaveService.kt +++ b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettOppgaveService.kt @@ -12,15 +12,15 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.StatefullDataKanal import no.nav.helsearbeidsgiver.felles.rapidsrivers.StatefullEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.CompositeEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.Transaction -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.felles.utils.Log import no.nav.helsearbeidsgiver.utils.log.MdcUtils import java.util.UUID class OpprettOppgaveService( private val rapidsConnection: RapidsConnection, - override val redisStore: IRedisStore + override val redisStore: RedisStore ) : CompositeEventListener(redisStore) { override val event: EventName = EventName.OPPGAVE_OPPRETT_REQUESTED diff --git a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettSakService.kt b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettSakService.kt index ab3991e44..1686cb9ea 100644 --- a/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettSakService.kt +++ b/notifikasjon/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettSakService.kt @@ -13,15 +13,15 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.StatefullDataKanal import no.nav.helsearbeidsgiver.felles.rapidsrivers.StatefullEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.CompositeEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.Transaction -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.felles.utils.Log import no.nav.helsearbeidsgiver.utils.json.fromJson import no.nav.helsearbeidsgiver.utils.json.toJsonStr import no.nav.helsearbeidsgiver.utils.log.MdcUtils import java.util.UUID -class OpprettSakService(private val rapidsConnection: RapidsConnection, override val redisStore: IRedisStore) : CompositeEventListener(redisStore) { +class OpprettSakService(private val rapidsConnection: RapidsConnection, override val redisStore: RedisStore) : CompositeEventListener(redisStore) { override val event: EventName = EventName.SAK_OPPRETT_REQUESTED init { diff --git a/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettOppgaveServiceTest.kt b/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettOppgaveServiceTest.kt index 0e5e55950..25d661e21 100644 --- a/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettOppgaveServiceTest.kt +++ b/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettOppgaveServiceTest.kt @@ -1,5 +1,7 @@ package no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon +import io.mockk.clearAllMocks +import io.mockk.every import no.nav.helse.rapids_rivers.JsonMessage import no.nav.helse.rapids_rivers.testsupport.TestRapid import no.nav.helsearbeidsgiver.felles.BehovType @@ -9,8 +11,10 @@ import no.nav.helsearbeidsgiver.felles.Fail import no.nav.helsearbeidsgiver.felles.Key import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.Transaction import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Behov -import no.nav.helsearbeidsgiver.felles.test.mock.MockRedisStore +import no.nav.helsearbeidsgiver.felles.test.mock.MockRedis +import no.nav.helsearbeidsgiver.felles.utils.randomUuid import no.nav.helsearbeidsgiver.utils.json.toJson +import no.nav.helsearbeidsgiver.utils.test.mock.mockStatic import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach @@ -21,12 +25,15 @@ import java.util.UUID class OpprettOppgaveServiceTest { private val rapid = TestRapid() - private val redisStore = MockRedisStore() - private val service = OpprettOppgaveService(rapid, redisStore) + private val mockRedis = MockRedis() + + private val service = OpprettOppgaveService(rapid, mockRedis.store) @BeforeEach - fun resetRapid() { + fun setup() { rapid.reset() + clearAllMocks() + mockRedis.setup() } @Test @@ -69,25 +76,32 @@ class OpprettOppgaveServiceTest { @Test fun `skal publisere to behov`() { - rapid.sendTestMessage( - JsonMessage.newMessage( - mapOf( - Key.EVENT_NAME.str to EventName.OPPGAVE_OPPRETT_REQUESTED, - Key.UUID.str to UUID.randomUUID(), - DataFelt.ORGNRUNDERENHET.str to "123456789", - Key.FORESPOERSEL_ID.str to "987654321" - ) - ).toJson() - ) - val generertForespoerselId = redisStore.get("uuid") + val transaksjonId = randomUuid() + val forespoerselId = "987654321" + + mockStatic(::randomUuid) { + every { randomUuid() } returns transaksjonId + + rapid.sendTestMessage( + JsonMessage.newMessage( + mapOf( + Key.EVENT_NAME.str to EventName.OPPGAVE_OPPRETT_REQUESTED, + Key.UUID.str to UUID.randomUUID(), + DataFelt.ORGNRUNDERENHET.str to "123456789", + Key.FORESPOERSEL_ID.str to forespoerselId + ) + ).toJson() + ) + } + rapid.sendTestMessage( JsonMessage.newMessage( mapOf( Key.EVENT_NAME.str to EventName.OPPGAVE_OPPRETT_REQUESTED, Key.DATA.str to "", DataFelt.VIRKSOMHET.str to "TestBedrift A/S", - Key.FORESPOERSEL_ID.str to generertForespoerselId!!, - Key.UUID.str to generertForespoerselId + Key.FORESPOERSEL_ID.str to forespoerselId, + Key.UUID.str to transaksjonId ) ).toJson() ) @@ -99,17 +113,24 @@ class OpprettOppgaveServiceTest { @Test fun `skal fortsette selv om vi mottar feil fra hent virksomhetnavn`() { - rapid.sendTestMessage( - JsonMessage.newMessage( - mapOf( - Key.EVENT_NAME.str to EventName.OPPGAVE_OPPRETT_REQUESTED, - Key.UUID.str to UUID.randomUUID(), - DataFelt.ORGNRUNDERENHET.str to "123456789", - Key.FORESPOERSEL_ID.str to "987654321" - ) - ).toJson() - ) - val generertForespoerselId = redisStore.get("uuid") + val transaksjonId = randomUuid() + val forespoerselId = "987654321" + + mockStatic(::randomUuid) { + every { randomUuid() } returns transaksjonId + + rapid.sendTestMessage( + JsonMessage.newMessage( + mapOf( + Key.EVENT_NAME.str to EventName.OPPGAVE_OPPRETT_REQUESTED, + Key.UUID.str to UUID.randomUUID(), + DataFelt.ORGNRUNDERENHET.str to "123456789", + Key.FORESPOERSEL_ID.str to forespoerselId + ) + ).toJson() + ) + } + val feil = Fail( EventName.OPPGAVE_OPPRETT_REQUESTED, BehovType.VIRKSOMHET, @@ -117,8 +138,8 @@ class OpprettOppgaveServiceTest { mapOf( DataFelt.ORGNRUNDERENHET to "123456789".toJson() ), - generertForespoerselId, - generertForespoerselId + transaksjonId.toString(), + forespoerselId ).toJsonMessage().toJson() rapid.sendTestMessage(feil) val behov = rapid.inspektør.message(0) diff --git a/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettSakServiceTest.kt b/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettSakServiceTest.kt index 0ad870a21..bfc9aa778 100644 --- a/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettSakServiceTest.kt +++ b/notifikasjon/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/notifikasjon/OpprettSakServiceTest.kt @@ -1,43 +1,63 @@ package no.nav.helsearbeidsgiver.inntektsmelding.notifikasjon +import io.mockk.clearAllMocks +import io.mockk.every +import io.mockk.verify import no.nav.helse.rapids_rivers.JsonMessage import no.nav.helse.rapids_rivers.testsupport.TestRapid import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.DataFelt import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Key +import no.nav.helsearbeidsgiver.felles.PersonDato import no.nav.helsearbeidsgiver.felles.rapidsrivers.model.Behov import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey -import no.nav.helsearbeidsgiver.felles.test.mock.MockRedisStore -import org.junit.jupiter.api.Assertions.assertNotNull +import no.nav.helsearbeidsgiver.felles.test.mock.MockRedis +import no.nav.helsearbeidsgiver.felles.utils.randomUuid +import no.nav.helsearbeidsgiver.utils.json.toJsonStr +import no.nav.helsearbeidsgiver.utils.test.mock.mockStatic +import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import java.util.UUID class OpprettSakServiceTest { - val testRapid = TestRapid() - val testRedis = MockRedisStore() + private val testRapid = TestRapid() + private val mockRedis = MockRedis() + + init { + OpprettSakService(testRapid, mockRedis.store) + } + + @BeforeEach + fun setup() { + testRapid.reset() + clearAllMocks() + mockRedis.setup() + } @Test fun `OpprettSak skal håndtere feil`() { + val uuid = UUID.randomUUID() val foresporselId = UUID.randomUUID() val message = JsonMessage.newMessage( mapOf( Key.EVENT_NAME.str to EventName.SAK_OPPRETT_REQUESTED.name, + Key.CLIENT_ID.str to UUID.randomUUID(), DataFelt.ORGNRUNDERENHET.str to "123456", Key.IDENTITETSNUMMER.str to "123456789", Key.FORESPOERSEL_ID.str to foresporselId ) ) - OpprettSakService(testRapid, testRedis) + mockStatic(::randomUuid) { + every { randomUuid() } returns uuid + + testRapid.sendTestMessage( + message.toJson() + ) + } - testRapid.sendTestMessage( - message.toJson() - ) - val uuid = testRedis.get("uuid").orEmpty().let(UUID::fromString) - println("Fant uuid: $uuid") - assertNotNull(testRedis.get(RedisKey.of(uuid, EventName.SAK_OPPRETT_REQUESTED))) val feilmelding = JsonMessage.newMessage( mapOf( Key.EVENT_NAME.str to EventName.SAK_OPPRETT_REQUESTED.name, @@ -59,6 +79,12 @@ class OpprettSakServiceTest { testRapid.sendTestMessage( feilmelding.toJson() ) - assertNotNull(testRedis.get(RedisKey.of(uuid, DataFelt.ARBEIDSTAKER_INFORMASJON))) + + verify { + mockRedis.store.set( + RedisKey.of(uuid, DataFelt.ARBEIDSTAKER_INFORMASJON), + PersonDato("Ukjent person", null, "").toJsonStr(PersonDato.serializer()) + ) + } } } diff --git a/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/App.kt b/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/App.kt index fbc2c0b4f..52bffadc4 100644 --- a/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/App.kt +++ b/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/App.kt @@ -2,7 +2,6 @@ package no.nav.helsearbeidsgiver.inntektsmelding.tilgangservice import no.nav.helse.rapids_rivers.RapidApplication import no.nav.helse.rapids_rivers.RapidsConnection -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.utils.log.logger @@ -15,7 +14,7 @@ fun main() { .start() } -fun RapidsConnection.createTilgangService(redisStore: IRedisStore): RapidsConnection = +fun RapidsConnection.createTilgangService(redisStore: RedisStore): RapidsConnection = also { logger.info("Starter ${TilgangService::class.simpleName}...") TilgangService(this, redisStore) diff --git a/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/TilgangService.kt b/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/TilgangService.kt index 4197fc893..bd0159cc4 100644 --- a/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/TilgangService.kt +++ b/tilgangservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/tilgangservice/TilgangService.kt @@ -20,8 +20,8 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.StatefullEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.CompositeEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.Transaction import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.toJsonMap import no.nav.helsearbeidsgiver.felles.utils.Log import no.nav.helsearbeidsgiver.utils.json.fromJson @@ -36,7 +36,7 @@ import java.util.UUID class TilgangService( private val rapid: RapidsConnection, - override val redisStore: IRedisStore + override val redisStore: RedisStore ) : CompositeEventListener(redisStore) { private val logger = logger() diff --git a/tilgangservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/TilgangServiceTest.kt b/tilgangservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/TilgangServiceTest.kt index b6a25cab3..53af0dbfa 100644 --- a/tilgangservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/TilgangServiceTest.kt +++ b/tilgangservice/src/test/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/inntektservice/TilgangServiceTest.kt @@ -5,7 +5,7 @@ import no.nav.helsearbeidsgiver.felles.BehovType import no.nav.helsearbeidsgiver.felles.EventName import no.nav.helsearbeidsgiver.felles.Fail import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.Transaction -import no.nav.helsearbeidsgiver.felles.test.mock.MockRedisStore +import no.nav.helsearbeidsgiver.felles.test.mock.MockRedis import no.nav.helsearbeidsgiver.inntektsmelding.tilgangservice.TilgangService import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test @@ -13,8 +13,8 @@ import java.util.UUID class TilgangServiceTest { - val mockRedisStore = MockRedisStore() - val testRapid = TestRapid() + private val testRapid = TestRapid() + private val mockRedis = MockRedis() @Test fun testOnError() { @@ -23,7 +23,7 @@ class TilgangServiceTest { // problemet som en IllegalArgumentException i .terminate() // Kanskje bør uuid enforces til ikke-null i Fail? - val service = TilgangService(testRapid, mockRedisStore) + val service = TilgangService(testRapid, mockRedis.store) val feil = Fail( eventName = EventName.TILGANG_REQUESTED, behov = BehovType.TILGANGSKONTROLL, diff --git a/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/App.kt b/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/App.kt index f113b5061..cd795bc81 100644 --- a/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/App.kt +++ b/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/App.kt @@ -2,7 +2,6 @@ package no.nav.helsearbeidsgiver.inntektsmelding.trengerservice import no.nav.helse.rapids_rivers.RapidApplication import no.nav.helse.rapids_rivers.RapidsConnection -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.utils.log.logger @@ -15,7 +14,7 @@ fun main() { .start() } -fun RapidsConnection.createTrengerService(redisStore: IRedisStore): RapidsConnection = +fun RapidsConnection.createTrengerService(redisStore: RedisStore): RapidsConnection = also { logger.info("Starter ${TrengerService::class.simpleName}...") TrengerService(this, redisStore) diff --git a/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/TrengerService.kt b/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/TrengerService.kt index e12e44c9b..e32b7cd6f 100644 --- a/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/TrengerService.kt +++ b/trengerservice/src/main/kotlin/no/nav/helsearbeidsgiver/inntektsmelding/trengerservice/TrengerService.kt @@ -22,8 +22,8 @@ import no.nav.helsearbeidsgiver.felles.rapidsrivers.StatefullEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.CompositeEventListener import no.nav.helsearbeidsgiver.felles.rapidsrivers.composite.Transaction import no.nav.helsearbeidsgiver.felles.rapidsrivers.publish -import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.IRedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisKey +import no.nav.helsearbeidsgiver.felles.rapidsrivers.redis.RedisStore import no.nav.helsearbeidsgiver.felles.rapidsrivers.toJsonMap import no.nav.helsearbeidsgiver.felles.utils.Log import no.nav.helsearbeidsgiver.felles.utils.simpleName @@ -36,7 +36,7 @@ import no.nav.helsearbeidsgiver.utils.log.sikkerLogger import java.util.UUID const val UNDEFINED_FELT: String = "{}" -class TrengerService(private val rapidsConnection: RapidsConnection, override val redisStore: IRedisStore) : CompositeEventListener(redisStore) { +class TrengerService(private val rapidsConnection: RapidsConnection, override val redisStore: RedisStore) : CompositeEventListener(redisStore) { private val sikkerLogger = sikkerLogger()