1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juneau.bean.openapi3;
18
19 import static org.apache.juneau.TestUtils.*;
20 import static org.apache.juneau.bean.openapi3.OpenApiBuilder.*;
21 import static org.junit.jupiter.api.Assertions.*;
22
23 import org.apache.juneau.*;
24 import org.junit.jupiter.api.*;
25
26
27
28
29 class Components_Test extends TestBase {
30
31 @Nested class A_basicTests extends TestBase {
32
33 private static final BeanTester<Components> TESTER =
34 testBean(
35 bean()
36 .setCallbacks(map("a1", callback()))
37 .setExamples(map("b1", example().setSummary("b2")))
38 .setHeaders(map("c1", headerInfo(schemaInfo("c2"))))
39 .setLinks(map("d1", link().setOperationId("d2")))
40 .setParameters(map("e1", parameter("e2", "e3")))
41 .setRequestBodies(map("f1", requestBodyInfo().setDescription("f2")))
42 .setResponses(map("g1", response("g2")))
43 .setSchemas(map("h1", schemaInfo().setType("h2")))
44 .setSecuritySchemes(map("i1", securitySchemeInfo("i2")))
45 )
46 .props("callbacks{a1},examples{b1{summary}},headers{c1{schema{type}}},links{d1{operationId}},parameters{e1{in,name}},requestBodies{f1{description}},responses{g1{description}},schemas{h1{type}},securitySchemes{i1{type}}")
47 .vals("{{}},{{b2}},{{{c2}}},{{d2}},{{e2,e3}},{{f2}},{{g2}},{{h2}},{{i2}}")
48 .json("{callbacks:{a1:{}},examples:{b1:{summary:'b2'}},headers:{c1:{schema:{type:'c2'}}},links:{d1:{operationId:'d2'}},parameters:{e1:{'in':'e2',name:'e3'}},requestBodies:{f1:{description:'f2'}},responses:{g1:{description:'g2'}},schemas:{h1:{type:'h2'}},securitySchemes:{i1:{type:'i2'}}}")
49 .string("{'callbacks':{'a1':{}},'examples':{'b1':{'summary':'b2'}},'headers':{'c1':{'schema':{'type':'c2'}}},'links':{'d1':{'operationId':'d2'}},'parameters':{'e1':{'in':'e2','name':'e3'}},'requestBodies':{'f1':{'description':'f2'}},'responses':{'g1':{'description':'g2'}},'schemas':{'h1':{'type':'h2'}},'securitySchemes':{'i1':{'type':'i2'}}}".replace('\'','"'))
50 ;
51
52 @Test void a01_gettersAndSetters() {
53 TESTER.assertGettersAndSetters();
54 }
55
56 @Test void a02_copy() {
57 TESTER.assertCopy();
58 }
59
60 @Test void a03_toJson() {
61 TESTER.assertToJson();
62 }
63
64 @Test void a04_fromJson() {
65 TESTER.assertFromJson();
66 }
67
68 @Test void a05_roundTrip() {
69 TESTER.assertRoundTrip();
70 }
71
72 @Test void a06_toString() {
73 TESTER.assertToString();
74 }
75
76 @Test void a07_keySet() {
77 assertList(TESTER.bean().keySet(), "callbacks", "examples", "headers", "links", "parameters", "requestBodies", "responses", "schemas", "securitySchemes");
78 }
79
80 @Test void a08_nullParameters() {
81 var x = bean();
82 assertThrows(IllegalArgumentException.class, () -> x.get(null, String.class));
83 assertThrows(IllegalArgumentException.class, () -> x.set(null, "value"));
84 }
85
86 @Test void a09_asMap() {
87 assertBean(
88 bean()
89 .setSchemas(map("a1", schemaInfo("a2")))
90 .set("x1", "x1a")
91 .asMap(),
92 "schemas{a1{type}},x1",
93 "{{a2}},x1a"
94 );
95 }
96
97 @Test void a10_extraKeys() {
98 var x = bean().set("x1", "x1a").set("x2", "x2a");
99 assertList(x.extraKeys(), "x1", "x2");
100 assertEmpty(bean().extraKeys());
101 }
102
103 @Test void a11_strictMode() {
104 assertThrows(RuntimeException.class, () -> bean().strict().set("foo", "bar"));
105
106 assertFalse(bean().isStrict());
107 assertTrue(bean().strict().isStrict());
108 assertFalse(bean().strict(false).isStrict());
109
110 assertDoesNotThrow(() -> bean().set("foo", "bar"));
111 }
112 }
113
114 @Nested class B_emptyTests extends TestBase {
115
116 private static final BeanTester<Components> TESTER =
117 testBean(bean())
118 .props("schemas,responses,parameters,examples,requestBodies,headers,securitySchemes,links,callbacks")
119 .vals("<null>,<null>,<null>,<null>,<null>,<null>,<null>,<null>,<null>")
120 .json("{}")
121 .string("{}")
122 ;
123
124 @Test void b01_gettersAndSetters() {
125 TESTER.assertGettersAndSetters();
126 }
127
128 @Test void b02_copy() {
129 TESTER.assertCopy();
130 }
131
132 @Test void b03_toJson() {
133 TESTER.assertToJson();
134 }
135
136 @Test void b04_fromJson() {
137 TESTER.assertFromJson();
138 }
139
140 @Test void b05_roundTrip() {
141 TESTER.assertRoundTrip();
142 }
143
144 @Test void b06_toString() {
145 TESTER.assertToString();
146 }
147
148 @Test void b07_keySet() {
149 assertEmpty(TESTER.bean().keySet());
150 }
151 }
152
153 @Nested class C_extraProperties extends TestBase {
154 private static final BeanTester<Components> TESTER =
155 testBean(
156 bean()
157 .set("callbacks", map("a1", callback()))
158 .set("examples", map("b1", example().setSummary("b2")))
159 .set("headers", map("c1", headerInfo(schemaInfo("c2"))))
160 .set("links", map("d1", link().setOperationId("d2")))
161 .set("parameters", map("e1", parameter("e2", "e3")))
162 .set("requestBodies", map("f1", requestBodyInfo().setDescription("f2")))
163 .set("responses", map("g1", response("g2")))
164 .set("schemas", map("h1", schemaInfo().setType("h2")))
165 .set("securitySchemes", map("i1", securitySchemeInfo("i2")))
166 .set("x1", "x1a")
167 .set("x2", null)
168 )
169 .props("callbacks{a1},examples{b1{summary}},headers{c1{schema{type}}},links{d1{operationId}},parameters{e1{in,name}},requestBodies{f1{description}},responses{g1{description}},schemas{h1{type}},securitySchemes{i1{type}},x1,x2")
170 .vals("{{}},{{b2}},{{{c2}}},{{d2}},{{e2,e3}},{{f2}},{{g2}},{{h2}},{{i2}},x1a,<null>")
171 .json("{callbacks:{a1:{}},examples:{b1:{summary:'b2'}},headers:{c1:{schema:{type:'c2'}}},links:{d1:{operationId:'d2'}},parameters:{e1:{'in':'e2',name:'e3'}},requestBodies:{f1:{description:'f2'}},responses:{g1:{description:'g2'}},schemas:{h1:{type:'h2'}},securitySchemes:{i1:{type:'i2'}},x1:'x1a'}")
172 .string("{'callbacks':{'a1':{}},'examples':{'b1':{'summary':'b2'}},'headers':{'c1':{'schema':{'type':'c2'}}},'links':{'d1':{'operationId':'d2'}},'parameters':{'e1':{'in':'e2','name':'e3'}},'requestBodies':{'f1':{'description':'f2'}},'responses':{'g1':{'description':'g2'}},'schemas':{'h1':{'type':'h2'}},'securitySchemes':{'i1':{'type':'i2'}},'x1':'x1a'}".replace('\'','"'))
173 ;
174
175 @Test void c01_gettersAndSetters() {
176 TESTER.assertGettersAndSetters();
177 }
178
179 @Test void c02_copy() {
180 TESTER.assertCopy();
181 }
182
183 @Test void c03_toJson() {
184 TESTER.assertToJson();
185 }
186
187 @Test void c04_fromJson() {
188 TESTER.assertFromJson();
189 }
190
191 @Test void c05_roundTrip() {
192 TESTER.assertRoundTrip();
193 }
194
195 @Test void c06_toString() {
196 TESTER.assertToString();
197 }
198
199 @Test void c07_keySet() {
200 assertList(TESTER.bean().keySet(), "callbacks", "examples", "headers", "links", "parameters", "requestBodies", "responses", "schemas", "securitySchemes", "x1", "x2");
201 }
202
203 @Test void c08_get() {
204 assertMapped(
205 TESTER.bean(), (obj,prop) -> obj.get(prop, Object.class),
206 "callbacks{a1},examples{b1{summary}},headers{c1{schema{type}}},links{d1{operationId}},parameters{e1{in,name}},requestBodies{f1{description}},responses{g1{description}},schemas{h1{type}},securitySchemes{i1{type}},x1,x2",
207 "{{}},{{b2}},{{{c2}}},{{d2}},{{e2,e3}},{{f2}},{{g2}},{{h2}},{{i2}},x1a,<null>"
208 );
209 }
210
211 @Test void c09_getTypes() {
212 assertMapped(
213 TESTER.bean(), (obj,prop) -> simpleClassNameOf(obj.get(prop, Object.class)),
214 "callbacks,examples,headers,links,parameters,requestBodies,responses,schemas,securitySchemes,x1,x2",
215 "LinkedHashMap,LinkedHashMap,LinkedHashMap,LinkedHashMap,LinkedHashMap,LinkedHashMap,LinkedHashMap,LinkedHashMap,LinkedHashMap,String,<null>"
216 );
217 }
218
219 @Test void c10_nullPropertyValue() {
220 assertThrows(IllegalArgumentException.class, ()->bean().get(null));
221 assertThrows(IllegalArgumentException.class, ()->bean().get(null, String.class));
222 assertThrows(IllegalArgumentException.class, ()->bean().set(null, "a"));
223 }
224 }
225
226
227
228
229
230 private static Components bean() {
231 return components();
232 }
233 }