package io.swagger.model.override;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import io.swagger.converter.ModelConverter;
import io.swagger.converter.ModelConverterContext;
import io.swagger.converter.ModelConverters;
import io.swagger.models.Model;
import io.swagger.models.properties.Property;
import io.swagger.util.Json;
import com.fasterxml.jackson.databind.JavaType;
import org.testng.annotations.Test;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.Iterator;
public class CustomConverterTest {
@Test(description = "it should ignore properties with type Bar")
public void testCustomConverter() {
// add the custom converter
final ModelConverters converters = new ModelConverters();
converters.addConverter(new CustomConverter());
final Model model = converters.read(Foo.class).get("Foo");
assertNotNull(model);
assertEquals(model.getProperties().size(), 1);
final Property barProperty = model.getProperties().get("bar");
assertNull(barProperty);
final Property titleProperty = model.getProperties().get("title");
assertNotNull(titleProperty);
}
class CustomConverter implements ModelConverter {
@Override
public Property resolveProperty(Type type, ModelConverterContext context, Annotation[] annotations,
Iterator<ModelConverter> chain) {
final JavaType jType = Json.mapper().constructType(type);
if (jType != null) {
final Class<?> cls = jType.getRawClass();
if (cls.equals(Bar.class)) {
return null;
} else {
return chain.next().resolveProperty(type, context, annotations, chain);
}
} else {
return null;
}
}
@Override
public Model resolve(Type type, ModelConverterContext context, Iterator<ModelConverter> chain) {
return chain.next().resolve(type, context, chain);
}
}
class Foo {
public Bar bar = null;
public String title = null;
}
class Bar {
public String foo = null;
}
}