Skip to content

Commit bf7ee66

Browse files
committed
test(search): 특정 기관 모집글 조회, 기관이 작성한 모집글 조회 test 추가 및 volunteer, center 변경
1 parent 907df2c commit bf7ee66

File tree

4 files changed

+206
-30
lines changed

4 files changed

+206
-30
lines changed

src/test/java/com/somemore/domains/search/controller/RecruitBoardSearchApiControllerTest.java

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,28 @@
33
import com.somemore.domains.recruitboard.dto.condition.RecruitBoardNearByCondition;
44
import com.somemore.domains.recruitboard.dto.condition.RecruitBoardSearchCondition;
55
import com.somemore.domains.recruitboard.dto.response.RecruitBoardDetailResponseDto;
6+
import com.somemore.domains.recruitboard.dto.response.RecruitBoardResponseDto;
67
import com.somemore.domains.recruitboard.dto.response.RecruitBoardWithCenterResponseDto;
78
import com.somemore.domains.recruitboard.usecase.RecruitBoardQueryUseCase;
89
import com.somemore.domains.search.config.ElasticsearchHealthChecker;
910
import com.somemore.domains.search.usecase.RecruitBoardDocumentUseCase;
1011
import com.somemore.support.ControllerTestSupport;
12+
import com.somemore.support.annotation.MockUser;
1113
import org.junit.jupiter.api.DisplayName;
1214
import org.junit.jupiter.api.Test;
1315
import org.springframework.beans.factory.annotation.Autowired;
1416
import org.springframework.boot.test.mock.mockito.MockBean;
1517
import org.springframework.data.domain.Page;
1618
import org.springframework.data.domain.PageImpl;
1719
import org.springframework.http.MediaType;
18-
import org.springframework.test.context.junit.jupiter.EnabledIf;
1920
import org.springframework.test.web.servlet.MockMvc;
2021

2122
import java.util.Collections;
23+
import java.util.UUID;
2224

2325
import static com.somemore.domains.recruitboard.domain.VolunteerCategory.ADMINISTRATIVE_SUPPORT;
2426
import static org.mockito.ArgumentMatchers.any;
27+
import static org.mockito.ArgumentMatchers.eq;
2528
import static org.mockito.BDDMockito.given;
2629
import static org.mockito.Mockito.times;
2730
import static org.mockito.Mockito.verify;
@@ -111,4 +114,79 @@ void getNearby() throws Exception {
111114
any(RecruitBoardNearByCondition.class));
112115
}
113116
}
117+
118+
@Test
119+
@DisplayName("특정 기관이 작성한 모집글을 검색 조건으로 페이징 조회 성공")
120+
void getRecruitBoardsByCenterId() throws Exception {
121+
// given
122+
UUID centerId = UUID.randomUUID();
123+
Page<RecruitBoardResponseDto> page = new PageImpl<>(Collections.emptyList());
124+
125+
if (elasticsearchHealthChecker.isElasticsearchRunning()) {
126+
given(recruitBoardDocumentUseCase
127+
.getRecruitBoardsByCenterIdWithKeyword(eq(centerId),
128+
any(RecruitBoardSearchCondition.class)))
129+
.willReturn(page);
130+
} else {
131+
given(recruitBoardQueryUseCase.getRecruitBoardsByCenterId(eq(centerId),
132+
any(RecruitBoardSearchCondition.class)))
133+
.willReturn(page);
134+
}
135+
136+
// when
137+
// then
138+
mockMvc.perform(get("/api/recruit-boards/center/{centerId}", centerId.toString())
139+
.param("keyword", "volunteer")
140+
.param("category", ADMINISTRATIVE_SUPPORT.name())
141+
.accept(MediaType.APPLICATION_JSON))
142+
.andExpect(status().isOk())
143+
.andExpect(jsonPath("$.code").value(200))
144+
.andExpect(jsonPath("$.data").exists())
145+
.andExpect(jsonPath("$.message").value("특정 기관 봉사 활동 모집글 조회 성공"));
146+
147+
if (elasticsearchHealthChecker.isElasticsearchRunning()) {
148+
verify(recruitBoardDocumentUseCase, times(1))
149+
.getRecruitBoardsByCenterIdWithKeyword(eq(centerId), any(RecruitBoardSearchCondition.class));
150+
} else {
151+
verify(recruitBoardQueryUseCase, times(1))
152+
.getRecruitBoardsByCenterId(eq(centerId), any(RecruitBoardSearchCondition.class));
153+
}
154+
}
155+
156+
@Test
157+
@MockUser(role = "ROLE_CENTER")
158+
@DisplayName("기관이 작성한 모집글을 검색 조건으로 페이징 조회 성공")
159+
void getMyRecruitBoards() throws Exception {
160+
// given
161+
Page<RecruitBoardResponseDto> page = new PageImpl<>(Collections.emptyList());
162+
163+
if (elasticsearchHealthChecker.isElasticsearchRunning()) {
164+
given(recruitBoardDocumentUseCase
165+
.getRecruitBoardsByCenterIdWithKeyword(any(),
166+
any(RecruitBoardSearchCondition.class)))
167+
.willReturn(page);
168+
} else {
169+
given(recruitBoardQueryUseCase.getRecruitBoardsByCenterId(any(),
170+
any(RecruitBoardSearchCondition.class)))
171+
.willReturn(page);
172+
}
173+
174+
// when
175+
// then
176+
mockMvc.perform(get("/api/recruit-boards/me")
177+
.param("keyword", "volunteer")
178+
.param("category", ADMINISTRATIVE_SUPPORT.name())
179+
.accept(MediaType.APPLICATION_JSON))
180+
.andExpect(status().isOk())
181+
.andExpect(jsonPath("$.data").exists())
182+
.andExpect(jsonPath("$.message").value("기관 봉사 활동 모집글 조회 성공"));
183+
184+
if (elasticsearchHealthChecker.isElasticsearchRunning()) {
185+
verify(recruitBoardDocumentUseCase, times(1))
186+
.getRecruitBoardsByCenterIdWithKeyword(any(), any(RecruitBoardSearchCondition.class));
187+
} else {
188+
verify(recruitBoardQueryUseCase, times(1))
189+
.getRecruitBoardsByCenterId(any(), any(RecruitBoardSearchCondition.class));
190+
}
191+
}
114192
}

src/test/java/com/somemore/domains/search/repository/SearchBoardRepositoryTest.java

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.somemore.domains.search.repository;
22

3-
import com.somemore.domains.center.domain.Center;
4-
import com.somemore.domains.center.repository.center.CenterRepository;
3+
import com.somemore.center.domain.NEWCenter;
4+
import com.somemore.center.repository.NEWCenterRepository;
55
import com.somemore.domains.community.domain.CommunityBoard;
66
import com.somemore.domains.community.repository.board.CommunityBoardRepository;
77
import com.somemore.domains.recruitboard.domain.RecruitBoard;
@@ -10,10 +10,9 @@
1010
import com.somemore.domains.recruitboard.repository.RecruitBoardRepository;
1111
import com.somemore.domains.search.domain.CommunityBoardDocument;
1212
import com.somemore.domains.search.domain.RecruitBoardDocument;
13-
import com.somemore.domains.volunteer.domain.Volunteer;
14-
import com.somemore.domains.volunteer.repository.VolunteerRepository;
15-
import com.somemore.global.auth.oauth.domain.OAuthProvider;
1613
import com.somemore.support.IntegrationTestSupport;
14+
import com.somemore.volunteer.domain.NEWVolunteer;
15+
import com.somemore.volunteer.repository.NEWVolunteerRepository;
1716
import org.junit.jupiter.api.AfterEach;
1817
import org.junit.jupiter.api.BeforeEach;
1918
import org.junit.jupiter.api.DisplayName;
@@ -25,7 +24,6 @@
2524
import org.springframework.test.context.junit.jupiter.EnabledIf;
2625
import org.springframework.transaction.annotation.Transactional;
2726

28-
import static com.somemore.support.fixture.CenterFixture.createCenter;
2927
import static com.somemore.support.fixture.RecruitBoardFixture.createRecruitBoard;
3028
import static org.assertj.core.api.Assertions.assertThat;
3129

@@ -44,22 +42,21 @@ class SearchBoardRepositoryTest extends IntegrationTestSupport {
4442
@Autowired
4543
private RecruitBoardRepository recruitBoardRepository;
4644
@Autowired
47-
private CenterRepository centerRepository;
45+
private NEWCenterRepository centerRepository;
4846
@Autowired
4947
private SearchBoardRepository searchBoardRepository;
5048
@Autowired
51-
private VolunteerRepository volunteerRepository;
49+
private NEWVolunteerRepository volunteerRepository;
5250

5351
private UUID writerId, centerId;
5452

5553
@BeforeEach
5654
void setUp() {
57-
String oAuthId1 = "example-oauth-id1";
58-
Volunteer volunteer1 = Volunteer.createDefault(OAuthProvider.NAVER, oAuthId1);
55+
NEWVolunteer volunteer1 = NEWVolunteer.createDefault(UUID.randomUUID());
5956
volunteerRepository.save(volunteer1);
6057
writerId = volunteer1.getId();
6158

62-
Center center = createCenter();
59+
NEWCenter center = NEWCenter.createDefault(UUID.randomUUID());
6360
centerRepository.save(center);
6461
centerId = center.getId();
6562
}
@@ -215,9 +212,9 @@ void findByRecruitBoardsContainingWithNull() {
215212

216213
//then
217214
assertThat(findBoards).isNotNull();
218-
assertThat(findBoards.getTotalElements()).isEqualTo(20);
215+
assertThat(findBoards.getTotalElements()).isEqualTo(5);
219216
assertThat(findBoards.getSize()).isEqualTo(5);
220-
assertThat(findBoards.getTotalPages()).isEqualTo(4);
217+
assertThat(findBoards.getTotalPages()).isEqualTo(1);
221218
}
222219

223220
@DisplayName("위치 기반으로 반경 내에 검색 키워드가 포함된 모집글을 조회할 수 있다. (elasticsearch)")
@@ -266,6 +263,48 @@ void findAllNearByLocationContainingWithNull() {
266263
assertThat(result.getContent()).isNotEmpty();
267264
}
268265

266+
@DisplayName("특정 센터의 검색 키워드가 포함된 모집글을 조회할 수 있다. (elasticsearch)")
267+
@Test
268+
void findAllByCenterIdWithKeyword() {
269+
//given
270+
Pageable pageable = getPageable(5);
271+
RecruitBoardSearchCondition condition = RecruitBoardSearchCondition.builder()
272+
.keyword("봉사")
273+
.pageable(pageable)
274+
.build();
275+
276+
//when
277+
Page<RecruitBoardDocument> findBoards = searchBoardRepository
278+
.findAllByCenterIdWithKeyword(UUID.fromString("2f5ea614-d7be-11ef-8ad6-0665912995d5"), condition);
279+
280+
//then
281+
assertThat(findBoards).isNotNull();
282+
assertThat(findBoards.getTotalElements()).isEqualTo(5);
283+
assertThat(findBoards.getSize()).isEqualTo(5);
284+
assertThat(findBoards.getTotalPages()).isEqualTo(1);
285+
}
286+
287+
@DisplayName("키워드 없이 검색 시 특정 센터가 작성한 모집글을 모두 조회할 수 있다. (elasticsearch)")
288+
@Test
289+
void findAllByCenterIdContainingWithNull() {
290+
//given
291+
Pageable pageable = getPageable(5);
292+
RecruitBoardSearchCondition condition = RecruitBoardSearchCondition.builder()
293+
.keyword(null)
294+
.pageable(pageable)
295+
.build();
296+
297+
//when
298+
Page<RecruitBoardDocument> findBoards = searchBoardRepository
299+
.findAllByCenterIdWithKeyword(UUID.fromString("2f5ea614-d7be-11ef-8ad6-0665912995d5"), condition);
300+
301+
//then
302+
assertThat(findBoards).isNotNull();
303+
assertThat(findBoards.getTotalElements()).isEqualTo(5);
304+
assertThat(findBoards.getSize()).isEqualTo(5);
305+
assertThat(findBoards.getTotalPages()).isEqualTo(1);
306+
}
307+
269308
private Pageable getPageable(int size) {
270309
return PageRequest.of(0, size);
271310
}

src/test/java/com/somemore/domains/search/service/CommunityBoardDocumentServiceTest.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@
44
import com.somemore.domains.community.dto.response.CommunityBoardResponseDto;
55
import com.somemore.domains.community.repository.board.CommunityBoardRepository;
66
import com.somemore.domains.search.repository.SearchBoardRepository;
7-
import com.somemore.domains.volunteer.domain.Volunteer;
8-
import com.somemore.domains.volunteer.repository.VolunteerRepository;
9-
import com.somemore.global.auth.oauth.domain.OAuthProvider;
107
import com.somemore.support.IntegrationTestSupport;
8+
import com.somemore.volunteer.domain.NEWVolunteer;
9+
import com.somemore.volunteer.repository.NEWVolunteerRepository;
1110
import org.junit.jupiter.api.AfterEach;
1211
import org.junit.jupiter.api.BeforeEach;
1312
import org.junit.jupiter.api.DisplayName;
@@ -36,16 +35,15 @@ class CommunityBoardDocumentServiceTest extends IntegrationTestSupport {
3635
@Autowired
3736
private CommunityBoardRepository communityBoardRepository;
3837
@Autowired
39-
private VolunteerRepository volunteerRepository;
38+
private NEWVolunteerRepository volunteerRepository;
4039

4140
private UUID volunteerId;
4241

4342
@BeforeEach
4443
void setUp() {
4544
List<CommunityBoard> communityBoards = new ArrayList<>();
4645

47-
String oAuthId1 = "example-oauth-id1";
48-
Volunteer volunteer = Volunteer.createDefault(OAuthProvider.NAVER, oAuthId1);
46+
NEWVolunteer volunteer = NEWVolunteer.createDefault(UUID.randomUUID());
4947
volunteerRepository.save(volunteer);
5048
volunteerId = volunteer.getId();
5149

0 commit comments

Comments
 (0)