diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieCommandHandler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieCommandHandler.java index c2d2ae7363c33a4ed93418b6440c5d192e385c2d..f8b377c8574f379fd0a1e26a3a6bf5986d81ecbd 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieCommandHandler.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieCommandHandler.java @@ -34,7 +34,6 @@ import de.ozgcloud.alfa.common.command.Command; import de.ozgcloud.alfa.common.command.CommandBodyMapper; import de.ozgcloud.alfa.common.command.CommandOrder; import de.ozgcloud.alfa.common.command.LegacyOrder; -import de.ozgcloud.alfa.kommentar.Kommentar; import de.ozgcloud.alfa.wiedervorlage.Wiedervorlage; /** @@ -77,9 +76,7 @@ class HistorieCommandHandler { var itemName = getItemName(command); itemName.ifPresent(name -> { - if (name.equals(Kommentar.class.getSimpleName())) { - resultBuilder.order(LegacyOrder.CREATE_KOMMENTAR).build(); - } else if (name.equals(Wiedervorlage.class.getSimpleName())) { + if (name.equals(Wiedervorlage.class.getSimpleName())) { resultBuilder.order(LegacyOrder.CREATE_WIEDERVORLAGE).build(); } else if (isOzgCloudNachrichtenManager(command) && isIncomming(command)) { resultBuilder.order(CommandOrder.RECEIVE_POSTFACH_NACHRICHT.name()).build(); @@ -102,9 +99,7 @@ class HistorieCommandHandler { var itemName = getItemName(command); itemName.ifPresent(name -> { - if (name.equals(Kommentar.class.getSimpleName())) { - resultBuilder.order(LegacyOrder.EDIT_KOMMENTAR).build(); - } else if (name.equals(Wiedervorlage.class.getSimpleName())) { + if (name.equals(Wiedervorlage.class.getSimpleName())) { resultBuilder.order(LegacyOrder.EDIT_WIEDERVORLAGE).build(); } }); diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarHistorieProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarHistorieProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..665b90ab26399666cdff697cd3e455ba2ce7bfb7 --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarHistorieProcessor.java @@ -0,0 +1,51 @@ +package de.ozgcloud.alfa.kommentar; + +import java.util.Optional; +import java.util.stream.Stream; + +import org.apache.commons.collections.MapUtils; + +import de.ozgcloud.alfa.common.command.Command; +import de.ozgcloud.alfa.common.command.CommandBodyMapper; +import de.ozgcloud.alfa.common.command.CommandOrder; +import de.ozgcloud.alfa.common.command.LegacyOrder; +import de.ozgcloud.alfa.historie.HistorieProcessor; + +class KommentarHistorieProcessor implements HistorieProcessor { + + @Override + public Stream<Command> process(Stream<Command> commands) { + return commands.map(this::translateCreateKommentar).map(this::translateEditKommentar); + } + + Command translateCreateKommentar(Command command) { + if (isCreateAttachedItemCommand(command) && hasKommentarItemName(command)) { + return command.toBuilder().order(LegacyOrder.CREATE_KOMMENTAR).build(); + } + return command; + } + + private boolean isCreateAttachedItemCommand(Command command) { + return CommandOrder.CREATE_ATTACHED_ITEM == command.getCommandOrder(); + } + + Command translateEditKommentar(Command command) { + if (isUpdateAttachedItemCommand(command) && hasKommentarItemName(command)) { + return command.toBuilder().order(LegacyOrder.EDIT_KOMMENTAR).build(); + } + return command; + } + + private boolean isUpdateAttachedItemCommand(Command command) { + return CommandOrder.UPDATE_ATTACHED_ITEM == command.getCommandOrder(); + } + + private boolean hasKommentarItemName(Command command) { + return getItemName(command).filter(itemName -> Kommentar.class.getSimpleName().equals(itemName)).isPresent(); + } + + private Optional<String> getItemName(Command command) { + return Optional.ofNullable(MapUtils.getString(command.getBody(), CommandBodyMapper.ITEM_NAME_PROPERTY)); + } + +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieCommandHandlerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieCommandHandlerTest.java index 7fe5599fffac950da6c74ae51b8789ad1d96a13e..2b80cc34f7f8fe0c02d3c806d1b1f97d7638cd73 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieCommandHandlerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieCommandHandlerTest.java @@ -62,22 +62,6 @@ class HistorieCommandHandlerTest { @Nested class TestTranslateOrders { - @ParameterizedTest - @CsvSource(value = { "CREATE_KOMMENTAR;Kommentar", "CREATE_WIEDERVORLAGE;Wiedervorlage" }, delimiter = ';') - void shouldTranslateToCreateOrder(String target, String itemName) { - var command = handler.translateOrder(createCommand(itemName, CommandOrder.CREATE_ATTACHED_ITEM)); - - assertThat(command.getOrder()).isEqualTo(target); - } - - @ParameterizedTest - @CsvSource(value = { "EDIT_KOMMENTAR;Kommentar", "EDIT_WIEDERVORLAGE;Wiedervorlage" }, delimiter = ';') - void shouldTranslateToEditOrder(String target, String itemName) { - var command = handler.translateOrder(createCommand(itemName, CommandOrder.UPDATE_ATTACHED_ITEM)); - - assertThat(command.getOrder()).isEqualTo(target); - } - @ParameterizedTest @CsvSource(value = { "WIEDERVORLAGE_ERLEDIGEN;true", "WIEDERVORLAGE_WIEDEREROEFFNEN;false" }, delimiter = ';') void shouldTranslateToWiedervolageErledigenOrWiedervolageWiedereroeffnen(String target, String doneValue) { diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarHistorieProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarHistorieProcessorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..957adbee0aad0c30f2d2f05e6472a6fbcc30c20d --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarHistorieProcessorTest.java @@ -0,0 +1,167 @@ +package de.ozgcloud.alfa.kommentar; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.Map; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.Spy; + +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.alfa.common.command.Command; +import de.ozgcloud.alfa.common.command.CommandBodyMapper; +import de.ozgcloud.alfa.common.command.CommandOrder; +import de.ozgcloud.alfa.common.command.CommandTestFactory; +import de.ozgcloud.alfa.common.command.LegacyOrder; + +class KommentarHistorieProcessorTest { + + @Spy + private KommentarHistorieProcessor processor; + + @Nested + class TestProcess { + + private final Command command = CommandTestFactory.create(); + + @Test + void shouldPropagateAllOrders() { + doReturn(command).when(processor).translateCreateKommentar(command); + doReturn(command).when(processor).translateEditKommentar(command); + + var commands = processor.process(Stream.of(command)); + + assertThat(commands).containsExactly(command); + } + + @Test + void shouldCallTranslateCreateKommentar() { + processor.process(Stream.of(command)).toList(); + + verify(processor).translateCreateKommentar(command); + } + + @Test + void shouldCallTranslateEditKommentar() { + doReturn(command).when(processor).translateCreateKommentar(command); + + processor.process(Stream.of(command)).toList(); + + verify(processor).translateEditKommentar(command); + } + } + + @Nested + class TestTranslateCreateKommentar { + + @Nested + class TestOnNotCreateAttachedItem { + + @Test + void shouldReturnSameCommand() { + var command = CommandTestFactory.create(); + + var resultCommand = processor.translateCreateKommentar(command); + + assertThat(resultCommand).isSameAs(command); + } + } + + @Nested + class TestOnCreateAttachedItem { + + private Command.CommandBuilder commandBuilder = CommandTestFactory.createBuilder() + .order(CommandOrder.CREATE_ATTACHED_ITEM.name()); + + @Nested + class TestOnIsCreateKommentar { + @Test + void shouldTranslateToCreateKommentar() { + var commandBody = Map.of(CommandBodyMapper.ITEM_NAME_PROPERTY, Kommentar.class.getSimpleName()); + var command = commandBuilder.body(commandBody).build(); + var expectedCommand = CommandTestFactory.createBuilder() + .order(LegacyOrder.CREATE_KOMMENTAR) + .body(commandBody) + .build(); + + var resultCommand = processor.translateCreateKommentar(command); + + assertThat(resultCommand).usingRecursiveComparison().isEqualTo(expectedCommand); + } + } + + @Nested + class TestOnIsNotCreateKommentar { + + @Test + void shouldReturnSameCommand() { + var commandBody = Map.of(CommandBodyMapper.ITEM_NAME_PROPERTY, LoremIpsum.getInstance().getWords(1)); + var command = commandBuilder.body(commandBody).build(); + + var resultCommand = processor.translateCreateKommentar(command); + + assertThat(resultCommand).isSameAs(command); + } + } + } + } + + @Nested + class TestTranslateEditKommentar { + + @Nested + class TestOnNotUpdateAttachedItem { + + @Test + void shouldReturnSameCommand() { + var command = CommandTestFactory.create(); + + var resultCommand = processor.translateEditKommentar(command); + + assertThat(resultCommand).isSameAs(command); + } + } + + @Nested + class TestOnUpdateAttachedItem { + + private Command.CommandBuilder commandBuilder = CommandTestFactory.createBuilder() + .order(CommandOrder.UPDATE_ATTACHED_ITEM.name()); + + @Nested + class TestOnIsEditKommentar { + @Test + void shouldTranslateToCreateKommentar() { + var commandBody = Map.of(CommandBodyMapper.ITEM_NAME_PROPERTY, Kommentar.class.getSimpleName()); + var command = commandBuilder.body(commandBody).build(); + var expectedCommand = CommandTestFactory.createBuilder() + .order(LegacyOrder.EDIT_KOMMENTAR) + .body(commandBody) + .build(); + + var resultCommand = processor.translateEditKommentar(command); + + assertThat(resultCommand).usingRecursiveComparison().isEqualTo(expectedCommand); + } + } + + @Nested + class TestOnIsNotEditKommentar { + + @Test + void shouldReturnSameCommand() { + var commandBody = Map.of(CommandBodyMapper.ITEM_NAME_PROPERTY, LoremIpsum.getInstance().getWords(1)); + var command = commandBuilder.body(commandBody).build(); + + var resultCommand = processor.translateEditKommentar(command); + + assertThat(resultCommand).isSameAs(command); + } + } + } + } +}