package cz.habarta.typescript.generator; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Set; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Application; import javax.ws.rs.core.Response; import org.junit.Assert; import org.junit.Test; public class SwaggerTest { @Test public void test() { final Settings settings = TestUtils.settings(); settings.generateJaxrsApplicationInterface = true; final String output = new TypeScriptGenerator(settings).generateTypeScript(Input.from(TestApplication.class)); Assert.assertTrue(output.contains("interface TestResponse")); Assert.assertTrue(output.contains("interface TestError")); Assert.assertTrue(output.contains("testOperationError(): RestResponse<any>;")); Assert.assertTrue(output.contains("testOperation1(): RestResponse<TestResponse>;")); Assert.assertTrue(output.contains("testOperation2(): RestResponse<TestResponse[]>;")); Assert.assertTrue(output.contains("testOperation3(): RestResponse<TestResponse[]>;")); Assert.assertTrue(output.contains("testOperation4(): RestResponse<{ [index: string]: TestResponse }>;")); Assert.assertTrue(!output.contains("testHiddenOperation")); } @Test public void testDocumentation() { final Settings settings = TestUtils.settings(); settings.generateJaxrsApplicationInterface = true; final String output = new TypeScriptGenerator(settings).generateTypeScript(Input.from(DocumentedApplication.class)); Assert.assertTrue(output.contains("Documentation for operation 1.")); Assert.assertTrue(output.contains("Bad Request")); Assert.assertTrue(output.contains("Not Found")); Assert.assertTrue(output.contains("Documentation for the bean.")); Assert.assertTrue(output.contains("Documentation for property 1.")); } private static class TestApplication extends Application { @Override public Set<Class<?>> getClasses() { return new LinkedHashSet<>(Arrays.<Class<?>>asList(TestResource.class)); } } @Path("test") private static class TestResource { @ApiOperation(value = "", response = TestResponse.class) @GET public Response testOperation1() { return Response.ok(new TestResponse()).build(); } @ApiOperation(value = "", responseContainer = "List", response = TestResponse.class) @GET public Response testOperation2() { return Response.ok(new TestResponse()).build(); } @ApiOperation(value = "", responseContainer = "Set", response = TestResponse.class) @GET public Response testOperation3() { return Response.ok(new TestResponse()).build(); } @ApiOperation(value = "", responseContainer = "Map", response = TestResponse.class) @GET public Response testOperation4() { return Response.ok(new TestResponse()).build(); } @ApiResponses({@ApiResponse(code = 400, message = "", response = TestError.class)}) @GET public Response testOperationError() { return Response.status(Response.Status.BAD_REQUEST).build(); } @ApiOperation(value = "", hidden = true) @GET public Response testHiddenOperation() { return null; } } private static class TestResponse { } private static class TestError { } private static class DocumentedApplication extends Application { @Override public Set<Class<?>> getClasses() { return new LinkedHashSet<>(Arrays.<Class<?>>asList(DocumentedResource.class)); } } @Path("test") private static class DocumentedResource { @ApiOperation("Documentation for operation 1.") @ApiResponses({ @ApiResponse(code = 400, message = "Bad Request"), @ApiResponse(code = 404, message = "Not Found"), }) @GET public DocumentedBean documentedOperation1() { return null; } } @ApiModel(description = "Documentation for the bean.") private static class DocumentedBean { @ApiModelProperty("Documentation for property 1.") public String property1; } }