@@ -2,6 +2,7 @@ package com.app.server.challenge_certification.application.usecase
22
33import com.app.server.IntegrationTestContainer
44import com.app.server.challenge.application.service.ChallengeService
5+ import com.app.server.challenge_certification.enums.EUserCertificatedResultCode
56import com.app.server.challenge_certification.infra.CertificationInfraService
67import com.app.server.challenge_certification.ui.dto.CertificationRequestDto
78import com.app.server.challenge_certification.ui.dto.SendToCertificationServerRequestDto
@@ -21,7 +22,6 @@ import org.junit.jupiter.api.BeforeEach
2122import org.junit.jupiter.api.DisplayName
2223import org.junit.jupiter.api.assertThrows
2324import org.junit.jupiter.api.extension.ExtendWith
24- import org.mockito.ArgumentMatchers.any
2525import org.mockito.BDDMockito.given
2626import org.springframework.beans.factory.annotation.Autowired
2727import org.springframework.boot.test.context.SpringBootTest
@@ -83,7 +83,9 @@ class CertificationUseCaseTest : IntegrationTestContainer() {
8383 challengeDescription = challenge.description
8484 )
8585
86- given(certificationInfraService.certificate(sendToCertificationServerRequestDto)).willReturn(true )
86+ given(certificationInfraService.certificate(sendToCertificationServerRequestDto)).willReturn(
87+ EUserCertificatedResultCode .SUCCESS_CERTIFICATED
88+ )
8789 }
8890
8991 @AfterEach
@@ -155,7 +157,9 @@ class CertificationUseCaseTest : IntegrationTestContainer() {
155157 @DisplayName(" 챌린지 인증에 성공하면 해당 날짜의 인증 상태를 변경할 수 있다." )
156158 fun completeChallenge () {
157159 // given
158- given(certificationInfraService.certificate(sendToCertificationServerRequestDto)).willReturn(true )
160+ given(certificationInfraService.certificate(sendToCertificationServerRequestDto)).willReturn(
161+ EUserCertificatedResultCode .SUCCESS_CERTIFICATED
162+ )
159163
160164 // when
161165 val todayUserChallenge : UserChallenge =
@@ -168,7 +172,9 @@ class CertificationUseCaseTest : IntegrationTestContainer() {
168172 @DisplayName(" 챌린지 인증에 성공하면 전체 참여 일수가 증가한다." )
169173 fun completeChallengeWithIncreasingParticipationDays () {
170174 // given
171- given(certificationInfraService.certificate(sendToCertificationServerRequestDto)).willReturn(true )
175+ given(certificationInfraService.certificate(sendToCertificationServerRequestDto)).willReturn(
176+ EUserCertificatedResultCode .SUCCESS_CERTIFICATED
177+ )
172178 val pastUserChallenge : UserChallenge = makeUserChallengeAndHistory(participantsStartDate.minusDays(1 ))
173179
174180 // when
@@ -184,7 +190,9 @@ class CertificationUseCaseTest : IntegrationTestContainer() {
184190 @DisplayName(" 챌린지에 처음 인증에 성공했다면, 연속 참여 일수가 증가한다." )
185191 fun completeChallengeFirstTryWithIncreasingConsecutiveParticipationDays () {
186192 // given
187- given(certificationInfraService.certificate(sendToCertificationServerRequestDto)).willReturn(true )
193+ given(certificationInfraService.certificate(sendToCertificationServerRequestDto)).willReturn(
194+ EUserCertificatedResultCode .SUCCESS_CERTIFICATED
195+ )
188196 val pastUserChallenge : UserChallenge ? = makeUserChallengeAndHistory(participantsStartDate.minusDays(1 ))
189197
190198 // when
@@ -200,8 +208,9 @@ class CertificationUseCaseTest : IntegrationTestContainer() {
200208 @DisplayName(" 챌린지 인증에 성공했을 때 연속 참여 조건을 만족한다면 연속 참여 일수가 증가한다." )
201209 fun completeChallengeWithIncreasingConsecutiveParticipationDays () {
202210 // given
203- given(certificationInfraService.certificate(sendToCertificationServerRequestDto)).willReturn(true )
204-
211+ given(certificationInfraService.certificate(sendToCertificationServerRequestDto)).willReturn(
212+ EUserCertificatedResultCode .SUCCESS_CERTIFICATED
213+ )
205214 val certificationDate: LocalDate = LocalDate .now()
206215 val afterCertificationDate: LocalDate = LocalDate .now().plusDays(1 )
207216 val todayUserChallenge : UserChallenge =
@@ -221,7 +230,9 @@ class CertificationUseCaseTest : IntegrationTestContainer() {
221230 @DisplayName(" 챌린지 인증에 성공했을 때 연속 참여 조건을 만족하지 않는다면 연속 참여 일수가 초기화된다." )
222231 fun completeChallengeWithResettingConsecutiveParticipationDays () {
223232 // given
224- given(certificationInfraService.certificate(sendToCertificationServerRequestDto)).willReturn(true )
233+ given(certificationInfraService.certificate(sendToCertificationServerRequestDto)).willReturn(
234+ EUserCertificatedResultCode .SUCCESS_CERTIFICATED
235+ )
225236 val certificationDate: LocalDate = LocalDate .now()
226237 val afterCertificationDate: LocalDate = LocalDate .now().plusDays(2 )
227238 val todayUserChallenge : UserChallenge =
@@ -238,9 +249,9 @@ class CertificationUseCaseTest : IntegrationTestContainer() {
238249 @DisplayName(" 챌린지 인증에 실패하면 인증 실패임을 알린다." )
239250 fun failCertificated () {
240251 // given
241- given(certificationInfraService.certificate(any())) .willReturn(false )
242-
243-
252+ given(certificationInfraService.certificate(sendToCertificationServerRequestDto)) .willReturn(
253+ EUserCertificatedResultCode . CERTIFICATED_FAILED
254+ )
244255 // when & then
245256 val exception = assertThrows<BadRequestException >{
246257 certificationUseCase.certificateChallengeWithDate(
@@ -250,4 +261,26 @@ class CertificationUseCaseTest : IntegrationTestContainer() {
250261 }
251262 assertThat(exception.message).isEqualTo(UserChallengeException .FAILED_CERTIFICATION .message)
252263 }
264+
265+ @Test
266+ @DisplayName(" 오늘 인증한 챌린지에 대해 인증을 시도하면 예외가 발생한다." )
267+ fun alreadyCertificatedToday () {
268+ // given
269+ given(certificationInfraService.certificate(sendToCertificationServerRequestDto)).willReturn(
270+ EUserCertificatedResultCode .SUCCESS_CERTIFICATED
271+ )
272+ certificationUseCase.certificateChallengeWithDate(
273+ certificationRequestDto = certificationRequestDto,
274+ certificationDate = participantsStartDate
275+ )
276+
277+ // when & then
278+ val exception = assertThrows<BadRequestException > {
279+ certificationUseCase.certificateChallengeWithDate(
280+ certificationRequestDto = certificationRequestDto,
281+ certificationDate = participantsStartDate
282+ )
283+ }
284+ assertThat(exception.message).isEqualTo(UserChallengeException .ALREADY_CERTIFICATED .message)
285+ }
253286}
0 commit comments