@@ -7,7 +7,6 @@ import com.github.tomakehurst.wiremock.stubbing.Scenario
77import com.increase.api.client.okhttp.OkHttpClient
88import org.assertj.core.api.Assertions.assertThat
99import org.junit.jupiter.api.BeforeEach
10- import org.junit.jupiter.api.Test
1110import org.junit.jupiter.params.ParameterizedTest
1211import org.junit.jupiter.params.provider.ValueSource
1312
@@ -22,21 +21,25 @@ internal class RetryingHttpClientTest {
2221 resetAllScenarios()
2322 }
2423
25- @Test
26- fun byDefaultShouldNotAddIdempotencyHeaderToRequest () {
27- val request =
28- HttpRequest .builder().method(HttpMethod .POST ).addPathSegment(" something" ).build()
24+ @ParameterizedTest
25+ @ValueSource(booleans = [false , true ])
26+ fun execute (async : Boolean ) {
2927 stubFor(post(urlPathEqualTo(" /something" )).willReturn(ok()))
3028 val retryingClient = RetryingHttpClient .builder().httpClient(httpClient).build()
31- val response = retryingClient.execute(request)
29+
30+ val response =
31+ retryingClient.execute(
32+ HttpRequest .builder().method(HttpMethod .POST ).addPathSegment(" something" ).build(),
33+ async
34+ )
35+
3236 assertThat(response.statusCode()).isEqualTo(200 )
3337 verify(1 , postRequestedFor(urlPathEqualTo(" /something" )))
3438 }
3539
36- @Test
37- fun whenProvidedShouldAddIdempotencyHeaderToRequest () {
38- val request =
39- HttpRequest .builder().method(HttpMethod .POST ).addPathSegment(" something" ).build()
40+ @ParameterizedTest
41+ @ValueSource(booleans = [false , true ])
42+ fun execute_withIdempotencyHeader (async : Boolean ) {
4043 stubFor(
4144 post(urlPathEqualTo(" /something" ))
4245 .withHeader(" X-Some-Header" , matching(" stainless-java-retry-.+" ))
@@ -48,19 +51,24 @@ internal class RetryingHttpClientTest {
4851 .maxRetries(2 )
4952 .idempotencyHeader(" X-Some-Header" )
5053 .build()
51- val response = retryingClient.execute(request)
54+
55+ val response =
56+ retryingClient.execute(
57+ HttpRequest .builder().method(HttpMethod .POST ).addPathSegment(" something" ).build(),
58+ async
59+ )
60+
5261 assertThat(response.statusCode()).isEqualTo(200 )
5362 verify(1 , postRequestedFor(urlPathEqualTo(" /something" )))
5463 }
5564
5665 @ParameterizedTest
5766 @ValueSource(booleans = [false , true ])
58- fun retryAfterHeader (async : Boolean ) {
59- val request =
60- HttpRequest .builder().method(HttpMethod .POST ).addPathSegment(" something" ).build()
67+ fun execute_withRetryAfterHeader (async : Boolean ) {
6168 stubFor(
6269 post(urlPathEqualTo(" /something" ))
63- .inScenario(" foo" ) // first we fail with a retry after header given as a date
70+ // First we fail with a retry after header given as a date
71+ .inScenario(" foo" )
6472 .whenScenarioStateIs(Scenario .STARTED )
6573 .willReturn(
6674 serviceUnavailable().withHeader(" Retry-After" , " Wed, 21 Oct 2015 07:28:00 GMT" )
@@ -69,14 +77,16 @@ internal class RetryingHttpClientTest {
6977 )
7078 stubFor(
7179 post(urlPathEqualTo(" /something" ))
72- .inScenario(" foo" ) // then we fail with a retry after header given as a delay
80+ // Then we fail with a retry after header given as a delay
81+ .inScenario(" foo" )
7382 .whenScenarioStateIs(" RETRY_AFTER_DATE" )
7483 .willReturn(serviceUnavailable().withHeader(" Retry-After" , " 1.234" ))
7584 .willSetStateTo(" RETRY_AFTER_DELAY" )
7685 )
7786 stubFor(
7887 post(urlPathEqualTo(" /something" ))
79- .inScenario(" foo" ) // then we return a success
88+ // Then we return a success
89+ .inScenario(" foo" )
8090 .whenScenarioStateIs(" RETRY_AFTER_DELAY" )
8191 .willReturn(ok())
8292 .willSetStateTo(" COMPLETED" )
@@ -85,8 +95,10 @@ internal class RetryingHttpClientTest {
8595 RetryingHttpClient .builder().httpClient(httpClient).maxRetries(2 ).build()
8696
8797 val response =
88- if (async) retryingClient.executeAsync(request).get()
89- else retryingClient.execute(request)
98+ retryingClient.execute(
99+ HttpRequest .builder().method(HttpMethod .POST ).addPathSegment(" something" ).build(),
100+ async
101+ )
90102
91103 assertThat(response.statusCode()).isEqualTo(200 )
92104 verify(
@@ -108,13 +120,7 @@ internal class RetryingHttpClientTest {
108120
109121 @ParameterizedTest
110122 @ValueSource(booleans = [false , true ])
111- fun overwriteRetryCountHeader (async : Boolean ) {
112- val request =
113- HttpRequest .builder()
114- .method(HttpMethod .POST )
115- .addPathSegment(" something" )
116- .putHeader(" x-stainless-retry-count" , " 42" )
117- .build()
123+ fun execute_withOverwrittenRetryCountHeader (async : Boolean ) {
118124 stubFor(
119125 post(urlPathEqualTo(" /something" ))
120126 .inScenario(" foo" ) // first we fail with a retry after header given as a date
@@ -135,8 +141,14 @@ internal class RetryingHttpClientTest {
135141 RetryingHttpClient .builder().httpClient(httpClient).maxRetries(2 ).build()
136142
137143 val response =
138- if (async) retryingClient.executeAsync(request).get()
139- else retryingClient.execute(request)
144+ retryingClient.execute(
145+ HttpRequest .builder()
146+ .method(HttpMethod .POST )
147+ .addPathSegment(" something" )
148+ .putHeader(" x-stainless-retry-count" , " 42" )
149+ .build(),
150+ async
151+ )
140152
141153 assertThat(response.statusCode()).isEqualTo(200 )
142154 verify(
@@ -146,10 +158,9 @@ internal class RetryingHttpClientTest {
146158 )
147159 }
148160
149- @Test
150- fun retryAfterMsHeader () {
151- val request =
152- HttpRequest .builder().method(HttpMethod .POST ).addPathSegment(" something" ).build()
161+ @ParameterizedTest
162+ @ValueSource(booleans = [false , true ])
163+ fun execute_withRetryAfterMsHeader (async : Boolean ) {
153164 stubFor(
154165 post(urlPathEqualTo(" /something" ))
155166 .inScenario(" foo" )
@@ -166,8 +177,17 @@ internal class RetryingHttpClientTest {
166177 )
167178 val retryingClient =
168179 RetryingHttpClient .builder().httpClient(httpClient).maxRetries(1 ).build()
169- val response = retryingClient.execute(request)
180+
181+ val response =
182+ retryingClient.execute(
183+ HttpRequest .builder().method(HttpMethod .POST ).addPathSegment(" something" ).build(),
184+ async
185+ )
186+
170187 assertThat(response.statusCode()).isEqualTo(200 )
171188 verify(2 , postRequestedFor(urlPathEqualTo(" /something" )))
172189 }
190+
191+ private fun HttpClient.execute (request : HttpRequest , async : Boolean ): HttpResponse =
192+ if (async) executeAsync(request).get() else execute(request)
173193}
0 commit comments