Skip to content

Commit de3f138

Browse files
committed
test(recruit-board): 모집글 상태 변경 기능 테스트
1 parent 5def5cc commit de3f138

File tree

3 files changed

+97
-2
lines changed

3 files changed

+97
-2
lines changed

src/test/java/com/somemore/common/fixture/LocalDateTimeFixture.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,9 @@ public static LocalDateTime createUpdateStartDateTime() {
1717
return LocalDateTime.of(2024, 11, 25, 16, 0);
1818
}
1919

20+
public static LocalDateTime createCurrentDateTime() {
21+
// 2024-11-24 T:18:00:00
22+
return LocalDateTime.of(2024, 11, 24, 18, 0);
23+
}
24+
2025
}

src/test/java/com/somemore/recruitboard/domain/RecruitBoardTest.java

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
package com.somemore.recruitboard.domain;
22

3+
import static com.somemore.common.fixture.LocalDateTimeFixture.createCurrentDateTime;
34
import static com.somemore.common.fixture.LocalDateTimeFixture.createStartDateTime;
45
import static com.somemore.common.fixture.LocalDateTimeFixture.createUpdateStartDateTime;
6+
import static com.somemore.recruitboard.domain.RecruitStatus.CLOSED;
7+
import static com.somemore.recruitboard.domain.RecruitStatus.COMPLETED;
58
import static com.somemore.recruitboard.domain.RecruitStatus.RECRUITING;
69
import static com.somemore.recruitboard.domain.VolunteerType.OTHER;
710
import static org.assertj.core.api.Assertions.assertThat;
11+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
812

913
import com.somemore.recruitboard.dto.request.RecruitBoardUpdateRequestDto;
1014
import java.time.LocalDateTime;
1115
import java.time.LocalTime;
1216
import java.util.UUID;
1317
import org.junit.jupiter.api.DisplayName;
1418
import org.junit.jupiter.api.Test;
19+
import org.junit.jupiter.params.ParameterizedTest;
20+
import org.junit.jupiter.params.provider.ValueSource;
1521

1622
class RecruitBoardTest {
1723

@@ -120,6 +126,70 @@ void isNotWriterWithWrongCenterId() {
120126
assertThat(isWriter).isFalse();
121127
}
122128

129+
@DisplayName("모집글 상태를 모집중에서 모집 마감으로 변경할 수 있다")
130+
@Test
131+
void changeStatusFromRecruitingToClose() {
132+
// given
133+
UUID centerId = UUID.randomUUID();
134+
RecruitBoard recruitBoard = createRecruitBoard(centerId);
135+
RecruitStatus newStatus = CLOSED;
136+
LocalDateTime currentDateTime = createCurrentDateTime();
137+
138+
// when
139+
recruitBoard.changeStatus(newStatus, currentDateTime);
140+
141+
// then
142+
assertThat(recruitBoard.getRecruitStatus()).isEqualTo(newStatus);
143+
}
144+
145+
@DisplayName("모집글 상태를 모집마감에서 모집중으로 변경할 수 있다")
146+
@Test
147+
void changeStatusFromCloseToRecruiting() {
148+
// given
149+
UUID centerId = UUID.randomUUID();
150+
RecruitBoard recruitBoard = createRecruitBoard(centerId);
151+
LocalDateTime currentDateTime = createCurrentDateTime();
152+
recruitBoard.changeStatus(CLOSED, currentDateTime);
153+
RecruitStatus newStatus = RECRUITING;
154+
155+
// when
156+
recruitBoard.changeStatus(newStatus, currentDateTime);
157+
158+
// then
159+
assertThat(recruitBoard.getRecruitStatus()).isEqualTo(newStatus);
160+
}
161+
162+
@DisplayName("모집글 상태는 마감으로 변경할 수 없다")
163+
@Test
164+
void changeStatusWhenInvalidStatus() {
165+
// given
166+
UUID centerId = UUID.randomUUID();
167+
RecruitBoard recruitBoard = createRecruitBoard(centerId);
168+
LocalDateTime currentDateTime = createCurrentDateTime();
169+
170+
// when & then
171+
assertThatThrownBy(() -> recruitBoard.changeStatus(COMPLETED, currentDateTime))
172+
.isInstanceOf(IllegalArgumentException.class);
173+
}
174+
175+
@DisplayName("봉사 시작일 자정 이후 모집 상태를 변경할 경우 에러가 발생한다")
176+
@ParameterizedTest
177+
@ValueSource(longs = {0, 1})
178+
void changeStatusWhenDeadLineAfter(Long secondsOffset) {
179+
// given
180+
UUID centerId = UUID.randomUUID();
181+
RecruitBoard recruitBoard = createRecruitBoard(centerId);
182+
LocalDateTime deadLineDateTime = recruitBoard.getRecruitmentInfo()
183+
.getVolunteerStartDateTime().toLocalDate().atStartOfDay();
184+
LocalDateTime currentDateTime = deadLineDateTime.plusSeconds(secondsOffset);
185+
186+
// when
187+
// then
188+
assertThatThrownBy(
189+
() -> recruitBoard.changeStatus(CLOSED, currentDateTime)
190+
).isInstanceOf(IllegalStateException.class);
191+
192+
}
123193

124194
private static RecruitBoard createRecruitBoard(UUID centerId) {
125195
LocalDateTime startDateTime = createStartDateTime();
@@ -149,4 +219,5 @@ private static RecruitBoard createRecruitBoard(UUID centerId, LocalDateTime star
149219
.recruitmentInfo(recruitmentInfo)
150220
.build();
151221
}
222+
152223
}

src/test/java/com/somemore/recruitboard/service/command/UpdateRecruitBoardServiceTest.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.somemore.recruitboard.service.command;
22

3+
import static com.somemore.common.fixture.LocalDateTimeFixture.createCurrentDateTime;
34
import static com.somemore.common.fixture.LocalDateTimeFixture.createStartDateTime;
45
import static com.somemore.common.fixture.LocalDateTimeFixture.createUpdateStartDateTime;
56
import static com.somemore.recruitboard.domain.VolunteerType.ADMINISTRATIVE_SUPPORT;
@@ -11,6 +12,7 @@
1112
import com.somemore.location.domain.Location;
1213
import com.somemore.location.repository.LocationRepository;
1314
import com.somemore.recruitboard.domain.RecruitBoard;
15+
import com.somemore.recruitboard.domain.RecruitStatus;
1416
import com.somemore.recruitboard.domain.RecruitmentInfo;
1517
import com.somemore.recruitboard.dto.request.RecruitBoardLocationUpdateRequestDto;
1618
import com.somemore.recruitboard.dto.request.RecruitBoardUpdateRequestDto;
@@ -37,12 +39,11 @@ class UpdateRecruitBoardServiceTest extends IntegrationTestSupport {
3739
private LocationRepository locationRepository;
3840

3941
private RecruitBoard recruitBoard;
40-
private Location location;
4142
private UUID centerId;
4243

4344
@BeforeEach
4445
void setUp() {
45-
location = createLocation();
46+
Location location = createLocation();
4647
locationRepository.saveAndFlush(location);
4748
centerId = UUID.randomUUID();
4849
recruitBoard = createRecruitBoard(centerId, location.getId());
@@ -150,6 +151,24 @@ void updateRecruitBoardWhenCenterIdIsWrong() {
150151

151152
}
152153

154+
@DisplayName("봉사 모집글 상태를 변경할 수 있다")
155+
@Test
156+
void updateRecruitBoardStatus() {
157+
// given
158+
Long recruitBoardId = recruitBoard.getId();
159+
UUID centerId = recruitBoard.getCenterId();
160+
RecruitStatus newStatus = RecruitStatus.CLOSED;
161+
LocalDateTime currentDateTime = createCurrentDateTime();
162+
163+
// when
164+
updateRecruitBoardService.updateRecruitBoardStatus(newStatus, recruitBoardId, centerId,
165+
currentDateTime);
166+
167+
// then
168+
RecruitBoard findBoard = recruitBoardRepository.findById(recruitBoardId).orElseThrow();
169+
assertThat(findBoard.getRecruitStatus()).isEqualTo(newStatus);
170+
}
171+
153172
private static RecruitBoard createRecruitBoard(UUID centerId, Long locationId) {
154173
LocalDateTime startDateTime = createStartDateTime();
155174
LocalDateTime endDateTime = startDateTime.plusHours(1);

0 commit comments

Comments
 (0)