|
2 | 2 |
|
3 | 3 | import com.fasterxml.jackson.annotation.JsonSubTypes; |
4 | 4 | import com.fasterxml.jackson.annotation.JsonTypeInfo; |
5 | | -import com.fasterxml.jackson.annotation.JsonView; |
6 | | -import tools.jackson.databind.BeanDescription; |
7 | 5 | import tools.jackson.databind.ObjectMapper; |
8 | 6 | import io.swagger.v3.core.converter.AnnotatedType; |
9 | | -import io.swagger.v3.core.converter.ModelConverterContext; |
10 | 7 | import io.swagger.v3.core.converter.ModelConverterContextImpl; |
11 | 8 | import io.swagger.v3.core.jackson.ModelResolver; |
12 | 9 | import io.swagger.v3.oas.annotations.media.DiscriminatorMapping; |
@@ -225,28 +222,6 @@ public void jsonSubTypesOnlyParentIsComposedIntoOneOfWhenOptedIn() { |
225 | 222 | assertEquals(model.getOneOf().get(1).get$ref(), "#/components/schemas/PolymorphicSubtype2"); |
226 | 223 | } |
227 | 224 |
|
228 | | - @Test |
229 | | - public void extensionPointAllowsSubclassToRestorePreviousBehavior() { |
230 | | - ModelResolver.jsonSubTypesOneOf = true; |
231 | | - final ModelConverterContextImpl subclassContext = |
232 | | - new ModelConverterContextImpl(new RestorePreviousBehaviorModelResolver(new ObjectMapper())); |
233 | | - final Schema<?> restoredModel = subclassContext.resolve(new AnnotatedType(PolymorphicInterface.class)); |
234 | | - assertFalse(restoredModel instanceof ComposedSchema && ((ComposedSchema) restoredModel).getOneOf() != null, |
235 | | - "the resolved parent must not be auto-converted to a oneOf ComposedSchema when resolveSubtypes() is overridden"); |
236 | | - } |
237 | | - |
238 | | - static class RestorePreviousBehaviorModelResolver extends ModelResolver { |
239 | | - RestorePreviousBehaviorModelResolver(ObjectMapper mapper) { |
240 | | - super(mapper); |
241 | | - } |
242 | | - |
243 | | - @Override |
244 | | - protected boolean resolveSubtypes(Schema model, BeanDescription bean, |
245 | | - ModelConverterContext context, JsonView jsonViewAnnotation) { |
246 | | - return false; |
247 | | - } |
248 | | - } |
249 | | - |
250 | 225 | @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true) |
251 | 226 | @JsonSubTypes({ |
252 | 227 | @JsonSubTypes.Type(value = PolymorphicSubtype1.class, name = "subtype1"), |
@@ -322,6 +297,16 @@ public void optInExplicitSchemaOneOfWinsOverJsonSubTypes() { |
322 | 297 | assertEquals(model.getOneOf().size(), 2); |
323 | 298 | assertEquals(model.getOneOf().get(0).get$ref(), "#/components/schemas/SubBean1"); |
324 | 299 | assertEquals(model.getOneOf().get(1).get$ref(), "#/components/schemas/SubBean2"); |
| 300 | + |
| 301 | + // subtype handling and discriminator are identical to the flag-off output |
| 302 | + assertEquals(model.getDiscriminator().getPropertyName(), DISCRIMINATOR_PROPERTY_NAME); |
| 303 | + assertEquals(model.getDiscriminator().getMapping().get(SUB_BEAN_1_NAME), "#/components/schemas/SubBean1"); |
| 304 | + assertEquals(model.getDiscriminator().getMapping().get(SUB_BEAN_2_NAME), "#/components/schemas/SubBean2"); |
| 305 | + for (String subName : new String[]{SUB_BEAN_1_NAME, SUB_BEAN_2_NAME}) { |
| 306 | + final Schema<?> sub = context.getDefinedModels().get(subName); |
| 307 | + assertTrue(sub instanceof ComposedSchema, subName + " must be composed"); |
| 308 | + assertEquals(((ComposedSchema) sub).getAllOf().get(0).get$ref(), "#/components/schemas/BaseBean"); |
| 309 | + } |
325 | 310 | } |
326 | 311 |
|
327 | 312 | @Test |
|
0 commit comments