CompositionSuperfluousRefTest.java
package io.swagger.v3.core.resolving;
import io.swagger.v3.core.converter.AnnotatedType;
import io.swagger.v3.core.converter.ModelConverters;
import io.swagger.v3.core.converter.ResolvedSchema;
import io.swagger.v3.oas.models.media.Schema;
import org.testng.Assert;
import org.testng.annotations.Test;
public class CompositionSuperfluousRefTest {
static class SomeDto {}
static class OtherDto {}
static class MyDtoOneOf {
@io.swagger.v3.oas.annotations.media.Schema(oneOf = { SomeDto.class, OtherDto.class })
public Object myProperty;
}
static class MyDtoWithAnyOf {
@io.swagger.v3.oas.annotations.media.Schema(anyOf = { SomeDto.class, OtherDto.class })
public Object myProperty;
}
static class MyDtoWithAllOf {
@io.swagger.v3.oas.annotations.media.Schema(allOf = { SomeDto.class, OtherDto.class })
public Object myProperty;
}
static class MyDtoWithoutComposition {
@io.swagger.v3.oas.annotations.media.Schema(implementation = SomeDto.class)
public Object myProperty;
}
static class MyDtoWithNonMatchingRef {
@io.swagger.v3.oas.annotations.media.Schema(
ref = "#/components/schemas/ThirdDto",
oneOf = { SomeDto.class, OtherDto.class }
)
public Object myProperty;
}
@Test
public void oneOf_shouldNotHaveRef() {
ResolvedSchema rs = ModelConverters.getInstance(false)
.resolveAsResolvedSchema(new AnnotatedType(MyDtoOneOf.class));
Schema<?> prop = (Schema<?>) rs.schema.getProperties().get("myProperty");
Assert.assertNull(prop.get$ref());
Assert.assertNotNull(prop.getOneOf());
Assert.assertEquals(prop.getOneOf().size(), 2);
}
@Test
public void anyOf_shouldNotHaveRef() {
ResolvedSchema rs = ModelConverters.getInstance(false)
.resolveAsResolvedSchema(new AnnotatedType(MyDtoWithAnyOf.class));
Schema<?> prop = (Schema<?>) rs.schema.getProperties().get("myProperty");
Assert.assertNull(prop.get$ref());
Assert.assertNotNull(prop.getAnyOf());
Assert.assertEquals(prop.getAnyOf().size(), 2);
}
@Test
public void allOf_shouldNotHaveRef() {
ResolvedSchema rs = ModelConverters.getInstance(false)
.resolveAsResolvedSchema(new AnnotatedType(MyDtoWithAllOf.class));
Schema<?> prop = (Schema<?>) rs.schema.getProperties().get("myProperty");
Assert.assertNull(prop.get$ref());
Assert.assertNotNull(prop.getAllOf());
Assert.assertEquals(prop.getAllOf().size(), 2);
}
@Test
public void testNonMatchingRef_shouldPreserveRef() {
ResolvedSchema rs = ModelConverters.getInstance(false)
.resolveAsResolvedSchema(new AnnotatedType(MyDtoWithNonMatchingRef.class));
Schema<?> prop = (Schema<?>) rs.schema.getProperties().get("myProperty");
Assert.assertNotNull(prop.get$ref());
Assert.assertEquals(prop.get$ref(), "#/components/schemas/ThirdDto");
//In 3.x refs cannot have siblings
Assert.assertNull(prop.getOneOf());
}
@Test
public void oneOf_shouldNotHaveRef31() {
ResolvedSchema rs = ModelConverters.getInstance(true)
.resolveAsResolvedSchema(new AnnotatedType(MyDtoOneOf.class));
Schema<?> prop = (Schema<?>) rs.schema.getProperties().get("myProperty");
Assert.assertNull(prop.get$ref());
Assert.assertNotNull(prop.getOneOf());
Assert.assertEquals(prop.getOneOf().size(), 2);
}
@Test
public void anyOf_shouldNotHaveRef31() {
ResolvedSchema rs = ModelConverters.getInstance(true)
.resolveAsResolvedSchema(new AnnotatedType(MyDtoWithAnyOf.class));
Schema<?> prop = (Schema<?>) rs.schema.getProperties().get("myProperty");
Assert.assertNull(prop.get$ref());
Assert.assertNotNull(prop.getAnyOf());
Assert.assertEquals(prop.getAnyOf().size(), 2);
}
@Test
public void allOf_shouldNotHaveRef31() {
ResolvedSchema rs = ModelConverters.getInstance(true)
.resolveAsResolvedSchema(new AnnotatedType(MyDtoWithAllOf.class));
Schema<?> prop = (Schema<?>) rs.schema.getProperties().get("myProperty");
Assert.assertNull(prop.get$ref());
Assert.assertNotNull(prop.getAllOf());
Assert.assertEquals(prop.getAllOf().size(), 2);
}
@Test
public void testNonMatchingRef_shouldPreserveRef31() {
ResolvedSchema rs = ModelConverters.getInstance(true)
.resolveAsResolvedSchema(new AnnotatedType(MyDtoWithNonMatchingRef.class));
Schema<?> prop = (Schema<?>) rs.schema.getProperties().get("myProperty");
Assert.assertNotNull(prop.get$ref());
Assert.assertEquals(prop.get$ref(), "#/components/schemas/ThirdDto");
Assert.assertNotNull(prop.getOneOf());
Assert.assertEquals(prop.getOneOf().size(), 2);
}
}