Skip to content

Commit 0c412b0

Browse files
authored
fix: accept swagger/openapi in yaml format (#1202)
* Accept swagger/openapi in yml Signed-off-by: Carson Cook <carson.cook@ibm.com> * Fix bean instantiation Signed-off-by: Carson Cook <carson.cook@ibm.com> * Suppress sonar warning for generic Signed-off-by: Carson Cook <carson.cook@ibm.com>
1 parent 2309c5f commit 0c412b0

File tree

4 files changed

+34
-25
lines changed

4 files changed

+34
-25
lines changed

api-catalog-services/src/main/java/org/zowe/apiml/apicatalog/swagger/TransformApiDocService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
*/
1010
package org.zowe.apiml.apicatalog.swagger;
1111

12-
import org.zowe.apiml.apicatalog.services.cached.model.ApiDocInfo;
13-
import org.zowe.apiml.apicatalog.swagger.api.AbstractApiDocService;
1412
import lombok.RequiredArgsConstructor;
1513
import lombok.extern.slf4j.Slf4j;
1614
import org.springframework.stereotype.Service;
15+
import org.zowe.apiml.apicatalog.services.cached.model.ApiDocInfo;
16+
import org.zowe.apiml.apicatalog.swagger.api.AbstractApiDocService;
1717

1818
import javax.validation.UnexpectedTypeException;
1919
import java.util.function.Function;
@@ -25,7 +25,7 @@
2525
@Service
2626
@RequiredArgsConstructor
2727
public class TransformApiDocService {
28-
private final Function<String, AbstractApiDocService> beanApiDocFactory;
28+
private final Function<String, AbstractApiDocService<?, ?>> beanApiDocFactory;
2929

3030
/**
3131
* Does transformation API documentation
@@ -38,7 +38,7 @@ public class TransformApiDocService {
3838
*/
3939
public String transformApiDoc(String serviceId, ApiDocInfo apiDocInfo) {
4040
//maybe null check of apidocinfo
41-
AbstractApiDocService abstractApiDocService = beanApiDocFactory.apply(apiDocInfo.getApiDocContent());
41+
AbstractApiDocService<?, ?> abstractApiDocService = beanApiDocFactory.apply(apiDocInfo.getApiDocContent());
4242
if (abstractApiDocService == null) {
4343
throw new UnexpectedTypeException("Response is not a Swagger or OpenAPI type object.");
4444
}

api-catalog-services/src/main/java/org/zowe/apiml/apicatalog/swagger/api/ApiTransformationConfig.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,17 @@
99
*/
1010
package org.zowe.apiml.apicatalog.swagger.api;
1111

12-
import org.zowe.apiml.product.gateway.GatewayClient;
1312
import com.fasterxml.jackson.annotation.JsonInclude;
1413
import com.fasterxml.jackson.databind.JsonNode;
1514
import com.fasterxml.jackson.databind.ObjectMapper;
1615
import com.fasterxml.jackson.databind.node.ObjectNode;
16+
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
1717
import lombok.RequiredArgsConstructor;
1818
import lombok.extern.slf4j.Slf4j;
1919
import org.springframework.context.annotation.Bean;
2020
import org.springframework.context.annotation.Configuration;
2121
import org.springframework.context.annotation.Scope;
22+
import org.zowe.apiml.product.gateway.GatewayClient;
2223

2324
import javax.validation.UnexpectedTypeException;
2425
import java.io.IOException;
@@ -27,20 +28,20 @@
2728
@Configuration
2829
@Slf4j
2930
@RequiredArgsConstructor
31+
@SuppressWarnings("squid:S1452")
3032
public class ApiTransformationConfig {
3133

3234
private final GatewayClient gatewayClient;
3335

3436
@Bean
35-
public Function<String, AbstractApiDocService> beanApiDocFactory() {
37+
public Function<String, AbstractApiDocService<?, ?>> beanApiDocFactory() {
3638
return this::abstractApiDocService;
3739
}
3840

39-
4041
@Bean
4142
@Scope(value = "prototype")
42-
public AbstractApiDocService abstractApiDocService(String content) {
43-
ObjectMapper mapper = new ObjectMapper();
43+
public AbstractApiDocService<?, ?> abstractApiDocService(String content) {
44+
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
4445
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
4546
try {
4647
ObjectNode objectNode = mapper.readValue(content, ObjectNode.class);

api-catalog-services/src/test/java/org/zowe/apiml/apicatalog/swagger/TransformApiDocServiceTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
*/
1010
package org.zowe.apiml.apicatalog.swagger;
1111

12+
import org.junit.jupiter.api.Assertions;
13+
import org.junit.jupiter.api.BeforeEach;
14+
import org.junit.jupiter.api.Test;
1215
import org.zowe.apiml.apicatalog.services.cached.model.ApiDocInfo;
1316
import org.zowe.apiml.apicatalog.swagger.api.AbstractApiDocService;
1417
import org.zowe.apiml.apicatalog.swagger.api.ApiDocV2Service;
1518
import org.zowe.apiml.apicatalog.swagger.api.ApiDocV3Service;
16-
import org.junit.jupiter.api.BeforeEach;
17-
import org.junit.jupiter.api.Test;
18-
import org.junit.jupiter.api.Assertions;
1919

2020
import javax.validation.UnexpectedTypeException;
2121
import java.util.function.Function;
@@ -26,7 +26,7 @@ class TransformApiDocServiceTest {
2626

2727
private final String SERVICE_ID = "SERVICE_1";
2828

29-
private Function<String, AbstractApiDocService> beanApiDocFactory;
29+
private Function<String, AbstractApiDocService<?, ?>> beanApiDocFactory;
3030
private TransformApiDocService transformApiDocService;
3131

3232
@BeforeEach

api-catalog-services/src/test/java/org/zowe/apiml/apicatalog/swagger/api/ApiTransformationConfigTest.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,47 +15,55 @@
1515
import javax.validation.UnexpectedTypeException;
1616
import java.util.function.Function;
1717

18-
import static org.junit.jupiter.api.Assertions.assertTrue;
19-
import static org.junit.jupiter.api.Assertions.assertNull;
20-
import static org.junit.jupiter.api.Assertions.assertEquals;
21-
import static org.junit.jupiter.api.Assertions.assertThrows;
18+
import static org.junit.jupiter.api.Assertions.*;
2219

2320
class ApiTransformationConfigTest {
24-
private AbstractApiDocService abstractApiDocService;
21+
private AbstractApiDocService<?, ?> abstractApiDocService;
2522

26-
private ApiTransformationConfig apiTransformationConfig = new ApiTransformationConfig(null);
27-
private Function<String, AbstractApiDocService> beanApiDocFactory = apiTransformationConfig.beanApiDocFactory();
23+
private final ApiTransformationConfig apiTransformationConfig = new ApiTransformationConfig(null);
24+
private final Function<String, AbstractApiDocService<?, ?>> beanApiDocFactory = apiTransformationConfig.beanApiDocFactory();
2825

2926
@BeforeEach
3027
void setUp() {
3128
abstractApiDocService = null;
3229
}
3330

3431
@Test
35-
void testApiDocFactory_whenSwagerDocIsPresent() {
32+
void givenSwaggerJson_whenGetApiDocService_thenReturnApiDocV2Service() {
3633
abstractApiDocService = beanApiDocFactory.apply("{\"swagger\": \"2.0\"}");
3734
assertTrue(abstractApiDocService instanceof ApiDocV2Service, "AbstractApiDocService is not ApiDocV2Service");
3835
}
3936

4037
@Test
41-
void testApiDocFactory_whenOpenApiDocIsPresent() {
38+
void givenOpenApiJson_whenGetApiDocService_thenReturnApiDocV3Service() {
4239
abstractApiDocService = beanApiDocFactory.apply("{\"openapi\": \"3.0\"}");
4340
assertTrue(abstractApiDocService instanceof ApiDocV3Service, "AbstractApiDocService is not ApiDocV3Service");
4441
}
4542

4643
@Test
47-
void testApiDocFactory_whenApDocIsNotOpenApiNorSwagger() {
44+
void givenSwaggerYml_whenGetApiDocService_thenReturnApiDocV2Service() {
45+
abstractApiDocService = beanApiDocFactory.apply("swagger: 2.0");
46+
assertTrue(abstractApiDocService instanceof ApiDocV2Service, "AbstractApiDocService is not ApiDocV2Service");
47+
}
48+
49+
@Test
50+
void givenOpenApiYml_whenGetApiDocService_thenReturnApiDocV3Service() {
51+
abstractApiDocService = beanApiDocFactory.apply("openapi: 3.0");
52+
assertTrue(abstractApiDocService instanceof ApiDocV3Service, "AbstractApiDocService is not ApiDocV3Service");
53+
}
54+
55+
@Test
56+
void givenApiDocNotInOpenApiNorSwagger_whenGetApiDocService_thenReturnNull() {
4857
abstractApiDocService = beanApiDocFactory.apply("{\"superapi\": \"3.0\"}");
4958
assertNull(abstractApiDocService, "abstractApiDocService is not null");
5059
}
5160

5261
@Test
53-
void testApiDocFactory_whenApDocVersionIsNotAsExpectedFormat() {
62+
void givenApDocVersionIsNotAsExpectedFormat_whenGetApiDocService_thenThrowException() {
5463
Exception exception = assertThrows(UnexpectedTypeException.class, () -> {
5564
abstractApiDocService = beanApiDocFactory.apply("FAILED FORMAT");
5665
});
5766
assertNull(abstractApiDocService);
5867
assertEquals("Response is not a Swagger or OpenAPI type object.", exception.getMessage());
5968
}
60-
6169
}

0 commit comments

Comments
 (0)