diff --git a/src/main/java/de/thm/arsnova/domain/PointBasedLearningProgress.java b/src/main/java/de/thm/arsnova/domain/PointBasedLearningProgress.java index a2d574a9dbddcda28315ee1bea68983665874354..b1131ab44ae66a96376242584d05401222befc2e 100644 --- a/src/main/java/de/thm/arsnova/domain/PointBasedLearningProgress.java +++ b/src/main/java/de/thm/arsnova/domain/PointBasedLearningProgress.java @@ -36,6 +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()); return lpv; } @@ -58,6 +60,8 @@ public class PointBasedLearningProgress extends VariantLearningProgress { lpv.setNumQuestions(courseScore.getQuestionCount()); lpv.setNumUsers(courseScore.getTotalUserCount()); lpv.setMyProgress(myPercentage(user)); + lpv.setNumerator((int) courseScore.getTotalUserScore(user)); + 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 f9284eaebfa2029309cfb64fc3e88161cec8e643..66f7ea2e746ec056ffc9d9d3392c887a8db724b2 100644 --- a/src/main/java/de/thm/arsnova/domain/QuestionBasedLearningProgress.java +++ b/src/main/java/de/thm/arsnova/domain/QuestionBasedLearningProgress.java @@ -37,6 +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()); return lpv; } @@ -65,6 +67,17 @@ public class QuestionBasedLearningProgress extends VariantLearningProgress { return numAnswersCorrect; } + private int countCorrectAnswers() { + int answers = 0; + for (QuestionScore questionScore : courseScore) { + if (!questionScore.hasScores()) { + continue; + } + answers += countCorrectAnswers(questionScore); + } + return answers; + } + @Override protected LearningProgressValues createMyProgress(User user) { LearningProgressValues lpv = new LearningProgressValues(); @@ -72,6 +85,8 @@ public class QuestionBasedLearningProgress extends VariantLearningProgress { lpv.setMyProgress(myPercentage(numQuestionsCorrectForUser(user), courseScore.getQuestionCount())); lpv.setNumQuestions(courseScore.getQuestionCount()); lpv.setNumUsers(courseScore.getTotalUserCount()); + lpv.setNumerator(numQuestionsCorrectForUser(user)); + lpv.setDenominator(courseScore.getQuestionCount()); return lpv; } diff --git a/src/main/java/de/thm/arsnova/entities/transport/LearningProgressValues.java b/src/main/java/de/thm/arsnova/entities/transport/LearningProgressValues.java index 22dc4ac87b187b530f5a1436a653ab9c6bc0671d..f7245143ddc06a500e1b61ded31d3d2a5755d974 100644 --- a/src/main/java/de/thm/arsnova/entities/transport/LearningProgressValues.java +++ b/src/main/java/de/thm/arsnova/entities/transport/LearningProgressValues.java @@ -28,6 +28,10 @@ public class LearningProgressValues { private int numQuestions; + private int numerator; + + private int denominator; + private int numUsers; public int getCourseProgress() { @@ -54,6 +58,22 @@ public class LearningProgressValues { this.numQuestions = numQuestions; } + public int getNumerator() { + return numerator; + } + + public void setNumerator(int numerator) { + this.numerator = numerator; + } + + public int getDenominator() { + return denominator; + } + + public void setDenominator(int denominator) { + this.denominator = denominator; + } + public int getNumUsers() { return numUsers; } diff --git a/src/test/java/de/thm/arsnova/domain/PointBasedLearningProgressTest.java b/src/test/java/de/thm/arsnova/domain/PointBasedLearningProgressTest.java index 06348c1399f75e6d4d65f67b3350a85b9f47a28d..1ba9be1c647cb2dc3e990988afb5f6d2eec822f6 100644 --- a/src/test/java/de/thm/arsnova/domain/PointBasedLearningProgressTest.java +++ b/src/test/java/de/thm/arsnova/domain/PointBasedLearningProgressTest.java @@ -126,4 +126,24 @@ public class PointBasedLearningProgressTest { assertEquals(50, u2Progress.getCourseProgress()); assertEquals(25, u2Progress.getMyProgress()); } + + @Test + public void shouldIncludeNominatorAndDenominatorOfResult() { + // two questions + String q1 = this.addQuestion("lecture", 10); + String q2 = this.addQuestion("lecture", 10); + // one user + User u1 = new TestUser("user1"); + // two answers, last one is wrong + this.addAnswer(q1, u1, 10); + this.addAnswer(q2, u1, 0); + + int numerator = lp.getCourseProgress(null).getNumerator(); + int denominator = lp.getCourseProgress(null).getDenominator(); + + // If the percentage is wrong, then we need to adapt this test case! + assertEquals("Precondition failed -- The underlying calculation has changed", 50, lp.getCourseProgress(null).getCourseProgress()); + assertEquals(10, numerator); + assertEquals(20, denominator); + } } diff --git a/src/test/java/de/thm/arsnova/domain/QuestionBasedLearningProgressTest.java b/src/test/java/de/thm/arsnova/domain/QuestionBasedLearningProgressTest.java index ba530363753c6f90ab4d7234a80d36122ad35f74..d4652e8d7cb8a6566afb7553ed9be182135ee015 100644 --- a/src/test/java/de/thm/arsnova/domain/QuestionBasedLearningProgressTest.java +++ b/src/test/java/de/thm/arsnova/domain/QuestionBasedLearningProgressTest.java @@ -200,4 +200,24 @@ public class QuestionBasedLearningProgressTest { assertEquals(0, u2Progress.getMyProgress()); } + @Test + public void shouldIncludeNominatorAndDenominatorOfResult() { + // two questions + String q1 = this.addQuestion("lecture", 10); + String q2 = this.addQuestion("lecture", 10); + // one user + User u1 = new TestUser("user1"); + // two answers, last one is wrong + this.addAnswer(q1, u1, 10); + this.addAnswer(q2, u1, 0); + + int numerator = lp.getCourseProgress(null).getNumerator(); + int denominator = lp.getCourseProgress(null).getDenominator(); + + // If the percentage is wrong, then we need to adapt this test case! + assertEquals("Precondition failed -- The underlying calculation has changed", 50, lp.getCourseProgress(null).getCourseProgress()); + assertEquals(1, numerator); + assertEquals(2, denominator); + } + }