package org.sonar.server.ws.ws;
import com.google.common.collect.Ordering;
+import java.util.Comparator;
import java.util.List;
import java.util.Set;
+import org.sonar.api.server.ws.Changelog;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
writer.prop("internal", action.isInternal());
writer.prop("post", action.isPost());
writer.prop("hasResponseExample", action.responseExample() != null);
- List<WebService.Param> params = action.params().stream().filter(p -> includeInternals || !p.isInternal()).collect(Collectors.toList());
- if (!params.isEmpty()) {
- // sort parameters by key
- Ordering<WebService.Param> ordering = Ordering.natural().onResultOf(WebService.Param::key);
- writer.name("params").beginArray();
- for (WebService.Param param : ordering.sortedCopy(params)) {
- writeParam(writer, param);
- }
- writer.endArray();
- }
+ writeHistory(writer, action);
+ writeParameters(writer, action, includeInternals);
writer.endObject();
}
}
+ private static void writeParameters(JsonWriter writer, WebService.Action action, boolean includeInternals) {
+ List<WebService.Param> params = action.params().stream().filter(p -> includeInternals || !p.isInternal()).collect(Collectors.toList());
+ if (!params.isEmpty()) {
+ // sort parameters by key
+ Ordering<WebService.Param> ordering = Ordering.natural().onResultOf(WebService.Param::key);
+ writer.name("params").beginArray();
+ for (WebService.Param param : ordering.sortedCopy(params)) {
+ writeParam(writer, param);
+ }
+ writer.endArray();
+ }
+ }
+
private static void writeParam(JsonWriter writer, WebService.Param param) {
writer.beginObject();
writer.prop("key", param.key());
}
writer.endObject();
}
+
+ private static void writeHistory(JsonWriter writer, WebService.Action action) {
+ writer.name("history").beginArray();
+ action.history().stream()
+ .sorted(Comparator.comparing(Changelog::getVersion).reversed())
+ .forEach(changelog -> {
+ writer.beginObject();
+ writer.prop("description", changelog.getDescription());
+ writer.prop("version", changelog.getVersion());
+ writer.endObject();
+ });
+ writer.endArray();
+ }
+
}
import com.google.common.io.Resources;
import org.junit.Test;
+import org.sonar.api.server.ws.Changelog;
import org.sonar.api.server.ws.WebService;
import org.sonar.server.ws.WsTester;
-import org.sonar.test.JsonAssert;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.sonar.test.JsonAssert.assertJson;
public class WebServicesWsTest {
String response = tester.newGetRequest("api/webservices", "list").execute().outputAsString();
- JsonAssert.assertJson(response).isSimilarTo(getClass().getResource("list-example.json"));
+ assertJson(response).withStrictArrayOrder().isSimilarTo(getClass().getResource("list-example.json"));
}
@Test
.setDeprecatedSince("5.3")
.setPost(true)
.setResponseExample(Resources.getResource(getClass(), "WebServicesWsTest/metrics_example.json"))
+ .setHistory(
+ new Changelog("4.5", "Deprecate database ID in response"),
+ new Changelog("6.0", "Remove database ID from response"),
+ new Changelog("6.6", "Requires 'Administer System' permission instead of 'Administer Quality Profiles'"))
.setHandler((request, response) -> {
});