Skip to content

Commit c5ae3d5

Browse files
Hotfix 1.0.3, update the api document detection process and allow refs inopenapi response headers
1 parent f65849c commit c5ae3d5

File tree

10 files changed

+9448
-14
lines changed

10 files changed

+9448
-14
lines changed

its/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.apiaddicts.apitools.dosonarapi</groupId>
77
<artifactId>dosonarapi</artifactId>
8-
<version>1.0.2</version>
8+
<version>1.0.3</version>
99
<relativePath>../pom.xml</relativePath>
1010
</parent>
1111
<modelVersion>4.0.0</modelVersion>

openapi-checks/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.apiaddicts.apitools.dosonarapi</groupId>
77
<artifactId>dosonarapi</artifactId>
8-
<version>1.0.2</version>
8+
<version>1.0.3</version>
99
<relativePath>../pom.xml</relativePath>
1010
</parent>
1111

openapi-front-end/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.apiaddicts.apitools.dosonarapi</groupId>
77
<artifactId>dosonarapi</artifactId>
8-
<version>1.0.2</version>
8+
<version>1.0.3</version>
99
<relativePath>../pom.xml</relativePath>
1010
</parent>
1111

openapi-front-end/src/main/java/org/apiaddicts/apitools/dosonarapi/api/v3/OpenApi3Grammar.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ private static void buildResponses(YamlGrammarBuilder b) {
200200
b.rule(RESPONSE).is(b.object(
201201
b.mandatoryProperty("description", DESCRIPTION),
202202
b.property("headers", b.object(
203-
b.patternProperty(".*", HEADER))),
203+
b.patternProperty(".*", b.firstOf(REF, HEADER)))),
204204
b.property("content", b.object(
205205
b.patternProperty(".*", MEDIA_TYPE))),
206206
b.property("links", b.object(

openapi-test-tools/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.apiaddicts.apitools.dosonarapi</groupId>
77
<artifactId>dosonarapi</artifactId>
8-
<version>1.0.2</version>
8+
<version>1.0.3</version>
99
<relativePath>../pom.xml</relativePath>
1010
</parent>
1111

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
<groupId>org.apiaddicts.apitools.dosonarapi</groupId>
1111
<artifactId>dosonarapi</artifactId>
12-
<version>1.0.2</version>
12+
<version>1.0.3</version>
1313
<packaging>pom</packaging>
1414

1515
<name>SonarOpenAPI</name>

sonar-openapi-plugin/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.apiaddicts.apitools.dosonarapi</groupId>
77
<artifactId>dosonarapi</artifactId>
8-
<version>1.0.2</version>
8+
<version>1.0.3</version>
99
<relativePath>../pom.xml</relativePath>
1010
</parent>
1111

sonar-openapi-plugin/src/main/java/org/apiaddicts/apitools/dosonarapi/plugin/OpenApiAnalyzer.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ private void scanFile(InputFile inputFile) {
113113
OpenApiVisitorContext visitorContext;
114114
try {
115115
String content = getContent(inputFile);
116-
116+
if (!content.contains("swagger") && !content.contains("openapi")) return;
117117
JsonNode rootNode = genericParser.parse(content);
118118
boolean isV2 = !rootNode.at("/swagger").isMissing();
119119
boolean isV3 = !rootNode.at("/openapi").isMissing();
@@ -156,13 +156,16 @@ private void scanFile(InputFile inputFile) {
156156
*/
157157
private String getContent(InputFile inputFile) throws IOException {
158158
String [] lines = inputFile.contents().split("\n");
159-
for (int i = 1; i < lines.length; i++) {
160-
lines[i] = lines[i].replace("\t", " ");
161-
lines[i] = lines[i].replace("\\/", "/");
159+
for (int i = 0; i < lines.length; i++) {
160+
lines[i] = lines[i].replace("\t", " ");
161+
lines[i] = lines[i].replace("\\/", "//");
162+
lines[i] = lines[i].replace("!!", " ");
162163
if (!lines[i].trim().isEmpty()) continue;
163-
int n = lines[i-1].indexOf(lines[i-1].trim());
164-
if (n < 0) n = 0;
165-
lines[i] = String.join("", Collections.nCopies(n, " ")) + "#";
164+
if (i > 0) {
165+
int n = lines[i - 1].indexOf(lines[i - 1].trim());
166+
if (n < 0) n = 0;
167+
lines[i] = String.join("", Collections.nCopies(n, " ")) + "#";
168+
}
166169
}
167170
return String.join("\n", lines);
168171
}

sonar-openapi-plugin/src/test/java/org/apiaddicts/apitools/dosonarapi/plugin/OpenApiScannerSensorTest.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
import java.nio.charset.StandardCharsets;
2525
import java.nio.file.Path;
2626
import java.nio.file.Paths;
27+
import java.util.ArrayList;
28+
import java.util.LinkedList;
29+
import java.util.List;
2730

2831
import org.junit.Before;
2932
import org.junit.Test;
@@ -129,6 +132,16 @@ public void parse_error() {
129132
);
130133
}
131134

135+
@Test
136+
public void parse_openapi3_headers_ref() {
137+
inputFile("headers_ref.yaml");
138+
activeRules = (new ActiveRulesBuilder())
139+
.create(RuleKey.of(CheckList.REPOSITORY_KEY, ParsingErrorCheck.CHECK_KEY))
140+
.activate()
141+
.build();
142+
sensor().execute(context);
143+
}
144+
132145
@Test
133146
public void parse_yaml_break_comment_ok() {
134147
inputFile("parse-yaml.yaml");
@@ -165,6 +178,21 @@ public void parse_yaml_tabs_ok() {
165178
assertThat(context.allAnalysisErrors()).hasSize(0);
166179
}
167180

181+
//@Test
182+
public void test_folder() {
183+
List<String> files = listFiles("files");
184+
List<String> errorFiles = new LinkedList<>();
185+
for (String file: files) {
186+
context = SensorContextTester.create(baseDir);
187+
inputFile(file);
188+
activeRules = (new ActiveRulesBuilder()).create(RuleKey.of(CheckList.REPOSITORY_KEY, ParsingErrorCheck.CHECK_KEY))
189+
.activate().build();
190+
sensor().execute(context);
191+
if (!context.allIssues().isEmpty() || !context.allAnalysisErrors().isEmpty()) errorFiles.add(file);
192+
}
193+
System.out.println(errorFiles);
194+
}
195+
168196
@Test
169197
public void cancelled_analysis() {
170198
InputFile inputFile = inputFile("file1.yaml");
@@ -193,4 +221,22 @@ private InputFile inputFile(String name) {
193221
context.fileSystem().add(inputFile);
194222
return inputFile;
195223
}
224+
225+
private List<String> listFiles(String folderName) {
226+
File folder = baseDir.resolve(folderName).toAbsolutePath().toFile();
227+
return listFilesInFolder(folder, baseDir.toFile());
228+
}
229+
private static List<String> listFilesInFolder(File folder, File baseFolder) {
230+
File[] files = folder.listFiles();
231+
List<String> allPaths = new ArrayList<>();
232+
for (File file : files) {
233+
if (file.isFile()) {
234+
String relativePath = baseFolder.toURI().relativize(file.toURI()).getPath();
235+
allPaths.add(relativePath);
236+
} else if (file.isDirectory()) {
237+
allPaths.addAll(listFilesInFolder(file, baseFolder));
238+
}
239+
}
240+
return allPaths;
241+
}
196242
}

0 commit comments

Comments
 (0)