diff --git a/src/main/java/com/quemistry/quiz_ms/service/QuizService.java b/src/main/java/com/quemistry/quiz_ms/service/QuizService.java index 454e844..5ac0f0c 100644 --- a/src/main/java/com/quemistry/quiz_ms/service/QuizService.java +++ b/src/main/java/com/quemistry/quiz_ms/service/QuizService.java @@ -207,17 +207,16 @@ private Page getQuizDetail(UserContext userContext, Page { - List quizMcqs = - getMcqResponses( - mcqs, - attempts.stream() - .filter(attempt -> attempt.getQuizId().equals(quiz.getId())) - .collect(Collectors.toList())); + List quizAttempts = + attempts.stream() + .filter(attempt -> attempt.getQuizId().equals(quiz.getId())) + .collect(Collectors.toList()); + List quizMcqs = getMcqResponses(mcqs, quizAttempts); return SimpleQuizResponse.builder() .id(quiz.getId()) .status(quiz.getStatus()) .mcqs(quizMcqs) - .points(calculatePoints(quizMcqs)) + .points(calculatePoints(quizAttempts)) .build(); }); } @@ -260,7 +259,7 @@ private QuizResponse convertQuiz( Integer points = (quiz.getStatus() == COMPLETED) - ? calculatePoints(getPageMcqResponses(mcqs.getMcqs(), attempts).toList()) + ? calculatePoints(attemptRepository.findAllByQuizId(quiz.getId())) : null; return QuizResponse.builder() @@ -289,18 +288,7 @@ private static Function getQuizAttemptMCQResponse(List .orElse(null)); } - // TODO: Refactor this method to use isCorrect field in QuizAttempt - private int calculatePoints(List mcqs) { - return (int) - mcqs.stream() - .filter(mcq -> mcq.getAttemptOption() != null) - .filter( - mcq -> - mcq.getOptions().stream() - .anyMatch( - option -> - option.getNo().equals(mcq.getAttemptOption()) - && option.getIsAnswer())) - .count(); + private int calculatePoints(List attempts) { + return (int) attempts.stream().filter(QuizAttempt::isCorrect).count(); } } diff --git a/src/test/java/com/quemistry/quiz_ms/service/QuizServiceTest.java b/src/test/java/com/quemistry/quiz_ms/service/QuizServiceTest.java index 152c78b..7afbc4c 100644 --- a/src/test/java/com/quemistry/quiz_ms/service/QuizServiceTest.java +++ b/src/test/java/com/quemistry/quiz_ms/service/QuizServiceTest.java @@ -301,8 +301,10 @@ void getQuizByIdAndStudentIdReturnCompletedQuizWithCorrectAnswer() { when(quizRepository.findOneByIdAndStudentId(quizId, "student1")).thenReturn(Optional.of(quiz)); QuizAttempt attempt = QuizAttempt.create(quizId, mcqId1); attempt.setOptionNo(1); + attempt.setCorrect(true); when(attemptRepository.findPageByQuizId(quizId, PageRequest.of(0, 10))) .thenReturn(new PageImpl<>(List.of(attempt), PageRequest.of(0, 10), 1)); + when(attemptRepository.findAllByQuizId(quizId)).thenReturn(List.of(attempt)); when(questionClient.retrieveMCQsByIds( argThat(request -> request.getIds().contains(mcqId1)), any(), any(), any())) .thenReturn(retrieveMCQResponse); @@ -467,6 +469,7 @@ void getCompletedQuizWithFirstPage() { .thenReturn(quizzes); QuizAttempt attempt = QuizAttempt.create(1L, 1L); attempt.setOptionNo(1); + attempt.setCorrect(true); when(attemptRepository.findAllByQuizIdIn(argThat(argument -> argument.contains(1L)))) .thenReturn(List.of(attempt)); when(questionClient.retrieveMCQsByIds(any(RetrieveMCQByIdsRequest.class), any(), any(), any()))