diff --git a/src/main/java/uk/ac/cam/cl/dtg/isaac/api/QuizFacade.java b/src/main/java/uk/ac/cam/cl/dtg/isaac/api/QuizFacade.java index 607da1c60c..ac24ac3d67 100644 --- a/src/main/java/uk/ac/cam/cl/dtg/isaac/api/QuizFacade.java +++ b/src/main/java/uk/ac/cam/cl/dtg/isaac/api/QuizFacade.java @@ -346,6 +346,8 @@ public final Response previewQuiz(@Context final Request request, IsaacQuizDTO quiz = this.quizManager.findQuiz(quizId); + quiz = quizQuestionManager.augmentQuestionsForPreview(quiz); + // Check this user is actually allowed to preview this quiz. A tutor counts as both a student and teacher // in this check if (null != quiz.getHiddenFromRoles() && (quiz.getHiddenFromRoles().contains(user.getRole().name()) diff --git a/src/main/java/uk/ac/cam/cl/dtg/isaac/api/managers/QuizQuestionManager.java b/src/main/java/uk/ac/cam/cl/dtg/isaac/api/managers/QuizQuestionManager.java index 57c77dafe5..6e30b876f0 100644 --- a/src/main/java/uk/ac/cam/cl/dtg/isaac/api/managers/QuizQuestionManager.java +++ b/src/main/java/uk/ac/cam/cl/dtg/isaac/api/managers/QuizQuestionManager.java @@ -141,6 +141,20 @@ public IsaacQuizDTO augmentQuestionsForUser(IsaacQuizDTO quiz, QuizAttemptDTO qu return quiz; } + /** + * This method will shuffle choices for questions in the quiz. + * @param quiz + * - to augment - this object may be mutated as a result of this method. i.e choices may be shuffled. + * @return The quiz object augmented (generally a modified parameter). + */ + public IsaacQuizDTO augmentQuestionsForPreview(IsaacQuizDTO quiz) { + List questionsToAugment = GameManager.getAllMarkableQuestionPartsDFSOrder(quiz); + + questionManager.shuffleChoiceQuestionsChoices("PREVIEW", questionsToAugment); + + return quiz; + } + /** * Modify the quiz to contain feedback for the specified mode, and possibly the users answers and the correct answers. * @param quizAttempt diff --git a/src/test/java/uk/ac/cam/cl/dtg/isaac/api/QuizFacadeTest.java b/src/test/java/uk/ac/cam/cl/dtg/isaac/api/QuizFacadeTest.java index 6085664d40..8bb37fe5e9 100644 --- a/src/test/java/uk/ac/cam/cl/dtg/isaac/api/QuizFacadeTest.java +++ b/src/test/java/uk/ac/cam/cl/dtg/isaac/api/QuizFacadeTest.java @@ -426,8 +426,11 @@ public void updateQuizAssignment() { public void previewQuiz() { forEndpoint(() -> quizFacade.previewQuiz(requestForCaching, httpServletRequest, studentQuiz.getId()), requiresLogin(), - as(student, failsWith(SegueErrorResponse.getIncorrectRoleResponse())), - as(teacher, respondsWith(studentQuiz)) + as(student, + failsWith(SegueErrorResponse.getIncorrectRoleResponse())), + as(teacher, + prepare(quizQuestionManager, m -> expect(m.augmentQuestionsForPreview(studentQuiz)).andReturn(studentQuiz)), + respondsWith(studentQuiz)) ); }