Ticket5185Test.java
package io.swagger.v3.core.resolving;
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.oas.annotations.media.Schema;
import org.testng.annotations.Test;
import javax.validation.constraints.Email;
import java.net.URI;
import static io.swagger.v3.core.resolving.SwaggerTestBase.mapper;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
public class Ticket5185Test {
@Test
public void testExplicitFormatOverridesTypeDerivedFormat() {
final ModelResolver modelResolver = new ModelResolver(mapper());
final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver);
io.swagger.v3.oas.models.media.Schema schema = context.resolve(new AnnotatedType(UriExample.class));
assertNotNull(schema);
io.swagger.v3.oas.models.media.Schema uriReference =
(io.swagger.v3.oas.models.media.Schema) schema.getProperties().get("uriReferenceValue");
assertNotNull(uriReference);
assertEquals(uriReference.getFormat(), "uri-reference");
// A URI field without an explicit @Schema(format=...) still resolves to the default "uri" format
io.swagger.v3.oas.models.media.Schema plainUri =
(io.swagger.v3.oas.models.media.Schema) schema.getProperties().get("uriValue");
assertNotNull(plainUri);
assertEquals(plainUri.getFormat(), "uri");
}
@Test
public void testExplicitFormatPrecedenceForStringAndNumericTypes() {
final ModelResolver modelResolver = new ModelResolver(mapper());
final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver);
io.swagger.v3.oas.models.media.Schema schema = context.resolve(new AnnotatedType(ExplicitFormatExample.class));
assertNotNull(schema);
assertProperty(schema, "uuidValue", "string", "uuid");
assertProperty(schema, "emailValue", "string", "email");
assertProperty(schema, "emailValidatedValue", "string", "email");
assertProperty(schema, "beanValidationEmailValue", "string", "email");
assertProperty(schema, "longValue", "integer", "int64");
assertProperty(schema, "integerAsInt64Value", "integer", "int64");
}
@Test
public void testExplicitFormatOverridesTypeDerivedFormatOpenApi31() {
final ModelResolver modelResolver = new ModelResolver(mapper());
modelResolver.setOpenapi31(true);
final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver);
io.swagger.v3.oas.models.media.Schema schema = context.resolve(new AnnotatedType(UriExample.class));
assertNotNull(schema);
io.swagger.v3.oas.models.media.Schema uriReference =
(io.swagger.v3.oas.models.media.Schema) schema.getProperties().get("uriReferenceValue");
assertNotNull(uriReference);
assertEquals(uriReference.getFormat(), "uri-reference");
io.swagger.v3.oas.models.media.Schema plainUri =
(io.swagger.v3.oas.models.media.Schema) schema.getProperties().get("uriValue");
assertNotNull(plainUri);
assertEquals(plainUri.getFormat(), "uri");
}
@Test
public void testExplicitFormatPrecedenceForStringAndNumericTypesOpenApi31() {
final ModelResolver modelResolver = new ModelResolver(mapper());
modelResolver.setOpenapi31(true);
final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver);
io.swagger.v3.oas.models.media.Schema schema = context.resolve(new AnnotatedType(ExplicitFormatExample.class));
assertNotNull(schema);
assertProperty31(schema, "uuidValue", "string", "uuid");
assertProperty31(schema, "emailValue", "string", "email");
assertProperty31(schema, "emailValidatedValue", "string", "email");
assertProperty31(schema, "beanValidationEmailValue", "string", "email");
assertProperty31(schema, "longValue", "integer", "int64");
assertProperty31(schema, "integerAsInt64Value", "integer", "int64");
}
private static void assertProperty(io.swagger.v3.oas.models.media.Schema schema, String propertyName, String type, String format) {
io.swagger.v3.oas.models.media.Schema property =
(io.swagger.v3.oas.models.media.Schema) schema.getProperties().get(propertyName);
assertNotNull(property);
assertEquals(property.getType(), type);
assertEquals(property.getFormat(), format);
}
private static void assertProperty31(io.swagger.v3.oas.models.media.Schema schema, String propertyName, String type, String format) {
io.swagger.v3.oas.models.media.Schema property =
(io.swagger.v3.oas.models.media.Schema) schema.getProperties().get(propertyName);
assertNotNull(property);
assertNotNull(property.getTypes());
assertTrue(property.getTypes().contains(type));
assertEquals(property.getFormat(), format);
}
static class UriExample {
@Schema(format = "uri-reference")
public URI uriReferenceValue;
public URI uriValue;
}
static class ExplicitFormatExample {
@Schema(format = "uuid")
public String uuidValue;
@Schema(format = "email")
public String emailValue;
@Schema(format = "email")
@Email
public String emailValidatedValue;
@Email
public String beanValidationEmailValue;
@Schema(format = "int64")
public Long longValue;
@Schema(format = "int64")
public Integer integerAsInt64Value;
}
}