@@ -2,18 +2,21 @@ package org.rooftop.netx.engine
22
33import io.jsonwebtoken.JwtException
44import io.kotest.assertions.nondeterministic.eventually
5+ import io.kotest.assertions.throwables.shouldThrowExactly
56import io.kotest.assertions.throwables.shouldThrowWithMessage
67import io.kotest.core.annotation.DisplayName
78import io.kotest.core.spec.style.DescribeSpec
89import io.kotest.matchers.equality.shouldBeEqualToComparingFields
910import io.kotest.matchers.equals.shouldBeEqual
1011import org.rooftop.netx.api.Orchestrator
12+ import org.rooftop.netx.api.ResultException
1113import org.rooftop.netx.api.TypeReference
1214import org.rooftop.netx.meta.EnableSaga
1315import org.rooftop.netx.redis.RedisContainer
1416import org.springframework.beans.factory.annotation.Qualifier
1517import org.springframework.test.context.ContextConfiguration
1618import org.springframework.test.context.TestPropertySource
19+ import org.springframework.web.client.HttpClientErrorException
1720import java.time.Instant
1821import kotlin.time.Duration.Companion.seconds
1922
@@ -45,6 +48,7 @@ internal class OrchestratorTest(
4548 @Qualifier(" throwOnJoinWithContextOrchestrator" ) private val throwOnJoinWithContextOrchestrator : Orchestrator <List <Home >, List <Home >>,
4649 @Qualifier(" throwOnCommitWithContextOrchestrator" ) private val throwOnCommitWithContextOrchestrator : Orchestrator <List <Home >, List <Home >>,
4750 @Qualifier(" throwJwtExceptionOnStartOrchestrator" ) private val throwJwtExceptionOnStartOrchestrator : Orchestrator <String , String >,
51+ @Qualifier(" throwHttpClientErrorExceptionOnStartOrchestrator" ) private val throwHttpClientErrorExceptionOnStartOrchestrator : Orchestrator <String , String >,
4852) : DescribeSpec({
4953
5054 describe("numberOrchestrator 구현채는") {
@@ -259,7 +263,7 @@ internal class OrchestratorTest(
259263 it("해당 예외를 Result 에서 throw한다.") {
260264 shouldThrowWithMessage<IllegalArgumentException >("Throw error for test.") {
261265 throwOnStartWithContextOrchestrator.sagaSync(listOf())
262- .decodeResultOrThrow(object: TypeReference <List <Home >>(){})
266+ .decodeResultOrThrow(object : TypeReference <List <Home >>() {})
263267 }
264268 }
265269 }
@@ -270,7 +274,7 @@ internal class OrchestratorTest(
270274 it("해당 예외를 Result 에서 throw한다.") {
271275 shouldThrowWithMessage<IllegalArgumentException >("Throw error for test.") {
272276 throwOnJoinWithContextOrchestrator.sagaSync(listOf())
273- .decodeResultOrThrow(object: TypeReference <List <Home >>(){})
277+ .decodeResultOrThrow(object : TypeReference <List <Home >>() {})
274278 }
275279 }
276280 }
@@ -281,7 +285,7 @@ internal class OrchestratorTest(
281285 it("해당 예외를 Result 에서 throw한다.") {
282286 shouldThrowWithMessage<IllegalArgumentException >("Throw error for test.") {
283287 throwOnCommitWithContextOrchestrator.sagaSync(listOf())
284- .decodeResultOrThrow(object: TypeReference <List <Home >>(){})
288+ .decodeResultOrThrow(object : TypeReference <List <Home >>() {})
285289 }
286290 }
287291 }
@@ -297,6 +301,17 @@ internal class OrchestratorTest(
297301 }
298302 }
299303 }
304+
305+ describe("throwHttpClientErrorExceptionOnStartOrchestrator 구현채는") {
306+ context("처리할 수 없는 HttpClientErrorException 이 던져지면") {
307+ it("ResultException 을 Result 에 담고 timeout시간안에 예외를 반환한다") {
308+ shouldThrowExactly<ResultException > {
309+ throwHttpClientErrorExceptionOnStartOrchestrator.sagaSync("")
310+ .decodeResultOrThrow(String ::class)
311+ }
312+ }
313+ }
314+ }
300315}) {
301316 data class Home (
302317 val address : String ,
0 commit comments