Skip to content

Commit 2107e9e

Browse files
authored
Added support for openapi-normalizer in the online version. (#19336)
* Added support for openapi-normalizer in the online version with a minimal test. * removed comments and formatted code
1 parent fdd2dc9 commit 2107e9e

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

modules/openapi-generator-online/src/main/java/org/openapitools/codegen/online/model/GeneratorInput.java

+3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import lombok.Getter;
2424
import lombok.Setter;
2525

26+
import java.util.List;
2627
import java.util.Map;
2728

2829
@Setter
@@ -31,6 +32,8 @@ public class GeneratorInput {
3132
@Getter private Map<String, String> options;
3233
private String openAPIUrl;
3334
@Getter private AuthorizationValue authorizationValue;
35+
//FILTER=operationId:updatePet
36+
@Getter private List<String> openapiNormalizer;
3437

3538
@ApiModelProperty(example = "https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml")
3639
public String getOpenAPIUrl() {

modules/openapi-generator-online/src/main/java/org/openapitools/codegen/online/service/Generator.java

+11
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ private static String generate(String language, GeneratorInput opts, Type type)
118118
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "The OpenAPI specification supplied was not valid");
119119
}
120120

121+
121122
// do not use opts.getOptions().get("outputFolder") as the input can contain ../../
122123
// to access other folders in the server
123124
String destPath = language + "-" + type.getTypeName();
@@ -140,6 +141,16 @@ private static String generate(String language, GeneratorInput opts, Type type)
140141
codegenConfig.additionalProperties().put("openAPI", openapi);
141142
}
142143

144+
if(opts.getOpenapiNormalizer() != null && !opts.getOpenapiNormalizer().isEmpty()){
145+
for(String rule: opts.getOpenapiNormalizer()){
146+
String[] ruleOperands = rule.split("=");
147+
if(ruleOperands.length != 2) {
148+
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "In rule: " + rule + "the operands were not provided in the form of <Rule>=<Value>");
149+
}
150+
codegenConfig.openapiNormalizer().put(ruleOperands[0],ruleOperands[1]);
151+
}
152+
}
153+
143154
codegenConfig.setOutputDir(outputFolder);
144155

145156
clientOptInput.config(codegenConfig);

modules/openapi-generator-online/src/test/java/org/openapitools/codegen/online/api/GenApiControllerTest.java

+29
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.springframework.http.MediaType;
1111
import org.springframework.test.context.junit.jupiter.SpringExtension;
1212
import org.springframework.test.web.servlet.MockMvc;
13+
import org.springframework.util.Assert;
1314

1415
import static org.hamcrest.Matchers.hasItem;
1516
import static org.hamcrest.Matchers.not;
@@ -133,4 +134,32 @@ public void generateClientWithInvalidOpenAPIUrl() throws Exception {
133134
.content("{\"openAPIUrl\": \"" + invalidOpenAPIUrl + "\"}"))
134135
.andExpect(status().isBadRequest());
135136
}
137+
138+
@Test
139+
public void generateWithOpenAPINormalizer() throws Exception {
140+
String withOpenAPINormalizer = "{\"openAPIUrl\":\"https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml\",\"openapiNormalizer\":[\"FILTER=operationId:updatePet\"],\"options\":{},\"spec\":{}}";
141+
String withoutOpenAPINormalizer = "{\"openAPIUrl\":\"https://raw.githubusercontent.com/OpenAPITools/openapi-generator/master/modules/openapi-generator/src/test/resources/2_0/petstore.yaml\",\"options\":{},\"spec\":{}}";
142+
143+
String responseOfNormalized = mockMvc.perform(post("http://test.com:1234/api/gen/clients/java")
144+
.contentType(MediaType.APPLICATION_JSON)
145+
.content(withOpenAPINormalizer))
146+
.andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
147+
String codeOfNormalized = new ObjectMapper().readValue(responseOfNormalized, ResponseCode.class).getCode();
148+
Long lengthOfNormalized = Long.parseLong(mockMvc.perform(get("http://test.com:1234/api/gen/download/" + codeOfNormalized))
149+
.andExpect(content().contentType("application/zip"))
150+
.andExpect(status().isOk()).andReturn().getResponse().getHeader("Content-Length"));
151+
152+
String responseOfNotNormalized = mockMvc.perform(post("http://test.com:1234/api/gen/clients/java")
153+
.contentType(MediaType.APPLICATION_JSON)
154+
.content(withoutOpenAPINormalizer))
155+
.andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
156+
157+
String codeOfNotNormalized = new ObjectMapper().readValue(responseOfNotNormalized, ResponseCode.class).getCode();
158+
Long lengthOfNotNormalized = Long.parseLong(mockMvc.perform(get("http://test.com:1234/api/gen/download/" + codeOfNotNormalized))
159+
.andExpect(content().contentType("application/zip"))
160+
.andExpect(status().isOk()).andReturn().getResponse().getHeader("Content-Length"));
161+
162+
Assert.isTrue(lengthOfNormalized <= lengthOfNotNormalized,"Using the normalizer should result in a smaller or equal file size");
163+
164+
}
136165
}

0 commit comments

Comments
 (0)