|
26 | 26 | import java.util.LinkedHashMap; |
27 | 27 | import okio.Buffer; |
28 | 28 | import org.assertj.core.api.Fail; |
| 29 | +import org.assertj.core.data.MapEntry; |
29 | 30 | import org.junit.Rule; |
30 | 31 | import org.junit.Test; |
31 | 32 | import org.junit.rules.ExpectedException; |
@@ -216,6 +217,52 @@ public void customExpander() throws Exception { |
216 | 217 | .hasPath("/?date=1234"); |
217 | 218 | } |
218 | 219 |
|
| 220 | + @Test |
| 221 | + public void headerMap() throws Exception { |
| 222 | + server.enqueue(new MockResponse()); |
| 223 | + |
| 224 | + TestInterface api = new TestInterfaceBuilder().target("http://localhost:" + server.getPort()); |
| 225 | + |
| 226 | + Map<String, Object> headerMap = new LinkedHashMap<String, Object>(); |
| 227 | + headerMap.put("Content-Type", "myContent"); |
| 228 | + headerMap.put("Custom-Header", "fooValue"); |
| 229 | + api.headerMap(headerMap); |
| 230 | + |
| 231 | + assertThat(server.takeRequest()) |
| 232 | + .hasHeaders( |
| 233 | + MapEntry.entry("Content-Type", Arrays.asList("myContent")), |
| 234 | + MapEntry.entry("Custom-Header", Arrays.asList("fooValue"))); |
| 235 | + } |
| 236 | + |
| 237 | + @Test |
| 238 | + public void headerMapWithHeaderAnnotations() throws Exception { |
| 239 | + server.enqueue(new MockResponse()); |
| 240 | + |
| 241 | + TestInterface api = new TestInterfaceBuilder().target("http://localhost:" + server.getPort()); |
| 242 | + |
| 243 | + Map<String, Object> headerMap = new LinkedHashMap<String, Object>(); |
| 244 | + headerMap.put("Custom-Header", "fooValue"); |
| 245 | + api.headerMapWithHeaderAnnotations(headerMap); |
| 246 | + |
| 247 | + // header map should be additive for headers provided by annotations |
| 248 | + assertThat(server.takeRequest()) |
| 249 | + .hasHeaders( |
| 250 | + MapEntry.entry("Content-Encoding", Arrays.asList("deflate")), |
| 251 | + MapEntry.entry("Custom-Header", Arrays.asList("fooValue"))); |
| 252 | + |
| 253 | + server.enqueue(new MockResponse()); |
| 254 | + headerMap.put("Content-Encoding", "overrideFromMap"); |
| 255 | + |
| 256 | + api.headerMapWithHeaderAnnotations(headerMap); |
| 257 | + |
| 258 | + // if header map has entry that collides with annotation, value specified |
| 259 | + // by header map should be used |
| 260 | + assertThat(server.takeRequest()) |
| 261 | + .hasHeaders( |
| 262 | + MapEntry.entry("Content-Encoding", Arrays.asList("overrideFromMap")), |
| 263 | + MapEntry.entry("Custom-Header", Arrays.asList("fooValue"))); |
| 264 | + } |
| 265 | + |
219 | 266 | @Test |
220 | 267 | public void queryMap() throws Exception { |
221 | 268 | server.enqueue(new MockResponse()); |
@@ -609,6 +656,13 @@ void form( |
609 | 656 | @RequestLine("POST /?date={date}") |
610 | 657 | void expand(@Param(value = "date", expander = DateToMillis.class) Date date); |
611 | 658 |
|
| 659 | + @RequestLine("GET /") |
| 660 | + void headerMap(@HeaderMap Map<String, Object> headerMap); |
| 661 | + |
| 662 | + @RequestLine("GET /") |
| 663 | + @Headers("Content-Encoding: deflate") |
| 664 | + void headerMapWithHeaderAnnotations(@HeaderMap Map<String, Object> headerMap); |
| 665 | + |
612 | 666 | @RequestLine("GET /") |
613 | 667 | void queryMap(@QueryMap Map<String, Object> queryMap); |
614 | 668 |
|
|
0 commit comments