Skip to content

Commit fc8dcc1

Browse files
chore(internal): improve RetryingHttpClientTest (#731)
1 parent c3c0560 commit fc8dcc1

File tree

1 file changed

+53
-33
lines changed

1 file changed

+53
-33
lines changed

increase-java-core/src/test/kotlin/com/increase/api/core/http/RetryingHttpClientTest.kt

Lines changed: 53 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import com.github.tomakehurst.wiremock.stubbing.Scenario
77
import com.increase.api.client.okhttp.OkHttpClient
88
import org.assertj.core.api.Assertions.assertThat
99
import org.junit.jupiter.api.BeforeEach
10-
import org.junit.jupiter.api.Test
1110
import org.junit.jupiter.params.ParameterizedTest
1211
import 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

Comments
 (0)