@Test public void define_ws() { WsTester tester = new WsTester(underTest); WebService.Controller controller = tester.controller("api/webservices"); assertThat(controller).isNotNull(); assertThat(controller.path()).isEqualTo("api/webservices"); assertThat(controller.since()).isEqualTo("4.2"); assertThat(controller.description()).isNotEmpty(); assertThat(controller.actions()).hasSize(2); WebService.Action index = controller.action("list"); assertThat(index).isNotNull(); assertThat(index.key()).isEqualTo("list"); assertThat(index.handler()).isNotNull(); assertThat(index.since()).isEqualTo("4.2"); assertThat(index.isPost()).isFalse(); assertThat(index.isInternal()).isFalse(); assertThat(controller.action("response_example")).isNotNull(); }
@Test public void definition() { WebService.Action action = ws.getDef(); assertThat(action.description()).isEqualTo("Get the list of provisioned projects.<br> " + "Web service is deprecated. Use api/projects/search instead, with onProvisionedOnly=true.<br> " + "Require 'Create Projects' permission."); assertThat(action.since()).isEqualTo("5.2"); assertThat(action.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder( tuple("6.4", "The 'uuid' field is deprecated in the response"), tuple("6.4", "Paging response fields is now in a Paging object")); assertThat(action.deprecatedSince()).isEqualTo("6.6"); assertThat(action.params()).hasSize(5); Param organization = action.param(PARAM_ORGANIZATION); assertThat(organization.description()).isEqualTo("The key of the organization"); assertThat(organization.isInternal()).isTrue(); assertThat(organization.isRequired()).isFalse(); assertThat(organization.since()).isEqualTo("6.3"); }
private void initWebServiceEngine(WsUrl... wsUrls) { List<WebService.Controller> controllers = new ArrayList<>(); for (WsUrl wsUrl : wsUrls) { String controller = wsUrl.getController(); WebService.Controller wsController = mock(WebService.Controller.class); when(wsController.path()).thenReturn(controller); List<WebService.Action> actions = new ArrayList<>(); for (String action : wsUrl.getActions()) { WebService.Action wsAction = mock(WebService.Action.class); when(wsAction.path()).thenReturn(controller + "/" + action); when(wsAction.key()).thenReturn(action); when(wsAction.handler()).thenReturn(wsUrl.getRequestHandler()); actions.add(wsAction); } when(wsController.actions()).thenReturn(actions); controllers.add(wsController); } when(webServiceEngine.controllers()).thenReturn(controllers); underTest = new WebServiceFilter(webServiceEngine, runtime); }
private static void writeAction(JsonWriter writer, WebService.Action action, boolean includeInternals) { if (includeInternals || !action.isInternal()) { writer.beginObject(); writer.prop("key", action.key()); writer.prop("description", action.description()); writer.prop("since", action.since()); writer.prop("deprecatedSince", action.deprecatedSince()); writer.prop("internal", action.isInternal()); writer.prop("post", action.isPost()); writer.prop("hasResponseExample", action.responseExample() != null); writeChangelog(writer, action); writeParameters(writer, action, includeInternals); writer.endObject(); } }
private static Function<WebService.Action, String> toPath() { return action -> "/" + action.path() + ".*"; }
private static void writeChangelog(JsonWriter writer, WebService.Action action) { writer.name("changelog").beginArray(); action.changelog().stream() .sorted(Comparator.comparing(Change::getVersion).reversed()) .forEach(changelog -> { writer.beginObject(); writer.prop("description", changelog.getDescription()); writer.prop("version", changelog.getVersion()); writer.endObject(); }); writer.endArray(); }
assertThat(def.key()).isEqualTo("search_projects"); assertThat(def.since()).isEqualTo("6.2"); assertThat(def.isInternal()).isTrue(); assertThat(def.isPost()).isFalse(); assertThat(def.responseExampleAsString()).isNotEmpty(); assertThat(def.params().stream().map(Param::key).collect(toList())).containsOnly("organization", "filter", "facets", "s", "asc", "ps", "p", "f"); assertThat(def.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder( tuple("6.4", "The 'languages' parameter accepts 'filter' to filter by language"), tuple("6.4", "The 'visibility' field is added"), Param organization = def.param("organization"); assertThat(organization.isRequired()).isFalse(); assertThat(organization.description()).isEqualTo("the organization to search projects in"); assertThat(organization.since()).isEqualTo("6.3"); Param sort = def.param("s"); assertThat(sort.defaultValue()).isEqualTo("name"); assertThat(sort.possibleValues()).containsExactlyInAnyOrder( Param asc = def.param("asc"); assertThat(asc.defaultValue()).isEqualTo("true"); assertThat(asc.possibleValues()).containsOnly("true", "false", "yes", "no"); Param f = def.param("f"); assertThat(f.defaultValue()).isNull(); assertThat(f.possibleValues()).containsOnly("_all", "organizations", "analysisDate", "leakPeriodDate"); Param facets = def.param("facets"); assertThat(facets.defaultValue()).isNull();
assertThat(action.since()).isEqualTo("5.4"); assertThat(action.description()).isNotNull(); assertThat(action.responseExample()).isNotNull(); assertThat(action.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder( tuple("6.4", "Analysis date has been added to the response"), tuple("6.4", "The field 'id' is deprecated in the response"), tuple("6.6", "'version' is added to the response"), tuple("7.6", "The use of module keys in parameter 'component' is deprecated")); assertThat(action.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder("component", "componentId", "branch", "pullRequest"); WebService.Param componentId = action.param(PARAM_COMPONENT_ID); assertThat(componentId.isRequired()).isFalse(); assertThat(componentId.description()).isNotNull(); WebService.Param component = action.param(PARAM_COMPONENT); assertThat(component.isRequired()).isFalse(); assertThat(component.description()).isNotNull(); WebService.Param branch = action.param(PARAM_BRANCH); assertThat(branch.isInternal()).isTrue(); assertThat(branch.isRequired()).isFalse(); assertThat(branch.since()).isEqualTo("6.6"); WebService.Param pullRequest = action.param(PARAM_PULL_REQUEST); assertThat(pullRequest.isInternal()).isTrue(); assertThat(pullRequest.isRequired()).isFalse();
WebService.Action showAction = controller.action("show"); assertThat(showAction).isNotNull(); assertThat(showAction.key()).isEqualTo("show"); assertThat(showAction.description()).isEqualTo("Show metric"); assertThat(showAction.handler()).isNotNull(); assertThat(showAction.responseExample()).isNotNull(); assertThat(showAction.responseExampleFormat()).isNotEmpty(); assertThat(showAction.responseExampleAsString()).isNotEmpty(); assertThat(showAction.deprecatedSince()).isNull(); assertThat(showAction.changelog()).isEmpty(); assertThat(showAction.since()).isEqualTo("4.2"); assertThat(showAction.isPost()).isFalse(); assertThat(showAction.isInternal()).isFalse(); assertThat(showAction.path()).isEqualTo("api/metric/show"); WebService.Action createAction = controller.action("create"); assertThat(createAction).isNotNull(); assertThat(createAction.key()).isEqualTo("create"); assertThat(createAction.toString()).isEqualTo("api/metric/create"); assertThat(createAction.deprecatedSince()).isEqualTo("5.3"); assertThat(createAction.since()).isEqualTo("4.1"); assertThat(createAction.isPost()).isTrue(); assertThat(createAction.isInternal()).isTrue(); assertThat(createAction.changelog()).extracting(Change::getVersion, Change::getDescription).containsOnly( tuple("6.4", "Last event"), tuple("6.0", "Old event"), tuple("4.5.6", "Very old event"));
assertThat(definition.key()).isEqualTo("search"); assertThat(definition.responseExampleAsString()).isNotEmpty(); assertThat(definition.isPost()).isFalse(); assertThat(definition.changelog()) .extracting(Change::getVersion, Change::getDescription) .containsExactlyInAnyOrder( WebService.Param organization = definition.param("organization"); assertThat(organization).isNotNull(); assertThat(organization.isRequired()).isFalse(); WebService.Param defaults = definition.param("defaults"); assertThat(defaults.defaultValue()).isEqualTo("false"); assertThat(defaults.description()).isEqualTo("If set to true, return only the quality profiles marked as default for each language"); WebService.Param projectKey = definition.param("project"); assertThat(projectKey.description()).isEqualTo("Project key"); assertThat(projectKey.deprecatedKey()).isEqualTo("projectKey"); WebService.Param language = definition.param("language"); assertThat(language.possibleValues()).containsExactly("xoo1", "xoo2"); assertThat(language.deprecatedSince()).isNull(); assertThat(language.description()).isEqualTo("Language key. If provided, only profiles for the given language are returned."); WebService.Param profileName = definition.param("qualityProfile"); assertThat(profileName.deprecatedSince()).isNull(); assertThat(profileName.description()).isEqualTo("Quality profile name");
@Test public void verify_definition() { WebService.Action action = ws.getDef(); assertThat(action.since()).isEqualTo("5.4"); assertThat(action.description()).isNotNull(); assertThat(action.responseExample()).isNotNull(); assertThat(action.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder( tuple("7.6", "The use of 'BRC' as value for parameter 'qualifiers' is deprecated"), tuple("7.6", "The use of module keys in parameter 'component' is deprecated"), tuple("6.4", "The field 'id' is deprecated in the response")); assertThat(action.params()).extracting(Param::key).containsExactlyInAnyOrder("component", "componentId", "branch", "pullRequest", "qualifiers", "strategy", "q", "s", "p", "asc", "ps"); Param componentId = action.param(PARAM_COMPONENT_ID); assertThat(componentId.isRequired()).isFalse(); assertThat(componentId.description()).isNotNull(); assertThat(componentId.exampleValue()).isNotNull(); assertThat(componentId.deprecatedSince()).isEqualTo("6.4"); assertThat(componentId.deprecatedKey()).isEqualTo("baseComponentId"); assertThat(componentId.deprecatedKeySince()).isEqualTo("6.4"); Param component = action.param(PARAM_COMPONENT); assertThat(component.isRequired()).isFalse(); assertThat(component.description()).isNotNull(); assertThat(component.exampleValue()).isNotNull(); assertThat(component.deprecatedKey()).isEqualTo("baseComponentKey"); assertThat(component.deprecatedKeySince()).isEqualTo("6.4"); Param branch = action.param(PARAM_BRANCH); assertThat(branch.isInternal()).isTrue(); assertThat(branch.isRequired()).isFalse(); assertThat(branch.since()).isEqualTo("6.6"); }
@Test public void define_suggestions_action() { WebService.Action action = ws.getDef(); assertThat(action).isNotNull(); assertThat(action.isInternal()).isTrue(); assertThat(action.isPost()).isFalse(); assertThat(action.handler()).isNotNull(); assertThat(action.responseExampleAsString()).isNotEmpty(); assertThat(action.params()).extracting(WebService.Param::key).containsExactlyInAnyOrder( PARAM_MORE, PARAM_QUERY, PARAM_RECENTLY_BROWSED); assertThat(action.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder( tuple("7.6", "The use of 'BRC' as value for parameter 'more' is deprecated"), tuple("6.4", "Parameter 's' is optional")); WebService.Param recentlyBrowsed = action.param(PARAM_RECENTLY_BROWSED); assertThat(recentlyBrowsed.since()).isEqualTo("6.4"); assertThat(recentlyBrowsed.exampleValue()).isNotEmpty(); assertThat(recentlyBrowsed.description()).isNotEmpty(); assertThat(recentlyBrowsed.isRequired()).isFalse(); WebService.Param query = action.param(PARAM_QUERY); assertThat(query.exampleValue()).isNotEmpty(); assertThat(query.description()).isNotEmpty(); assertThat(query.isRequired()).isFalse(); }
@Test public void verify_definition() { WebService.Action action = ws.getDef(); assertThat(action.since()).isEqualTo("6.3"); assertThat(action.isPost()).isFalse(); assertThat(action.isInternal()).isFalse(); assertThat(action.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder( tuple("7.6", "The use of 'BRC' as value for parameter 'qualifiers' is deprecated")); assertThat(action.responseExampleAsString()).isNotEmpty(); assertThat(action.params()).hasSize(6); WebService.Param pageSize = action.param("ps"); assertThat(pageSize.isRequired()).isFalse(); assertThat(pageSize.defaultValue()).isEqualTo("100"); assertThat(pageSize.maximumValue()).isEqualTo(500); assertThat(pageSize.description()).isEqualTo("Page size. Must be greater than 0 and less or equal than 500"); WebService.Param qualifiers = action.param("qualifiers"); assertThat(qualifiers.isRequired()).isTrue(); WebService.Param organization = action.param("organization"); assertThat(organization.isRequired()).isFalse(); assertThat(organization.description()).isEqualTo("Organization key"); assertThat(organization.isInternal()).isTrue(); assertThat(organization.exampleValue()).isEqualTo("my-org"); assertThat(organization.since()).isEqualTo("6.3"); }
@Test public void should_define() { Action action = tester.getDef(); assertThat(action.description()).isNotEmpty(); assertThat(action.responseExampleAsString()).isNotEmpty(); assertThat(action.isPost()).isFalse(); assertThat(action.isInternal()).isTrue(); assertThat(action.handler()).isEqualTo(underTest); assertThat(action.params()).hasSize(3); Param query = action.param("componentUuid"); assertThat(query.isRequired()).isTrue(); assertThat(query.description()).isNotEmpty(); assertThat(query.exampleValue()).isNotEmpty(); Param createdAfter = action.param("createdAfter"); assertThat(createdAfter.isRequired()).isFalse(); assertThat(createdAfter.description()).isNotEmpty(); assertThat(createdAfter.exampleValue()).isNotEmpty(); Param pageSize = action.param("ps"); assertThat(pageSize.isRequired()).isFalse(); assertThat(pageSize.defaultValue()).isEqualTo("10"); assertThat(pageSize.description()).isNotEmpty(); assertThat(pageSize.exampleValue()).isNotEmpty(); }
@Test public void definition() { init(); WebService.Action action = ws.getDef(); assertThat(action.since()).isEqualTo("5.2"); assertThat(action.isPost()).isFalse(); assertThat(action.isInternal()).isTrue(); assertThat(action.description()).isNotNull(); assertThat(action.responseExample()).isNotNull(); assertThat(action.changelog()).extracting(Change::getVersion, Change::getDescription).containsExactlyInAnyOrder( tuple("6.4", "The 'visibility' field is added"), tuple("7.3", "The 'almRepoUrl' and 'almId' fields are added"), tuple("7.6", "The use of module keys in parameter 'component' is deprecated")); WebService.Param componentId = action.param(PARAM_COMPONENT); assertThat(componentId.isRequired()).isFalse(); assertThat(componentId.description()).isNotNull(); assertThat(componentId.exampleValue()).isNotNull(); assertThat(componentId.deprecatedKey()).isEqualTo("componentKey"); assertThat(componentId.deprecatedKeySince()).isEqualTo("6.4"); }
@Test public void verify_definition() { WebService.Action action = wsTester.getDef(); assertThat(action.key()).isEqualTo("set_root"); assertThat(action.isInternal()).isTrue(); assertThat(action.isPost()).isTrue(); assertThat(action.since()).isEqualTo("6.2"); assertThat(action.description()).isEqualTo("Make the specified user root.<br/>" + "Requires to be root."); assertThat(action.responseExample()).isNull(); assertThat(action.deprecatedKey()).isNull(); assertThat(action.deprecatedSince()).isNull(); assertThat(action.handler()).isSameAs(underTest); assertThat(action.params()).hasSize(1); WebService.Param param = action.param("login"); assertThat(param.isRequired()).isTrue(); assertThat(param.description()).isEqualTo("A user login"); assertThat(param.defaultValue()).isNull(); assertThat(param.deprecatedSince()).isNull(); assertThat(param.deprecatedKey()).isNull(); assertThat(param.exampleValue()).isEqualTo("admin"); }
@Test public void verify_definition() { WebService.Action action = wsTester.getDef(); assertThat(action.key()).isEqualTo("unset_root"); assertThat(action.isInternal()).isTrue(); assertThat(action.isPost()).isTrue(); assertThat(action.since()).isEqualTo("6.2"); assertThat(action.description()).isEqualTo("Make the specified user not root.<br/>" + "Requires to be root."); assertThat(action.responseExample()).isNull(); assertThat(action.deprecatedKey()).isNull(); assertThat(action.deprecatedSince()).isNull(); assertThat(action.handler()).isSameAs(underTest); assertThat(action.params()).hasSize(1); WebService.Param param = action.param("login"); assertThat(param.isRequired()).isTrue(); assertThat(param.description()).isEqualTo("A user login"); assertThat(param.defaultValue()).isNull(); assertThat(param.deprecatedSince()).isNull(); assertThat(param.deprecatedKey()).isNull(); assertThat(param.exampleValue()).isEqualTo("admin"); }
public WebServiceFilter(WebServiceEngine webServiceEngine, SonarRuntime runtime) { this.webServiceEngine = webServiceEngine; this.includeUrls = concat( Stream.of("/api/*"), webServiceEngine.controllers().stream() .flatMap(controller -> controller.actions().stream()) .map(toPath())) .collect(MoreCollectors.toSet()); this.excludeUrls = concat(concat( Stream.of("/" + CONTROLLER_PROPERTIES + "*"), MOVED_WEB_SERVICES.stream()), webServiceEngine.controllers().stream() .flatMap(controller -> controller.actions().stream()) .filter(action -> action.handler() instanceof ServletFilterHandler) .map(toPath())) .collect(MoreCollectors.toSet()); this.runtime = runtime; }
@Test public void should_be_well_defined() { Controller controller = tester.controller(CONTROLLER_LANGUAGES); assertThat(controller).isNotNull(); assertThat(controller.description()).isNotEmpty(); assertThat(controller.isInternal()).isFalse(); assertThat(controller.path()).isEqualTo(CONTROLLER_LANGUAGES); assertThat(controller.since()).isEqualTo("5.1"); assertThat(controller.actions()).hasSize(1); Action list = controller.action(ACTION_LIST); assertThat(list).isNotNull(); assertThat(list.description()).isNotEmpty(); assertThat(list.handler()).isInstanceOf(ListAction.class); assertThat(list.isInternal()).isFalse(); assertThat(list.isPost()).isFalse(); assertThat(list.responseExampleAsString()).isNotEmpty(); assertThat(list.params()).hasSize(2); }
@Test public void verify_define() { WebService.Action action = wsTester.getDef(); assertThat(action.key()).isEqualTo(ACTION); assertThat(action.isPost()).isTrue(); assertThat(action.description()).isNotEmpty(); assertThat(action.isInternal()).isTrue(); assertThat(action.since()).isEqualTo("6.4"); assertThat(action.handler()).isEqualTo(underTest); assertThat(action.changelog()) .extracting(Change::getVersion, Change::getDescription) .contains(tuple("7.3", "This WS used to be located at /api/organizations/update_project_visibility")); WebService.Param projectVisibility = action.param(PARAM_PROJECT_VISIBILITY); assertThat(projectVisibility.isRequired()).isTrue(); assertThat(projectVisibility.possibleValues()).containsExactlyInAnyOrder("private", "public"); assertThat(projectVisibility.description()).isEqualTo("Default visibility for projects"); } }