package io.swagger;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.Extension;
import io.swagger.annotations.ExtensionProperty;
import io.swagger.util.BaseReaderUtils;
import com.google.common.collect.ImmutableMap;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Map;
public class BaseReaderUtilsTest {
@DataProvider
private Object[][] expectedData() {
return new Object[][]{
{"methodOne", Collections.emptyMap()},
{"methodTwo", Collections.emptyMap()},
{"methodThree", ImmutableMap.of(
"x-test1", "value1",
"x-test2", "value2",
"x-test", ImmutableMap.of("test1", "value1", "test2", "value2"))},
{"methodFour", ImmutableMap.of(
"x-test", ImmutableMap.of("test1", "value1", "test2", "value2"),
"x-test1", "value1",
"x-test2", "value2")},
{"methodFive", ImmutableMap.of(
"x-test1", ImmutableMap.of("test1", "value1", "test2", "value2"),
"x-test2", "value2")},
{"methodSix", ImmutableMap.of("x-test1", "value1", "x-test2", "value2")}
};
}
@Test(dataProvider = "expectedData")
public void extensionsTest(String methodName, Map<String, Object> expected) throws NoSuchMethodException {
final Method method = getClass().getDeclaredMethod(methodName);
final Extension[] extensions = method.getAnnotation(ApiOperation.class).extensions();
final Map<String, Object> map = BaseReaderUtils.parseExtensions(extensions);
Assert.assertEquals(map, expected);
}
@ApiOperation(value = "method")
private void methodOne() {
}
@ApiOperation(value = "method", extensions = {
@Extension(name = "test", properties = {
@ExtensionProperty(name = "test1", value = "")
})})
private void methodTwo() {
}
@ApiOperation(value = "method", extensions = {
@Extension(properties = {
@ExtensionProperty(name = "test1", value = "value1"),
@ExtensionProperty(name = "test2", value = "value2")
}),
@Extension(name = "test", properties = {
@ExtensionProperty(name = "test1", value = "value1"),
@ExtensionProperty(name = "test2", value = "value2")
})})
private void methodThree() {
}
@ApiOperation(value = "method", extensions = {
@Extension(name = "test", properties = {
@ExtensionProperty(name = "test1", value = "value1"),
@ExtensionProperty(name = "test2", value = "value2")
}),
@Extension(properties = {
@ExtensionProperty(name = "test1", value = "value1"),
@ExtensionProperty(name = "test2", value = "value2")
})
})
private void methodFour() {
}
@ApiOperation(value = "method", extensions = {
@Extension(properties = {
@ExtensionProperty(name = "test1", value = "value1"),
@ExtensionProperty(name = "test2", value = "value2")
}),
@Extension(name = "test1", properties = {
@ExtensionProperty(name = "test1", value = "value1"),
@ExtensionProperty(name = "test2", value = "value2")
})
})
private void methodFive() {
}
@ApiOperation(value = "method", extensions = {
@Extension(name = "test1", properties = {
@ExtensionProperty(name = "test1", value = "value1"),
@ExtensionProperty(name = "test2", value = "value2")
}),
@Extension(properties = {
@ExtensionProperty(name = "test1", value = "value1"),
@ExtensionProperty(name = "test2", value = "value2")
})
})
private void methodSix() {
}
}