diff --git a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/InnlesingRepo.kt b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/InnlesingRepository.kt similarity index 88% rename from src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/InnlesingRepo.kt rename to src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/InnlesingRepository.kt index 2096a6a..43fad0e 100644 --- a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/InnlesingRepo.kt +++ b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/InnlesingRepository.kt @@ -7,9 +7,10 @@ import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate import org.springframework.jdbc.support.GeneratedKeyHolder import org.springframework.stereotype.Component import java.sql.ResultSet +import java.util.UUID @Component -class InnlesingRepo( +class InnlesingRepository( private val jdbcTemplate: NamedParameterJdbcTemplate, ) { fun bestilt(innlesing: Innlesing): Innlesing { @@ -63,6 +64,17 @@ class InnlesingRepo( ).singleOrNull() } + fun invalider(id: UUID) { + jdbcTemplate.update( + """delete from innlesing where id = :id""", + MapSqlParameterSource( + mapOf( + "id" to id.toString(), + ), + ), + ) + } + private class InnlesingRowMapper : RowMapper { override fun mapRow(rs: ResultSet, rowNum: Int): Innlesing? { return Innlesing( diff --git a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/WebApi.kt b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/WebApi.kt index 5f2e7f9..8ed3637 100644 --- a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/WebApi.kt +++ b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/WebApi.kt @@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RestController @Protected class WebApi( private val barnetrygdService: BarnetrygdService, - private val innlesingRepo: InnlesingRepo, + private val innlesingRepository: InnlesingRepository, ) { companion object { val log: Logger = LoggerFactory.getLogger(this::class.java) @@ -29,7 +29,7 @@ class WebApi( } is HentBarnetygdmottakereResponse.Ok -> { - innlesingRepo.bestilt( + innlesingRepository.bestilt( Innlesing( id = it.innlesingId, år = it.år diff --git a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/BarnetrygdmottakerKafkaListener.kt b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/BarnetrygdmottakerKafkaListener.kt index 0447e2e..d051af7 100644 --- a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/BarnetrygdmottakerKafkaListener.kt +++ b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/BarnetrygdmottakerKafkaListener.kt @@ -3,7 +3,7 @@ package no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd import no.nav.pensjon.opptjening.omsorgsopptjening.felles.CorrelationId import no.nav.pensjon.opptjening.omsorgsopptjening.felles.InnlesingId import no.nav.pensjon.opptjening.omsorgsopptjening.felles.deserialize -import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.InnlesingRepo +import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.InnlesingRepository import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.Mdc import org.apache.kafka.clients.consumer.ConsumerRecord import org.slf4j.LoggerFactory @@ -13,10 +13,11 @@ import org.springframework.kafka.support.Acknowledgment import org.springframework.stereotype.Component import java.util.UUID + @Component @Profile("dev-gcp", "prod-gcp", "kafkaIntegrationTest") class BarnetrygdmottakerKafkaListener( - private val innlesingRepo: InnlesingRepo, + private val innlesingRepository: InnlesingRepository, private val barnetrygdmottakerRepository: BarnetrygdmottakerRepository ) { companion object { @@ -32,42 +33,51 @@ class BarnetrygdmottakerKafkaListener( consumerRecord: ConsumerRecord, acknowledgment: Acknowledgment ) { - deserialize(consumerRecord.value()) - .also { kafkaMelding -> - Mdc.scopedMdc(CorrelationId.generate()) { correlationId -> - Mdc.scopedMdc(InnlesingId.fromString(kafkaMelding.requestId.toString())) { innlesingId -> - when (kafkaMelding.meldingstype) { - KafkaMelding.Type.START -> { - log.info("Starter ny innlesing, id: $innlesingId") - innlesingRepo.start(innlesingId.toString()) - } + val kafkaMelding = try { + deserialize(consumerRecord.value()) + } catch (ex: Throwable) { + throw UkjentKafkaMeldingException(consumerRecord, ex) + } - KafkaMelding.Type.DATA -> { - deserialize(consumerRecord.value()).let { - log.info("Mottatt melding om barnetrygdmottaker") - barnetrygdmottakerRepository.save( - it.toBarnetrygdmottaker( - correlationId = correlationId, - innlesingId = innlesingId - ) - ) - log.info("Melding prosessert") - } - } + try { + Mdc.scopedMdc(CorrelationId.generate()) { correlationId -> + Mdc.scopedMdc(InnlesingId.fromString(kafkaMelding.requestId.toString())) { innlesingId -> + when (kafkaMelding.meldingstype) { + KafkaMelding.Type.START -> { + log.info("Starter ny innlesing, id: $innlesingId") + innlesingRepository.start(innlesingId.toString()) + } - KafkaMelding.Type.SLUTT -> { - log.info("Fullført innlesing, id: $innlesingId") - innlesingRepo.fullført(innlesingId.toString()) - } + KafkaMelding.Type.DATA -> { + log.info("Mottatt melding om barnetrygdmottaker") + barnetrygdmottakerRepository.save( + kafkaMelding.toBarnetrygdmottaker( + correlationId = correlationId, + innlesingId = innlesingId + ) + ) + log.info("Melding prosessert") } - } + KafkaMelding.Type.SLUTT -> { + log.info("Fullført innlesing, id: $innlesingId") + innlesingRepository.fullført(innlesingId.toString()) + } + } } } - acknowledgment.acknowledge() + acknowledgment.acknowledge() + } catch (ex: Throwable) { + throw InvalidateInnlesingException(kafkaMelding.requestId, ex) + } } } + +class InvalidateInnlesingException(val innlesingId: UUID, ex: Throwable) : RuntimeException(ex) +class UkjentKafkaMeldingException(val consumerRecord: ConsumerRecord, ex: Throwable) : + RuntimeException(ex) + data class KafkaMelding( val meldingstype: Type, val requestId: UUID, diff --git a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/BarnetrygdmottakerRepository.kt b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/BarnetrygdmottakerRepository.kt index d9a635b..69a98d7 100644 --- a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/BarnetrygdmottakerRepository.kt +++ b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/BarnetrygdmottakerRepository.kt @@ -43,7 +43,7 @@ class BarnetrygdmottakerRepository( ), ), ) - return find(keyHolder.keys!!["id"] as UUID) + return find(keyHolder.keys!!["id"] as UUID)!! } fun updateStatus(melding: Barnetrygdmottaker) { @@ -59,14 +59,14 @@ class BarnetrygdmottakerRepository( ) } - fun find(id: UUID): Barnetrygdmottaker { + fun find(id: UUID): Barnetrygdmottaker? { return jdbcTemplate.query( """select b.*, bs.statushistorikk, i.id as innlesing_id, i.år from barnetrygdmottaker b join barnetrygdmottaker_status bs on b.id = bs.id join innlesing i on i.id = b.innlesing_id where b.id = :id""", mapOf( "id" to id ), BarnetrygdmottakerRowMapper() - ).single() + ).singleOrNull() } /** diff --git a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/config/KafkaConfig.kt b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/config/KafkaConfig.kt index 6da88e1..d8e6f51 100644 --- a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/config/KafkaConfig.kt +++ b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/config/KafkaConfig.kt @@ -22,7 +22,10 @@ import java.time.Duration @EnableKafka @Configuration @Profile("dev-gcp", "prod-gcp", "kafkaIntegrationTest") -class KafkaConfig(@Value("\${kafka.brokers}") private val aivenBootstrapServers: String) { +class KafkaConfig( + @Value("\${kafka.brokers}") private val aivenBootstrapServers: String, + private val errorHandler: KafkaErrorHandler +) { @Bean @Profile("dev-gcp", "prod-gcp") fun securityConfig( @@ -52,6 +55,7 @@ class KafkaConfig(@Value("\${kafka.brokers}") private val aivenBootstrapServers: StringDeserializer(), StringDeserializer() ) + setCommonErrorHandler(errorHandler) } private fun consumerConfig(): Map = mapOf( diff --git a/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/config/KafkaErrorHandler.kt b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/config/KafkaErrorHandler.kt new file mode 100644 index 0000000..3e0bff6 --- /dev/null +++ b/src/main/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/config/KafkaErrorHandler.kt @@ -0,0 +1,58 @@ +package no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.config + +import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.InnlesingRepository +import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.InvalidateInnlesingException +import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.UkjentKafkaMeldingException +import org.apache.kafka.clients.consumer.ConsumerRecord +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import org.springframework.kafka.listener.DefaultErrorHandler +import org.springframework.kafka.listener.RetryListener +import org.springframework.stereotype.Component +import org.springframework.util.backoff.FixedBackOff +import java.util.UUID + +@Component +class KafkaErrorHandler( + private val innlesingRepository: InnlesingRepository +) : DefaultErrorHandler(FixedBackOff(3000, 3)) { + init { + this.setRetryListeners(InnlesingInvalidatingRetryListener(innlesingRepository)) + this.addNotRetryableExceptions(InvalidateInnlesingException::class.java) + this.addNotRetryableExceptions(UkjentKafkaMeldingException::class.java) + } +} + +class InnlesingInvalidatingRetryListener( + private val innlesingRepository: InnlesingRepository +) : RetryListener { + + private val invalidated: MutableList = mutableListOf() + + companion object { + private val log: Logger = LoggerFactory.getLogger(this::class.java) + } + + override fun failedDelivery(record: ConsumerRecord<*, *>, ex: Exception, deliveryAttempt: Int) {} + + override fun recovered(record: ConsumerRecord<*, *>, ex: java.lang.Exception) { + log.error("Processing and retries failed for record: $record, ex: $ex") + ex.cause?.also { throwable -> + when (throwable) { + is InvalidateInnlesingException -> { + if (!invalidated.contains(throwable.innlesingId)) { + log.info("Invalidating innlesing with id: ${throwable.innlesingId} due to all records not being processed successfully.") + innlesingRepository.invalider(throwable.innlesingId) + .also { invalidated.add(throwable.innlesingId) } + log.info("Invalidated id: ${throwable.innlesingId}") + } + } + + else -> { + //NOOP + } + } + } + super.recovered(record, ex) + } +} \ No newline at end of file diff --git a/src/main/resources/db/migration/V2__delete_cascade.sql b/src/main/resources/db/migration/V2__delete_cascade.sql new file mode 100644 index 0000000..25bfe6a --- /dev/null +++ b/src/main/resources/db/migration/V2__delete_cascade.sql @@ -0,0 +1,7 @@ +alter table barnetrygdmottaker +drop constraint barnetrygdmottaker_innlesing_id_fkey, +add foreign key (innlesing_id) references innlesing(id) on delete cascade; + +alter table barnetrygdmottaker_status +drop constraint barnetrygdmottaker_status_id_fkey, +add foreign key (id) references barnetrygdmottaker(id) on delete cascade; \ No newline at end of file diff --git a/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/InnlesingCascadingDeleteTest.kt b/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/InnlesingCascadingDeleteTest.kt new file mode 100644 index 0000000..d7d2d71 --- /dev/null +++ b/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/InnlesingCascadingDeleteTest.kt @@ -0,0 +1,42 @@ +package no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning + +import no.nav.pensjon.opptjening.omsorgsopptjening.felles.CorrelationId +import no.nav.pensjon.opptjening.omsorgsopptjening.felles.InnlesingId +import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.Barnetrygdmottaker +import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.BarnetrygdmottakerRepository +import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd.SpringContextTest +import org.springframework.beans.factory.annotation.Autowired +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNull + +class InnlesingCascadingDeleteTest : SpringContextTest.NoKafka() { + @Autowired + private lateinit var innlesingRepository: InnlesingRepository + + @Autowired + private lateinit var barnetrygdmottakerRepository: BarnetrygdmottakerRepository + + @Test + fun `invalidering av innlesing sletter alle barnetrygdmottakere knyttet til innlesingen`() { + val a = Innlesing( + id = InnlesingId.generate(), + år = 2023 + ) + + val b = Barnetrygdmottaker( + ident = "12345678910", + correlationId = CorrelationId.generate(), + innlesingId = a.id + ) + + val aa = innlesingRepository.bestilt(a) + val bb = barnetrygdmottakerRepository.save(b) + + assertEquals(aa, innlesingRepository.finn(a.id.toString())) + assertEquals(bb, barnetrygdmottakerRepository.find(bb.id!!)) + + innlesingRepository.invalider(aa.id.toUUID()) + assertNull(barnetrygdmottakerRepository.find(bb.id!!)) + } +} \ No newline at end of file diff --git a/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/BarnetrygdmottakerRepositoryTest.kt b/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/BarnetrygdmottakerRepositoryTest.kt index 460d75c..f5a3cac 100644 --- a/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/BarnetrygdmottakerRepositoryTest.kt +++ b/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/BarnetrygdmottakerRepositoryTest.kt @@ -3,7 +3,7 @@ package no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd import no.nav.pensjon.opptjening.omsorgsopptjening.felles.CorrelationId import no.nav.pensjon.opptjening.omsorgsopptjening.felles.InnlesingId import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.Innlesing -import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.InnlesingRepo +import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.InnlesingRepository import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired @@ -15,7 +15,7 @@ import kotlin.test.assertNull class BarnetrygdmottakerRepositoryTest : SpringContextTest.NoKafka() { @Autowired - private lateinit var innlesingRepo: InnlesingRepo + private lateinit var innlesingRepository: InnlesingRepository @Autowired private lateinit var barnetrygdmottakerRepository: BarnetrygdmottakerRepository @@ -25,7 +25,7 @@ class BarnetrygdmottakerRepositoryTest : SpringContextTest.NoKafka() { @Test fun `finner ingen meldinger som skal prosesseres før alle meldingene i forsendelsen er lest inn`() { - val innlesing = innlesingRepo.bestilt(Innlesing(id = InnlesingId.generate(), år = 2023)) + val innlesing = innlesingRepository.bestilt(Innlesing(id = InnlesingId.generate(), år = 2023)) barnetrygdmottakerRepository.save( melding = Barnetrygdmottaker( @@ -37,17 +37,17 @@ class BarnetrygdmottakerRepositoryTest : SpringContextTest.NoKafka() { assertNull(barnetrygdmottakerRepository.finnNesteUprosesserte()) - innlesingRepo.fullført(innlesing.id.toString()) + innlesingRepository.fullført(innlesing.id.toString()) assertNotNull(barnetrygdmottakerRepository.finnNesteUprosesserte()) } @Test fun `finnNesteUprosesserte låser raden slik at den ikke plukkes opp av andre connections`() { - val innlesing = innlesingRepo.bestilt(Innlesing( + val innlesing = innlesingRepository.bestilt(Innlesing( id = InnlesingId.generate(), år = 2023 - )).also { innlesingRepo.fullført(it.id.toString()) } + )).also { innlesingRepository.fullført(it.id.toString()) } barnetrygdmottakerRepository.save( melding = Barnetrygdmottaker( diff --git a/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/InnlesingInvalideringTest.kt b/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/InnlesingInvalideringTest.kt new file mode 100644 index 0000000..4c19deb --- /dev/null +++ b/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/InnlesingInvalideringTest.kt @@ -0,0 +1,60 @@ +package no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.barnetrygd + +import no.nav.pensjon.opptjening.omsorgsopptjening.felles.InnlesingId +import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.Innlesing +import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.InnlesingRepository +import org.junit.jupiter.api.Assertions.assertNotNull +import org.junit.jupiter.api.Assertions.assertNull +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import java.util.UUID + +class InnlesingInvalideringTest : SpringContextTest.WithKafka() { + + @Autowired + private lateinit var innlesingRepository: InnlesingRepository + + @Test + fun `invaliderer innlesing dersom en record ikke leses ok`() { + val innlesing = innlesingRepository.bestilt(Innlesing(InnlesingId.generate(), 2020)) + + sendStartInnlesingKafka(innlesing.id.toString()) + + sendBarnetrygdmottakerDataKafka( + melding = KafkaMelding( + meldingstype = KafkaMelding.Type.DATA, + requestId = UUID.fromString(innlesing.id.toString()), + personident = "12345678910" + ) + ) + + Thread.sleep(1000) + assertNotNull(innlesingRepository.finn(innlesing.id.toString())) + + sendBarnetrygdmottakerDataKafka( + melding = KafkaMelding( + meldingstype = KafkaMelding.Type.DATA, + requestId = UUID.fromString(innlesing.id.toString()), + personident = null + ) + ) + + Thread.sleep(1000) + assertNull(innlesingRepository.finn(innlesing.id.toString())) + + sendBarnetrygdmottakerDataKafka( + melding = KafkaMelding( + meldingstype = KafkaMelding.Type.DATA, + requestId = UUID.fromString(innlesing.id.toString()), + personident = "12345678910" + ) + ) + Thread.sleep(1000) + assertNull(innlesingRepository.finn(innlesing.id.toString())) + + sendSluttInnlesingKafka(innlesing.id.toString()) + + Thread.sleep(1000) + assertNull(innlesingRepository.finn(innlesing.id.toString())) + } +} \ No newline at end of file diff --git a/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/KafkaIntegrationTest.kt b/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/KafkaIntegrationTest.kt index 2283c72..00d8ed9 100644 --- a/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/KafkaIntegrationTest.kt +++ b/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/KafkaIntegrationTest.kt @@ -11,7 +11,7 @@ import no.nav.pensjon.opptjening.omsorgsopptjening.felles.deserialize import no.nav.pensjon.opptjening.omsorgsopptjening.felles.domene.kafka.messages.domene.OmsorgsgrunnlagMelding import no.nav.pensjon.opptjening.omsorgsopptjening.felles.serialize import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.Innlesing -import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.InnlesingRepo +import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.InnlesingRepository import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertNotNull import org.junit.jupiter.api.Test @@ -27,7 +27,7 @@ class KafkaIntegrationTest : SpringContextTest.WithKafka() { private lateinit var listener: OmsorgsopptjeningTopicListener @Autowired - private lateinit var innlesingRepo: InnlesingRepo + private lateinit var innlesingRepository: InnlesingRepository companion object { @RegisterExtension @@ -62,7 +62,7 @@ class KafkaIntegrationTest : SpringContextTest.WithKafka() { ) - val innlesing = innlesingRepo.bestilt(Innlesing(InnlesingId.generate(), 2020)) + val innlesing = innlesingRepository.bestilt(Innlesing(InnlesingId.generate(), 2020)) sendStartInnlesingKafka(innlesing.id.toString()) sendBarnetrygdmottakerDataKafka( melding = KafkaMelding( diff --git a/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/RetryTest.kt b/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/RetryTest.kt index 0f85531..6da7db6 100644 --- a/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/RetryTest.kt +++ b/src/test/kotlin/no/nav/pensjon/opptjening/omsorgsopptjening/start/innlesning/barnetrygd/RetryTest.kt @@ -9,7 +9,7 @@ import no.nav.pensjon.opptjening.omsorgsopptjening.felles.CorrelationId import no.nav.pensjon.opptjening.omsorgsopptjening.felles.InnlesingId import no.nav.pensjon.opptjening.omsorgsopptjening.felles.serialize import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.Innlesing -import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.InnlesingRepo +import no.nav.pensjon.opptjening.omsorgsopptjening.start.innlesning.InnlesingRepository import org.apache.kafka.clients.producer.ProducerRecord import org.junit.jupiter.api.Assertions.assertInstanceOf import org.junit.jupiter.api.Test @@ -42,7 +42,7 @@ class RetryTest : SpringContextTest.NoKafka() { private lateinit var clock: Clock @Autowired - private lateinit var innlesingRepo: InnlesingRepo + private lateinit var innlesingRepository: InnlesingRepository companion object { @RegisterExtension @@ -62,8 +62,8 @@ class RetryTest : SpringContextTest.NoKafka() { */ given(clock.instant()).willReturn(Instant.now().plus(10, ChronoUnit.DAYS)) - val innlesing = innlesingRepo.bestilt(Innlesing(id = InnlesingId.generate(), år = 2023)) - .also { innlesingRepo.fullført(id = it.id.toString()) } + val innlesing = innlesingRepository.bestilt(Innlesing(id = InnlesingId.generate(), år = 2023)) + .also { innlesingRepository.fullført(id = it.id.toString()) } val barnetrygdmottaker = barnetrygdmottakerRepository.save( Barnetrygdmottaker( @@ -74,11 +74,11 @@ class RetryTest : SpringContextTest.NoKafka() { ) assertInstanceOf( Barnetrygdmottaker.Status.Klar::class.java, - barnetrygdmottakerRepository.find(barnetrygdmottaker.id!!).status + barnetrygdmottakerRepository.find(barnetrygdmottaker.id!!)!!.status ) barnetrygdService.process() - barnetrygdmottakerRepository.find(barnetrygdmottaker.id!!).also { + barnetrygdmottakerRepository.find(barnetrygdmottaker.id!!)!!.also { assertInstanceOf(Barnetrygdmottaker.Status.Retry::class.java, it.status).also { assertEquals(1, it.antallForsøk) assertEquals(3, it.maxAntallForsøk) @@ -90,7 +90,7 @@ class RetryTest : SpringContextTest.NoKafka() { assertInstanceOf( Barnetrygdmottaker.Status.Feilet::class.java, - barnetrygdmottakerRepository.find(barnetrygdmottaker.id!!).status + barnetrygdmottakerRepository.find(barnetrygdmottaker.id!!)!!.status ) } @@ -104,8 +104,8 @@ class RetryTest : SpringContextTest.NoKafka() { */ given(clock.instant()).willReturn(Instant.now().plus(10, ChronoUnit.DAYS)) - val innlesing = innlesingRepo.bestilt(Innlesing(id = InnlesingId.generate(), år = 2023)) - .also { innlesingRepo.fullført(id = it.id.toString()) } + val innlesing = innlesingRepository.bestilt(Innlesing(id = InnlesingId.generate(), år = 2023)) + .also { innlesingRepository.fullført(id = it.id.toString()) } wiremock.stubFor( WireMock.post(WireMock.urlPathEqualTo("/api/ekstern/pensjon/hent-barnetrygd")) @@ -146,12 +146,12 @@ class RetryTest : SpringContextTest.NoKafka() { assertInstanceOf( Barnetrygdmottaker.Status.Klar::class.java, - barnetrygdmottakerRepository.find(barnetrygdmottaker.id!!).status + barnetrygdmottakerRepository.find(barnetrygdmottaker.id!!)!!.status ) barnetrygdService.process() barnetrygdmottakerRepository.find(barnetrygdmottaker.id!!).let { - assertInstanceOf(Barnetrygdmottaker.Status.Retry::class.java, it.status).also { + assertInstanceOf(Barnetrygdmottaker.Status.Retry::class.java, it!!.status).also { assertEquals(1, it.antallForsøk) assertEquals(3, it.maxAntallForsøk) } @@ -160,7 +160,7 @@ class RetryTest : SpringContextTest.NoKafka() { barnetrygdService.process() assertInstanceOf( Barnetrygdmottaker.Status.Ferdig::class.java, - barnetrygdmottakerRepository.find(barnetrygdmottaker.id!!).status + barnetrygdmottakerRepository.find(barnetrygdmottaker.id!!)!!.status ) } @@ -185,8 +185,8 @@ class RetryTest : SpringContextTest.NoKafka() { */ given(clock.instant()).willReturn(Instant.now().plus(10, ChronoUnit.DAYS)) - val innlesing = innlesingRepo.bestilt(Innlesing(id = InnlesingId.generate(), år = 2023)) - .also { innlesingRepo.fullført(id = it.id.toString()) } + val innlesing = innlesingRepository.bestilt(Innlesing(id = InnlesingId.generate(), år = 2023)) + .also { innlesingRepository.fullført(id = it.id.toString()) } val barnetrygdmottaker = barnetrygdmottakerRepository.save( Barnetrygdmottaker( @@ -198,7 +198,7 @@ class RetryTest : SpringContextTest.NoKafka() { assertInstanceOf( Barnetrygdmottaker.Status.Klar::class.java, - barnetrygdmottakerRepository.find(barnetrygdmottaker.id!!).status + barnetrygdmottakerRepository.find(barnetrygdmottaker.id!!)!!.status ) assertThrows { @@ -206,7 +206,7 @@ class RetryTest : SpringContextTest.NoKafka() { } barnetrygdmottakerRepository.find(barnetrygdmottaker.id!!).also { - assertInstanceOf(Barnetrygdmottaker.Status.Retry::class.java, it.status).also { + assertInstanceOf(Barnetrygdmottaker.Status.Retry::class.java, it!!.status).also { assertEquals(1, it.antallForsøk) assertEquals(3, it.maxAntallForsøk) }