From 84d23ca3bfee87c7369c53f419ae0f6888618258 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Mon, 15 Jul 2024 07:16:47 +0200
Subject: [PATCH] OZG-5987 fix check whether parent failed

---
 .../vorgang/command/CommandRepository.java    | 15 +++----------
 .../vorgang/command/CommandService.java       |  2 +-
 .../command/CommandRepositoryITCase.java      | 20 +++++++-----------
 .../vorgang/command/CommandServiceTest.java   | 21 +++++++++++++++----
 4 files changed, 28 insertions(+), 30 deletions(-)

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 926b21ab8..ded88ec20 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
@@ -205,12 +205,9 @@ class CommandRepository {
 		mongoOperations.updateFirst(queryById(commandId), update, Command.class);
 	}
 
-	public Optional<String> getNotFailedParentId(String commandId) {
-		return getParentId(commandId)
-				.map(this::queryNotFailedCommandById)
-				.map(this::includeIdAndClass)
-				.flatMap(this::findOne)
-				.map(Command::getId);
+	public boolean isCommandFailed(String commandId) {
+		return mongoOperations.exists(query(new Criteria().andOperator(criteriaById(commandId), where(MONGODB_STATUS).is(CommandStatus.ERROR))),
+				Command.class);
 	}
 
 	public Optional<String> getParentId(String commandId) {
@@ -227,12 +224,6 @@ class CommandRepository {
 		return MapUtils.getString(body, PersistedCommand.PROPERTY_PARENT_ID);
 	}
 
-	Query queryNotFailedCommandById(String commandId) {
-		return query(new Criteria().andOperator(
-				where(MONGODB_ID).is(commandId),
-				where(MONGODB_STATUS).ne(CommandStatus.ERROR)));
-	}
-
 	Optional<Command> findOne(Query query) {
 		return Optional.ofNullable(mongoOperations.findOne(query, Command.class));
 	}
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 9f0582495..d57cc5dbd 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
@@ -133,7 +133,7 @@ public class CommandService {
 	}
 
 	boolean isParentCommandFailed(Command command) {
-		return repository.getNotFailedParentId(command.getId()).isPresent();
+		return getParentId(command).filter(repository::isCommandFailed).isPresent();
 	}
 
 	Optional<String> getCompletableParentId(Command command) {
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 56e70f88d..130248748 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
@@ -442,7 +442,7 @@ class CommandRepositoryITCase {
 	}
 
 	@Nested
-	class TestGetNotFailedParentId {
+	class TestIsCommandFailed {
 
 		@BeforeEach
 		void init() {
@@ -451,28 +451,22 @@ class CommandRepositoryITCase {
 
 		@Test
 		void shouldReturnParentId() {
-			var parentId = mongoOperations.save(CommandTestFactory.createBuilder().bodyObject(Map.of(
+			var commandId = mongoOperations.save(CommandTestFactory.createBuilder().bodyObject(Map.of(
 					PersistedCommand.PROPERTY_COMPLETE_IF_SUBS_COMPLETED, true)).build()).getId();
-			var commandId = mongoOperations.save(
-							CommandTestFactory.createBuilder().id(null).bodyObject(Map.of(PersistedCommand.PROPERTY_PARENT_ID, parentId)).build())
-					.getId();
 
-			var result = repository.getNotFailedParentId(commandId);
+			var result = repository.isCommandFailed(commandId);
 
-			assertThat(result).contains(parentId);
+			assertThat(result).isFalse();
 		}
 
 		@Test
 		void shouldReturnEmpty() {
-			var parentId = mongoOperations.save(CommandTestFactory.createBuilder().status(CommandStatus.ERROR).bodyObject(Map.of(
+			var commandId = mongoOperations.save(CommandTestFactory.createBuilder().status(CommandStatus.ERROR).bodyObject(Map.of(
 					PersistedCommand.PROPERTY_COMPLETE_IF_SUBS_COMPLETED, true)).build()).getId();
-			var commandId = mongoOperations.save(
-							CommandTestFactory.createBuilder().id(null).bodyObject(Map.of(PersistedCommand.PROPERTY_PARENT_ID, parentId)).build())
-					.getId();
 
-			var result = repository.getNotFailedParentId(commandId);
+			var result = repository.isCommandFailed(commandId);
 
-			assertThat(result).isEmpty();
+			assertThat(result).isTrue();
 		}
 	}
 
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 0ad28f9b0..b0b498207 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
@@ -351,18 +351,31 @@ class CommandServiceTest {
 	}
 
 	@Nested
-	class TestIsParentFailed {
+	class TestIsParentCommandFailed {
+
+		@Test
+		void shouldCallGetParentId() {
+			var command = CommandTestFactory.create();
+
+			service.isParentCommandFailed(command);
+
+			verify(service).getParentId(command);
+		}
 
 		@Test
 		void shouldCallRepository() {
+			var parentId = "parent-id";
+			doReturn(Optional.of(parentId)).when(service).getParentId(any());
+
 			isParentCommandFailed();
 
-			verify(repository).getNotFailedParentId(CommandTestFactory.ID);
+			verify(repository).isCommandFailed(parentId);
 		}
 
 		@Test
 		void shouldReturnTrueWhenParentNotFailed() {
-			when(repository.getNotFailedParentId(anyString())).thenReturn(Optional.of("parent-id"));
+			doReturn(Optional.of("parent-id")).when(service).getParentId(any());
+			when(repository.isCommandFailed(any())).thenReturn(true);
 
 			var result = isParentCommandFailed();
 
@@ -371,7 +384,7 @@ class CommandServiceTest {
 
 		@Test
 		void shouldReturnFalseWhenParentFailed() {
-			when(repository.getNotFailedParentId(anyString())).thenReturn(Optional.empty());
+			doReturn(Optional.of("parent-id")).when(service).getParentId(any());
 
 			var result = isParentCommandFailed();
 
-- 
GitLab