Skip to content

Commit f86e1f2

Browse files
fix(client): allow updating header/query affecting fields in toBuilder()
1 parent 993657b commit f86e1f2

2 files changed

Lines changed: 27 additions & 3 deletions

File tree

arcade-java-core/src/main/kotlin/dev/arcade/core/ClientOptions.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -453,13 +453,14 @@ private constructor(
453453
headers.put("X-Stainless-Runtime", "JRE")
454454
headers.put("X-Stainless-Runtime-Version", getJavaVersion())
455455
headers.put("X-Stainless-Kotlin-Version", KotlinVersion.CURRENT.toString())
456+
// We replace after all the default headers to allow end-users to overwrite them.
457+
headers.replaceAll(this.headers.build())
458+
queryParams.replaceAll(this.queryParams.build())
456459
apiKey.let {
457460
if (!it.isEmpty()) {
458-
headers.put("Authorization", it)
461+
headers.replace("Authorization", it)
459462
}
460463
}
461-
headers.replaceAll(this.headers.build())
462-
queryParams.replaceAll(this.queryParams.build())
463464

464465
return ClientOptions(
465466
httpClient,

arcade-java-core/src/test/kotlin/dev/arcade/core/ClientOptionsTest.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,29 @@ internal class ClientOptionsTest {
1616

1717
private val httpClient = mock<HttpClient>()
1818

19+
@Test
20+
fun putHeader_canOverwriteDefaultHeader() {
21+
val clientOptions =
22+
ClientOptions.builder()
23+
.httpClient(httpClient)
24+
.putHeader("User-Agent", "My User Agent")
25+
.apiKey("My API Key")
26+
.build()
27+
28+
assertThat(clientOptions.headers.values("User-Agent")).containsExactly("My User Agent")
29+
}
30+
31+
@Test
32+
fun toBuilder_bearerCanBeUpdated() {
33+
var clientOptions =
34+
ClientOptions.builder().httpClient(httpClient).apiKey("My API Key").build()
35+
36+
clientOptions = clientOptions.toBuilder().apiKey("another My API Key").build()
37+
38+
assertThat(clientOptions.headers.values("Authorization"))
39+
.containsExactly("another My API Key")
40+
}
41+
1942
@Test
2043
fun toBuilder_whenOriginalClientOptionsGarbageCollected_doesNotCloseOriginalClient() {
2144
var clientOptions =

0 commit comments

Comments
 (0)