diff --git a/src/main/java/com/clova/anifriends/domain/applicant/Applicant.java b/src/main/java/com/clova/anifriends/domain/applicant/Applicant.java index 7894f7e51..94bda942e 100644 --- a/src/main/java/com/clova/anifriends/domain/applicant/Applicant.java +++ b/src/main/java/com/clova/anifriends/domain/applicant/Applicant.java @@ -21,6 +21,7 @@ import jakarta.persistence.OneToOne; import jakarta.persistence.Table; import java.time.LocalDateTime; +import java.util.Objects; import lombok.AccessLevel; import lombok.NoArgsConstructor; @@ -112,6 +113,10 @@ public boolean hasReview() { return review != null; } + public boolean hasNotReview() { + return getStatus().equals(ApplicantStatus.ATTENDANCE) && Objects.isNull(review); + } + public void registerReview(Review review) { this.review = review; } diff --git a/src/main/java/com/clova/anifriends/domain/applicant/controller/ApplicantController.java b/src/main/java/com/clova/anifriends/domain/applicant/controller/ApplicantController.java index 6dc671ca6..d23923b86 100644 --- a/src/main/java/com/clova/anifriends/domain/applicant/controller/ApplicantController.java +++ b/src/main/java/com/clova/anifriends/domain/applicant/controller/ApplicantController.java @@ -1,6 +1,7 @@ package com.clova.anifriends.domain.applicant.controller; import com.clova.anifriends.domain.applicant.dto.FindApplicantsApprovedResponse; +import com.clova.anifriends.domain.applicant.dto.FindApplyingVolunteersResponse; import com.clova.anifriends.domain.applicant.service.ApplicantService; import com.clova.anifriends.domain.auth.resolver.LoginUser; import lombok.RequiredArgsConstructor; @@ -27,6 +28,13 @@ public ResponseEntity registerApplicant( return ResponseEntity.noContent().build(); } + @GetMapping("/volunteers/applicants") + public ResponseEntity findApplyingVolunteers( + @LoginUser Long volunteerId + ) { + return ResponseEntity.ok(applicantService.findApplyingVolunteers(volunteerId)); + + } @GetMapping("/shelters/recruitments/{recruitmentId}/approval") public ResponseEntity findApplicantApproved( diff --git a/src/main/java/com/clova/anifriends/domain/applicant/dto/FindApplyingVolunteersResponse.java b/src/main/java/com/clova/anifriends/domain/applicant/dto/FindApplyingVolunteersResponse.java new file mode 100644 index 000000000..2b7ab47c9 --- /dev/null +++ b/src/main/java/com/clova/anifriends/domain/applicant/dto/FindApplyingVolunteersResponse.java @@ -0,0 +1,47 @@ +package com.clova.anifriends.domain.applicant.dto; + +import com.clova.anifriends.domain.applicant.Applicant; +import com.clova.anifriends.domain.applicant.wrapper.ApplicantStatus; +import java.time.LocalDateTime; +import java.util.List; + +public record FindApplyingVolunteersResponse( + List findApplyingVolunteerResponses +) { + + public record FindApplyingVolunteerResponse( + Long recruitmentId, + Long applicantId, + String title, + String shelterName, + ApplicantStatus status, + boolean isWritedReview, + LocalDateTime volunteerDate + ) { + + public static FindApplyingVolunteerResponse from( + Applicant applicant + ) { + return new FindApplyingVolunteerResponse( + applicant.getRecruitment().getRecruitmentId(), + applicant.getApplicantId(), + applicant.getRecruitment().getTitle(), + applicant.getRecruitment().getShelter().getName(), + applicant.getStatus(), + applicant.hasNotReview(), + applicant.getRecruitment().getStartTime() + ); + } + } + + public static FindApplyingVolunteersResponse from( + List applicants + ) { + return new FindApplyingVolunteersResponse( + applicants + .stream() + .map(FindApplyingVolunteerResponse::from) + .toList() + ); + } +} diff --git a/src/main/java/com/clova/anifriends/domain/applicant/repository/ApplicantRepository.java b/src/main/java/com/clova/anifriends/domain/applicant/repository/ApplicantRepository.java index b00fe03a3..9d172a9ba 100644 --- a/src/main/java/com/clova/anifriends/domain/applicant/repository/ApplicantRepository.java +++ b/src/main/java/com/clova/anifriends/domain/applicant/repository/ApplicantRepository.java @@ -13,6 +13,17 @@ public interface ApplicantRepository extends JpaRepository { boolean existsByRecruitmentAndVolunteer(Recruitment recruitment, Volunteer volunteer); + @Query( + "select a " + + "from Applicant a " + + "left join fetch a.recruitment " + + "left join fetch a.volunteer " + + "left join fetch a.review " + + "where a.volunteer = :volunteer" + ) + List findApplyingVolunteers( + @Param("volunteer") Volunteer volunteer); + @Query("select a from Applicant a " + "where a.applicantId = :applicantId " + "and a.volunteer.volunteerId = :volunteerId") diff --git a/src/main/java/com/clova/anifriends/domain/applicant/service/ApplicantService.java b/src/main/java/com/clova/anifriends/domain/applicant/service/ApplicantService.java index 6b5b9c80b..c0b844d54 100644 --- a/src/main/java/com/clova/anifriends/domain/applicant/service/ApplicantService.java +++ b/src/main/java/com/clova/anifriends/domain/applicant/service/ApplicantService.java @@ -2,6 +2,7 @@ import com.clova.anifriends.domain.applicant.Applicant; import com.clova.anifriends.domain.applicant.dto.FindApplicantsApprovedResponse; +import com.clova.anifriends.domain.applicant.dto.FindApplyingVolunteersResponse; import com.clova.anifriends.domain.applicant.exception.ApplicantConflictException; import com.clova.anifriends.domain.applicant.repository.ApplicantRepository; import com.clova.anifriends.domain.recruitment.Recruitment; @@ -35,6 +36,18 @@ public void registerApplicant(Long recruitmentId, Long volunteerId) { applicantRepository.save(applicant); } + @Transactional(readOnly = true) + public FindApplyingVolunteersResponse findApplyingVolunteers( + Long volunteerId + ) { + Volunteer foundVolunteer = getVolunteer(volunteerId); + + List applyingVolunteers = applicantRepository.findApplyingVolunteers( + foundVolunteer); + + return FindApplyingVolunteersResponse.from(applyingVolunteers); + } + private Recruitment getRecruitment(Long recruitmentId) { return recruitmentRepository.findById(recruitmentId) .orElseThrow(() -> new RecruitmentNotFoundException("존재하지 않는 봉사입니다.")); diff --git a/src/main/java/com/clova/anifriends/domain/review/Review.java b/src/main/java/com/clova/anifriends/domain/review/Review.java index e28d50a33..f1ac57729 100644 --- a/src/main/java/com/clova/anifriends/domain/review/Review.java +++ b/src/main/java/com/clova/anifriends/domain/review/Review.java @@ -6,6 +6,7 @@ import com.clova.anifriends.domain.review.exception.ReviewAuthorizationException; import com.clova.anifriends.domain.review.exception.ReviewBadRequestException; import com.clova.anifriends.domain.review.wrapper.ReviewContent; +import com.clova.anifriends.domain.volunteer.Volunteer; import jakarta.persistence.Column; import jakarta.persistence.Embedded; import jakarta.persistence.Entity; @@ -87,4 +88,8 @@ public Long getReviewId() { public Applicant getApplicant() { return applicant; } + + public Volunteer getVolunteer() { + return applicant.getVolunteer(); + } } diff --git a/src/main/java/com/clova/anifriends/domain/review/repository/ReviewRepository.java b/src/main/java/com/clova/anifriends/domain/review/repository/ReviewRepository.java index eac4411b4..7a82696bc 100644 --- a/src/main/java/com/clova/anifriends/domain/review/repository/ReviewRepository.java +++ b/src/main/java/com/clova/anifriends/domain/review/repository/ReviewRepository.java @@ -27,6 +27,8 @@ Optional findByReviewIdAndVolunteerId( @Query("select r from Review r " + "join fetch r.applicant a " + "where a.volunteer.volunteerId = :volunteerId") - Page findAllByVolunteerVolunteerIdOrderByCreatedAtDesc(@Param("volunteerId") Long volunteerId, + Page findAllByVolunteerVolunteerIdOrderByCreatedAtDesc( + @Param("volunteerId") Long volunteerId, Pageable pageable); -} + +} \ No newline at end of file diff --git a/src/main/java/com/clova/anifriends/domain/review/service/ReviewService.java b/src/main/java/com/clova/anifriends/domain/review/service/ReviewService.java index 6d01d58ae..47b7c4dc8 100644 --- a/src/main/java/com/clova/anifriends/domain/review/service/ReviewService.java +++ b/src/main/java/com/clova/anifriends/domain/review/service/ReviewService.java @@ -6,9 +6,9 @@ import com.clova.anifriends.domain.review.Review; import com.clova.anifriends.domain.review.dto.response.FindReviewResponse; import com.clova.anifriends.domain.review.dto.response.FindShelterReviewsResponse; +import com.clova.anifriends.domain.review.dto.response.FindVolunteerReviewsResponse; import com.clova.anifriends.domain.review.exception.ApplicantNotFoundException; import com.clova.anifriends.domain.review.exception.ReviewBadRequestException; -import com.clova.anifriends.domain.review.dto.response.FindVolunteerReviewsResponse; import com.clova.anifriends.domain.review.exception.ReviewNotFoundException; import com.clova.anifriends.domain.review.repository.ReviewRepository; import java.util.List; diff --git a/src/test/java/com/clova/anifriends/base/BaseRepositoryTest.java b/src/test/java/com/clova/anifriends/base/BaseRepositoryTest.java index d1a773d3d..0635479fd 100644 --- a/src/test/java/com/clova/anifriends/base/BaseRepositoryTest.java +++ b/src/test/java/com/clova/anifriends/base/BaseRepositoryTest.java @@ -1,8 +1,11 @@ package com.clova.anifriends.base; import com.clova.anifriends.base.config.TestQueryDslConfig; +import com.clova.anifriends.domain.applicant.repository.ApplicantRepository; import com.clova.anifriends.domain.recruitment.repository.RecruitmentRepository; +import com.clova.anifriends.domain.review.repository.ReviewRepository; import com.clova.anifriends.domain.shelter.repository.ShelterRepository; +import com.clova.anifriends.domain.volunteer.repository.VolunteerRepository; import jakarta.persistence.EntityManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; @@ -15,9 +18,18 @@ public abstract class BaseRepositoryTest { @Autowired protected EntityManager entityManager; + @Autowired + protected ApplicantRepository applicantRepository; + + @Autowired + protected ReviewRepository reviewRepository; + @Autowired protected ShelterRepository shelterRepository; @Autowired protected RecruitmentRepository recruitmentRepository; + + @Autowired + protected VolunteerRepository volunteerRepository; } diff --git a/src/test/java/com/clova/anifriends/domain/applicant/controller/ApplicantControllerTest.java b/src/test/java/com/clova/anifriends/domain/applicant/controller/ApplicantControllerTest.java index 665b41cf7..12dec6a88 100644 --- a/src/test/java/com/clova/anifriends/domain/applicant/controller/ApplicantControllerTest.java +++ b/src/test/java/com/clova/anifriends/domain/applicant/controller/ApplicantControllerTest.java @@ -1,6 +1,9 @@ package com.clova.anifriends.domain.applicant.controller; +import static com.clova.anifriends.domain.applicant.wrapper.ApplicantStatus.ATTENDANCE; +import static com.clova.anifriends.domain.applicant.wrapper.ApplicantStatus.PENDING; import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.when; import static org.springframework.restdocs.headers.HeaderDocumentation.headerWithName; @@ -14,15 +17,28 @@ import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields; import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName; import static org.springframework.restdocs.request.RequestDocumentation.pathParameters; +import static org.springframework.test.util.ReflectionTestUtils.setField; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import com.clova.anifriends.base.BaseControllerTest; +import com.clova.anifriends.domain.applicant.Applicant; import com.clova.anifriends.domain.applicant.dto.FindApplicantsApprovedResponse; +import com.clova.anifriends.domain.applicant.dto.FindApplyingVolunteersResponse; +import com.clova.anifriends.domain.applicant.support.ApplicantFixture; +import com.clova.anifriends.domain.recruitment.Recruitment; +import com.clova.anifriends.domain.recruitment.support.fixture.RecruitmentFixture; +import com.clova.anifriends.domain.review.Review; +import com.clova.anifriends.domain.review.support.ReviewFixture; +import com.clova.anifriends.domain.shelter.Shelter; +import com.clova.anifriends.domain.shelter.support.ShelterFixture; +import com.clova.anifriends.domain.volunteer.Volunteer; +import com.clova.anifriends.domain.volunteer.support.VolunteerFixture; import java.util.List; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; +import org.springframework.restdocs.payload.JsonFieldType; import org.springframework.test.web.servlet.ResultActions; class ApplicantControllerTest extends BaseControllerTest { @@ -46,6 +62,80 @@ void registerApplicant() throws Exception { )); } + @Test + @DisplayName("findApplyingVolunteers 실행 시") + void findApplyingVolunteers() throws Exception { + // given + Long volunteerId = 1L; + Long recruitmentId = 1L; + Long applicantShouldWriteReviewId = 1L; + Long applicantShouldNotWriteReviewId = 2L; + + Shelter shelter = ShelterFixture.shelter(); + Volunteer volunteer = VolunteerFixture.volunteer(); + setField(volunteer, "volunteerId", volunteerId); + + Recruitment recruitment = RecruitmentFixture.recruitment(shelter); + setField(recruitment, "recruitmentId", recruitmentId); + + Applicant applicantShouldWriteReview = ApplicantFixture.applicant(recruitment, + volunteer, ATTENDANCE); + Applicant applicantShouldNotWriteReview = ApplicantFixture.applicant(recruitment, + volunteer, PENDING); + + setField(applicantShouldWriteReview, "applicantId", applicantShouldWriteReviewId); + setField(applicantShouldNotWriteReview, "applicantId", applicantShouldNotWriteReviewId); + + Review review = ReviewFixture.review(applicantShouldWriteReview); + setField(review, "reviewId", 1L); + + FindApplyingVolunteersResponse findApplyingVolunteersResponse = FindApplyingVolunteersResponse.from( + List.of( + applicantShouldWriteReview, + applicantShouldNotWriteReview + ) + ); + + given(applicantService.findApplyingVolunteers(volunteerId)).willReturn( + findApplyingVolunteersResponse); + + // when + ResultActions resultActions = mockMvc.perform( + get("/api/volunteers/applicants") + .header(AUTHORIZATION, volunteerAccessToken) + .contentType(MediaType.APPLICATION_JSON)); + + // then + resultActions.andExpect(status().isOk()) + .andDo(restDocs.document( + responseFields( + fieldWithPath("findApplyingVolunteerResponses").type(JsonFieldType.ARRAY) + .description("신청한 봉사 리스트"), + fieldWithPath("findApplyingVolunteerResponses[].recruitmentId").type( + JsonFieldType.NUMBER) + .description("봉사 모집글 ID"), + fieldWithPath("findApplyingVolunteerResponses[].applicantId").type( + JsonFieldType.NUMBER) + .description("봉사 신청자 ID"), + fieldWithPath("findApplyingVolunteerResponses[].title").type( + JsonFieldType.STRING) + .description("모집글 제목"), + fieldWithPath("findApplyingVolunteerResponses[].shelterName").type( + JsonFieldType.STRING) + .description("보호소 이름"), + fieldWithPath("findApplyingVolunteerResponses[].status").type( + JsonFieldType.STRING) + .description("승인 상태"), + fieldWithPath("findApplyingVolunteerResponses[].isWritedReview").type( + JsonFieldType.BOOLEAN) + .description("후기 작성 가능 여부"), + fieldWithPath("findApplyingVolunteerResponses[].volunteerDate").type( + JsonFieldType.STRING) + .description("봉사 날짜") + ) + )); + } + @Test @DisplayName("봉사 신청 승인자 조회 API 호출 시") void findApplicantApproved() throws Exception { diff --git a/src/test/java/com/clova/anifriends/domain/applicant/repository/ApplicantRepositoryTest.java b/src/test/java/com/clova/anifriends/domain/applicant/repository/ApplicantRepositoryTest.java index ad86bffc7..79a7e3aa9 100644 --- a/src/test/java/com/clova/anifriends/domain/applicant/repository/ApplicantRepositoryTest.java +++ b/src/test/java/com/clova/anifriends/domain/applicant/repository/ApplicantRepositoryTest.java @@ -9,15 +9,23 @@ import static com.clova.anifriends.domain.shelter.support.ShelterFixture.shelter; import static com.clova.anifriends.domain.volunteer.support.VolunteerFixture.volunteer; import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.test.util.ReflectionTestUtils.setField; import com.clova.anifriends.base.BaseRepositoryTest; import com.clova.anifriends.domain.applicant.Applicant; +import com.clova.anifriends.domain.applicant.dto.FindApplyingVolunteersResponse; +import com.clova.anifriends.domain.applicant.support.ApplicantFixture; import com.clova.anifriends.domain.recruitment.Recruitment; import com.clova.anifriends.domain.recruitment.repository.RecruitmentRepository; +import com.clova.anifriends.domain.recruitment.support.fixture.RecruitmentFixture; +import com.clova.anifriends.domain.review.Review; +import com.clova.anifriends.domain.review.support.ReviewFixture; import com.clova.anifriends.domain.shelter.Shelter; import com.clova.anifriends.domain.shelter.repository.ShelterRepository; +import com.clova.anifriends.domain.shelter.support.ShelterFixture; import com.clova.anifriends.domain.volunteer.Volunteer; import com.clova.anifriends.domain.volunteer.repository.VolunteerRepository; +import com.clova.anifriends.domain.volunteer.support.VolunteerFixture; import java.util.List; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -99,4 +107,49 @@ void findApprovedByRecruitmentIdAndShelterId2() { } } + @Nested + @DisplayName("findApplyingVolunteers 실행 시") + class FindApplyingVolunteersTest { + + @Test + @DisplayName("성공") + void findApplyingVolunteers() { + // given + Volunteer volunteer = VolunteerFixture.volunteer(); + Shelter shelter = ShelterFixture.shelter(); + Recruitment recruitment = RecruitmentFixture.recruitment(shelter); + + shelterRepository.save(shelter); + volunteerRepository.save(volunteer); + recruitmentRepository.save(recruitment); + + Applicant applicantShouldWriteReview = ApplicantFixture.applicant( + recruitment, volunteer, ATTENDANCE); + Applicant applicantShouldNotWriteReview1 = ApplicantFixture.applicant( + recruitment, volunteer, PENDING); + Applicant applicantShouldNotWriteReview2 = ApplicantFixture.applicant( + recruitment, volunteer, ATTENDANCE); + Review review = ReviewFixture.review(applicantShouldNotWriteReview2); + setField(review, "reviewId", 1L); + + applicantRepository.save(applicantShouldWriteReview); + applicantRepository.save(applicantShouldNotWriteReview1); + applicantRepository.save(applicantShouldNotWriteReview2); + + // when + List applyingVolunteers = applicantRepository.findApplyingVolunteers( + volunteer); + + FindApplyingVolunteersResponse expected = FindApplyingVolunteersResponse.from( + applyingVolunteers); + + // then + assertThat(expected.findApplyingVolunteerResponses().get(0).isWritedReview()).isEqualTo( + true); + assertThat(expected.findApplyingVolunteerResponses().get(1).isWritedReview()).isEqualTo( + false); + assertThat(expected.findApplyingVolunteerResponses().get(2).isWritedReview()).isEqualTo( + false); + } + } } diff --git a/src/test/java/com/clova/anifriends/domain/applicant/service/ApplicantServiceTest.java b/src/test/java/com/clova/anifriends/domain/applicant/service/ApplicantServiceTest.java index 9083712e3..5fe338c3a 100644 --- a/src/test/java/com/clova/anifriends/domain/applicant/service/ApplicantServiceTest.java +++ b/src/test/java/com/clova/anifriends/domain/applicant/service/ApplicantServiceTest.java @@ -2,6 +2,7 @@ import static com.clova.anifriends.domain.applicant.support.ApplicantFixture.applicant; import static com.clova.anifriends.domain.applicant.wrapper.ApplicantStatus.ATTENDANCE; +import static com.clova.anifriends.domain.applicant.wrapper.ApplicantStatus.PENDING; import static com.clova.anifriends.domain.recruitment.support.fixture.RecruitmentFixture.recruitment; import static com.clova.anifriends.domain.shelter.support.ShelterFixture.shelter; import static com.clova.anifriends.domain.volunteer.support.VolunteerFixture.volunteer; @@ -16,14 +17,19 @@ import com.clova.anifriends.domain.applicant.Applicant; import com.clova.anifriends.domain.applicant.dto.FindApplicantsApprovedResponse; +import com.clova.anifriends.domain.applicant.dto.FindApplyingVolunteersResponse; import com.clova.anifriends.domain.applicant.exception.ApplicantConflictException; import com.clova.anifriends.domain.applicant.repository.ApplicantRepository; +import com.clova.anifriends.domain.applicant.support.ApplicantFixture; import com.clova.anifriends.domain.recruitment.Recruitment; import com.clova.anifriends.domain.recruitment.repository.RecruitmentRepository; +import com.clova.anifriends.domain.recruitment.support.fixture.RecruitmentFixture; import com.clova.anifriends.domain.recruitment.wrapper.RecruitmentInfo; import com.clova.anifriends.domain.shelter.Shelter; +import com.clova.anifriends.domain.shelter.support.ShelterFixture; import com.clova.anifriends.domain.volunteer.Volunteer; import com.clova.anifriends.domain.volunteer.repository.VolunteerRepository; +import com.clova.anifriends.domain.volunteer.support.VolunteerFixture; import java.time.LocalDateTime; import java.util.List; import java.util.Optional; @@ -155,4 +161,83 @@ void findApplicantsApproved2() { assertThat(result).isEqualTo(response); } } + + @Nested + @DisplayName("findApplyingVolunteers 실행 시") + class FindApplyingVolunteersTest { + + @Test + @DisplayName("성공 : 후기 작성자가 1명인 경우") + void findApplyingVolunteers1() { + // given + Volunteer volunteer = VolunteerFixture.volunteer(); + Shelter shelter = ShelterFixture.shelter(); + Recruitment recruitment = RecruitmentFixture.recruitment(shelter); + Applicant applicantShouldWriteReview = ApplicantFixture.applicant(recruitment, + volunteer, ATTENDANCE); + Applicant applicantShouldNotWriteReview = ApplicantFixture.applicant( + recruitment, + volunteer, PENDING); + + FindApplyingVolunteersResponse findApplyingVolunteersResponse = FindApplyingVolunteersResponse.from( + List.of(applicantShouldWriteReview, applicantShouldNotWriteReview) + ); + + given(volunteerRepository.findById(anyLong())).willReturn(Optional.of(volunteer)); + given(applicantRepository.findApplyingVolunteers(any())).willReturn( + List.of(applicantShouldWriteReview, applicantShouldNotWriteReview)); + + // when + FindApplyingVolunteersResponse foundApplyingVolunteers = applicantService.findApplyingVolunteers( + anyLong()); + + // then + assertThat(foundApplyingVolunteers.findApplyingVolunteerResponses().get(0) + .isWritedReview()).isEqualTo( + findApplyingVolunteersResponse.findApplyingVolunteerResponses().get(0) + .isWritedReview()); + assertThat(foundApplyingVolunteers.findApplyingVolunteerResponses().get(1) + .isWritedReview()).isEqualTo( + findApplyingVolunteersResponse.findApplyingVolunteerResponses().get(1) + .isWritedReview()); + } + + @Test + @DisplayName("성공 : 후기 작성자가 0명인 경우") + void findApplyingVolunteers2() { + // given + Volunteer volunteer = VolunteerFixture.volunteer(); + Shelter shelter = ShelterFixture.shelter(); + Recruitment recruitment = RecruitmentFixture.recruitment(shelter); + + Applicant applicantShouldWriteReview = ApplicantFixture.applicant(recruitment, + volunteer, PENDING); + Applicant applicantShouldNotWriteReview = ApplicantFixture.applicant( + recruitment, + volunteer, PENDING); + + given(volunteerRepository.findById(anyLong())).willReturn(Optional.of(volunteer)); + + FindApplyingVolunteersResponse findApplyingVolunteersResponse = FindApplyingVolunteersResponse.from( + List.of(applicantShouldWriteReview, applicantShouldNotWriteReview) + ); + + given(applicantRepository.findApplyingVolunteers(any())).willReturn( + List.of(applicantShouldWriteReview, applicantShouldNotWriteReview)); + + // when + FindApplyingVolunteersResponse foundApplyingVolunteers = applicantService.findApplyingVolunteers( + anyLong()); + + // then + assertThat(foundApplyingVolunteers.findApplyingVolunteerResponses().get(0) + .isWritedReview()).isEqualTo( + findApplyingVolunteersResponse.findApplyingVolunteerResponses().get(0) + .isWritedReview()); + assertThat(foundApplyingVolunteers.findApplyingVolunteerResponses().get(1) + .isWritedReview()).isEqualTo( + findApplyingVolunteersResponse.findApplyingVolunteerResponses().get(1) + .isWritedReview()); + } + } } diff --git a/src/test/java/com/clova/anifriends/domain/review/controller/ReviewControllerTest.java b/src/test/java/com/clova/anifriends/domain/review/controller/ReviewControllerTest.java index a76cf86a1..759e0b5ce 100644 --- a/src/test/java/com/clova/anifriends/domain/review/controller/ReviewControllerTest.java +++ b/src/test/java/com/clova/anifriends/domain/review/controller/ReviewControllerTest.java @@ -1,5 +1,6 @@ package com.clova.anifriends.domain.review.controller; + import static com.clova.anifriends.domain.applicant.support.ApplicantFixture.applicant; import static com.clova.anifriends.domain.applicant.wrapper.ApplicantStatus.ATTENDANCE; import static com.clova.anifriends.domain.recruitment.support.fixture.RecruitmentFixture.recruitment; @@ -227,7 +228,7 @@ void findVolunteerReviews() throws Exception { // when ResultActions resultActions = mockMvc.perform(get("/api/volunteers/{volunteerId}/reviews", volunteerId) - .header(AUTHORIZATION, shelterAccessToken) + .header(AUTHORIZATION, shelterAccessToken) .param("pageNumber", "0") .param("pageSize", "10")); diff --git a/src/test/java/com/clova/anifriends/domain/review/repository/ReviewRepositoryTest.java b/src/test/java/com/clova/anifriends/domain/review/repository/ReviewRepositoryTest.java index b88420824..de31d1567 100644 --- a/src/test/java/com/clova/anifriends/domain/review/repository/ReviewRepositoryTest.java +++ b/src/test/java/com/clova/anifriends/domain/review/repository/ReviewRepositoryTest.java @@ -1,5 +1,6 @@ package com.clova.anifriends.domain.review.repository; + import static com.clova.anifriends.domain.applicant.support.ApplicantFixture.applicant; import static com.clova.anifriends.domain.applicant.wrapper.ApplicantStatus.ATTENDANCE; import static com.clova.anifriends.domain.recruitment.support.fixture.RecruitmentFixture.recruitment; @@ -27,9 +28,6 @@ class ReviewRepositoryTest extends BaseRepositoryTest { - @Autowired - private ReviewRepository reviewRepository; - @Autowired private ShelterRepository shelterRepository; diff --git a/src/test/java/com/clova/anifriends/domain/review/service/ReviewServiceTest.java b/src/test/java/com/clova/anifriends/domain/review/service/ReviewServiceTest.java index 0c929a11c..020942571 100644 --- a/src/test/java/com/clova/anifriends/domain/review/service/ReviewServiceTest.java +++ b/src/test/java/com/clova/anifriends/domain/review/service/ReviewServiceTest.java @@ -204,7 +204,8 @@ void findVolunteerReviews() { FindVolunteerReviewsResponse expected = FindVolunteerReviewsResponse.of( reviewPage.getContent(), PageInfo.from(reviewPage)); - given(reviewRepository.findAllByVolunteerVolunteerIdOrderByCreatedAtDesc(anyLong(), any())) + given(reviewRepository.findAllByVolunteerVolunteerIdOrderByCreatedAtDesc(anyLong(), + any())) .willReturn(reviewPage); // when diff --git a/src/test/java/com/clova/anifriends/domain/review/wrapper/ReviewContentTest.java b/src/test/java/com/clova/anifriends/domain/review/wrapper/ReviewContentTest.java index eac92e5bc..29dacf020 100644 --- a/src/test/java/com/clova/anifriends/domain/review/wrapper/ReviewContentTest.java +++ b/src/test/java/com/clova/anifriends/domain/review/wrapper/ReviewContentTest.java @@ -68,5 +68,4 @@ void exceptionWhenContentOver() { assertThat(exception).isInstanceOf(ReviewBadRequestException.class); } } - }