|
1 | 1 | package com.somemore.recruitboard.domain; |
2 | 2 |
|
| 3 | +import static com.somemore.common.fixture.LocalDateTimeFixture.createCurrentDateTime; |
3 | 4 | import static com.somemore.common.fixture.LocalDateTimeFixture.createStartDateTime; |
4 | 5 | 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; |
5 | 8 | import static com.somemore.recruitboard.domain.RecruitStatus.RECRUITING; |
6 | 9 | import static com.somemore.recruitboard.domain.VolunteerType.OTHER; |
7 | 10 | import static org.assertj.core.api.Assertions.assertThat; |
| 11 | +import static org.assertj.core.api.Assertions.assertThatThrownBy; |
8 | 12 |
|
9 | 13 | import com.somemore.recruitboard.dto.request.RecruitBoardUpdateRequestDto; |
10 | 14 | import java.time.LocalDateTime; |
11 | 15 | import java.time.LocalTime; |
12 | 16 | import java.util.UUID; |
13 | 17 | import org.junit.jupiter.api.DisplayName; |
14 | 18 | import org.junit.jupiter.api.Test; |
| 19 | +import org.junit.jupiter.params.ParameterizedTest; |
| 20 | +import org.junit.jupiter.params.provider.ValueSource; |
15 | 21 |
|
16 | 22 | class RecruitBoardTest { |
17 | 23 |
|
@@ -120,6 +126,70 @@ void isNotWriterWithWrongCenterId() { |
120 | 126 | assertThat(isWriter).isFalse(); |
121 | 127 | } |
122 | 128 |
|
| 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 | + } |
123 | 193 |
|
124 | 194 | private static RecruitBoard createRecruitBoard(UUID centerId) { |
125 | 195 | LocalDateTime startDateTime = createStartDateTime(); |
@@ -149,4 +219,5 @@ private static RecruitBoard createRecruitBoard(UUID centerId, LocalDateTime star |
149 | 219 | .recruitmentInfo(recruitmentInfo) |
150 | 220 | .build(); |
151 | 221 | } |
| 222 | + |
152 | 223 | } |
0 commit comments