package org.jsondoc.core.scanner.builder;
import org.jsondoc.core.annotation.Api;
import org.jsondoc.core.annotation.ApiMethod;
import org.jsondoc.core.pojo.ApiDoc;
import org.jsondoc.core.pojo.ApiMethodDoc;
import org.jsondoc.core.pojo.ApiStage;
import org.jsondoc.core.pojo.ApiVisibility;
import org.jsondoc.core.pojo.JSONDoc.MethodDisplay;
import org.jsondoc.core.scanner.DefaultJSONDocScanner;
import org.jsondoc.core.scanner.JSONDocScanner;
import org.junit.Assert;
import org.junit.Test;
import com.google.common.collect.Sets;
public class JSONDocApiVisibilityBuilderTest {
JSONDocScanner jsondocScanner = new DefaultJSONDocScanner();
@Api(name = "test-type-level-visibility-and-stage", description = "Test type level visibility and stage attributes", visibility = ApiVisibility.PUBLIC, stage = ApiStage.BETA)
private class Controller {
@ApiMethod(path = "/inherit")
public void inherit() {
}
@ApiMethod(path = "/override", visibility = ApiVisibility.PRIVATE, stage = ApiStage.GA)
public void override() {
}
}
@Api(name = "test-method-level-visibility-and-stage", description = "Test method level visibility and stage attributes")
private class Controller2 {
@ApiMethod(path = "/only-method", visibility = ApiVisibility.PRIVATE, stage = ApiStage.DEPRECATED)
public void testVisibilityAndStage() {
}
}
@Test
public void testApiVisibility() {
ApiDoc apiDoc = jsondocScanner.getApiDocs(Sets.<Class<?>> newHashSet(Controller.class), MethodDisplay.URI).iterator().next();
Assert.assertEquals(ApiVisibility.PUBLIC, apiDoc.getVisibility());
Assert.assertEquals(ApiStage.BETA, apiDoc.getStage());
for (ApiMethodDoc apiMethodDoc : apiDoc.getMethods()) {
if(apiMethodDoc.getPath().contains("/inherit")) {
Assert.assertEquals(ApiVisibility.PUBLIC, apiMethodDoc.getVisibility());
Assert.assertEquals(ApiStage.BETA, apiMethodDoc.getStage());
}
if(apiMethodDoc.getPath().contains("/override")) {
Assert.assertEquals(ApiVisibility.PRIVATE, apiMethodDoc.getVisibility());
Assert.assertEquals(ApiStage.GA, apiMethodDoc.getStage());
}
}
apiDoc = jsondocScanner.getApiDocs(Sets.<Class<?>> newHashSet(Controller2.class), MethodDisplay.URI).iterator().next();
Assert.assertEquals(ApiVisibility.UNDEFINED, apiDoc.getVisibility());
Assert.assertEquals(ApiStage.UNDEFINED, apiDoc.getStage());
for (ApiMethodDoc apiMethodDoc : apiDoc.getMethods()) {
if(apiMethodDoc.getPath().contains("/only-method")) {
Assert.assertEquals(ApiVisibility.PRIVATE, apiMethodDoc.getVisibility());
Assert.assertEquals(ApiStage.DEPRECATED, apiMethodDoc.getStage());
}
}
}
}