Ticket4239Test.java
package io.swagger.v3.core.resolving;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonView;
import io.swagger.v3.core.converter.AnnotatedType;
import io.swagger.v3.core.converter.ModelConverterContextImpl;
import io.swagger.v3.core.jackson.ModelResolver;
import io.swagger.v3.core.matchers.SerializationMatchers;
import org.testng.annotations.Test;
import java.lang.annotation.Annotation;
import static com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME;
public class Ticket4239Test extends SwaggerTestBase {
public interface Input {}
public interface Output {}
@JsonTypeInfo(use = NAME)
@JsonSubTypes({
@JsonSubTypes.Type(value = A1.class),
})
public static abstract class A {
@JsonView(Input.class)
public String a_in;
@JsonView(Output.class)
public String a_out;
}
public static class A1 extends A {
@JsonView(Input.class)
public String a1_in;
@JsonView(Output.class)
public String a1_out;
}
private static final JsonView VIEW_OUTPUT = new JsonView() {
public Class<? extends Annotation> annotationType() {
return JsonView.class;
}
public Class<?>[] value() {
return new Class[] {Output.class};
}
};
@Test
public void testJsonValueSchemaAnnotation() {
final ModelResolver modelResolver = new ModelResolver(mapper());
ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver);
AnnotatedType type = new AnnotatedType(Ticket4239Test.A.class).jsonViewAnnotation(VIEW_OUTPUT);
context.resolve(type);
SerializationMatchers.assertEqualsToYaml(context.getDefinedModels(), "A1_Output:\n" +
" type: object\n" +
" allOf:\n" +
" - $ref: \"#/components/schemas/A_Output\"\n" +
" - type: object\n" +
" properties:\n" +
" a1_out:\n" +
" type: string\n" +
"A_Output:\n" +
" type: object\n" +
" properties:\n" +
" a_out:\n" +
" type: string\n");
}
}