Skip to content

Commit 875f574

Browse files
committed
♻️ refactor(certification) : Certification 서버에서 받은 응답에 따라 분기되는 작업 코드 리팩토링
Boolean 대신 상태를 나타내는 코드를 반환하도록 수정
1 parent 262d988 commit 875f574

File tree

4 files changed

+67
-17
lines changed

4 files changed

+67
-17
lines changed

server/src/main/kotlin/com/app/server/challenge_certification/application/service/CertificationFacadeService.kt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.app.server.challenge_certification.application.service
22

33
import com.app.server.challenge_certification.application.dto.CertificationFacadeToServiceDto
4+
import com.app.server.challenge_certification.enums.EUserCertificatedResultCode
45
import com.app.server.challenge_certification.infra.CertificationInfraService
56
import com.app.server.challenge_certification.ui.dto.CertificationRequestDto
67
import com.app.server.challenge_certification.ui.dto.UserChallengeIceRequestDto
@@ -29,13 +30,17 @@ class CertificationFacadeService(
2930

3031
val userChallenge = userChallengeService.findById(certificationRequestDto.userChallengeId)
3132

32-
if (!certificationInfraService.certificate(
33-
sendToCertificationServerRequestDto = certificationRequestDto.toSendToCertificationServerRequestDto(
34-
userChallenge.challenge
35-
)
33+
val certificateResult : EUserCertificatedResultCode = certificationInfraService.certificate(
34+
sendToCertificationServerRequestDto = certificationRequestDto.toSendToCertificationServerRequestDto(
35+
userChallenge.challenge
3636
)
37-
) {
38-
throw BadRequestException(UserChallengeException.FAILED_CERTIFICATION)
37+
)
38+
39+
when (certificateResult)
40+
{
41+
EUserCertificatedResultCode.CERTIFICATED_FAILED -> throw BadRequestException(UserChallengeException.FAILED_CERTIFICATION)
42+
EUserCertificatedResultCode.SUCCESS_CERTIFICATED -> {}
43+
else -> throw BadRequestException(UserChallengeException.ERROR_IN_CERTIFICATED_SERVER)
3944
}
4045

4146
val certificationFacadeToServiceDto =
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.app.server.challenge_certification.enums
2+
3+
enum class EUserCertificatedResultCode (
4+
val message: String,
5+
){
6+
7+
SUCCESS_CERTIFICATED("인증 성공"),
8+
CERTIFICATED_FAILED("인증 실패"),
9+
ERROR_IN_CERTIFICATED_SERVER("인증 서버 오류"),
10+
11+
}

server/src/main/kotlin/com/app/server/user_challenge/domain/exception/UserChallengeException.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ enum class UserChallengeException(
1717
FAILED_CERTIFICATION("UCH008", "인증에 실패했습니다."),
1818
CANNOT_USE_ICE("UCH009", "얼리기 기회가 없어 사용이 불가합니다."),
1919
CANNOT_UPDATE_CONSECUTIVE_PARTICIPATION_DAY_COUNT("UCH010", "연속 참여일 수를 업데이트할 수 없습니다."),
20+
ERROR_IN_CERTIFICATED_SERVER("UCH011", "챌린지 인증 서버 오류입니다."),
2021
;
2122

2223
}

server/src/test/kotlin/com/app/server/challenge_certification/application/usecase/CertificationUseCaseTest.kt

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.app.server.challenge_certification.application.usecase
22

33
import com.app.server.IntegrationTestContainer
44
import com.app.server.challenge.application.service.ChallengeService
5+
import com.app.server.challenge_certification.enums.EUserCertificatedResultCode
56
import com.app.server.challenge_certification.infra.CertificationInfraService
67
import com.app.server.challenge_certification.ui.dto.CertificationRequestDto
78
import com.app.server.challenge_certification.ui.dto.SendToCertificationServerRequestDto
@@ -21,7 +22,6 @@ import org.junit.jupiter.api.BeforeEach
2122
import org.junit.jupiter.api.DisplayName
2223
import org.junit.jupiter.api.assertThrows
2324
import org.junit.jupiter.api.extension.ExtendWith
24-
import org.mockito.ArgumentMatchers.any
2525
import org.mockito.BDDMockito.given
2626
import org.springframework.beans.factory.annotation.Autowired
2727
import 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

Comments
 (0)