View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
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 java.util.*;
24  
25  import org.apache.juneau.*;
26  import org.junit.jupiter.api.*;
27  
28  /**
29   * Testcase for {@link SecurityRequirement}.
30   */
31  class SecurityRequirement_Test extends TestBase {
32  
33  	@Nested class A_basicTests extends TestBase {
34  
35  		private static final BeanTester<SecurityRequirement> TESTER =
36  			testBean(
37  				bean()
38  					.setRequirements(map("a1", list("a2")))
39  			)
40  			.props("requirements{a1}")
41  			.vals("{[a2]}")
42  			.json("{requirements:{a1:['a2']}}")
43  			.string("{'requirements':{'a1':['a2']}}".replace('\'','"'))
44  		;
45  
46  		@Test void a01_gettersAndSetters() {
47  			TESTER.assertGettersAndSetters();
48  		}
49  
50  		@Test void a02_copy() {
51  			var t = new SecurityRequirement(TESTER.bean());
52  			assertNotSame(TESTER.bean(), t);
53  			assertBean(t, TESTER.props(), TESTER.vals());
54  		}
55  
56  		@Test void a03_toJson() {
57  			TESTER.assertToJson();
58  		}
59  
60  		@Test void a04_fromJson() {
61  			TESTER.assertFromJson();
62  		}
63  
64  		@Test void a05_roundTrip() {
65  			TESTER.assertRoundTrip();
66  		}
67  
68  		@Test void a06_toString() {
69  			TESTER.assertToString();
70  		}
71  
72  		@Test void a07_keySet() {
73  			assertList(TESTER.bean().keySet(), "requirements");
74  		}
75  
76  		@Test void a08_nullParameters() {
77  			var x = bean();
78  			assertThrows(IllegalArgumentException.class, () -> x.get(null, String.class));
79  			assertThrows(IllegalArgumentException.class, () -> x.set(null, "value"));
80  		}
81  
82  		@Test void a09_addMethods() {
83  			assertBean(
84  				bean()
85  					.addRequirement("a1", "a2", "a3")
86  					.setApiKeyAuth("b"),
87  				"requirements{a1,b}",
88  				"{[a2,a3],[]}"
89  			);
90  		}
91  
92  		@Test void a10_getAndSetUsingPropertyName() {
93  			var x = bean()
94  				.set("requirements", map("a1", list("a2")))
95  				.set("b1", list("b2"));
96  
97  			assertBean(x, "requirements{a1},b1", "{[a2]},[b2]");
98  			assertBean(x.get("requirements", Map.class), "a1", "[a2]");
99  			assertList((List<?>)x.get("b1", List.class), "b2");
100 		}
101 
102 		@Test void a11_asMap() {
103 			assertBean(
104 				bean()
105 					.set("a1", list("a2"))
106 					.set("x1", "x1a")
107 					.asMap(),
108 				"a1,x1",
109 				"[a2],x1a"
110 			);
111 		}
112 
113 		@Test void a12_extraKeys() {
114 			var x = bean().set("x1", "x1a").set("x2", "x2a");
115 			assertList(x.extraKeys(), "x1", "x2");
116 			assertEmpty(bean().extraKeys());
117 		}
118 
119 		@Test void a13_strictMode() {
120 			assertThrows(RuntimeException.class, () -> bean().strict().set("foo", "bar"));
121 			assertDoesNotThrow(() -> bean().set("foo", "bar"));
122 
123 			assertFalse(bean().isStrict());
124 			assertTrue(bean().strict().isStrict());
125 			assertFalse(bean().strict(false).isStrict());
126 		}
127 	}
128 
129 	@Nested class B_emptyTests extends TestBase {
130 
131 		private static final BeanTester<SecurityRequirement> TESTER =
132 			testBean(bean())
133 			.props("requirements")
134 			.vals("<null>")
135 			.json("{}")
136 			.string("{}")
137 		;
138 
139 		@Test void b01_gettersAndSetters() {
140 			TESTER.assertGettersAndSetters();
141 		}
142 
143 		@Test void b02_copy() {
144 			var t = new SecurityRequirement(TESTER.bean());
145 			assertNotSame(TESTER.bean(), t);
146 			assertBean(t, TESTER.props(), TESTER.vals());
147 		}
148 
149 		@Test void b03_toJson() {
150 			TESTER.assertToJson();
151 		}
152 
153 		@Test void b04_fromJson() {
154 			TESTER.assertFromJson();
155 		}
156 
157 		@Test void b05_roundTrip() {
158 			TESTER.assertRoundTrip();
159 		}
160 
161 		@Test void b06_toString() {
162 			TESTER.assertToString();
163 		}
164 
165 		@Test void b07_keySet() {
166 			assertEmpty(TESTER.bean().keySet());
167 		}
168 	}
169 
170 	@Nested class C_extraProperties extends TestBase {
171 		private static final BeanTester<SecurityRequirement> TESTER =
172 			testBean(
173 				bean()
174 					.set("a1", list("a2", "a3"))
175 					.set("b1", list("b2"))
176 					.set("x1", "x1a")
177 					.set("x2", null)
178 			)
179 			.props("a1{#{toString}},b1{#{toString}},x1,x2")
180 			.vals("{[{a2},{a3}]},{[{b2}]},x1a,<null>")
181 			.json("{a1:['a2','a3'],b1:['b2'],x1:'x1a'}")
182 			.string("{'a1':['a2','a3'],'b1':['b2'],'x1':'x1a'}".replace('\'', '"'))
183 		;
184 
185 		@Test void c01_gettersAndSetters() {
186 			TESTER.assertGettersAndSetters();
187 		}
188 
189 		@Test void c02_copy() {
190 			TESTER.assertCopy();
191 		}
192 
193 		@Test void c03_toJson() {
194 			TESTER.assertToJson();
195 		}
196 
197 		@Test void c04_fromJson() {
198 			TESTER.assertFromJson();
199 		}
200 
201 		@Test void c05_roundTrip() {
202 			TESTER.assertRoundTrip();
203 		}
204 
205 		@Test void c06_toString() {
206 			TESTER.assertToString();
207 		}
208 
209 		@Test void c07_keySet() {
210 			assertList(TESTER.bean().keySet(), "a1", "b1", "x1", "x2");
211 		}
212 
213 		@Test void c08_get() {
214 			assertMapped(
215 				TESTER.bean(), (obj,prop) -> obj.get(prop, Object.class),
216 				"a1{#{toString}},b1{#{toString}},x1,x2",
217 				"{[{a2},{a3}]},{[{b2}]},x1a,<null>"
218 			);
219 		}
220 
221 		@Test void c09_getTypes() {
222 			assertMapped(
223 				TESTER.bean(), (obj,prop) -> simpleClassNameOf(obj.get(prop, Object.class)),
224 				"a1,b1,x1,x2",
225 				"ArrayList,ArrayList,String,<null>"
226 			);
227 		}
228 
229 		@Test void c10_nullPropertyValue() {
230 			assertThrows(IllegalArgumentException.class, ()->bean().get(null));
231 			assertThrows(IllegalArgumentException.class, ()->bean().get(null, String.class));
232 			assertThrows(IllegalArgumentException.class, ()->bean().set(null, "a"));
233 		}
234 	}
235 
236 	//---------------------------------------------------------------------------------------------
237 	// Helper methods
238 	//---------------------------------------------------------------------------------------------
239 
240 	private static SecurityRequirement bean() {
241 		return securityRequirement();
242 	}
243 }