diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml index d501177bcb7be95d4fc83acd167be59b906b964d..0919d7e470b7f729376b616fdfdd54caf2dc3d3f 100644 --- a/bescheid-manager/pom.xml +++ b/bescheid-manager/pom.xml @@ -17,7 +17,7 @@ <properties> <vorgang-manager.version>2.13.0</vorgang-manager.version> <nachrichten-manager.version>2.9.0</nachrichten-manager.version> - <api-lib.version>0.11.0</api-lib.version> + <api-lib.version>0.12.0</api-lib.version> <spring-cloud-config-client.version>4.1.3</spring-cloud-config-client.version> </properties> diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml index 4d96c4ad0b805b2ef3a3dd6475f0185d8de63d52..e31d13e0620038b7ecf48cdf88813e8e003bb0f1 100644 --- a/vorgang-manager-server/pom.xml +++ b/vorgang-manager-server/pom.xml @@ -56,9 +56,9 @@ <bescheid-manager.version>1.18.0-SNAPSHOT</bescheid-manager.version> <processor-manager.version>0.4.1</processor-manager.version> <nachrichten-manager.version>2.12.0-SNAPSHOT</nachrichten-manager.version> - <ozgcloud-starter.version>0.10.0</ozgcloud-starter.version> + <ozgcloud-starter.version>0.12.0</ozgcloud-starter.version> <notification-manager.version>2.11.0-SNAPSHOT</notification-manager.version> - <collaboration-manager.version>0.2.0</collaboration-manager.version> + <collaboration-manager.version>0.3.0-SNAPSHOT</collaboration-manager.version> <zip.version>2.11.1</zip.version> <jsoup.version>1.15.3</jsoup.version> diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/VorgangAttachedItemService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/VorgangAttachedItemService.java index ce8c2dfd120901ce2e599a0c66c0f2d1ac108d5f..ef0d12da9202197c9c16570fe7005f8052f7a178 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/VorgangAttachedItemService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/attached_item/VorgangAttachedItemService.java @@ -187,7 +187,7 @@ public class VorgangAttachedItemService { } public void revokeCreate(Command command) { - handleRevoke(command, () -> delete(command.getRelationId(), command.getRelationVersion())); + handleRevoke(command, () -> delete(command.getCreatedResource(), command.getRelationVersion() + 1)); } void delete(String id, long version) { diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/CommandRepository.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/CommandRepository.java index a9f57bac1d65ca9aba3af9671ab6d2efb2948558..dce3ec92f0c506bcabce138f6104003737adff39 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/CommandRepository.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/CommandRepository.java @@ -36,11 +36,13 @@ import java.util.stream.Stream; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.FindAndModifyOptions; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.aggregation.Aggregation; import org.springframework.data.mongodb.core.aggregation.ComparisonOperators.Eq; +import org.springframework.data.mongodb.core.aggregation.ConditionalOperators; import org.springframework.data.mongodb.core.aggregation.ConditionalOperators.Switch; import org.springframework.data.mongodb.core.aggregation.ConditionalOperators.Switch.CaseOperator; import org.springframework.data.mongodb.core.aggregation.SetOperation; @@ -261,17 +263,30 @@ class CommandRepository { return query; } - public Command setRevokeStatus(String id) { - return mongoOperations.findAndModify(queryById(id), buildUpdateStatusRevoke(), FindAndModifyOptions.options().returnNew(true), Command.class); + public Command setRevokeStatus(String id, String createdResource) { + return mongoOperations.findAndModify(queryById(id), buildUpdateStatusRevoke(createdResource), FindAndModifyOptions.options().returnNew(true), + Command.class); } - private UpdateDefinition buildUpdateStatusRevoke() { - var switchOperation = Switch.switchCases( - CaseOperator.when(Eq.valueOf(MONGODB_STATUS).equalToValue(CommandStatus.NEW)).then(CommandStatus.CANCELED), - CaseOperator.when(Eq.valueOf(MONGODB_STATUS).equalToValue(CommandStatus.PENDING)).then(CommandStatus.REVOKE_PENDING), - CaseOperator.when(Eq.valueOf(MONGODB_STATUS).equalToValue(CommandStatus.FINISHED)).then(CommandStatus.REVOKE_PENDING)) + private UpdateDefinition buildUpdateStatusRevoke(String createdResource) { + var setOperation = SetOperation.set(MONGODB_STATUS).toValue(buildSetStatusCondition()); + if (StringUtils.isNotBlank(createdResource)) { + setOperation = setOperation.and().set(MONGODB_CREATED_RESOURCE).toValue(buildSetCreatedResourceCondition(createdResource)); + } + return Aggregation.newUpdate(setOperation); + } + + private Switch buildSetStatusCondition() { + return Switch.switchCases( + CaseOperator.when(Eq.valueOf(MONGODB_STATUS).equalToValue(CommandStatus.NEW)).then(CommandStatus.CANCELED), + CaseOperator.when(Eq.valueOf(MONGODB_STATUS).equalToValue(CommandStatus.PENDING)).then(CommandStatus.REVOKE_PENDING), + CaseOperator.when(Eq.valueOf(MONGODB_STATUS).equalToValue(CommandStatus.FINISHED)).then(CommandStatus.REVOKE_PENDING)) .defaultTo(MONGODB_REFERENCE_STATUS); - return Aggregation.newUpdate(SetOperation.set(MONGODB_STATUS).toValue(switchOperation)); + } + + private ConditionalOperators.Cond buildSetCreatedResourceCondition(String createdResource) { + return ConditionalOperators.Cond.when(Eq.valueOf(MONGODB_STATUS).equalToValue(CommandStatus.PENDING)).then(createdResource) + .otherwiseValueOf(MONGODB_CREATED_RESOURCE); } public Optional<Command> setRevokeStatusIfNotPending(String id) { diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/CommandService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/CommandService.java index 2f661a37b47f0da8143fdd5332e8385da4ecb1e5..ff7653e640230c195b26595b3b50c0589f305303 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/CommandService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/CommandService.java @@ -117,7 +117,7 @@ public class CommandService { public void setCommandFinished(String commandId, String createdResource) { var command = getById(commandId); if (shouldRevoke(command)) { - repository.setRevokeStatus(commandId); + command = repository.setRevokeStatus(commandId, createdResource); publishRevokeCommandEvent(command); return; } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/attached_item/VorgangAttachedItemITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/attached_item/VorgangAttachedItemITCase.java index cfaf9ff74c00daa0d1405a656fb898ce181a0256..ef465103f6ad9e81c6a4741bd581d40179b1d6aa 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/attached_item/VorgangAttachedItemITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/attached_item/VorgangAttachedItemITCase.java @@ -289,7 +289,8 @@ class VorgangAttachedItemITCase { private Command createRevokeCommand() { return CommandTestFactory.createBuilder().order(Order.CREATE_ATTACHED_ITEM.name()) .relationId(persistedItem.getId()) - .relationVersion(persistedItem.getVersion()) + .relationVersion(persistedItem.getVersion() - 1) + .createdResource(persistedItem.getId()) .bodyObject(VorgangAttachedItemTestFactory.asMap()).build(); } } @@ -298,11 +299,11 @@ class VorgangAttachedItemITCase { @Nested class TestRevokeUpdateItem { - private final Map<String, Object> createItem = Map.<String, Object>of("EntryToRecoverByRevokeKey", "EntryToRecoverByRevokeValue", + private final Map<String, Object> createItem = Map.of("EntryToRecoverByRevokeKey", "EntryToRecoverByRevokeValue", VorgangAttachedItemTestFactory.ITEM_FIELD_NAME, VorgangAttachedItemTestFactory.ITEM_FIELD_STRING_VALUE); private VorgangAttachedItem persistedItem; - private final Map<String, Object> updateItem = Map.<String, Object>of( + private final Map<String, Object> updateItem = Map.of( VorgangAttachedItemTestFactory.ITEM_FIELD_NAME, "RevertByRevokeValue", "NewToRemoveByRevokeKey", "NewToRemoveByRevokeValue"); private Command updatedCommand; @@ -391,11 +392,11 @@ class VorgangAttachedItemITCase { @Nested class TestRevokePatchItem { - private final Map<String, Object> createItem = Map.<String, Object>of(VorgangAttachedItemTestFactory.ITEM_FIELD_NAME, + private final Map<String, Object> createItem = Map.of(VorgangAttachedItemTestFactory.ITEM_FIELD_NAME, VorgangAttachedItemTestFactory.ITEM_FIELD_STRING_VALUE); private VorgangAttachedItem persistedItem; - private final Map<String, Object> patchItem = Map.<String, Object>of(VorgangAttachedItemTestFactory.ITEM_FIELD_NAME, "UpdatedStringValue"); + private final Map<String, Object> patchItem = Map.of(VorgangAttachedItemTestFactory.ITEM_FIELD_NAME, "UpdatedStringValue"); private Command patchedCommand; private String vorgangId; diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/attached_item/VorgangAttachedItemServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/attached_item/VorgangAttachedItemServiceTest.java index fcb9657c560845ce3a0b4e61cf3a7d003585db08..7447aa18488ebd0ed7406989214afbda377580da 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/attached_item/VorgangAttachedItemServiceTest.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/attached_item/VorgangAttachedItemServiceTest.java @@ -516,7 +516,7 @@ class VorgangAttachedItemServiceTest { @Nested class TestRevokeCreate { - private final Command command = CommandTestFactory.create(); + private final Command command = CommandTestFactory.createBuilder().createdResource(CommandTestFactory.CREATED_RESOURCE).build(); @Test void shouldCallHandleRevoke() { @@ -529,7 +529,7 @@ class VorgangAttachedItemServiceTest { void shouldCallDelete() { service.revokeCreate(command); - verify(service).delete(CommandTestFactory.RELATION_ID, CommandTestFactory.RELATION_VERSION); + verify(service).delete(CommandTestFactory.CREATED_RESOURCE, CommandTestFactory.RELATION_VERSION + 1); } } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java index 32db2a67bebf61625a2e5eea835a61eaa5c87665..3a1508c570ac7a6ac3bd1e41fe1815041e1541e6 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java @@ -24,7 +24,6 @@ package de.ozgcloud.vorgang.collaboration; import static org.assertj.core.api.Assertions.*; -import static org.assertj.core.api.InstanceOfAssertFactories.*; import static org.awaitility.Awaitility.*; import static org.junit.jupiter.api.Assertions.fail; import static org.mockito.ArgumentMatchers.*; @@ -41,6 +40,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; import org.mockito.Mock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -60,7 +61,11 @@ import de.ozgcloud.collaboration.CollaborationServiceGrpc.CollaborationServiceBl import de.ozgcloud.collaboration.GrpcGetFileContentRequest; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandStatus; +import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.common.test.DataITCase; +import de.ozgcloud.nachrichten.postfach.PostfachAddress; +import de.ozgcloud.nachrichten.postfach.PostfachNachricht; +import de.ozgcloud.nachrichten.postfach.PostfachRemoteService; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem; import de.ozgcloud.vorgang.callcontext.CallContext; import de.ozgcloud.vorgang.callcontext.TestCallContextAttachingInterceptor; @@ -71,6 +76,7 @@ import de.ozgcloud.vorgang.command.CreateCommandRequest; import de.ozgcloud.vorgang.files.FileService; import de.ozgcloud.vorgang.files.GridFsTestFactory; import de.ozgcloud.vorgang.files.OzgFileTestFactory; +import de.ozgcloud.vorgang.servicekonto.PostfachAddressTestFactory; import de.ozgcloud.vorgang.vorgang.Vorgang; import de.ozgcloud.vorgang.vorgang.VorgangHead; import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; @@ -89,6 +95,10 @@ import net.devh.boot.grpc.client.inject.GrpcClient; @DirtiesContext class CollaborationITCase { + private static final String FIELD_COLLABORATION_VORGANG_ID = "collaborationVorgangId"; + private static final String TITEL = "Collaboration Vorgang"; + private static final String ANFRAGE = "Anfrage"; + @Autowired private CommandService commandService; @@ -97,85 +107,21 @@ class CollaborationITCase { @MockBean private OzgCloudUserProfileService ozgCloudUserProfileService; + @MockBean + private PostfachRemoteService postfachRemoteService; @Mock private OzgCloudUserProfile ozgCloudUserProfile; - @Nested - class TestCreateCollaborationVorgang { + private String vorgangId; - @BeforeEach - void init() { - mongoOperations.dropCollection(Command.class); - mongoOperations.dropCollection(Vorgang.class); - mongoOperations.dropCollection(VorgangAttachedItem.class); - when(ozgCloudUserProfile.getId()).thenReturn(OzgCloudUserId.from(CommandTestFactory.CREATED_BY)); - when(ozgCloudUserProfileService.getById(any())).thenReturn(ozgCloudUserProfile); - - vorgangId = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0L).build()).getId(); - } - - private static final String FIELD_COLLABORATION_VORGANG_ID = "collaborationVorgangId"; - private static final String TITEL = "Collaboration Vorgang"; - private static final String ANFRAGE = "Anfrage"; - - private String vorgangId; - - @Test - void shouldSetCollaborationVorgangId() { - var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId)); + @BeforeEach + void init() { + mongoOperations.dropCollection(Command.class); + mongoOperations.dropCollection(Vorgang.class); + mongoOperations.dropCollection(VorgangAttachedItem.class); - waitUntilCommandFinished(command.getId()); - - var collaborationRequests = loadCollaborationRequest(vorgangId); - assertThat(collaborationRequests).hasSize(1).first().extracting(VorgangAttachedItem::getItem, MAP) - .containsKey(FIELD_COLLABORATION_VORGANG_ID); - } - - @Test - void shouldCreateCollaborationVorgang() { - var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId)); - - waitUntilCommandFinished(command.getId()); - - var collaborationVorgang = loadCollaborationVorgang(vorgangId); - assertThat(collaborationVorgang.getHeader()).extracting(VorgangHead::getCollaborationLevel) - .isEqualTo(CreateCollaborationVorgangRequestTestFactory.COLLABORATION_LEVEL); - assertThat(collaborationVorgang.getHeader()).extracting(VorgangHead::getOrganisationsEinheitId) - .isEqualTo(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID); - assertThat(collaborationVorgang.getClientAttributes()).isEmpty(); - } - - private CreateCommandRequest buildCreateCollaborationVorgangCommand(String vorgangId) { - return CreateCommandRequest.builder() - .callContext(CallContext.builder().client("test").build()) - .vorgangId(vorgangId) - .relationId(vorgangId) - .order("CREATE_COLLABORATION_REQUEST") - .bodyObject(Map.of( - "titel", TITEL, - "anfrage", ANFRAGE, - "zustaendigeStelle", ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)) - .build(); - } - - private void waitUntilCommandFinished(String commandId) { - await().atMost(60, TimeUnit.SECONDS).until( - () -> mongoOperations.findById(commandId, Command.class), - command -> command.getStatus() == CommandStatus.FINISHED); - } - - private Vorgang loadCollaborationVorgang(String sourceVorgangId) { - var collaborationVorgangId = loadCollaborationRequest(sourceVorgangId).getFirst().getItem().get(FIELD_COLLABORATION_VORGANG_ID); - return mongoOperations.findById(collaborationVorgangId, Vorgang.class); - } - - private List<VorgangAttachedItem> loadCollaborationRequest(String vorgangId) { - var query = new Query(new Criteria().andOperator( - Criteria.where(VorgangAttachedItem.FIELDNAME_VORGANG_ID).is(vorgangId), - Criteria.where(VorgangAttachedItem.FIELDNAME_ITEM_NAME).is("CollaborationRequest"))); - return mongoOperations.find(query, VorgangAttachedItem.class); - } + vorgangId = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0L).build()).getId(); } @DisplayName("Get file content") @@ -244,4 +190,121 @@ class CollaborationITCase { return collaborationStub.withInterceptors(new TestCallContextAttachingInterceptor()); } } + + private CreateCommandRequest buildCreateCollaborationVorgangCommand(String vorgangId, int collaborationLevel) { + return CreateCommandRequest.builder() + .callContext(CallContext.builder().client("test").build()) + .vorgangId(vorgangId) + .relationId(vorgangId) + .order("CREATE_COLLABORATION_REQUEST") + .bodyObject(Map.of( + "titel", TITEL, + "anfrage", ANFRAGE, + "collaborationLevel", collaborationLevel, + "zustaendigeStelle", ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)) + .build(); + } + + private List<VorgangAttachedItem> loadCollaborationRequest(String vorgangId) { + var query = new Query(new Criteria().andOperator( + Criteria.where(VorgangAttachedItem.FIELDNAME_VORGANG_ID).is(vorgangId), + Criteria.where(VorgangAttachedItem.FIELDNAME_ITEM_NAME).is("CollaborationRequest"))); + return mongoOperations.find(query, VorgangAttachedItem.class); + } + + private void waitUntilCommandHasStatus(String commandId, CommandStatus status) { + await().atMost(60, TimeUnit.SECONDS).until( + () -> mongoOperations.findById(commandId, Command.class), + command -> command.getStatus() == status); + } + + @Nested + class TestCreateCollaborationVorgang { + + @BeforeEach + void init() { + when(ozgCloudUserProfile.getId()).thenReturn(OzgCloudUserId.from(CommandTestFactory.CREATED_BY)); + when(ozgCloudUserProfileService.getById(any())).thenReturn(ozgCloudUserProfile); + } + + @Test + void shouldSetCollaborationVorgangId() { + var command = commandService.createCommand( + buildCreateCollaborationVorgangCommand(vorgangId, CreateCollaborationVorgangRequestTestFactory.COLLABORATION_LEVEL)); + + waitUntilCommandHasStatus(command.getId(), CommandStatus.FINISHED); + + var collaborationRequests = loadCollaborationRequest(vorgangId); + assertThat(collaborationRequests).hasSize(1).first().extracting(VorgangAttachedItem::getItem, MAP) + .containsKey(FIELD_COLLABORATION_VORGANG_ID); + } + + @Test + void shouldCreateCollaborationVorgang() { + var command = commandService.createCommand( + buildCreateCollaborationVorgangCommand(vorgangId, CreateCollaborationVorgangRequestTestFactory.COLLABORATION_LEVEL)); + + waitUntilCommandHasStatus(command.getId(), CommandStatus.FINISHED); + + var collaborationVorgang = loadCollaborationVorgang(vorgangId); + assertThat(collaborationVorgang.getHeader()).extracting(VorgangHead::getCollaborationLevel) + .isEqualTo(CreateCollaborationVorgangRequestTestFactory.COLLABORATION_LEVEL); + assertThat(collaborationVorgang.getHeader()).extracting(VorgangHead::getOrganisationsEinheitId) + .isEqualTo(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID); + assertThat(collaborationVorgang.getClientAttributes()).isEmpty(); + } + + private Vorgang loadCollaborationVorgang(String sourceVorgangId) { + var collaborationVorgangId = loadCollaborationRequest(sourceVorgangId).getFirst().getItem().get(FIELD_COLLABORATION_VORGANG_ID); + return mongoOperations.findById(collaborationVorgangId, Vorgang.class); + } + + } + + @Nested + class TestCreateFachstellenBeteiligungRequest { + + private static final int COLLABORATION_LEVEL = 4; + + @Captor + private ArgumentCaptor<PostfachNachricht> postfachNachrichtCaptor; + + @BeforeEach + void init() { + when(ozgCloudUserProfile.getId()).thenReturn(OzgCloudUserId.from(CommandTestFactory.CREATED_BY)); + when(ozgCloudUserProfileService.getById(any())).thenReturn(ozgCloudUserProfile); + } + + @Test + void shouldCreateCollaborationRequest() { + var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId, COLLABORATION_LEVEL)); + + waitUntilCommandHasStatus(command.getId(), CommandStatus.FINISHED); + + var collaborationRequests = loadCollaborationRequest(vorgangId); + assertThat(collaborationRequests).hasSize(1).first().extracting(VorgangAttachedItem::getItem, MAP) + .containsEntry(FIELD_COLLABORATION_VORGANG_ID, vorgangId); + } + + @Test + void shouldSendPostfachNachricht() { + var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId, COLLABORATION_LEVEL)); + + waitUntilCommandHasStatus(command.getId(), CommandStatus.FINISHED); + + verify(postfachRemoteService).sendMessage(postfachNachrichtCaptor.capture()); + assertThat(postfachNachrichtCaptor.getValue().getPostfachAddress()).extracting(PostfachAddress::getIdentifier) + .hasToString(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + } + + @Test + void shouldDeleteCollaborationRequest() { + doThrow(TechnicalException.class).when(postfachRemoteService).sendMessage(any()); + var command = commandService.createCommand(buildCreateCollaborationVorgangCommand(vorgangId, COLLABORATION_LEVEL)); + + waitUntilCommandHasStatus(command.getId(), CommandStatus.ERROR); + + assertThat(loadCollaborationRequest(vorgangId)).isEmpty(); + } + } } \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/CommandRepositoryITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/CommandRepositoryITCase.java index 6f99e9b91bef7f1664e80194b2755173a0c1da37..106c571385c18760a91d1198d34993944a08704d 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/CommandRepositoryITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/CommandRepositoryITCase.java @@ -92,21 +92,20 @@ class CommandRepositoryITCase { @Nested class TestFinishCommand { - @BeforeEach - void init() { - mongoOperations.dropCollection(PersistedCommand.COLLECTION_NAME); - } - @DisplayName("should update status to finished") @ParameterizedTest(name = "with status {0}") @EnumSource(value = CommandStatus.class, names = { "PENDING", "REVOKE_PENDING" }) void shouldUpdateStatusToFinished(CommandStatus commandStatus) { - var command = mongoOperations.save(CommandTestFactory.createBuilder().id(null).status(commandStatus).build()); + var command = mongoOperations.save(CommandTestFactory.createBuilder().id(null).status(commandStatus) + .createdResource(CommandTestFactory.CREATED_RESOURCE).build()); repository.finishCommand(command.getId()); var result = repository.findById(command.getId()); - assertThat(result).isPresent().get().extracting(Command::getStatus).isEqualTo(CommandStatus.FINISHED); + assertThat(result).isPresent().get().satisfies(cmd -> { + assertThat(cmd.getStatus()).isEqualTo(CommandStatus.FINISHED); + assertThat(cmd.getCreatedResource()).isEqualTo(CommandTestFactory.CREATED_RESOURCE); + }); } @DisplayName("should update status to finished") @@ -322,7 +321,7 @@ class CommandRepositoryITCase { } @Test - // TODO schreibe ein Testcase für Order, Status und Zeit + // TODO schreibe ein Testcase für Order, Status und Zeit void shouldFindCommand() { var command = repository.save(createCommandBuilder() .status(CommandStatus.FINISHED) @@ -483,7 +482,7 @@ class CommandRepositoryITCase { @Test void shouldReturnParentId() { var commandId = mongoOperations.save( - CommandTestFactory.createBuilder().id(null).bodyObject(Map.of(PersistedCommand.PROPERTY_PARENT_ID, PARENT_ID)).build()) + CommandTestFactory.createBuilder().id(null).bodyObject(Map.of(PersistedCommand.PROPERTY_PARENT_ID, PARENT_ID)).build()) .getId(); var parentId = repository.getParentId(commandId); @@ -615,30 +614,39 @@ class CommandRepositoryITCase { void shouldSetCanceled() { var command = mongoOperations.save(CommandTestFactory.createBuilder().id(null).status(CommandStatus.NEW).build()); - repository.setRevokeStatus(command.getId()); + setRevokeStatus(command.getId()); var result = repository.findById(command.getId()); - assertThat(result).isPresent().get().extracting(Command::getStatus).isEqualTo(CommandStatus.CANCELED); + assertThat(result).isPresent().get().satisfies(cmd -> { + assertThat(cmd.getStatus()).isEqualTo(CommandStatus.CANCELED); + assertThat(cmd.getCreatedResource()).isBlank(); + }); } @Test void shouldSetRevokePendingWhenPending() { var command = mongoOperations.save(CommandTestFactory.createBuilder().id(null).build()); - repository.setRevokeStatus(command.getId()); + setRevokeStatus(command.getId()); var result = repository.findById(command.getId()); - assertThat(result).isPresent().get().extracting(Command::getStatus).isEqualTo(CommandStatus.REVOKE_PENDING); + assertThat(result).isPresent().get().satisfies(cmd -> { + assertThat(cmd.getStatus()).isEqualTo(CommandStatus.REVOKE_PENDING); + assertThat(cmd.getCreatedResource()).isEqualTo(CommandTestFactory.CREATED_RESOURCE); + }); } @Test void shouldSetRevokePendingWhenFinished() { var command = mongoOperations.save(CommandTestFactory.createBuilder().id(null).status(CommandStatus.FINISHED).build()); - repository.setRevokeStatus(command.getId()); + setRevokeStatus(command.getId()); var result = repository.findById(command.getId()); - assertThat(result).isPresent().get().extracting(Command::getStatus).isEqualTo(CommandStatus.REVOKE_PENDING); + assertThat(result).isPresent().get().satisfies(cmd -> { + assertThat(cmd.getStatus()).isEqualTo(CommandStatus.REVOKE_PENDING); + assertThat(cmd.getCreatedResource()).isBlank(); + }); } @DisplayName("should not update when") @@ -647,10 +655,17 @@ class CommandRepositoryITCase { void shouldNotUpdate(CommandStatus status) { var command = mongoOperations.save(CommandTestFactory.createBuilder().id(null).status(status).build()); - repository.setRevokeStatus(command.getId()); + setRevokeStatus(command.getId()); var result = repository.findById(command.getId()); - assertThat(result).isPresent().get().extracting(Command::getStatus).isEqualTo(status); + assertThat(result).isPresent().get().satisfies(cmd -> { + assertThat(cmd.getStatus()).isEqualTo(status); + assertThat(cmd.getCreatedResource()).isNull(); + }); + } + + private void setRevokeStatus(String commandId) { + repository.setRevokeStatus(commandId, CommandTestFactory.CREATED_RESOURCE); } } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/CommandServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/CommandServiceTest.java index 85714d30f81e92ba77ce0c7f575e89dcc04343fa..3f4d68d90efa91280762ec75d49a7692d352a175 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/CommandServiceTest.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/CommandServiceTest.java @@ -214,10 +214,12 @@ class CommandServiceTest { @Nested class TestRevokePendingCommand { - private static final Command REVOKE_PENDING_COMMAND = CommandTestFactory.createBuilder().status(CommandStatus.REVOKE_PENDING).build(); + private static final Command REVOKE_PENDING_COMMAND = CommandTestFactory.createBuilder().status(CommandStatus.REVOKE_PENDING) + .createdResource(CommandTestFactory.CREATED_RESOURCE).build(); @BeforeEach void init() { + when(repository.setRevokeStatus(anyString(), anyString())).thenReturn(REVOKE_PENDING_COMMAND); doReturn(true).when(service).shouldRevoke(any()); doReturn(REVOKE_PENDING_COMMAND).when(service).getById(anyString()); } @@ -233,7 +235,7 @@ class CommandServiceTest { void shouldCallRepository() { setCommandFinished(); - verify(repository).setRevokeStatus(CommandTestFactory.ID); + verify(repository).setRevokeStatus(CommandTestFactory.ID, CommandTestFactory.CREATED_RESOURCE); } @Test diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/GrpcCommandServiceITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/GrpcCommandServiceITCase.java index 7df40567d8e858171053fe352454a7e67decde01..e890e4ea2097781bba11e16db414d51370c90562 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/GrpcCommandServiceITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/GrpcCommandServiceITCase.java @@ -168,7 +168,7 @@ class GrpcCommandServiceITCase { mongoOperations.dropCollection(Command.COLLECTION_NAME); mongoOperations.dropCollection(VorgangAttachedItem.COLLECTION_NAME); - vorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build()); + vorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0).build()); when(readIsPermitted.test(any())).thenReturn(true); parentCommand = createParentCommand(); @@ -259,9 +259,5 @@ class GrpcCommandServiceITCase { return mongoOperations.findById(grpcCommand.getId(), Command.class); } - private void assertCommandIsFinished(GrpcCommand grpcCommand) { - var command = mongoOperations.findById(grpcCommand.getId(), Command.class); - assertThat(command.getStatus()).isEqualTo(CommandStatus.FINISHED); - } } }