diff --git a/zzansuni-api-server/app/src/test/java/org/haedal/zzansuni/domain/challengegroup/ChallengeGroupQueryServiceTest.java b/zzansuni-api-server/app/src/test/java/org/haedal/zzansuni/domain/challengegroup/ChallengeGroupQueryServiceTest.java new file mode 100644 index 0000000..2dfb6dc --- /dev/null +++ b/zzansuni-api-server/app/src/test/java/org/haedal/zzansuni/domain/challengegroup/ChallengeGroupQueryServiceTest.java @@ -0,0 +1,114 @@ +package org.haedal.zzansuni.domain.challengegroup; + +import org.haedal.zzansuni.domain.challengegroup.challenge.Challenge; +import org.haedal.zzansuni.domain.challengegroup.image.ChallengeGroupImage; +import org.haedal.zzansuni.infrastructure.challengegroup.ChallengeGroupImageRepository; +import org.haedal.zzansuni.infrastructure.challengegroup.ChallengeGroupRepository; +import org.haedal.zzansuni.infrastructure.challengegroup.challenge.ChallengeRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; + +import java.time.LocalDate; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@SpringBootTest +class ChallengeGroupQueryServiceTest { + @Autowired ChallengeGroupQueryService challengeGroupQueryService; + @Autowired ChallengeGroupRepository challengeGroupRepository; + @Autowired ChallengeRepository challengeRepository; + @Autowired ChallengeGroupImageRepository challengeGroupImageRepository; + + @DisplayName("챌린지 그룹 목록 페이징이 정상적으로 동작한다.") + @Test + void getChallengeGroupsPaging() { + // given + for(int i = 0; i < 20; i++) { + ChallengeGroup challengeGroup = createChallengeGroup("title" + i, ChallengeCategory.ECHO); + challengeGroupRepository.save(challengeGroup); + } + for(int i = 0; i < 10; i++) { + ChallengeGroup challengeGroup = createChallengeGroup("title" + i, ChallengeCategory.VOLUNTEER); + challengeGroupRepository.save(challengeGroup); + } + + // when + Pageable pageable = PageRequest.of(0, 10); + ChallengeCategory category = ChallengeCategory.ECHO; + + + // then + Page challengeGroupsPaging = challengeGroupQueryService.getChallengeGroupsPaging(pageable, category); + + assertEquals(10, challengeGroupsPaging.getContent().size()); + assertEquals(2, challengeGroupsPaging.getTotalPages()); + + } + + @DisplayName("챌린지 그룹 상세 조회가 정상적으로 동작한다.") + @Test + void getChallengeGroupDetail() { + // given + ChallengeGroup challengeGroup = createChallengeGroup("title", ChallengeCategory.ECHO); + challengeGroupRepository.save(challengeGroup); + + Challenge challenge = Challenge.builder() + .challengeGroup(challengeGroup) + .requiredCount(12) + .dayType(DayType.WEEK) + .successExp(100) + .onceExp(10) + .difficulty(3) + .startDate(LocalDate.now()) + .endDate(LocalDate.now().plusDays(7)) + .build(); + challengeRepository.save(challenge); + + ChallengeGroupImage challengeGroupImage = ChallengeGroupImage.builder() + .challengeGroup(challengeGroup) + .imageUrl("image-url") + .build(); + challengeGroupImageRepository.save(challengeGroupImage); + + + // when + ChallengeGroupModel.Detail model = challengeGroupQueryService.getChallengeGroupDetail(challengeGroup.getId()); + + // then + assertEquals(challengeGroup.getId(), model.getId()); + assertEquals(model.getChallenges().size(), 1); + assertEquals(challenge.getId(), model.getChallenges().get(0).getId()); + assertEquals(model.getImageUrls().size(), 1); + assertEquals(challengeGroupImage.getImageUrl(), model.getImageUrls().get(0)); + + } + + @Test + void getChallengeGroupsShortsPaging() { + } + + @Test + void getChallengeGroupRankingsPaging() { + } + + @Test + void getChallengeGroupRanking() { + } + + + + private ChallengeGroup createChallengeGroup(String title, ChallengeCategory category) { + return ChallengeGroup.builder() + .title(title) + .category(category) + .content("content") + .guide("guide") + .cumulativeCount(0) + .build(); + } +} \ No newline at end of file diff --git a/zzansuni-api-server/app/src/test/java/org/haedal/zzansuni/domain/challengegroup/ChallengeGroupServiceTest.java b/zzansuni-api-server/app/src/test/java/org/haedal/zzansuni/domain/challengegroup/ChallengeGroupServiceTest.java new file mode 100644 index 0000000..733e465 --- /dev/null +++ b/zzansuni-api-server/app/src/test/java/org/haedal/zzansuni/domain/challengegroup/ChallengeGroupServiceTest.java @@ -0,0 +1,114 @@ +package org.haedal.zzansuni.domain.challengegroup; + +import org.haedal.zzansuni.domain.challengegroup.challenge.Challenge; +import org.haedal.zzansuni.infrastructure.challengegroup.ChallengeGroupRepository; +import org.haedal.zzansuni.infrastructure.challengegroup.challenge.ChallengeRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.List; +import java.util.NoSuchElementException; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest +class ChallengeGroupServiceTest { + @Autowired private ChallengeGroupService challengeGroupService; + @Autowired private ChallengeRepository challengeRepository; + @Autowired private ChallengeGroupRepository challengeGroupRepository; + + @DisplayName("챌린지 그룹 생성이 정상적으로 동작한다.") + @Test + @Transactional + void createChallengeGroup() { + LocalDate startDate = LocalDate.of(2021, 1, 1); + // given + ChallengeGroupCommand.CreateChallenge createChallenge = ChallengeGroupCommand.CreateChallenge.builder() + .startDate(startDate) + .endDate(startDate.plusDays(7)) + .dayType(DayType.WEEK) + .requiredCount(1) + .onceExp(100) + .successExp(100) + .difficulty(2) + .build(); + ChallengeGroupCommand.Create command = ChallengeGroupCommand.Create.builder() + .title("title") + .guide("guide") + .content("content") + .category(ChallengeCategory.VOLUNTEER) + .createChallenges(List.of(createChallenge)) + .build(); + + // when + challengeGroupService.createChallengeGroup(command); + + + // then + List groups = challengeGroupRepository.findAll(); + assertThat(groups.size()).isEqualTo(1); + + ChallengeGroup challengeGroup = groups.get(0); + assertThat(challengeGroup.getTitle()).isEqualTo("title"); + assertThat(challengeGroup.getGuide()).isEqualTo("guide"); + assertThat(challengeGroup.getContent()).isEqualTo("content"); + assertThat(challengeGroup.getCategory()).isEqualTo(ChallengeCategory.VOLUNTEER); + + assertThat(challengeGroup.getChallenges().size()).isEqualTo(1); + Challenge challenge = challengeGroup.getChallenges().get(0); + assertThat(challenge.getStartDate()).isEqualTo(startDate); + assertThat(challenge.getEndDate()).isEqualTo(startDate.plusDays(7)); + + + } + + @DisplayName("챌린지 그룹 삭제가 정상적으로 동작한다.") + @Test + @Transactional + void deleteChallengeGroup() { + // given + ChallengeGroup challengeGroup = ChallengeGroup.builder() + .title("title") + .category(ChallengeCategory.VOLUNTEER) + .content("content") + .guide("guide") + .cumulativeCount(0) + .build(); + challengeGroupRepository.save(challengeGroup); + + Challenge challenge1 = Challenge.builder() + .challengeGroup(challengeGroup) + .requiredCount(1) + .dayType(DayType.WEEK) + .onceExp(100) + .successExp(100) + .difficulty(2) + .startDate(LocalDate.now()) + .endDate(LocalDate.now().plusDays(7)) + .build(); + Challenge challenge2 = Challenge.builder() + .challengeGroup(challengeGroup) + .requiredCount(1) + .dayType(DayType.WEEK) + .onceExp(100) + .successExp(100) + .difficulty(2) + .startDate(LocalDate.now()) + .endDate(LocalDate.now().plusDays(7)) + .build(); + challengeRepository.save(challenge1); + challengeRepository.save(challenge2); + + + // when + challengeGroupService.deleteChallengeGroup(challengeGroup.getId()); + + // then + assertThrows(NoSuchElementException.class, () -> challengeGroupRepository.findById(challengeGroup.getId()).get()); + } +} \ No newline at end of file