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.apache.juneau.commons.utils.CollectionUtils.*;
22 import static org.apache.juneau.junit.bct.BctAssertions.*;
23 import static org.junit.jupiter.api.Assertions.*;
24
25 import java.net.*;
26
27 import org.apache.juneau.*;
28 import org.junit.jupiter.api.*;
29
30
31
32
33 class PathItem_Test extends TestBase {
34
35 @Nested class A_basicTests extends TestBase {
36
37 private static final BeanTester<PathItem> TESTER =
38 testBean(
39 bean()
40 .setDelete(operation().setSummary("a"))
41 .setGet(operation().setSummary("b"))
42 .setHead(operation().setSummary("c"))
43 .setOptions(operation().setSummary("d"))
44 .setPatch(operation().setSummary("e"))
45 .setPost(operation().setSummary("f"))
46 .setPut(operation().setSummary("g"))
47 .setTrace(operation().setSummary("h"))
48 )
49 .props("delete{summary},get{summary},head{summary},options{summary},patch{summary},post{summary},put{summary},trace{summary}")
50 .vals("{a},{b},{c},{d},{e},{f},{g},{h}")
51 .json("{'delete':{summary:'a'},get:{summary:'b'},head:{summary:'c'},options:{summary:'d'},patch:{summary:'e'},post:{summary:'f'},put:{summary:'g'},trace:{summary:'h'}}")
52 .string("{'delete':{'summary':'a'},'get':{'summary':'b'},'head':{'summary':'c'},'options':{'summary':'d'},'patch':{'summary':'e'},'post':{'summary':'f'},'put':{'summary':'g'},'trace':{'summary':'h'}}".replace('\'','"'))
53 ;
54
55 @Test void a01_gettersAndSetters() {
56 TESTER.assertGettersAndSetters();
57 }
58
59 @Test void a02_copy() {
60 TESTER.assertCopy();
61 }
62
63 @Test void a03_toJson() {
64 TESTER.assertToJson();
65 }
66
67 @Test void a04_fromJson() {
68 TESTER.assertFromJson();
69 }
70
71 @Test void a05_roundTrip() {
72 TESTER.assertRoundTrip();
73 }
74
75 @Test void a06_toString() {
76 TESTER.assertToString();
77 }
78
79 @Test void a07_keySet() {
80 assertList(TESTER.bean().keySet(), "delete", "get", "head", "options", "patch", "post", "put", "trace");
81 }
82
83 @Test void a08_nullParameters() {
84 var x = bean();
85 assertThrows(IllegalArgumentException.class, () -> x.get(null, String.class));
86 assertThrows(IllegalArgumentException.class, () -> x.set(null, "value"));
87 }
88
89 @Test void a09_asMap() {
90 assertBean(
91 bean()
92 .setSummary("a")
93 .set("x1", "x1a")
94 .asMap(),
95 "summary,x1",
96 "a,x1a"
97 );
98 }
99
100 @Test void a10_extraKeys() {
101 var x = bean().set("x1", "x1a").set("x2", "x2a");
102 assertList(x.extraKeys(), "x1", "x2");
103 assertEmpty(bean().extraKeys());
104 }
105
106 @Test void a11_strictMode() {
107 assertThrows(RuntimeException.class, () -> bean().strict().set("foo", "bar"));
108 assertDoesNotThrow(() -> bean().set("foo", "bar"));
109
110 assertFalse(bean().isStrict());
111 assertTrue(bean().strict().isStrict());
112 assertFalse(bean().strict(false).isStrict());
113 }
114 }
115
116 @Nested class B_emptyTests extends TestBase {
117
118 private static final BeanTester<PathItem> TESTER =
119 testBean(bean())
120 .props("get,put,post,delete,options,head,patch,trace")
121 .vals("<null>,<null>,<null>,<null>,<null>,<null>,<null>,<null>")
122 .json("{}")
123 .string("{}")
124 ;
125
126 @Test void b01_gettersAndSetters() {
127 TESTER.assertGettersAndSetters();
128 }
129
130 @Test void b02_copy() {
131 TESTER.assertCopy();
132 }
133
134 @Test void b03_toJson() {
135 TESTER.assertToJson();
136 }
137
138 @Test void b04_fromJson() {
139 TESTER.assertFromJson();
140 }
141
142 @Test void b05_roundTrip() {
143 TESTER.assertRoundTrip();
144 }
145
146 @Test void b06_toString() {
147 TESTER.assertToString();
148 }
149
150 @Test void b07_keySet() {
151 assertEmpty(TESTER.bean().keySet());
152 }
153 }
154
155 @Nested class C_extraProperties extends TestBase {
156 private static final BeanTester<PathItem> TESTER =
157 testBean(
158 bean()
159 .set("delete", operation().setSummary("a"))
160 .set("description", "b")
161 .set("get", operation().setSummary("c"))
162 .set("head", operation().setSummary("d"))
163 .set("options", operation().setSummary("e"))
164 .set("parameters", l(parameter("f1", "f2")))
165 .set("patch", operation().setSummary("g"))
166 .set("post", operation().setSummary("h"))
167 .set("put", operation().setSummary("i"))
168 .set("servers", l(server().setUrl(URI.create("j"))))
169 .set("summary", "k")
170 .set("trace", operation().setSummary("l"))
171 .set("x1", "x1a")
172 .set("x2", null)
173 )
174 .props("delete{summary},description,get{summary},head{summary},options{summary},parameters{0{in,name}},patch{summary},post{summary},put{summary},servers{0{url}},summary,trace{summary},x1,x2")
175 .vals("{a},b,{c},{d},{e},{{f1,f2}},{g},{h},{i},{{j}},k,{l},x1a,<null>")
176 .json("{'delete':{summary:'a'},description:'b',get:{summary:'c'},head:{summary:'d'},options:{summary:'e'},parameters:[{'in':'f1',name:'f2'}],patch:{summary:'g'},post:{summary:'h'},put:{summary:'i'},servers:[{url:'j'}],summary:'k',trace:{summary:'l'},x1:'x1a'}")
177 .string("{'delete':{'summary':'a'},'description':'b','get':{'summary':'c'},'head':{'summary':'d'},'options':{'summary':'e'},'parameters':[{'in':'f1','name':'f2'}],'patch':{'summary':'g'},'post':{'summary':'h'},'put':{'summary':'i'},'servers':[{'url':'j'}],'summary':'k','trace':{'summary':'l'},'x1':'x1a'}".replace('\'', '"'))
178 ;
179
180 @Test void c01_gettersAndSetters() {
181 TESTER.assertGettersAndSetters();
182 }
183
184 @Test void c02_copy() {
185 TESTER.assertCopy();
186 }
187
188 @Test void c03_toJson() {
189 TESTER.assertToJson();
190 }
191
192 @Test void c04_fromJson() {
193 TESTER.assertFromJson();
194 }
195
196 @Test void c05_roundTrip() {
197 TESTER.assertRoundTrip();
198 }
199
200 @Test void c06_toString() {
201 TESTER.assertToString();
202 }
203
204 @Test void c07_keySet() {
205 assertList(TESTER.bean().keySet(), "delete", "description", "get", "head", "options", "parameters", "patch", "post", "put", "servers", "summary", "trace", "x1", "x2");
206 }
207
208 @Test void c08_get() {
209 assertMapped(
210 TESTER.bean(), (obj,prop) -> obj.get(prop, Object.class),
211 "delete{summary},description,get{summary},head{summary},options{summary},parameters{0{in,name}},patch{summary},post{summary},put{summary},servers{0{url}},summary,trace{summary},x1,x2",
212 "{a},b,{c},{d},{e},{{f1,f2}},{g},{h},{i},{{j}},k,{l},x1a,<null>"
213 );
214 }
215
216 @Test void c09_getTypes() {
217 assertMapped(
218 TESTER.bean(), (obj,prop) -> cns(obj.get(prop, Object.class)),
219 "delete,description,get,head,options,parameters,patch,post,put,servers,summary,trace,x1,x2",
220 "Operation,String,Operation,Operation,Operation,ArrayList,Operation,Operation,Operation,ArrayList,String,Operation,String,<null>"
221 );
222 }
223
224 @Test void c10_nullPropertyValue() {
225 assertThrows(IllegalArgumentException.class, ()->bean().get(null));
226 assertThrows(IllegalArgumentException.class, ()->bean().get(null, String.class));
227 assertThrows(IllegalArgumentException.class, ()->bean().set(null, "a"));
228 }
229 }
230
231
232
233
234
235 private static PathItem bean() {
236 return pathItem();
237 }
238 }