1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juneau.http.header;
18
19 import static java.time.format.DateTimeFormatter.*;
20 import static java.time.temporal.ChronoUnit.*;
21 import static org.apache.juneau.TestUtils.*;
22 import static org.apache.juneau.commons.utils.StringUtils.*;
23 import static org.apache.juneau.http.HttpHeaders.*;
24 import static org.apache.juneau.junit.bct.BctAssertions.*;
25
26 import java.io.*;
27 import java.time.*;
28 import java.util.function.*;
29
30 import org.apache.juneau.*;
31 import org.apache.juneau.annotation.*;
32 import org.apache.juneau.http.annotation.*;
33 import org.apache.juneau.rest.annotation.*;
34 import org.apache.juneau.rest.client.*;
35 import org.apache.juneau.rest.mock.*;
36 import org.junit.jupiter.api.*;
37
38 class IfRange_Test extends TestBase {
39
40 private static final String HEADER = "If-Range";
41 private static final String VALUE1 = "\"foo\"";
42 private static final String VALUE2 = "W/\"foo\"";
43 private static final String VALUE3 = "Sat, 29 Oct 1994 19:43:31 GMT";
44 private static final EntityTag PARSED1 = EntityTag.of(VALUE1);
45 private static final EntityTag PARSED2 = EntityTag.of(VALUE2);
46 private static final ZonedDateTime PARSED3 = ZonedDateTime.from(RFC_1123_DATE_TIME.parse(VALUE3)).truncatedTo(SECONDS);
47
48 @Rest
49 public static class A {
50 @RestOp
51 public StringReader get(@Header(name=HEADER) @Schema(cf="multi") String[] h) {
52 return reader(h == null ? "null" : join(h, ','));
53 }
54 }
55
56
57
58
59
60 @Test void a01_basic() throws Exception {
61 var c = client().build();
62
63
64 c.get().header(ifRange(VALUE1)).run().assertContent(VALUE1);
65 c.get().header(ifRange(VALUE1)).run().assertContent(VALUE1);
66 c.get().header(ifRange(PARSED1)).run().assertContent(VALUE1);
67 c.get().header(ifRange(()->PARSED1)).run().assertContent(VALUE1);
68
69 c.get().header(ifRange(VALUE2)).run().assertContent(VALUE2);
70 c.get().header(ifRange(VALUE2)).run().assertContent(VALUE2);
71 c.get().header(ifRange(PARSED2)).run().assertContent(VALUE2);
72 c.get().header(ifRange(()->PARSED2)).run().assertContent(VALUE2);
73
74 c.get().header(ifRange(VALUE3)).run().assertContent(VALUE3);
75 c.get().header(ifRange(VALUE3)).run().assertContent(VALUE3);
76 c.get().header(ifRange(PARSED3)).run().assertContent(VALUE3);
77 c.get().header(ifRange(()->PARSED3)).run().assertContent(VALUE3);
78
79
80 c.get().header(ifRange((String)null)).run().assertContent().isEmpty();
81 c.get().header(ifRange((Supplier<ZonedDateTime>)null)).run().assertContent().isEmpty();
82 c.get().header(ifRange(()->null)).run().assertContent().isEmpty();
83 }
84
85 @Test void a02_asEntityTag() {
86 var x = ifRange(VALUE1).asEntityTag().get();
87 assertString("\"foo\"", x);
88 assertEmpty(ifRange(()->null).asEntityTag());
89 assertEmpty(ifRange(()->PARSED3).asEntityTag());
90 }
91
92
93
94
95
96 private static RestClient.Builder client() {
97 return MockRestClient.create(A.class);
98 }
99 }