diff --git a/src/main/java/de/ozgcloud/aggregation/AggregationManagerRunner.java b/src/main/java/de/ozgcloud/aggregation/AggregationManagerRunner.java index 1d9fec5f0f6106859ce05eb3f48b2a692e5e4371..9584200a47f784405c35ea92172122bd7068e455 100644 --- a/src/main/java/de/ozgcloud/aggregation/AggregationManagerRunner.java +++ b/src/main/java/de/ozgcloud/aggregation/AggregationManagerRunner.java @@ -94,15 +94,17 @@ public class AggregationManagerRunner implements CommandLineRunner { void runWithTransformation(Transformation transformation, FormIdentifier formIdentifier) { try (Execution execution = new Execution(transformation)) { ThreadContext.put(MDC_EXECUTION, execution.id.toString()); - loadVorgaengeIntoRepository(Stream.concat( - extractBatchesOfVorgaengeFromDataSource(execution, formIdentifier), - extractBatchesOfDeletedVorgaengeFromDataSource(execution))); + var vorgaenge = extractBatchesOfVorgaengeFromDataSource(execution, formIdentifier); + var deletedVorgaenge = Objects.isNull(formIdentifier) ? extractBatchesOfDeletedVorgaengeFromDataSource(execution) + : Stream.<Batch>empty(); + loadVorgaengeIntoRepository(Stream.concat(vorgaenge, deletedVorgaenge)); } finally { ThreadContext.remove(MDC_EXECUTION); } } void loadVorgaengeIntoRepository(Stream<Batch> batches) { + repository.deleteAll(); batches.map(this::transformBatchToDocumentEntries).forEach(this::loadDocumentEntriesIntoRepository); } diff --git a/src/test/java/de/ozgcloud/aggregation/AggregationManagerRunnerTest.java b/src/test/java/de/ozgcloud/aggregation/AggregationManagerRunnerTest.java index 92d4198ba9e3c40faedf75c6dc5b51956f633a66..fde2d1ad0d8cc5ec8e87d724c7ea4a76fae3bb4a 100644 --- a/src/test/java/de/ozgcloud/aggregation/AggregationManagerRunnerTest.java +++ b/src/test/java/de/ozgcloud/aggregation/AggregationManagerRunnerTest.java @@ -201,15 +201,12 @@ class AggregationManagerRunnerTest { private final FormIdentifier formIdentifier = FormIdentifierTestFactory.create(); @Mock private Batch batchOfVorgaenge; - @Mock - private Batch batchOfDeletedVorgaenge; @Captor private ArgumentCaptor<Stream<Batch>> batchStreamCaptor; @BeforeEach void init() { doReturn(Stream.of(batchOfVorgaenge)).when(runner).extractBatchesOfVorgaengeFromDataSource(any(), any()); - doReturn(Stream.of(batchOfDeletedVorgaenge)).when(runner).extractBatchesOfDeletedVorgaengeFromDataSource(any()); doNothing().when(runner).loadVorgaengeIntoRepository(any()); } @@ -220,19 +217,50 @@ class AggregationManagerRunnerTest { verify(runner).extractBatchesOfVorgaengeFromDataSource(argThat(hasTransformation), eq(formIdentifier)); } - @Test - void shouldExtractBatchesOfDeletedVorgaengeFromDataSource() { - runner.runWithTransformation(transformation, formIdentifier); + @Nested + class TestOnFormIdentifierIsNull { + + @Mock + private Batch batchOfDeletedVorgaenge; + + @BeforeEach + void mock() { + doReturn(Stream.of(batchOfDeletedVorgaenge)).when(runner).extractBatchesOfDeletedVorgaengeFromDataSource(any()); + } + + @Test + void shouldExtractBatchesOfDeletedVorgaengeFromDataSource() { + runner.runWithTransformation(transformation, null); + + verify(runner).extractBatchesOfDeletedVorgaengeFromDataSource(argThat(hasTransformation)); + } + + @Test + void shouldLoadVorgaengeIntoRepository() { + runner.runWithTransformation(transformation, null); - verify(runner).extractBatchesOfDeletedVorgaengeFromDataSource(argThat(hasTransformation)); + verify(runner).loadVorgaengeIntoRepository(batchStreamCaptor.capture()); + assertThat(batchStreamCaptor.getValue()).containsExactly(batchOfVorgaenge, batchOfDeletedVorgaenge); + } } - @Test - void shouldLoadVorgaengeIntoRepository() { - runner.runWithTransformation(transformation, formIdentifier); + @Nested + class TestOnFormIdentifierIsNotNull { + + @Test + void shouldNotExtractBatchesOfDeletedVorgaengeFromDataSource() { + runner.runWithTransformation(transformation, formIdentifier); + + verify(runner, never()).extractBatchesOfDeletedVorgaengeFromDataSource(any()); + } - verify(runner).loadVorgaengeIntoRepository(batchStreamCaptor.capture()); - assertThat(batchStreamCaptor.getValue()).containsExactly(batchOfVorgaenge, batchOfDeletedVorgaenge); + @Test + void shouldLoadVorgaengeIntoRepository() { + runner.runWithTransformation(transformation, formIdentifier); + + verify(runner).loadVorgaengeIntoRepository(batchStreamCaptor.capture()); + assertThat(batchStreamCaptor.getValue()).containsExactly(batchOfVorgaenge); + } } } @@ -253,6 +281,13 @@ class AggregationManagerRunnerTest { doNothing().when(runner).loadDocumentEntriesIntoRepository(any()); } + @Test + void shouldDropCollection() { + loadVorgaengeIntoRepository(); + + verify(repository).deleteAll(); + } + @Test void shouldTransform() { loadVorgaengeIntoRepository();