package io.swagger;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.converter.ModelConverters;
import io.swagger.models.Model;
import io.swagger.util.Json;
import org.testng.annotations.Test;
import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Min;
import java.math.BigDecimal;
import java.util.Map;
import static org.testng.Assert.assertEquals;
public class NumericFormatTest {
@Test
public void testFormatOfInteger() {
final Map<String, Model> models = ModelConverters.getInstance().readAll(ModelWithIntegerFields.class);
assertEquals(models.size(), 1);
String json = Json.pretty(models);
assertEquals(json,
"{\n" +
" \"ModelWithIntegerFields\" : {\n" +
" \"type\" : \"object\",\n" +
" \"properties\" : {\n" +
" \"id\" : {\n" +
" \"type\" : \"integer\",\n" +
" \"format\" : \"int32\",\n" +
" \"minimum\" : 3\n" +
" }\n" +
" }\n" +
" }\n" +
"}");
}
@Test
public void testFormatOfDecimal() {
final Map<String, Model> models = ModelConverters.getInstance().readAll(ModelWithDecimalFields.class);
assertEquals(models.size(), 1);
String json = Json.pretty(models);
assertEquals(json,
"{\n" +
" \"ModelWithDecimalFields\" : {\n" +
" \"type\" : \"object\",\n" +
" \"properties\" : {\n" +
" \"id\" : {\n" +
" \"type\" : \"number\",\n" +
" \"format\" : \"double\",\n" +
" \"minimum\" : 3.3,\n" +
" \"exclusiveMinimum\" : false\n" +
" }\n" +
" }\n" +
" }\n" +
"}");
}
@Test
public void testFormatOfBigDecimal() {
final Map<String, Model> models = ModelConverters.getInstance().readAll(ModelWithoutScientificFields.class);
assertEquals(models.size(), 1);
String json = Json.pretty(models);
assertEquals(json,
"{\n" +
" \"ModelWithoutScientificFields\" : {\n" +
" \"type\" : \"object\",\n" +
" \"properties\" : {\n" +
" \"id\" : {\n" +
" \"type\" : \"number\",\n" +
" \"minimum\" : -9999999999999999.99,\n" +
" \"maximum\" : 9999999999999999.99,\n" +
" \"exclusiveMinimum\" : false,\n" +
" \"exclusiveMaximum\" : false\n" +
" }\n" +
" }\n" +
" }\n" +
"}");
}
static class ModelWithIntegerFields {
@ApiModelProperty
@Min(value = 3)
public Integer id;
}
static class ModelWithDecimalFields {
@ApiModelProperty
@DecimalMin(value = "3.3")
public Double id;
}
static class ModelWithoutScientificFields {
@ApiModelProperty
@DecimalMin(value = "-9999999999999999.99")
@DecimalMax(value = "9999999999999999.99")
public BigDecimal id;
}
}