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.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 org.apache.juneau.*;
24  import org.junit.jupiter.api.*;
25  
26  /**
27   * Testcase for {@link Info}.
28   */
29  class Info_Test extends TestBase {
30  
31  	@Nested class A_basicTests extends TestBase {
32  
33  		private static final BeanTester<Info> TESTER =
34  			testBean(
35  				bean()
36  					.setContact(contact().setName("a"))
37  					.setDescription("b")
38  					.setLicense(license().setName("c"))
39  					.setSiteName("d")
40  					.setTermsOfService("e")
41  					.setTitle("f")
42  					.setVersion("g")
43  			)
44  			.props("contact{name},description,license{name},siteName,termsOfService,title,version")
45  			.vals("{a},b,{c},d,e,f,g")
46  			.json("{contact:{name:'a'},description:'b',license:{name:'c'},siteName:'d',termsOfService:'e',title:'f',version:'g'}")
47  			.string("{'contact':{'name':'a'},'description':'b','license':{'name':'c'},'siteName':'d','termsOfService':'e','title':'f','version':'g'}".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(), "contact", "description", "license", "siteName", "termsOfService", "title", "version");
76  		}
77  
78  		@Test void a08_nullParameters() {
79  			var x = bean();
80  			assertThrows(IllegalArgumentException.class, () -> x.get(null, String.class));
81  			assertThrows(IllegalArgumentException.class, () -> x.set(null, "value"));
82  		}
83  
84  		@Test void a09_asMap() {
85  			assertBean(
86  				bean()
87  					.setDescription("a")
88  					.setTitle("b")
89  					.setVersion("c")
90  					.set("x1", "x1a")
91  					.asMap(),
92  				"description,title,version,x1",
93  				"a,b,c,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 			assertDoesNotThrow(() -> bean().set("foo", "bar"));
106 
107 			assertFalse(bean().isStrict());
108 			assertTrue(bean().strict().isStrict());
109 			assertFalse(bean().strict(false).isStrict());
110 		}
111 	}
112 
113 	@Nested class B_emptyTests extends TestBase {
114 
115 		private static final BeanTester<Info> TESTER =
116 			testBean(bean())
117 			.props("description,title,version,termsOfService,contact,license")
118 			.vals("<null>,<null>,<null>,<null>,<null>,<null>")
119 			.json("{}")
120 			.string("{}")
121 		;
122 
123 		@Test void b01_gettersAndSetters() {
124 			TESTER.assertGettersAndSetters();
125 		}
126 
127 		@Test void b02_copy() {
128 			TESTER.assertCopy();
129 		}
130 
131 		@Test void b03_toJson() {
132 			TESTER.assertToJson();
133 		}
134 
135 		@Test void b04_fromJson() {
136 			TESTER.assertFromJson();
137 		}
138 
139 		@Test void b05_roundTrip() {
140 			TESTER.assertRoundTrip();
141 		}
142 
143 		@Test void b06_toString() {
144 			TESTER.assertToString();
145 		}
146 
147 		@Test void b07_keySet() {
148 			assertEmpty(TESTER.bean().keySet());
149 		}
150 	}
151 
152 	@Nested class C_extraProperties extends TestBase {
153 
154 		private static final BeanTester<Info> TESTER =
155 			testBean(
156 				bean()
157 					.set("contact", contact().setName("a"))
158 					.set("description", "b")
159 					.set("license", license().setName("c"))
160 					.set("siteName", "d")
161 					.set("termsOfService", "e")
162 					.set("title", "f")
163 					.set("version", "g")
164 					.set("x1", "x1a")
165 					.set("x2", null)
166 			)
167 			.props("contact{name},description,license{name},siteName,termsOfService,title,version,x1,x2")
168 			.vals("{a},b,{c},d,e,f,g,x1a,<null>")
169 			.json("{contact:{name:'a'},description:'b',license:{name:'c'},siteName:'d',termsOfService:'e',title:'f',version:'g',x1:'x1a'}")
170 			.string("{'contact':{'name':'a'},'description':'b','license':{'name':'c'},'siteName':'d','termsOfService':'e','title':'f','version':'g','x1':'x1a'}".replace('\'', '"'))
171 		;
172 
173 		@Test void c01_gettersAndSetters() {
174 			TESTER.assertGettersAndSetters();
175 		}
176 
177 		@Test void c02_copy() {
178 			TESTER.assertCopy();
179 		}
180 
181 		@Test void c03_toJson() {
182 			TESTER.assertToJson();
183 		}
184 
185 		@Test void c04_fromJson() {
186 			TESTER.assertFromJson();
187 		}
188 
189 		@Test void c05_roundTrip() {
190 			TESTER.assertRoundTrip();
191 		}
192 
193 		@Test void c06_toString() {
194 			TESTER.assertToString();
195 		}
196 
197 		@Test void c07_keySet() {
198 			assertList(TESTER.bean().keySet(), "contact", "description", "license", "siteName", "termsOfService", "title", "version", "x1", "x2");
199 		}
200 
201 		@Test void c08_get() {
202 			assertMapped(
203 				TESTER.bean(), (obj,prop) -> obj.get(prop, Object.class),
204 				"contact{name},description,license{name},siteName,termsOfService,title,version,x1,x2",
205 				"{a},b,{c},d,e,f,g,x1a,<null>"
206 			);
207 		}
208 
209 		@Test void c09_getTypes() {
210 			assertMapped(
211 				TESTER.bean(), (obj,prop) -> simpleClassNameOf(obj.get(prop, Object.class)),
212 				"contact,description,license,siteName,termsOfService,title,version,x1,x2",
213 				"Contact,String,License,String,String,String,String,String,<null>"
214 			);
215 		}
216 
217 		@Test void c10_nullPropertyValue() {
218 			assertThrows(IllegalArgumentException.class, ()->bean().get(null));
219 			assertThrows(IllegalArgumentException.class, ()->bean().get(null, String.class));
220 			assertThrows(IllegalArgumentException.class, ()->bean().set(null, "a"));
221 		}
222 	}
223 
224 	//---------------------------------------------------------------------------------------------
225 	// Helper methods
226 	//---------------------------------------------------------------------------------------------
227 
228 	private static Info bean() {
229 		return info();
230 	}
231 }