From 561c1b31985383b633484a81f9ffc9fbef7936dd Mon Sep 17 00:00:00 2001
From: Christoph Thelen <christoph.thelen@mni.thm.de>
Date: Wed, 29 Jul 2015 11:54:29 +0200
Subject: [PATCH] Fix for #16953: Reduce user count from calculation

---
 .../arsnova/domain/PointBasedLearningProgress.java |  4 ++--
 .../domain/QuestionBasedLearningProgress.java      | 12 +++++++-----
 .../domain/PointBasedLearningProgressTest.java     | 12 +++++++++---
 .../domain/QuestionBasedLearningProgressTest.java  | 14 ++++++++++----
 4 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/domain/PointBasedLearningProgress.java b/src/main/java/de/thm/arsnova/domain/PointBasedLearningProgress.java
index b1131ab4..dfef1d34 100644
--- a/src/main/java/de/thm/arsnova/domain/PointBasedLearningProgress.java
+++ b/src/main/java/de/thm/arsnova/domain/PointBasedLearningProgress.java
@@ -36,8 +36,8 @@ public class PointBasedLearningProgress extends VariantLearningProgress {
 		lpv.setCourseProgress(coursePercentage());
 		lpv.setNumQuestions(courseScore.getQuestionCount());
 		lpv.setNumUsers(courseScore.getTotalUserCount());
-		lpv.setNumerator(courseScore.getTotalUserScore());
-		lpv.setDenominator(courseScore.getMaximumScore() * courseScore.getTotalUserCount());
+		lpv.setNumerator(courseScore.getTotalUserScore()/courseScore.getTotalUserCount());
+		lpv.setDenominator(courseScore.getMaximumScore());
 		return lpv;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/domain/QuestionBasedLearningProgress.java b/src/main/java/de/thm/arsnova/domain/QuestionBasedLearningProgress.java
index 66f7ea2e..b4090a32 100644
--- a/src/main/java/de/thm/arsnova/domain/QuestionBasedLearningProgress.java
+++ b/src/main/java/de/thm/arsnova/domain/QuestionBasedLearningProgress.java
@@ -37,8 +37,8 @@ public class QuestionBasedLearningProgress extends VariantLearningProgress {
 		lpv.setCourseProgress(calculateCourseProgress());
 		lpv.setNumQuestions(courseScore.getQuestionCount());
 		lpv.setNumUsers(courseScore.getTotalUserCount());
-		lpv.setNumerator(countCorrectAnswers());
-		lpv.setDenominator(courseScore.getTotalUserCount() * courseScore.getQuestionCount());
+		lpv.setNumerator(countCorrectAnswers()/courseScore.getTotalUserCount());
+		lpv.setDenominator(courseScore.getQuestionCount());
 		return lpv;
 	}
 
@@ -80,13 +80,15 @@ public class QuestionBasedLearningProgress extends VariantLearningProgress {
 
 	@Override
 	protected LearningProgressValues createMyProgress(User user) {
+		final int numerator = numQuestionsCorrectForUser(user);
+		final int denominator = courseScore.getQuestionCount();
 		LearningProgressValues lpv = new LearningProgressValues();
 		lpv.setCourseProgress(calculateCourseProgress());
-		lpv.setMyProgress(myPercentage(numQuestionsCorrectForUser(user), courseScore.getQuestionCount()));
+		lpv.setMyProgress(myPercentage(numerator, denominator));
 		lpv.setNumQuestions(courseScore.getQuestionCount());
 		lpv.setNumUsers(courseScore.getTotalUserCount());
-		lpv.setNumerator(numQuestionsCorrectForUser(user));
-		lpv.setDenominator(courseScore.getQuestionCount());
+		lpv.setNumerator(numerator);
+		lpv.setDenominator(denominator);
 		return lpv;
 	}
 
diff --git a/src/test/java/de/thm/arsnova/domain/PointBasedLearningProgressTest.java b/src/test/java/de/thm/arsnova/domain/PointBasedLearningProgressTest.java
index 1ba9be1c..557ce198 100644
--- a/src/test/java/de/thm/arsnova/domain/PointBasedLearningProgressTest.java
+++ b/src/test/java/de/thm/arsnova/domain/PointBasedLearningProgressTest.java
@@ -128,15 +128,21 @@ public class PointBasedLearningProgressTest {
 	}
 
 	@Test
-	public void shouldIncludeNominatorAndDenominatorOfResult() {
+	public void shouldIncludeNominatorAndDenominatorOfResultExcludingStudentCount() {
 		// two questions
 		String q1 = this.addQuestion("lecture", 10);
 		String q2 = this.addQuestion("lecture", 10);
-		// one user
+		// three users
 		User u1 = new TestUser("user1");
-		// two answers, last one is wrong
+		User u2 = new TestUser("user2");
+		User u3 = new TestUser("user3");
+		// six answers
 		this.addAnswer(q1, u1, 10);
 		this.addAnswer(q2, u1, 0);
+		this.addAnswer(q1, u2, 10);
+		this.addAnswer(q2, u2, 0);
+		this.addAnswer(q1, u3, 10);
+		this.addAnswer(q2, u3, 0);
 
 		int numerator = lp.getCourseProgress(null).getNumerator();
 		int denominator = lp.getCourseProgress(null).getDenominator();
diff --git a/src/test/java/de/thm/arsnova/domain/QuestionBasedLearningProgressTest.java b/src/test/java/de/thm/arsnova/domain/QuestionBasedLearningProgressTest.java
index d4652e8d..736c40a0 100644
--- a/src/test/java/de/thm/arsnova/domain/QuestionBasedLearningProgressTest.java
+++ b/src/test/java/de/thm/arsnova/domain/QuestionBasedLearningProgressTest.java
@@ -201,15 +201,21 @@ public class QuestionBasedLearningProgressTest {
 	}
 
 	@Test
-	public void shouldIncludeNominatorAndDenominatorOfResult() {
+	public void shouldIncludeNominatorAndDenominatorOfResultExcludingStudentCount() {
 		// two questions
 		String q1 = this.addQuestion("lecture", 10);
 		String q2 = this.addQuestion("lecture", 10);
-		// one user
+		// three users
 		User u1 = new TestUser("user1");
-		// two answers, last one is wrong
+		User u2 = new TestUser("user2");
+		User u3 = new TestUser("user3");
+		// six answers
 		this.addAnswer(q1, u1, 10);
-		this.addAnswer(q2, u1, 0);
+		this.addAnswer(q2, u1, -100);
+		this.addAnswer(q1, u2, 10);
+		this.addAnswer(q2, u2, -100);
+		this.addAnswer(q1, u3, 10);
+		this.addAnswer(q2, u3, -100);
 
 		int numerator = lp.getCourseProgress(null).getNumerator();
 		int denominator = lp.getCourseProgress(null).getDenominator();
-- 
GitLab