Skip to content

Commit

Permalink
Feat: 챌린지 랜덤 기능 구현 (#293)
Browse files Browse the repository at this point in the history
* Feat: 챌린지를 오늘의 날짜에 따라 랜덤으로 2개의 값을 리턴하게 로직 추가

- 어제의 기록 유무에 따라 챌린지 리스트 길이가 다르기 때문에 어제의 기록 유무에 따라 챌린지가 다른 값을 보여줌

* Rename: 챌린지 서비스 테스트 파일 이름 변경

* Test: 챌린지 리스트 랜덤으로 2개 반환 로직 변경으로 인한 테스트 코드 수정
  • Loading branch information
hee9841 authored Nov 4, 2024
1 parent 5626eb0 commit 06c392a
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@

import java.time.LocalDate;
import java.time.OffsetDateTime;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

import static com.dnd.runus.global.constant.TimeConstant.SERVER_TIMEZONE_ID;

Expand All @@ -26,15 +29,22 @@ public List<ChallengesResponse> getChallenges(long memberId) {
.toOffsetDateTime();
OffsetDateTime yesterday = todayMidnight.minusDays(1);

List<ChallengesResponse> challengesResponses;
// 어제 기록이 없으면
if (!runningRecordRepository.hasByMemberIdAndStartAtBetween(memberId, yesterday, todayMidnight)) {
return challengeRepository.findAllIsNotDefeatYesterday().stream()
challengesResponses = challengeRepository.findAllIsNotDefeatYesterday().stream()
.map(ChallengesResponse::from)
.toList();
.collect(Collectors.toList());
} else {
challengesResponses = challengeRepository.findAllChallenges().stream()
.map(ChallengesResponse::from)
.collect(Collectors.toList());
}

return challengeRepository.findAllChallenges().stream()
.map(ChallengesResponse::from)
.toList();
// 랜덤으로 2개 리턴
Random randomWithSeed = new Random(todayMidnight.toEpochSecond());
Collections.shuffle(challengesResponses, randomWithSeed);

return challengesResponses.subList(0, 2);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@
import java.util.List;

import static com.dnd.runus.global.constant.TimeConstant.SERVER_TIMEZONE_ID;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.BDDMockito.given;

@ExtendWith(MockitoExtension.class)
class ChallengeDataServiceTest {
class ChallengeServiceTest {

@Mock
private RunningRecordRepository runningRecordRepository;
Expand All @@ -44,7 +44,7 @@ void setUp() {
member = new Member(MemberRole.USER, "nickname");
}

@DisplayName("어제 기록이 있는경우 챌린지 리스트 조회 : 챌린지 name에 '어제'값이 포함한 값이 있어야함")
@DisplayName("어제 기록이 있는경우 챌린지 리스트 조회 : 챌린지 리스트 크기가 2이어야함")
@Test
void getChallengesWithYesterdayRecords() {
// given
Expand All @@ -65,10 +65,10 @@ void getChallengesWithYesterdayRecords() {
List<ChallengesResponse> challenges = challengeService.getChallenges(member.memberId());

// then
assertTrue(challenges.stream().anyMatch(c -> c.title().contains("어제")));
assertThat(challenges.size()).isEqualTo(2);
}

@DisplayName("어제 기록이 없는 경우 챌린지 리스트 조회 : 챌린지 name에 '어제'값이 포함한 값이 없어야함")
@DisplayName("어제 기록이 없는 경우 챌린지 리스트 조회 : 챌린지 리스트 크기가 2이어야함")
@Test
void getChallengesWithoutYesterdayRecords() {
// given
Expand All @@ -85,6 +85,6 @@ void getChallengesWithoutYesterdayRecords() {
List<ChallengesResponse> challenges = challengeService.getChallenges(member.memberId());

// then
assertTrue(challenges.stream().noneMatch(c -> c.title().contains("어제")));
assertThat(challenges.size()).isEqualTo(2);
}
}

0 comments on commit 06c392a

Please sign in to comment.