1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juneau.bean.swagger;
18
19 import static org.apache.juneau.TestUtils.*;
20 import static org.apache.juneau.bean.swagger.SwaggerBuilder.*;
21 import static org.junit.jupiter.api.Assertions.*;
22
23 import java.util.*;
24
25 import org.apache.juneau.*;
26 import org.apache.juneau.collections.*;
27 import org.junit.jupiter.api.*;
28
29
30
31
32 class ResponseInfo_Test extends TestBase {
33
34 @Nested class A_basicTests extends TestBase {
35
36 private static final BeanTester<ResponseInfo> TESTER =
37 testBean(
38 bean()
39 .setDescription("a")
40 .setExamples(map("x1", "x2"))
41 .setHeaders(map("x3", headerInfo().setType("x4")))
42 .setSchema(schemaInfo().setType("b"))
43 )
44 .props("description,examples{x1},headers{x3{type}},schema{type}")
45 .vals("a,{x2},{{x4}},{b}")
46 .json("{description:'a',examples:{x1:'x2'},headers:{x3:{type:'x4'}},schema:{type:'b'}}")
47 .string("{'description':'a','examples':{'x1':'x2'},'headers':{'x3':{'type':'x4'}},'schema':{'type':'b'}}".replace('\'', '"'))
48 ;
49
50 @Test void a01_gettersAndSetters() {
51 TESTER.assertGettersAndSetters();
52 }
53
54 @Test void a02_copy() {
55 TESTER.assertCopy();
56 }
57
58 @Test void a03_toJson() {
59 TESTER.assertToJson();
60 }
61
62 @Test void a04_fromJson() {
63 TESTER.assertFromJson();
64 }
65
66 @Test void a05_roundTrip() {
67 TESTER.assertRoundTrip();
68 }
69
70 @Test void a06_toString() {
71 TESTER.assertToString();
72 }
73
74 @Test void a07_keySet() {
75 assertList(TESTER.bean().keySet(), "description", "examples", "headers", "schema");
76 }
77
78 @Test void a08_otherGettersAndSetters() {
79
80
81
82 var x = bean().setHeaders(map(
83 "a1", headerInfo().setType("a2"),
84 "a3", headerInfo().setType("a4")
85 ));
86
87 assertBean(x.getHeader("a1"), "type", "a2");
88 assertBean(x.getHeader("a3"), "type", "a4");
89 }
90
91 @Test void a09_nullParameters() {
92 var x = bean();
93
94 assertThrows(IllegalArgumentException.class, ()->x.getHeader(null));
95 assertThrows(IllegalArgumentException.class, ()->x.addExample(null, "a"));
96 assertThrows(IllegalArgumentException.class, ()->x.addExample("a", null));
97 assertThrows(IllegalArgumentException.class, ()->x.addHeader(null, headerInfo()));
98 assertThrows(IllegalArgumentException.class, ()->x.addHeader("a", null));
99 }
100
101 @Test void a10_addMethods() {
102 var x = bean().addExample("a1", "a2").addHeader("a3", headerInfo().setDescription("a4"));
103 assertNotNull(x);
104 assertNotNull(x.getExamples());
105 assertNotNull(x.getHeaders());
106 }
107
108 @Test void a11_asMap() {
109 assertBean(
110 bean()
111 .setDescription("a")
112 .set("x1", "x1a")
113 .asMap(),
114 "description,x1",
115 "a,x1a"
116 );
117 }
118
119 @Test void a12_extraKeys() {
120 var x = bean().set("x1", "x1a").set("x2", "x2a");
121 assertList(x.extraKeys(), "x1", "x2");
122 assertEmpty(bean().extraKeys());
123 }
124
125 @Test void a13_strictMode() {
126 assertThrows(RuntimeException.class, () -> bean().strict().set("foo", "bar"));
127 assertDoesNotThrow(() -> bean().set("foo", "bar"));
128
129 assertFalse(bean().isStrict());
130 assertTrue(bean().strict().isStrict());
131 assertFalse(bean().strict(false).isStrict());
132 }
133
134 @Test void a14_copyFrom() {
135 var x = bean().setDescription("a").setSchema(schemaInfo().setTitle("b")).addHeader("c1", headerInfo()).addExample("d1", "d2");
136 var y = bean().copyFrom(x);
137 assertBean(y, "description,schema{title}", "a,{b}");
138
139 y = bean().setDescription("c").copyFrom(x);
140 assertBean(y, "description,schema{title}", "a,{b}");
141
142 y = bean().setDescription("c").copyFrom(null);
143 assertBean(y, "description", "c");
144
145 assertJson("{}", bean().copyFrom(bean()));
146 }
147
148 @Test void a15_getHeader() {
149
150 var x = bean();
151 assertNull(x.getHeader("nonexistent"));
152
153
154 var y = bean()
155 .setHeaders(map("header1", headerInfo().setType("string")));
156
157 assertNotNull(y.getHeader("header1"));
158 assertEquals("string", y.getHeader("header1").getType());
159 assertNull(y.getHeader("nonexistent"));
160
161
162 assertThrows(IllegalArgumentException.class, () -> y.getHeader(null));
163 }
164 }
165
166 @Nested class B_emptyTests extends TestBase {
167
168 private static final BeanTester<ResponseInfo> TESTER =
169 testBean(bean())
170 .props("description,schema,headers,examples")
171 .vals("<null>,<null>,<null>,<null>")
172 .json("{}")
173 .string("{}")
174 ;
175
176 @Test void b01_gettersAndSetters() {
177 TESTER.assertGettersAndSetters();
178 }
179
180 @Test void b02_copy() {
181 TESTER.assertCopy();
182 }
183
184 @Test void b03_toJson() {
185 TESTER.assertToJson();
186 }
187
188 @Test void b04_fromJson() {
189 TESTER.assertFromJson();
190 }
191
192 @Test void b05_roundTrip() {
193 TESTER.assertRoundTrip();
194 }
195
196 @Test void b06_toString() {
197 TESTER.assertToString();
198 }
199
200 @Test void b07_keySet() {
201 assertEmpty(TESTER.bean().keySet());
202 }
203
204 @Test void b08_nullParameters() {
205 var x = bean();
206 assertThrows(IllegalArgumentException.class, () -> x.get(null, String.class));
207 assertThrows(IllegalArgumentException.class, () -> x.set(null, "value"));
208 }
209 }
210
211 @Nested class C_extraProperties extends TestBase {
212
213 private static final BeanTester<ResponseInfo> TESTER =
214 testBean(
215 bean()
216 .set("description", "a")
217 .set("examples", map("x1", "x2"))
218 .set("headers", map("x3", headerInfo().setType("x4")))
219 .set("schema", schemaInfo().setType("b"))
220 .set("x5", "x5a")
221 .set("x6", null)
222 )
223 .props("description,examples{x1},headers{x3{type}},schema{type},x5,x6")
224 .vals("a,{x2},{{x4}},{b},x5a,<null>")
225 .json("{description:'a',examples:{x1:'x2'},headers:{x3:{type:'x4'}},schema:{type:'b'},x5:'x5a'}")
226 .string("{'description':'a','examples':{'x1':'x2'},'headers':{'x3':{'type':'x4'}},'schema':{'type':'b'},'x5':'x5a'}".replace('\'', '"'))
227 ;
228
229 @Test void c01_gettersAndSetters() {
230 TESTER.assertGettersAndSetters();
231 }
232
233 @Test void c02_copy() {
234 TESTER.assertCopy();
235 }
236
237 @Test void c03_toJson() {
238 TESTER.assertToJson();
239 }
240
241 @Test void c04_fromJson() {
242 TESTER.assertFromJson();
243 }
244
245 @Test void c05_roundTrip() {
246 TESTER.assertRoundTrip();
247 }
248
249 @Test void c06_toString() {
250 TESTER.assertToString();
251 }
252
253 @Test void c07_keySet() {
254 assertList(TESTER.bean().keySet(), "description", "examples", "headers", "schema", "x5", "x6");
255 }
256
257 @Test void c08_get() {
258 assertMapped(
259 TESTER.bean(), (obj,prop) -> obj.get(prop, Object.class),
260 "description,examples{x1},headers{x3{type}},schema{type},x5,x6",
261 "a,{x2},{{x4}},{b},x5a,<null>"
262 );
263 }
264
265 @Test void c09_getTypes() {
266 assertMapped(
267 TESTER.bean(), (obj,prop) -> simpleClassNameOf(obj.get(prop, Object.class)),
268 "description,examples,headers,schema,x5,x6",
269 "String,LinkedHashMap,LinkedHashMap,SchemaInfo,String,<null>"
270 );
271 }
272
273 @Test void c10_nullPropertyValue() {
274 assertThrows(IllegalArgumentException.class, ()->bean().get(null));
275 assertThrows(IllegalArgumentException.class, ()->bean().get(null, String.class));
276 assertThrows(IllegalArgumentException.class, ()->bean().set(null, "a"));
277 }
278 }
279
280 @Nested class D_refs extends TestBase {
281
282 @Test void d01_resolveRefs_schema() {
283 var swagger = swagger()
284 .addDefinition("Pet", JsonMap.of("type", "object", "title", "Pet"));
285
286 assertBean(
287 responseInfo().setDescription("Success").setSchema(schemaInfo().setRef("#/definitions/Pet")).resolveRefs(swagger, new ArrayDeque<>(), 10),
288 "description,schema{type,title}",
289 "Success,{object,Pet}"
290 );
291 }
292
293 @Test void d02_resolveRefs_headers() {
294 var swagger = swagger()
295 .addDefinition("MyHeader", JsonMap.of("type", "string", "description", "My Header"));
296
297 assertBean(
298 responseInfo().setDescription("Success").addHeader("X-Custom", headerInfo().setRef("#/definitions/MyHeader")).resolveRefs(swagger, new ArrayDeque<>(), 10),
299 "description,headers{X-Custom{type,description}}",
300 "Success,{{string,My Header}}"
301 );
302 }
303
304 @Test void d03_resolveRefs_maxDepth() {
305 var swagger = swagger()
306 .addDefinition("Pet", JsonMap.of("type", "object", "title", "Pet"));
307
308 assertBean(
309 responseInfo().setDescription("Success").setSchema(schemaInfo().setRef("#/definitions/Pet")).resolveRefs(swagger, new ArrayDeque<>(), 0),
310 "description,schema{ref}",
311 "Success,{#/definitions/Pet}"
312 );
313 }
314 }
315
316
317
318
319
320
321 private static ResponseInfo bean() {
322 return responseInfo();
323 }
324
325 }