From 8fb7260770b12294becb3a4d33e7f7bca11b33d3 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Mon, 20 Jan 2020 15:38:48 +0100
Subject: [PATCH] OO-4483: remove debugging code, add unit test for special
 case

---
 .../highscore/manager/HighScoreManager.java   | 18 +++-----
 .../highscore/HighScoreManagerTest.java       | 44 +++++++++++++++++++
 2 files changed, 51 insertions(+), 11 deletions(-)

diff --git a/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java b/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java
index 36a5bcbfadb..a72273eb874 100644
--- a/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java
+++ b/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java
@@ -75,13 +75,11 @@ public class HighScoreManager {
 		
 		float buffer = -1;
 		int index = 0;
-//		int rank = 1;
 		double[] allScores = new double[allMembers.size()];
 		for (int j = 0; j < allMembers.size(); j++) {
 			HighScoreTableEntry member = allMembers.get(j);
 			if (member.getScore() < buffer){
 				index++;
-//				rank = j + 1;
 			}
 			//first three position are put in separate lists, exclude zero scorers
 			if (index < 3 && member.getScore() > 0) {
@@ -103,7 +101,7 @@ public class HighScoreManager {
 				.filter(a -> a.getIdentity().equals(ownIdentity))
 				.collect(Collectors.toList()));
 		
-		if (ownIdMembers.size() > 0) {
+		if (!ownIdMembers.isEmpty()) {
 			log.info(Tracing.M_AUDIT, "2nd Highscore Table established");
 		}
 		
@@ -122,7 +120,7 @@ public class HighScoreManager {
 			double min = Math.floor(Arrays.stream(scores).min().getAsDouble());
 			double range = max - min;
 			// use original scores if range is too small else convert results to fit histogram
-			if (range <= 20 && range <0) {
+			if (range <= 20) {
 				classwidth = 1;
 				return new HighScoreRankingResults(scores, classwidth, min);
 			} else {
@@ -168,7 +166,7 @@ public class HighScoreManager {
 					// allow one extension if no borders are defined
 					primeRange = upperBorder - lowerBorder > 0;
 				}
-				// steps can only be natural numbers 
+				// steps can only be natural numbers
 				classwidth = Math.round(range / numberofclasses);
 				// modified scores are calculated and saved
 				double[] allScores = new double[scores.length];
@@ -189,7 +187,7 @@ public class HighScoreManager {
 
 	
 	/**
-	 * Calculate histogram cutvalue using results from the method (processHistogramData(double[]))
+	 * Calculate histogram cut value using results from the method (processHistogramData(double[]))
 	 *
 	 * @param score the score
 	 * @return the double
@@ -199,11 +197,9 @@ public class HighScoreManager {
 			// determine n-th class to fit the current score result
 			double n = Math.ceil((score - min) / classwidth);
 			// calculate higher score to fit the class width
-			double cutvalue = min + (n * classwidth);
-			return cutvalue;
-		} else {
-			return score;
-		}		
+			return min + (n * classwidth);
+		}
+		return score;	
 	}
 	
 	
diff --git a/src/test/java/org/olat/course/highscore/HighScoreManagerTest.java b/src/test/java/org/olat/course/highscore/HighScoreManagerTest.java
index 7c82bb9d517..90dd9be2243 100644
--- a/src/test/java/org/olat/course/highscore/HighScoreManagerTest.java
+++ b/src/test/java/org/olat/course/highscore/HighScoreManagerTest.java
@@ -24,6 +24,7 @@
 * <p>
 */
 package org.olat.course.highscore;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -39,6 +40,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 
+import org.junit.Assert;
 import org.junit.Test;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
@@ -101,4 +103,46 @@ public class HighScoreManagerTest extends OlatTestCase {
 		long classwidth = highScoreManager.processHistogramData(allScores, 0F, 30F).getClasswidth();
 		assertEquals(2L, classwidth);
 	}
+	
+	@Test
+	public void highscoreTest_sameResults() {
+		List<AssessmentEntry> assessEntries = new ArrayList<>();
+
+		//Create entries, add to List
+		for (int i = 0; i < 10; i++) {
+			Identity assessedIdentity = JunitTestHelper.createAndPersistIdentityAsRndUser("as-node-2");
+			RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry();
+			String subIdent = UUID.randomUUID().toString();
+			AssessmentEntry nodeAssessment = courseNodeAssessmentDao
+					.createAssessmentEntry(assessedIdentity, subIdent, entry, subIdent, entry);
+			nodeAssessment.setScore(new BigDecimal(8.0));
+			dbInstance.commitAndCloseSession();
+			AssessmentEntry reloadedAssessment = courseNodeAssessmentDao.loadAssessmentEntryById(nodeAssessment.getKey());
+			assessEntries.add(reloadedAssessment);
+		}
+
+		List<Integer> ownIdIndices = new ArrayList<>();
+		List<HighScoreTableEntry> allMembers = new ArrayList<>();
+		List<HighScoreTableEntry> ownIdMembers = new ArrayList<>();
+		List<List<HighScoreTableEntry>> allPodium = new ArrayList<>();
+		allPodium.add(new ArrayList<>());
+		allPodium.add(new ArrayList<>());
+		allPodium.add(new ArrayList<>());
+		
+		double[] allScores = highScoreManager.sortRankByScore(assessEntries, allMembers, ownIdMembers, allPodium,
+				ownIdIndices, 5, JunitTestHelper.createAndPersistIdentityAsRndUser("as-node-2"))
+				.getScores();
+		for(int i=allScores.length; i-->0; ) {
+			Assert.assertEquals(8.0d, allScores[i], 0.00001d);
+		}
+		
+		double[] histogramData = highScoreManager.processHistogramData(allScores, 0F, 30F).getModifiedScores();
+		assertNotNull(histogramData);
+		for(int i=allScores.length; i-->0; ) {
+			Assert.assertEquals(8.0d, allScores[i], 0.00001d);
+		}
+
+		long classwidth = highScoreManager.processHistogramData(allScores, 0F, 30F).getClasswidth();
+		assertEquals(1l, classwidth);
+	}
 }
\ No newline at end of file
-- 
GitLab