Skip to content

Commit 9af9971

Browse files
jminiwing328
authored andcommitted
[all] Add leading slash in path if missing (OpenAPITools#1034)
* [all] Add leading slash in path if missing * Fix unit Tests
1 parent fca984c commit 9af9971

File tree

3 files changed

+39
-13
lines changed

3 files changed

+39
-13
lines changed

Diff for: modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -2254,7 +2254,11 @@ public CodegenOperation fromOperation(String path,
22542254
}
22552255
operationId = removeNonNameElementToCamelCase(operationId);
22562256

2257-
op.path = path;
2257+
if(path.startsWith("/")) {
2258+
op.path = path;
2259+
} else {
2260+
op.path = "/" + path;
2261+
}
22582262
op.operationId = toOperationId(operationId);
22592263
op.summary = escapeText(operation.getSummary());
22602264
op.unescapedNotes = operation.getDescription();

Diff for: modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java

+26-4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import io.swagger.v3.oas.models.Components;
2222
import io.swagger.v3.oas.models.OpenAPI;
2323
import io.swagger.v3.oas.models.Operation;
24+
import io.swagger.v3.oas.models.PathItem;
2425
import io.swagger.v3.oas.models.media.ArraySchema;
2526
import io.swagger.v3.oas.models.media.Content;
2627
import io.swagger.v3.oas.models.media.MediaType;
@@ -37,8 +38,14 @@
3738
import org.testng.Assert;
3839
import org.testng.annotations.Test;
3940

40-
import java.lang.reflect.Method;
41-
import java.util.*;
41+
import java.util.Arrays;
42+
import java.util.Collections;
43+
import java.util.HashMap;
44+
import java.util.HashSet;
45+
import java.util.List;
46+
import java.util.Locale;
47+
import java.util.Map;
48+
import java.util.Set;
4249
import java.util.stream.Collectors;
4350

4451

@@ -224,8 +231,8 @@ public void testConsistentParameterNameAfterUniquenessRename() throws Exception
224231
.responses(new ApiResponses().addApiResponse("200", new ApiResponse().description("OK")));
225232

226233
DefaultCodegen codegen = new DefaultCodegen();
227-
CodegenOperation co = codegen.fromOperation("p/", "get", operation, Collections.emptyMap());
228-
Assert.assertEquals(co.path, "p/");
234+
CodegenOperation co = codegen.fromOperation("/some/path", "get", operation, Collections.emptyMap());
235+
Assert.assertEquals(co.path, "/some/path");
229236
Assert.assertEquals(co.allParams.size(), 2);
230237
List<String> allParamsNames = co.allParams.stream().map(p -> p.paramName).collect(Collectors.toList());
231238
Assert.assertTrue(allParamsNames.contains("myparam"));
@@ -500,6 +507,21 @@ public void testCallbacks() {
500507
});
501508
}
502509

510+
@Test
511+
public void testLeadingSlashIsAddedIfMissing() {
512+
OpenAPI openAPI = TestUtils.createOpenAPI();
513+
Operation operation1 = new Operation().operationId("op1").responses(new ApiResponses().addApiResponse("201", new ApiResponse().description("OK")));
514+
openAPI.path("/here", new PathItem().get(operation1));
515+
Operation operation2 = new Operation().operationId("op2").responses(new ApiResponses().addApiResponse("201", new ApiResponse().description("OK")));
516+
openAPI.path("some/path", new PathItem().get(operation2));
517+
final DefaultCodegen codegen = new DefaultCodegen();
518+
519+
CodegenOperation co1 = codegen.fromOperation("/here", "get", operation2, ModelUtils.getSchemas(openAPI), openAPI);
520+
Assert.assertEquals(co1.path, "/here");
521+
CodegenOperation co2 = codegen.fromOperation("some/path", "get", operation2, ModelUtils.getSchemas(openAPI), openAPI);
522+
Assert.assertEquals(co2.path, "/some/path");
523+
}
524+
503525
private void verifyPersonDiscriminator(CodegenDiscriminator discriminator) {
504526
CodegenDiscriminator test = new CodegenDiscriminator();
505527
test.setPropertyName("$_type");

Diff for: modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ public class DefaultGeneratorTest {
2222
public void testProcessPaths() throws Exception {
2323
OpenAPI openAPI = TestUtils.createOpenAPI();
2424
openAPI.setPaths(new Paths());
25-
openAPI.getPaths().addPathItem("path1/", new PathItem().get(new Operation().operationId("op1").responses(new ApiResponses().addApiResponse("201", new ApiResponse().description("OK")))));
26-
openAPI.getPaths().addPathItem("path2/", new PathItem().get(new Operation().operationId("op2").addParametersItem(new QueryParameter().name("p1").schema(new StringSchema())).responses(new ApiResponses().addApiResponse("201", new ApiResponse().description("OK")))));
27-
openAPI.getPaths().addPathItem("path3/", new PathItem().addParametersItem(new QueryParameter().name("p1").schema(new StringSchema())).get(new Operation().operationId("op3").addParametersItem(new QueryParameter().name("p2").schema(new IntegerSchema())).responses(new ApiResponses().addApiResponse("201", new ApiResponse().description("OK")))));
28-
openAPI.getPaths().addPathItem("path4/", new PathItem().addParametersItem(new QueryParameter().name("p1").schema(new StringSchema())).get(new Operation().operationId("op4").responses(new ApiResponses().addApiResponse("201", new ApiResponse().description("OK")))));
25+
openAPI.getPaths().addPathItem("/path1", new PathItem().get(new Operation().operationId("op1").responses(new ApiResponses().addApiResponse("201", new ApiResponse().description("OK")))));
26+
openAPI.getPaths().addPathItem("/path2", new PathItem().get(new Operation().operationId("op2").addParametersItem(new QueryParameter().name("p1").schema(new StringSchema())).responses(new ApiResponses().addApiResponse("201", new ApiResponse().description("OK")))));
27+
openAPI.getPaths().addPathItem("/path3", new PathItem().addParametersItem(new QueryParameter().name("p1").schema(new StringSchema())).get(new Operation().operationId("op3").addParametersItem(new QueryParameter().name("p2").schema(new IntegerSchema())).responses(new ApiResponses().addApiResponse("201", new ApiResponse().description("OK")))));
28+
openAPI.getPaths().addPathItem("/path4", new PathItem().addParametersItem(new QueryParameter().name("p1").schema(new StringSchema())).get(new Operation().operationId("op4").responses(new ApiResponses().addApiResponse("201", new ApiResponse().description("OK")))));
2929

3030
ClientOptInput opts = new ClientOptInput();
3131
opts.setOpenAPI(openAPI);
@@ -38,13 +38,13 @@ public void testProcessPaths() throws Exception {
3838
Assert.assertEquals(result.size(), 1);
3939
List<CodegenOperation> defaultList = result.get("Default");
4040
Assert.assertEquals(defaultList.size(), 4);
41-
Assert.assertEquals(defaultList.get(0).path, "path1/");
41+
Assert.assertEquals(defaultList.get(0).path, "/path1");
4242
Assert.assertEquals(defaultList.get(0).allParams.size(), 0);
43-
Assert.assertEquals(defaultList.get(1).path, "path2/");
43+
Assert.assertEquals(defaultList.get(1).path, "/path2");
4444
Assert.assertEquals(defaultList.get(1).allParams.size(), 1);
45-
Assert.assertEquals(defaultList.get(2).path, "path3/");
45+
Assert.assertEquals(defaultList.get(2).path, "/path3");
4646
Assert.assertEquals(defaultList.get(2).allParams.size(), 2);
47-
Assert.assertEquals(defaultList.get(3).path, "path4/");
47+
Assert.assertEquals(defaultList.get(3).path, "/path4");
4848
Assert.assertEquals(defaultList.get(3).allParams.size(), 1);
4949
}
5050
}

0 commit comments

Comments
 (0)