Skip to content

Commit

Permalink
[Feat]: 챌린지 리뷰 통계 0으로 나누는 경우 방지 (#58)
Browse files Browse the repository at this point in the history
  • Loading branch information
bayy1216 committed Sep 19, 2024
1 parent ba4e519 commit 255c1ad
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -92,9 +92,15 @@ public static Score of(List<ChallengeReview> challengeReviews) {
}

public static Score from(Map<Integer, Integer> ratingCount) {
double valuesCount = ratingCount.values().stream()
.mapToInt(Integer::intValue)
.sum();
if(valuesCount == 0){
valuesCount = 1;
} // 0으로 나누는 경우를 방지
var averageRating = ratingCount.entrySet().stream()
.mapToDouble(entry -> entry.getKey() * entry.getValue())
.sum() / ratingCount.values().stream().mapToInt(Integer::intValue).sum();
.sum() / valuesCount;
return Score.builder()
.averageRating((float) averageRating)
.ratingCount(ratingCount)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ void getScoreModelByChallengeGroupId() {
challengeReviewRepository.saveAll(reviews);

// when
ChallengeReviewModel.Score score = challengeReviewReader.getScoreModelByChallengeGroupId(1L);
ChallengeReviewModel.Score score = challengeReviewReader.getScoreModelByChallengeGroupId(challengeGroup.getId());



// then
Expand All @@ -79,7 +80,40 @@ void getScoreModelByChallengeGroupId() {
() -> assertEquals(3, score.ratingCount().get(2)),
() -> assertEquals(3, score.ratingCount().get(3)),
() -> assertEquals(2, score.ratingCount().get(4)),
() -> assertEquals(0, score.ratingCount().get(5))
() -> assertEquals(0, score.ratingCount().get(5)),
()-> assertEquals(236, Math.round(score.averageRating()*100))// 1*3 + 2*3 + 3*3 + 4*2 / 3+6+9+8 = 26 / 11 = 2.363
);
}

@Test
@Transactional
@DisplayName("리뷰 평점이 아무거도 없을때, 평균이 0이 나온다.")
void getScoreModelByChallengeGroupIdWhenNoReview() {
// given
ChallengeGroup challengeGroup = createChallengeGroup();
Challenge challenge = Challenge.builder()
.challengeGroup(challengeGroup)
.requiredCount(2)
.onceExp(100)
.successExp(100)
.difficulty(2)
.activePeriod(10)
.build();

challengeGroupRepository.save(challengeGroup);
challengeRepository.save(challenge);

// when
ChallengeReviewModel.Score score = challengeReviewReader.getScoreModelByChallengeGroupId(challengeGroup.getId());

// then
assertAll(
() -> assertEquals(0, score.ratingCount().get(1)),
() -> assertEquals(0, score.ratingCount().get(2)),
() -> assertEquals(0, score.ratingCount().get(3)),
() -> assertEquals(0, score.ratingCount().get(4)),
() -> assertEquals(0, score.ratingCount().get(5)),
()-> assertEquals(0, Math.round(score.averageRating()*100))
);
}

Expand Down

0 comments on commit 255c1ad

Please sign in to comment.