Skip to content

Commit 55cdf68

Browse files
committed
Merge pull request #1823 from swagger-api/issue-1822
Added duplicate operation ID generation
2 parents 8923a54 + 19c81bf commit 55cdf68

File tree

3 files changed

+63
-11
lines changed

3 files changed

+63
-11
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1792,6 +1792,20 @@ public void addOperationToGroup(String tag, String resourcePath, Operation opera
17921792
opList = new ArrayList<CodegenOperation>();
17931793
operations.put(tag, opList);
17941794
}
1795+
// check for operationId uniqueness
1796+
1797+
String uniqueName = co.operationId;
1798+
int counter = 0;
1799+
for(CodegenOperation op : opList) {
1800+
if(uniqueName.equals(op.operationId)) {
1801+
uniqueName = co.operationId + "_" + counter;
1802+
counter ++;
1803+
}
1804+
}
1805+
if(!co.operationId.equals(uniqueName)) {
1806+
LOGGER.warn("generated unique operationId `" + uniqueName + "`");
1807+
}
1808+
co.operationId = uniqueName;
17951809
opList.add(co);
17961810
co.baseName = tag;
17971811
}

modules/swagger-codegen/src/test/java/io/swagger/codegen/DefaultGeneratorTest.java

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,16 @@
99
import org.testng.annotations.BeforeMethod;
1010
import org.testng.annotations.Test;
1111

12-
import java.io.BufferedWriter;
13-
import java.io.File;
14-
import java.io.FileOutputStream;
15-
import java.io.IOException;
16-
import java.io.OutputStreamWriter;
17-
import java.io.Writer;
12+
import java.io.*;
1813
import java.nio.charset.StandardCharsets;
19-
import java.util.Arrays;
14+
import java.util.HashSet;
2015
import java.util.List;
2116
import java.util.Map;
17+
import java.util.Set;
2218

2319
import static java.nio.charset.StandardCharsets.UTF_8;
2420
import static org.junit.Assert.fail;
25-
import static org.testng.Assert.assertEquals;
26-
import static org.testng.Assert.assertTrue;
27-
import static org.testng.Assert.assertNull;
21+
import static org.testng.Assert.*;
2822

2923
/**
3024
* Tests for DefaultGenerator logic
@@ -182,6 +176,30 @@ public void testSkipOverwrite() throws Exception {
182176
assertTrue(pom.exists());
183177
}
184178

179+
@Test
180+
public void testGenerateUniqueOperationIds() {
181+
final File output = folder.getRoot();
182+
183+
final Swagger swagger = new SwaggerParser().read("src/test/resources/2_0/duplicateOperationIds.yaml");
184+
CodegenConfig codegenConfig = new JavaClientCodegen();
185+
codegenConfig.setOutputDir(output.getAbsolutePath());
186+
187+
ClientOptInput clientOptInput = new ClientOptInput().opts(new ClientOpts()).swagger(swagger).config(codegenConfig);
188+
189+
DefaultGenerator generator = new DefaultGenerator();
190+
generator.opts(clientOptInput);
191+
192+
Map<String, List<CodegenOperation>> paths = generator.processPaths(swagger.getPaths());
193+
Set<String> opIds = new HashSet<String>();
194+
for(String path : paths.keySet()) {
195+
List<CodegenOperation> ops = paths.get(path);
196+
for(CodegenOperation op : ops) {
197+
assertFalse(opIds.contains(op.operationId));
198+
opIds.add(op.operationId);
199+
}
200+
}
201+
}
202+
185203
private void changeContent(File file) throws IOException {
186204
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), UTF_8));
187205
out.write(TEST_SKIP_OVERWRITE);
@@ -198,5 +216,4 @@ private CodegenOperation findCodegenOperationByOperationId(Map<String, List<Code
198216
}
199217
return null;
200218
}
201-
202219
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
swagger: "2.0"
3+
info:
4+
version: "1.0.1"
5+
title: "fun!"
6+
basePath: "/v1"
7+
paths:
8+
/one:
9+
get:
10+
operationId: "duplicate"
11+
parameters: []
12+
responses:
13+
200:
14+
description: "success"
15+
/two:
16+
get:
17+
operationId: "duplicate"
18+
parameters: []
19+
responses:
20+
200:
21+
description: "success"

0 commit comments

Comments
 (0)