diff --git a/web/src/main/java/no/nav/foreldrepenger/abakus/app/vedlikehold/ForvaltningRestTjeneste.java b/web/src/main/java/no/nav/foreldrepenger/abakus/app/vedlikehold/ForvaltningRestTjeneste.java index d0c2d64c6..3bca3f104 100644 --- a/web/src/main/java/no/nav/foreldrepenger/abakus/app/vedlikehold/ForvaltningRestTjeneste.java +++ b/web/src/main/java/no/nav/foreldrepenger/abakus/app/vedlikehold/ForvaltningRestTjeneste.java @@ -143,6 +143,7 @@ public Response oppdaterAktoerId(@TilpassetAbacAttributt(supplierClass = Forvalt public Response ryddOppGrunnlagUtenReferanse() { LOG.info("FORVALTNING ABAKUS ryddOppGrunnlagUtenReferanse"); oppryddingTjeneste.fjernAlleIayAggregatUtenReferanse(); + oppryddingTjeneste.fjernAlleIayInformasjontUtenReferanse(); return Response.ok().build(); } diff --git a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepository.java b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepository.java index dbd5afd4d..8cdc8a97c 100644 --- a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepository.java +++ b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepository.java @@ -1,17 +1,17 @@ package no.nav.foreldrepenger.abakus.rydding; -import static java.util.Collections.emptyList; - -import java.util.List; -import java.util.Objects; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.persistence.EntityManager; import no.nav.foreldrepenger.abakus.domene.iay.InntektArbeidYtelseAggregat; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; +import java.util.Objects; + +import static java.util.Collections.emptyList; @ApplicationScoped public class OppryddingIAYAggregatRepository { @@ -51,8 +51,7 @@ public void slettIayAggregat(Long id) { slettIayAktørIntekt(id); slettIayAktørArbeid(id); slettIayAktørYtelse(id); - entityManager.remove(iay); - entityManager.flush(); // Sørger for at endringer er lagret før vi går videre + fjernInntektArbeidYtelseFor(id); } } @@ -257,4 +256,11 @@ private void fjernInntekterFor(List aktørInntektIdList) { .executeUpdate(); LOG.info("Fjernet {} aktør inntekter for iay-aggregat: {}", antallFjernet, iayIdForSletting); } + + private void fjernInntektArbeidYtelseFor(Long iayIdForSletting) { + var antallFjernet = entityManager.createNativeQuery("delete from iay_inntekt_arbeid_ytelser where id = :iayId") + .setParameter(PARAM_IAY_ID, iayIdForSletting) + .executeUpdate(); + LOG.info("Fjernet {} IAY-aggregat med id: {}", antallFjernet, iayIdForSletting); + } } diff --git a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInformasjonRepository.java b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInformasjonRepository.java new file mode 100644 index 000000000..702a38c98 --- /dev/null +++ b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInformasjonRepository.java @@ -0,0 +1,94 @@ +package no.nav.foreldrepenger.abakus.rydding; + +import static java.util.Collections.emptyList; + +import java.util.List; +import java.util.Objects; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.persistence.EntityManager; +import no.nav.foreldrepenger.abakus.domene.iay.arbeidsforhold.ArbeidsforholdInformasjon; + +@ApplicationScoped +public class OppryddingIayInformasjonRepository { + private static final Logger LOG = LoggerFactory.getLogger(OppryddingIayInformasjonRepository.class); + + private EntityManager entityManager; + + OppryddingIayInformasjonRepository() { + // CDI proxy + } + + @Inject + public OppryddingIayInformasjonRepository(EntityManager entityManager) { + Objects.requireNonNull(entityManager, "entityManager"); + this.entityManager = entityManager; + } + + public List hentIayInformasjonUtenReferanse(Integer maxResults) { + @SuppressWarnings("unchecked") List result = entityManager.createNativeQuery("select distinct id from iay_informasjon info where " + + "not exists (select 1 from gr_arbeid_inntekt gr where info.id = gr.informasjon_id)").setMaxResults(maxResults).getResultList(); + if (result.isEmpty()) { + LOG.info("Fant ingen IAY-Informasjon uten grunnlag referanse"); + return emptyList(); + } + LOG.info("Fant {} IAY-Informasjon uten grunnlag referanse", result.size()); + return result.stream().map(Number::longValue).toList(); + } + + public void slettIayInformasjon(Long id) { + var arbeidsforholdInformasjon = entityManager.find(ArbeidsforholdInformasjon.class, id); + if (arbeidsforholdInformasjon != null) { + slettArbeidsforholdInformasjon(id); + fjernInformasjonFor(id); + } + } + + private void slettArbeidsforholdInformasjon(Long informasjonId) { + var overstyrteArbeidsforhold = hentOverstyrteArbeidsforholdFor(informasjonId); + if (!overstyrteArbeidsforhold.isEmpty()) { + fjernOverstyrteArbeidsforholdPerioderFor(overstyrteArbeidsforhold); + fjernOverstyrteArbeidsforholFor(informasjonId); + } + fjernArbeidsforholReferanserFor(informasjonId); + } + + private List hentOverstyrteArbeidsforholdFor(Long informasjonId) { + @SuppressWarnings("unchecked") List result = entityManager.createNativeQuery( + "select distinct id from iay_arbeidsforhold where informasjon_id = :infoId").setParameter("infoId", informasjonId).getResultList(); + return result.stream().map(Number::longValue).toList(); + } + + private void fjernOverstyrteArbeidsforholdPerioderFor(List overstyrteArbeidsforholdIdList) { + var antallFjernet = entityManager.createNativeQuery( + "delete from iay_overstyrte_perioder where arbeidsforhold_id in (:overstyrteArbeidsforholdIdList)") + .setParameter("overstyrteArbeidsforholdIdList", overstyrteArbeidsforholdIdList) + .executeUpdate(); + LOG.info("Fjernet {} overstyrte arbeidsforhold perioder for arbeidsforhold: {}", antallFjernet, overstyrteArbeidsforholdIdList); + } + + private void fjernOverstyrteArbeidsforholFor(Long informasjonId) { + var antallFjernet = entityManager.createNativeQuery("delete from iay_arbeidsforhold where informasjon_id = :informasjonId") + .setParameter("informasjonId", informasjonId) + .executeUpdate(); + LOG.info("Fjernet {} overstyrte arbeidsforhold for informasjon: {}", antallFjernet, informasjonId); + } + + private void fjernArbeidsforholReferanserFor(Long informasjonId) { + var antallFjernet = entityManager.createNativeQuery("delete from iay_arbeidsforhold_refer where informasjon_id = :informasjonId") + .setParameter("informasjonId", informasjonId) + .executeUpdate(); + LOG.info("Fjernet {} arbeidsforhold referanser for informasjon: {}", antallFjernet, informasjonId); + } + + private void fjernInformasjonFor(Long informasjonId) { + var antallFjernet = entityManager.createNativeQuery("delete from iay_informasjon where id = :informasjonId") + .setParameter("informasjonId", informasjonId) + .executeUpdate(); + LOG.info("Fjernet {} arbeidsforhold informasjon med id: {}", antallFjernet, informasjonId); + } +} diff --git a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjeneste.java b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjeneste.java index 128f83d95..7edf1bb39 100644 --- a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjeneste.java +++ b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjeneste.java @@ -1,23 +1,18 @@ package no.nav.foreldrepenger.abakus.rydding; -import java.util.List; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import no.nav.foreldrepenger.abakus.rydding.task.FjernIAYGrunnlagUtenReferanseTask; +import no.nav.foreldrepenger.abakus.rydding.task.FjernIayInformasjonUtenReferanseTask; import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData; import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste; -import no.nav.vedtak.mapper.json.DefaultJsonMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import static no.nav.foreldrepenger.abakus.rydding.task.FjernIAYGrunnlagUtenReferanseTask.MAX_PARTITION_SIZE; @ApplicationScoped public class OppryddingTjeneste { private static final Logger LOG = LoggerFactory.getLogger(OppryddingTjeneste.class); - private OppryddingIAYAggregatRepository iayOppryddingRepository; private ProsessTaskTjeneste taskTjeneste; OppryddingTjeneste() { @@ -25,25 +20,27 @@ public class OppryddingTjeneste { } @Inject - public OppryddingTjeneste(OppryddingIAYAggregatRepository iayOppryddingRepository, ProsessTaskTjeneste taskTjeneste) { - this.iayOppryddingRepository = iayOppryddingRepository; + public OppryddingTjeneste(ProsessTaskTjeneste taskTjeneste) { this.taskTjeneste = taskTjeneste; } public void fjernAlleIayAggregatUtenReferanse() { - var iayAggregatUtenReferanse = iayOppryddingRepository.hentIayAggregaterUtenReferanse(MAX_PARTITION_SIZE); - if (iayAggregatUtenReferanse.isEmpty()) { - LOG.info("Ingen IAY aggregat for sletting."); - return; - } - LOG.info("Fjerner {} IAY-aggregater uten referanse.", iayAggregatUtenReferanse.size()); - opprettFjernIayAggregatTask(iayAggregatUtenReferanse); + opprettFjernIayAggregatTask(); } - private void opprettFjernIayAggregatTask(List iayIdsList) { - LOG.info("Oppretter task for å fjerne {} IAY-aggregater uten referanse.", iayIdsList.size()); + public void fjernAlleIayInformasjontUtenReferanse() { + opprettFjernIayInformasjonTask(); + } + + private void opprettFjernIayAggregatTask() { + LOG.info("Oppretter task for å fjerne IAY-aggregater uten referanse."); var prosessTaskData = ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class); - prosessTaskData.setPayload(DefaultJsonMapper.toJson(iayIdsList)); + taskTjeneste.lagre(prosessTaskData); + } + + private void opprettFjernIayInformasjonTask() { + LOG.info("Oppretter task for å fjerne IAY-Informasjon uten referanse."); + var prosessTaskData = ProsessTaskData.forProsessTask(FjernIayInformasjonUtenReferanseTask.class); taskTjeneste.lagre(prosessTaskData); } } diff --git a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernAlleGrunnlagUtenReferanseBatchTask.java b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernAlleGrunnlagUtenReferanseBatchTask.java index 3e906802f..59853f624 100644 --- a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernAlleGrunnlagUtenReferanseBatchTask.java +++ b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernAlleGrunnlagUtenReferanseBatchTask.java @@ -21,5 +21,6 @@ public FjernAlleGrunnlagUtenReferanseBatchTask(OppryddingTjeneste oppryddingTjen @Override public void doTask(ProsessTaskData prosessTaskData) { oppryddingTjeneste.fjernAlleIayAggregatUtenReferanse(); + oppryddingTjeneste.fjernAlleIayInformasjontUtenReferanse(); } } diff --git a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIAYGrunnlagUtenReferanseTask.java b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIAYGrunnlagUtenReferanseTask.java index da293f13f..45ed055cc 100644 --- a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIAYGrunnlagUtenReferanseTask.java +++ b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIAYGrunnlagUtenReferanseTask.java @@ -1,11 +1,5 @@ package no.nav.foreldrepenger.abakus.rydding.task; -import java.util.List; -import java.util.Set; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import no.nav.foreldrepenger.abakus.rydding.OppryddingIAYAggregatRepository; @@ -13,13 +7,17 @@ import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData; import no.nav.vedtak.felles.prosesstask.api.ProsessTaskHandler; import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste; -import no.nav.vedtak.mapper.json.DefaultJsonMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @ApplicationScoped @ProsessTask(value = "opprydding.iayGrunnlag.uten.referanse", maxFailedRuns = 2) public class FjernIAYGrunnlagUtenReferanseTask implements ProsessTaskHandler { - public static final int MAX_PARTITION_SIZE = 250; + + public static final int IAY_GRUNNLAG_BATCH_SIZE = 500; + private static final Logger LOG = LoggerFactory.getLogger(FjernIAYGrunnlagUtenReferanseTask.class); + private final OppryddingIAYAggregatRepository iayAggregatRepository; private final ProsessTaskTjeneste taskTjeneste; @@ -30,22 +28,20 @@ public FjernIAYGrunnlagUtenReferanseTask(OppryddingIAYAggregatRepository iayAggr } @Override - public void doTask(ProsessTaskData prosessTaskData) { - Set iayAggregatUtenReferanse = DefaultJsonMapper.fromJson(prosessTaskData.getPayloadAsString(), Set.class); + public void doTask(ProsessTaskData unused) { + var iayAggregatUtenReferanse = iayAggregatRepository.hentIayAggregaterUtenReferanse(IAY_GRUNNLAG_BATCH_SIZE); LOG.info("Fjerner {} IAY-aggregater uten referanse.", iayAggregatUtenReferanse.size()); - iayAggregatUtenReferanse.forEach(iayId -> iayAggregatRepository.slettIayAggregat(iayId.longValue())); + iayAggregatUtenReferanse.forEach(iayAggregatRepository::slettIayAggregat); LOG.info("Slettet {} IAY-aggregater uten referanse", iayAggregatUtenReferanse.size()); - var nyeAggregaterTilSletting = iayAggregatRepository.hentIayAggregaterUtenReferanse(MAX_PARTITION_SIZE); - if (!nyeAggregaterTilSletting.isEmpty()) { - opprettFjernIayAggregatTask(nyeAggregaterTilSletting); + if (iayAggregatUtenReferanse.size() >= IAY_GRUNNLAG_BATCH_SIZE) { + opprettFjernIayAggregatTask(); } } - private void opprettFjernIayAggregatTask(List iayIdsList) { - LOG.info("Oppretter en ny task for å fjerne {} IAY-aggregater uten referanse.", iayIdsList.size()); + private void opprettFjernIayAggregatTask() { + LOG.info("Oppretter en ny task for å fjerne IAY-aggregater uten referanse."); var prosessTaskData = ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class); - prosessTaskData.setPayload(DefaultJsonMapper.toJson(iayIdsList)); taskTjeneste.lagre(prosessTaskData); } } diff --git a/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInformasjonUtenReferanseTask.java b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInformasjonUtenReferanseTask.java new file mode 100644 index 000000000..2c7c00d75 --- /dev/null +++ b/web/src/main/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInformasjonUtenReferanseTask.java @@ -0,0 +1,46 @@ +package no.nav.foreldrepenger.abakus.rydding.task; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import no.nav.foreldrepenger.abakus.rydding.OppryddingIayInformasjonRepository; +import no.nav.vedtak.felles.prosesstask.api.ProsessTask; +import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData; +import no.nav.vedtak.felles.prosesstask.api.ProsessTaskHandler; +import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@ApplicationScoped +@ProsessTask(value = "opprydding.iayInformasjon.uten.referanse", maxFailedRuns = 2) +public class FjernIayInformasjonUtenReferanseTask implements ProsessTaskHandler { + public static final int IAY_ARBEIDSFORHOLD_INFORMASJON_BATCH_SIZE = 750; + + private static final Logger LOG = LoggerFactory.getLogger(FjernIayInformasjonUtenReferanseTask.class); + + private final OppryddingIayInformasjonRepository oppryddingIayInformasjonRepository; + private final ProsessTaskTjeneste taskTjeneste; + + @Inject + public FjernIayInformasjonUtenReferanseTask(OppryddingIayInformasjonRepository oppryddingIayInformasjonRepository, ProsessTaskTjeneste taskTjeneste) { + this.oppryddingIayInformasjonRepository = oppryddingIayInformasjonRepository; + this.taskTjeneste = taskTjeneste; + } + + @Override + public void doTask(ProsessTaskData unused) { + var iayInformasjonUtenReferanse = oppryddingIayInformasjonRepository.hentIayInformasjonUtenReferanse(IAY_ARBEIDSFORHOLD_INFORMASJON_BATCH_SIZE); + LOG.info("Fjerner {} IAY-Informasjon uten referanse.", iayInformasjonUtenReferanse.size()); + iayInformasjonUtenReferanse.forEach(oppryddingIayInformasjonRepository::slettIayInformasjon); + LOG.info("Slettet {} IAY-Informasjon uten referanse", iayInformasjonUtenReferanse.size()); + + if (iayInformasjonUtenReferanse.size() >= IAY_ARBEIDSFORHOLD_INFORMASJON_BATCH_SIZE) { + opprettFjernInformasjonAggregatTask(); + } + } + + private void opprettFjernInformasjonAggregatTask() { + LOG.info("Oppretter en ny task for å fjerne IAY-Informasjon uten referanse."); + var prosessTaskData = ProsessTaskData.forProsessTask(FjernIayInformasjonUtenReferanseTask.class); + taskTjeneste.lagre(prosessTaskData); + } +} diff --git a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepositoryTest.java b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepositoryTest.java index 596f1c2b9..b2b81c1f9 100644 --- a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepositoryTest.java +++ b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIAYAggregatRepositoryTest.java @@ -41,7 +41,6 @@ void slettIayAggregat_register_ok() { assertThat(iayAggregater).hasSize(1); repository.slettIayAggregat(iayAggregater.getFirst()); - flushAndClear(); assertThat(repository.hentIayAggregaterUtenReferanse(250)).isEmpty(); } @@ -54,7 +53,6 @@ void slettIayAggregat_saksbehandlet_ok() { assertThat(iayAggregater).hasSize(1); repository.slettIayAggregat(iayAggregater.getFirst()); - flushAndClear(); assertThat(repository.hentIayAggregaterUtenReferanse(250)).isEmpty(); } diff --git a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInformasjonRepositoryTest.java b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInformasjonRepositoryTest.java new file mode 100644 index 000000000..1eff881bf --- /dev/null +++ b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingIayInformasjonRepositoryTest.java @@ -0,0 +1,55 @@ +package no.nav.foreldrepenger.abakus.rydding; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import jakarta.persistence.EntityManager; +import no.nav.foreldrepenger.abakus.dbstoette.JpaExtension; +import no.nav.foreldrepenger.abakus.domene.iay.arbeidsforhold.ArbeidsforholdInformasjon; +import no.nav.vedtak.felles.testutilities.db.EntityManagerAwareTest; + +@ExtendWith(JpaExtension.class) +class OppryddingIayInformasjonRepositoryTest extends EntityManagerAwareTest { + + private OppryddingIayInformasjonRepository repository; + + @BeforeEach + void setUp(EntityManager entityManager) { + repository = new OppryddingIayInformasjonRepository(entityManager); + } + + @Test + void hentIayInformasjonUtenReferanse_medReferanse_ok() { + opprettEmptyArbeidsforholdInfo(); + + var arbeidsforholdInformasjon = repository.hentIayInformasjonUtenReferanse(10); + + assertThat(arbeidsforholdInformasjon).hasSize(1); + } + + @Test + void slettIayInformasjon_ok() { + opprettEmptyArbeidsforholdInfo(); + + var arbeidsforholdInformasjon = repository.hentIayInformasjonUtenReferanse(10); + assertThat(arbeidsforholdInformasjon).hasSize(1); + + repository.slettIayInformasjon(arbeidsforholdInformasjon.getFirst()); + + assertThat(repository.hentIayInformasjonUtenReferanse(10)).isEmpty(); + } + + private void opprettEmptyArbeidsforholdInfo() { + var entity = new ArbeidsforholdInformasjon(); + getEntityManager().persist(entity); + flushAndClear(); + } + + private void flushAndClear() { + getEntityManager().flush(); + getEntityManager().clear(); + } +} diff --git a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjenesteTest.java b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjenesteTest.java index c8b376fdc..e9521e14e 100644 --- a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjenesteTest.java +++ b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/OppryddingTjenesteTest.java @@ -1,56 +1,56 @@ package no.nav.foreldrepenger.abakus.rydding; -import static no.nav.foreldrepenger.abakus.rydding.task.FjernIAYGrunnlagUtenReferanseTask.MAX_PARTITION_SIZE; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoInteractions; -import static org.mockito.Mockito.when; - -import java.util.List; - +import no.nav.foreldrepenger.abakus.rydding.task.FjernIAYGrunnlagUtenReferanseTask; +import no.nav.foreldrepenger.abakus.rydding.task.FjernIayInformasjonUtenReferanseTask; +import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData; +import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste; +import no.nav.vedtak.felles.prosesstask.api.TaskType; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData; -import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class OppryddingTjenesteTest { - @Mock - private OppryddingIAYAggregatRepository oppryddingIAYAggregatRepository; @Mock private ProsessTaskTjeneste prosessTaskTjeneste; + @Captor + private ArgumentCaptor prosessTaskDataCaptor; private OppryddingTjeneste oppryddingTjeneste; @BeforeEach void setUp() { - oppryddingTjeneste = new OppryddingTjeneste(oppryddingIAYAggregatRepository, prosessTaskTjeneste); + oppryddingTjeneste = new OppryddingTjeneste(prosessTaskTjeneste); } - @Test - void testFjernAlleIayAggregatUtenReferanse_noAggregates_ok() { - when(oppryddingIAYAggregatRepository.hentIayAggregaterUtenReferanse(MAX_PARTITION_SIZE)).thenReturn(List.of()); + @Test + void testFjernAlleIayAggregatUtenReferanse_ok() { + // Act oppryddingTjeneste.fjernAlleIayAggregatUtenReferanse(); - verify(oppryddingIAYAggregatRepository, times(1)).hentIayAggregaterUtenReferanse(MAX_PARTITION_SIZE); - verifyNoInteractions(prosessTaskTjeneste); + // Assert + verify(prosessTaskTjeneste, times(1)).lagre(prosessTaskDataCaptor.capture()); + var prosessTaskData = prosessTaskDataCaptor.getValue(); + assertThat(prosessTaskData.taskType()).isEqualTo(TaskType.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class)); } @Test - void testFjernAlleIayAggregatUtenReferanse_withAggregates_ok() { - var aggregates = List.of(1L, 2L, 3L); - when(oppryddingIAYAggregatRepository.hentIayAggregaterUtenReferanse(MAX_PARTITION_SIZE)).thenReturn(aggregates); - - oppryddingTjeneste.fjernAlleIayAggregatUtenReferanse(); - - verify(oppryddingIAYAggregatRepository).hentIayAggregaterUtenReferanse(MAX_PARTITION_SIZE); - verify(prosessTaskTjeneste, times(1)).lagre(any(ProsessTaskData.class)); + void testFjernAlleInformasjonAggregatUtenReferanse_ok() { + // Act + oppryddingTjeneste.fjernAlleIayInformasjontUtenReferanse(); + + // Assert + verify(prosessTaskTjeneste, times(1)).lagre(prosessTaskDataCaptor.capture()); + var prosessTaskData = prosessTaskDataCaptor.getValue(); + assertThat(prosessTaskData.taskType()).isEqualTo(TaskType.forProsessTask(FjernIayInformasjonUtenReferanseTask.class)); } } diff --git a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIAYGrunnlagUtenReferanseTaskTest.java b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIAYGrunnlagUtenReferanseTaskTest.java index 050bfda0f..047abc421 100644 --- a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIAYGrunnlagUtenReferanseTaskTest.java +++ b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIAYGrunnlagUtenReferanseTaskTest.java @@ -1,20 +1,8 @@ package no.nav.foreldrepenger.abakus.rydding.task; -import static java.util.Collections.emptySet; -import static no.nav.foreldrepenger.abakus.rydding.task.FjernIAYGrunnlagUtenReferanseTask.MAX_PARTITION_SIZE; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import java.util.List; -import java.util.Set; -import java.util.stream.LongStream; - +import no.nav.foreldrepenger.abakus.rydding.OppryddingIAYAggregatRepository; +import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData; +import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -23,10 +11,15 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import no.nav.foreldrepenger.abakus.rydding.OppryddingIAYAggregatRepository; -import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData; -import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste; -import no.nav.vedtak.mapper.json.DefaultJsonMapper; +import java.util.List; +import java.util.stream.LongStream; + +import static java.util.Collections.emptyList; +import static no.nav.foreldrepenger.abakus.rydding.task.FjernIAYGrunnlagUtenReferanseTask.IAY_GRUNNLAG_BATCH_SIZE; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class FjernIAYGrunnlagUtenReferanseTaskTest { @@ -37,7 +30,6 @@ class FjernIAYGrunnlagUtenReferanseTaskTest { private ProsessTaskTjeneste prosessTaskTjeneste; @Captor private ArgumentCaptor longCaptor; - @Captor ArgumentCaptor prosessTaskDataCaptor; private FjernIAYGrunnlagUtenReferanseTask task; @@ -47,48 +39,46 @@ void setUp() { } @Test - void testDoTask_withValidPayload() { - var iayIds = Set.of(1L, 2L, 3L); - var payload = DefaultJsonMapper.toJson(iayIds); - var prosessTaskData = ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class); - prosessTaskData.setPayload(payload); + void testDoTask_ok() { + var iayIds = List.of(1L, 2L, 3L); + when(oppryddingIAYAggregatRepository.hentIayAggregaterUtenReferanse(IAY_GRUNNLAG_BATCH_SIZE)).thenReturn(iayIds); - task.doTask(prosessTaskData); + // Act + task.doTask(ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class)); + // Assert verify(prosessTaskTjeneste, never()).lagre(any(ProsessTaskData.class)); + verify(oppryddingIAYAggregatRepository, times(1)).hentIayAggregaterUtenReferanse(anyInt()); verify(oppryddingIAYAggregatRepository, times(3)).slettIayAggregat(longCaptor.capture()); - var capturedIds = Set.copyOf(longCaptor.getAllValues()); + var capturedIds = List.copyOf(longCaptor.getAllValues()); assertEquals(iayIds, capturedIds); } @Test - void testDoTask_withEmptyPayload() { - Set iayIds = emptySet(); - var payload = DefaultJsonMapper.toJson(iayIds); - var prosessTaskData = ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class); - prosessTaskData.setPayload(payload); + void testDoTask_ikke_noe_til_å_slette() { + when(oppryddingIAYAggregatRepository.hentIayAggregaterUtenReferanse(IAY_GRUNNLAG_BATCH_SIZE)).thenReturn(emptyList()); - task.doTask(prosessTaskData); + // Act + task.doTask(ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class)); - verify(prosessTaskTjeneste, never()).lagre(any(ProsessTaskData.class)); + // Assert + verify(oppryddingIAYAggregatRepository, times(1)).hentIayAggregaterUtenReferanse(anyInt()); + verifyNoInteractions(prosessTaskTjeneste); verify(oppryddingIAYAggregatRepository, never()).slettIayAggregat(anyLong()); } @Test - void testDoTask_withValidPayload_over_max_partition_size() { - var iayIds = LongStream.rangeClosed(1, MAX_PARTITION_SIZE).boxed().toList(); - var payload = DefaultJsonMapper.toJson(iayIds); - var prosessTaskData = ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class); - prosessTaskData.setPayload(payload); - when(oppryddingIAYAggregatRepository.hentIayAggregaterUtenReferanse(MAX_PARTITION_SIZE)).thenReturn(iayIds.subList(0, MAX_PARTITION_SIZE - 5)); + void testDoTask_ok_over_max_partition_size() { + var iayIds = LongStream.rangeClosed(1, IAY_GRUNNLAG_BATCH_SIZE).boxed().toList(); + when(oppryddingIAYAggregatRepository.hentIayAggregaterUtenReferanse(IAY_GRUNNLAG_BATCH_SIZE)).thenReturn(iayIds); - task.doTask(prosessTaskData); + // Act + task.doTask(ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class)); - verify(oppryddingIAYAggregatRepository, times(MAX_PARTITION_SIZE)).slettIayAggregat(longCaptor.capture()); + // Assert + verify(oppryddingIAYAggregatRepository, times(IAY_GRUNNLAG_BATCH_SIZE)).slettIayAggregat(longCaptor.capture()); var capturedIds = List.copyOf(longCaptor.getAllValues()); assertEquals(iayIds, capturedIds); - verify(prosessTaskTjeneste).lagre(prosessTaskDataCaptor.capture()); - var nextProsesstaskPayload = DefaultJsonMapper.fromJson(prosessTaskDataCaptor.getValue().getPayloadAsString(), List.class); - assertThat(nextProsesstaskPayload).hasSize(MAX_PARTITION_SIZE - 5); + verify(prosessTaskTjeneste).lagre(any(ProsessTaskData.class)); } } diff --git a/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInformasjonUtenReferanseTaskTest.java b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInformasjonUtenReferanseTaskTest.java new file mode 100644 index 000000000..7503b4aac --- /dev/null +++ b/web/src/test/java/no/nav/foreldrepenger/abakus/rydding/task/FjernIayInformasjonUtenReferanseTaskTest.java @@ -0,0 +1,85 @@ +package no.nav.foreldrepenger.abakus.rydding.task; + +import no.nav.foreldrepenger.abakus.rydding.OppryddingIayInformasjonRepository; +import no.nav.vedtak.felles.prosesstask.api.ProsessTaskData; +import no.nav.vedtak.felles.prosesstask.api.ProsessTaskTjeneste; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.List; +import java.util.stream.LongStream; + +import static java.util.Collections.emptyList; +import static no.nav.foreldrepenger.abakus.rydding.task.FjernIayInformasjonUtenReferanseTask.IAY_ARBEIDSFORHOLD_INFORMASJON_BATCH_SIZE; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class FjernIayInformasjonUtenReferanseTaskTest { + + @Mock + private OppryddingIayInformasjonRepository oppryddingIayInformasjonRepository; + @Mock + private ProsessTaskTjeneste prosessTaskTjeneste; + @Captor + private ArgumentCaptor longCaptor; + + private FjernIayInformasjonUtenReferanseTask task; + + @BeforeEach + void setUp() { + task = new FjernIayInformasjonUtenReferanseTask(oppryddingIayInformasjonRepository, prosessTaskTjeneste); + } + + @Test + void testDoTask_ok() { + var iayIds = List.of(1L, 2L, 3L); + when(oppryddingIayInformasjonRepository.hentIayInformasjonUtenReferanse(IAY_ARBEIDSFORHOLD_INFORMASJON_BATCH_SIZE)).thenReturn(iayIds); + + // Act + task.doTask(ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class)); + + // Assert + verifyNoInteractions(prosessTaskTjeneste); + verify(oppryddingIayInformasjonRepository, times(1)).hentIayInformasjonUtenReferanse(anyInt()); + verify(oppryddingIayInformasjonRepository, times(3)).slettIayInformasjon(longCaptor.capture()); + var capturedIds = List.copyOf(longCaptor.getAllValues()); + assertEquals(iayIds, capturedIds); + } + + @Test + void testDoTask_ikke_noe_til_å_slette() { + when(oppryddingIayInformasjonRepository.hentIayInformasjonUtenReferanse(IAY_ARBEIDSFORHOLD_INFORMASJON_BATCH_SIZE)).thenReturn(emptyList()); + + // Act + task.doTask(ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class)); + + // Assert + verify(oppryddingIayInformasjonRepository, times(1)).hentIayInformasjonUtenReferanse(anyInt()); + verifyNoInteractions(prosessTaskTjeneste); + verify(oppryddingIayInformasjonRepository, never()).slettIayInformasjon(anyLong()); + } + + @Test + void testDoTask_withValidPayload_over_max_partition_size() { + var iayIds = LongStream.rangeClosed(1, IAY_ARBEIDSFORHOLD_INFORMASJON_BATCH_SIZE).boxed().toList(); + when(oppryddingIayInformasjonRepository.hentIayInformasjonUtenReferanse(IAY_ARBEIDSFORHOLD_INFORMASJON_BATCH_SIZE)).thenReturn( + iayIds); + + // Act + task.doTask(ProsessTaskData.forProsessTask(FjernIAYGrunnlagUtenReferanseTask.class)); + + // Assert + verify(oppryddingIayInformasjonRepository, times(IAY_ARBEIDSFORHOLD_INFORMASJON_BATCH_SIZE)).slettIayInformasjon(longCaptor.capture()); + var capturedIds = List.copyOf(longCaptor.getAllValues()); + assertEquals(iayIds, capturedIds); + verify(prosessTaskTjeneste).lagre(any(ProsessTaskData.class)); + } +}