From 4d358cfed2967ce257979c0096743e86bf02f405 Mon Sep 17 00:00:00 2001
From: uhensler <urs.hensler@frentix.com>
Date: Thu, 19 Mar 2020 16:58:09 +0100
Subject: [PATCH] OO-4582: Fail if participant has to pass all course elements
 but a course element is failed

---
 .../course/nodes/st/assessment/STRootPassedEvaluator.java  | 7 ++++---
 .../nodes/st/assessment/STRootPassedEvaluatorTest.java     | 2 +-
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/olat/course/nodes/st/assessment/STRootPassedEvaluator.java b/src/main/java/org/olat/course/nodes/st/assessment/STRootPassedEvaluator.java
index 3bd66387986..86d2135efdf 100644
--- a/src/main/java/org/olat/course/nodes/st/assessment/STRootPassedEvaluator.java
+++ b/src/main/java/org/olat/course/nodes/st/assessment/STRootPassedEvaluator.java
@@ -90,10 +90,11 @@ public class STRootPassedEvaluator implements RootPassedEvaluator {
 		// All passed
 		if (config.getBooleanSafe(STCourseNode.CONFIG_PASSED_ALL)) {
 			Counts counts = passCounter.getCounts(courseNode, scoreAccounting);
-			if (counts.isAllAssessed() && counts.getPassable() > 0) {
-				if (counts.getPassable() == counts.getPassed()) {
+			if (counts.getPassable() > 0) {
+				if (counts.isAllAssessed() && counts.getPassable() == counts.getPassed()) {
 					return Boolean.TRUE;
-				} else if (getActivePassedConfigs(config) == 1) {
+				}
+				if (counts.getFailed() > 0 && getActivePassedConfigs(config) == 1) {
 					return Boolean.FALSE;
 				}
 			}
diff --git a/src/test/java/org/olat/course/nodes/st/assessment/STRootPassedEvaluatorTest.java b/src/test/java/org/olat/course/nodes/st/assessment/STRootPassedEvaluatorTest.java
index 77870d927e9..a8e6afed2eb 100644
--- a/src/test/java/org/olat/course/nodes/st/assessment/STRootPassedEvaluatorTest.java
+++ b/src/test/java/org/olat/course/nodes/st/assessment/STRootPassedEvaluatorTest.java
@@ -213,7 +213,7 @@ public class STRootPassedEvaluatorTest {
 		courseNode.getModuleConfiguration().setBooleanEntry(STCourseNode.CONFIG_PASSED_ALL, true);
 		ScoreAccounting scoreAccounting = new MappedScoreAccounting();
 		
-		Counts counts = new CountsImpl(3, 2, 1);
+		Counts counts = new CountsImpl(3, 1, 1);
 		PassCounter passCounter = mock(PassCounter.class);
 		when(passCounter.getCounts(any(), any())).thenReturn(counts);
 		STRootPassedEvaluator sut = new STRootPassedEvaluator(passCounter);
-- 
GitLab