diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommand.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommand.java index 77496d98807d0949b55ac4957fac111552c731fe..1686656a1ba8e1d05b6e150184e7270bffa8c8ed 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommand.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommand.java @@ -24,6 +24,7 @@ package de.ozgcloud.vorgang.common.migration; import java.util.List; +import java.util.stream.Stream; import org.bson.Document; import org.bson.types.ObjectId; @@ -55,9 +56,12 @@ public class M014_AddItemNameBescheidToPatchAttachedItemCommand { // NOSONAR } List<String> getSendBescheidCommandIds(MongoOperations mongoOperations) { - var commands = mongoOperations.find(Query.query(Criteria.where(ORDER_FIELD).is(SEND_BESCHEID_ORDER)), Document.class, + return getSendBescheidCommands(mongoOperations).map(command -> command.getObjectId(ID_FIELD)).map(ObjectId::toString).toList(); + } + + private Stream<Document> getSendBescheidCommands(MongoOperations mongoOperations) { + return mongoOperations.stream(Query.query(Criteria.where(ORDER_FIELD).is(SEND_BESCHEID_ORDER)), Document.class, COMMAND_COLLECTION_NAME); - return commands.stream().map(command -> command.getObjectId(ID_FIELD)).map(ObjectId::toString).toList(); } void updateDocuments(MongoOperations mongoOperations, List<String> parentIds) { diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommandITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommandITCase.java index aceb14ff1cc2afcf8c8f67fdbc722a10b8716645..0a29711b516ffd6c72c8f90040ff7b2302e75096 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommandITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/migration/M014_AddItemNameBescheidToPatchAttachedItemCommandITCase.java @@ -62,23 +62,20 @@ class M014_AddItemNameBescheidToPatchAttachedItemCommandITCase { @Autowired private MongoOperations mongoOperations; - private List<Document> expectedCommands; private Document sendBescheidCommand; private Document patchAttachedItemCommand; - private Document otherSubCommand; - private Document otherPatchAttachedItemCommand; + private Document subCommandWithUnkownOrder; + private Document patchAttachedItemCommandWithoutParent; + private Document patchAttachedItemCommandWithDifferentParent; @BeforeEach void setUp() { migrationDbTestUtils.dropCommandCollection(); sendBescheidCommand = saveSendBescheidCommand(); patchAttachedItemCommand = savePatchAttachedItemSubCommand(sendBescheidCommand.getObjectId(ID_FIELD)); - otherSubCommand = saveOtherSubCommand(sendBescheidCommand.getObjectId(ID_FIELD)); - otherPatchAttachedItemCommand = saveOtherPatchAttachedItemSubCommand(); - expectedCommands = List.of(sendBescheidCommand, - buildExpectedPatchAttachedItemCommand(patchAttachedItemCommand), - otherSubCommand, - otherPatchAttachedItemCommand); + subCommandWithUnkownOrder = saveSubCommandWithUnkownOrder(sendBescheidCommand.getObjectId(ID_FIELD)); + patchAttachedItemCommandWithoutParent = savePatchAttachedItemCommandWithoutParent(); + patchAttachedItemCommandWithDifferentParent = savePatchAttachedItemCommandWithDifferentParent(); } private Document saveSendBescheidCommand() { @@ -92,25 +89,21 @@ class M014_AddItemNameBescheidToPatchAttachedItemCommandITCase { return migrationDbTestUtils.saveCommand(command); } - private Document saveOtherSubCommand(ObjectId id) { + private Document saveSubCommandWithUnkownOrder(ObjectId id) { var itemBody = Map.<String, Object>of(PARENT_ID_FIELD, id.toString()); var command = CommandDocumentTestFactory.createWithBody(itemBody); return migrationDbTestUtils.saveCommand(command); } - private Document saveOtherPatchAttachedItemSubCommand() { + private Document savePatchAttachedItemCommandWithoutParent() { var command = CommandDocumentTestFactory.createWithOrder(PATCH_ATTACHED_ITEM_ORDER); return migrationDbTestUtils.saveCommand(command); } - @SuppressWarnings("unchecked") - private Document buildExpectedPatchAttachedItemCommand(Document patchAttachedItemCommand) { - var body = new HashMap<>( - (Map<String, Object>) patchAttachedItemCommand.get(CommandDocumentTestFactory.BODY_OBJECT_FIELD)); - body.put(ITEM_NAME_FIELD, BESCHEID_ITEM_NAME); - var command = CommandDocumentTestFactory.createWithOrderAndBody(PATCH_ATTACHED_ITEM_ORDER, body); - command.put(ID_FIELD, patchAttachedItemCommand.getObjectId(ID_FIELD)); - return command; + private Document savePatchAttachedItemCommandWithDifferentParent() { + var itemBody = Map.<String, Object>of(PARENT_ID_FIELD, UUID.randomUUID().toString()); + var command = CommandDocumentTestFactory.createWithOrderAndBody(PATCH_ATTACHED_ITEM_ORDER, itemBody); + return migrationDbTestUtils.saveCommand(command); } @Nested @@ -144,63 +137,90 @@ class M014_AddItemNameBescheidToPatchAttachedItemCommandITCase { migration.updateDocuments(mongoOperations, List.of(sendBescheidCommand.getObjectId(ID_FIELD).toString())); var command = migrationDbTestUtils.getCommand(patchAttachedItemCommand.getObjectId(ID_FIELD)); - - assertThat(command).usingRecursiveComparison() - .isEqualTo(buildExpectedPatchAttachedItemCommand(patchAttachedItemCommand)); + assertThat(command).usingRecursiveComparison().isEqualTo(addItemNameToPatchAttachedItemCommand(patchAttachedItemCommand)); } } @Nested class TestFullMigration { + @Test - void shouldKeepSendBescheidCommand() { + void shouldAddOrRemoveCommands() { migration.doMigration(mongoOperations); - var command = migrationDbTestUtils.getCommand(sendBescheidCommand.getObjectId(ID_FIELD)); - - assertThat(command).usingRecursiveComparison().isEqualTo(sendBescheidCommand); + var commands = mongoOperations.findAll(Document.class, MigrationDbTestUtils.COMMAND_COLLECTION); + assertThat(commands).hasSize(5); } - @Test - void shouldModifyPatchAttachedBescheidItem() { - migration.doMigration(mongoOperations); + @Nested + class TestPatchAttachedBescheidItem { - var command = migrationDbTestUtils.getCommand(patchAttachedItemCommand.getObjectId(ID_FIELD)); + @Test + void shouldAddItemNameToCommandBody() { + migration.doMigration(mongoOperations); + + var command = migrationDbTestUtils.getCommand(patchAttachedItemCommand.getObjectId(ID_FIELD)); + assertThat(command).usingRecursiveComparison().isEqualTo(addItemNameToPatchAttachedItemCommand(patchAttachedItemCommand)); + } - assertThat(command).usingRecursiveComparison() - .isEqualTo(buildExpectedPatchAttachedItemCommand(patchAttachedItemCommand)); } - @Test - void shouldNotModifyOtherSubcommands() { - migration.doMigration(mongoOperations); + @Nested + class TestCommandsToNotModify { + @Test + void shouldKeepSendBescheidCommand() { + migration.doMigration(mongoOperations); - var command = migrationDbTestUtils.getCommand(otherSubCommand.getObjectId(ID_FIELD)); + var command = migrationDbTestUtils.getCommand(sendBescheidCommand.getObjectId(ID_FIELD)); + assertThat(command).usingRecursiveComparison().isEqualTo(sendBescheidCommand); + } - assertThat(command).usingRecursiveComparison().isEqualTo(otherSubCommand); - } + @Nested + class TestSubCommandsOfSendBescheidItem { - @Test - void shouldNotModifyOtherPatchAttachedItemCommands() { - migration.doMigration(mongoOperations); + @Test + void shouldKeepIfOrderIsNotPatchAttachedItem() { + migration.doMigration(mongoOperations); - var command = migrationDbTestUtils.getCommand(otherPatchAttachedItemCommand.getObjectId(ID_FIELD)); + var command = migrationDbTestUtils.getCommand(subCommandWithUnkownOrder.getObjectId(ID_FIELD)); + assertThat(command).usingRecursiveComparison().isEqualTo(subCommandWithUnkownOrder); - assertThat(command).usingRecursiveComparison().isEqualTo(otherPatchAttachedItemCommand); - } + } + } - @Test - void shouldContainExpectedCommands() { - migration.doMigration(mongoOperations); + @Nested + class TestPatchAttachedItem { - var commands = mongoOperations.findAll(Document.class, MigrationDbTestUtils.COMMAND_COLLECTION); + @Test + void shouldNotModifyOnMissingParentId() { + migration.doMigration(mongoOperations); + + var command = migrationDbTestUtils.getCommand(patchAttachedItemCommandWithoutParent.getObjectId(ID_FIELD)); + assertThat(command).usingRecursiveComparison().isEqualTo(patchAttachedItemCommandWithoutParent); + } + + @Test + void shouldNotModifyOnDifferentParentId() { + migration.doMigration(mongoOperations); + + var command = migrationDbTestUtils.getCommand(patchAttachedItemCommandWithDifferentParent.getObjectId(ID_FIELD)); + assertThat(command).usingRecursiveComparison().isEqualTo(patchAttachedItemCommandWithDifferentParent); + } + + } - assertThat(commands).usingRecursiveFieldByFieldElementComparator() - .containsExactlyInAnyOrderElementsOf(expectedCommands); } } + @SuppressWarnings("unchecked") + private Document addItemNameToPatchAttachedItemCommand(Document patchAttachedItemCommand) { + var body = new HashMap<>((Map<String, Object>) patchAttachedItemCommand.get(CommandDocumentTestFactory.BODY_OBJECT_FIELD)); + body.put(ITEM_NAME_FIELD, BESCHEID_ITEM_NAME); + patchAttachedItemCommand.put(CommandDocumentTestFactory.BODY_OBJECT_FIELD, body); + return patchAttachedItemCommand; + } + private class CommandDocumentTestFactory { public static final String ORDER_FIELD = "order"; @@ -217,7 +237,7 @@ class M014_AddItemNameBescheidToPatchAttachedItemCommandITCase { public static final String RELATION_ID = UUID.randomUUID().toString(); public static final Long RELATION_VERSION = 1L; - public static final String ORDER = "VORGANG_ANNEHMEN"; + public static final String ORDER = LoremIpsum.getInstance().getWords(1); public static final Map<String, Object> PREVIOUS_STATE = Map.of("test", "value"); public static final Map<String, Object> BODY = Map.of("key", "value"); public static final String CREATED_RESOURCE = "createdResource";