*/
package org.sonar.server.qualityprofile.ws;
-import org.sonar.api.server.ServerSide;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.server.rule.ws.RuleQueryFactory;
import org.sonar.server.user.UserSession;
+import static org.sonar.core.util.Uuids.UUID_EXAMPLE_04;
+import static org.sonar.server.qualityprofile.ws.BulkChangeWsResponse.writeResponse;
import static org.sonar.server.rule.ws.SearchAction.defineRuleSearchParameters;
+import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_DEACTIVATE_RULES;
+import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_TARGET_PROFILE;
-@ServerSide
public class DeactivateRulesAction implements QProfileWsAction {
-
- public static final String PROFILE_KEY = "profile_key";
public static final String SEVERITY = "activation_severity";
- public static final String DEACTIVATE_RULES_ACTION = "deactivate_rules";
-
private final RuleQueryFactory ruleQueryFactory;
private final UserSession userSession;
private final RuleActivator ruleActivator;
public void define(WebService.NewController controller) {
WebService.NewAction deactivate = controller
- .createAction(DEACTIVATE_RULES_ACTION)
- .setDescription("Bulk deactivate rules on Quality profiles")
+ .createAction(ACTION_DEACTIVATE_RULES)
+ .setDescription("Bulk deactivate rules on Quality profiles.<br>" +
+ "Requires to be logged in and the 'Administer Quality Profiles' permission.")
.setPost(true)
.setSince("4.4")
.setHandler(this);
defineRuleSearchParameters(deactivate);
- deactivate.createParam(PROFILE_KEY)
- .setDescription("Quality Profile Key. To retrieve a profile key for a given language please see <code>api/qualityprofiles/search</code>")
+ deactivate.createParam(PARAM_TARGET_PROFILE)
+ .setDescription("Quality Profile key on which the rule deactivation is done. To retrieve a profile key please see <code>api/qualityprofiles/search</code>")
+ .setDeprecatedKey("profile_key", "6.5")
.setRequired(true)
- .setExampleValue("java:MyProfile");
+ .setExampleValue(UUID_EXAMPLE_04);
}
@Override
public void handle(Request request, Response response) throws Exception {
- String qualityProfileKey = request.mandatoryParam(PROFILE_KEY);
+ String qualityProfileKey = request.mandatoryParam(PARAM_TARGET_PROFILE);
userSession.checkLoggedIn();
BulkChangeResult result;
try (DbSession dbSession = dbClient.openSession(false)) {
wsSupport.checkNotBuiltInt(profile);
result = ruleActivator.bulkDeactivate(dbSession, ruleQueryFactory.createRuleQuery(dbSession, request), profile);
}
- BulkChangeWsResponse.writeResponse(result, response);
+ writeResponse(result, response);
}
}
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.sonar.server.platform.db.migration.def.VarcharColumnDef.UUID_SIZE;
+import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_TARGET_PROFILE;
public class DeactivateRulesActionTest {
"active_severities",
"s",
"repositories",
- "profile_key",
+ "targetProfile",
"statuses",
"rule_key",
"available_since",
"activation",
"severities",
"organization");
+ WebService.Param targetProfile = definition.param("targetProfile");
+ assertThat(targetProfile.deprecatedKey()).isEqualTo("profile_key");
}
@Test
public void should_fail_if_not_logged_in() {
TestRequest request = wsActionTester.newRequest()
.setMethod("POST")
- .setParam("profile_key", randomAlphanumeric(UUID_SIZE));
+ .setParam(PARAM_TARGET_PROFILE, randomAlphanumeric(UUID_SIZE));
thrown.expect(UnauthorizedException.class);
request.execute();
QProfileDto qualityProfile = dbTester.qualityProfiles().insert(defaultOrganization, p -> p.setIsBuiltIn(true));
TestRequest request = wsActionTester.newRequest()
.setMethod("POST")
- .setParam("profile_key", qualityProfile.getKee());
+ .setParam(PARAM_TARGET_PROFILE, qualityProfile.getKee());
thrown.expect(BadRequestException.class);
QProfileDto qualityProfile = dbTester.qualityProfiles().insert(organization);
TestRequest request = wsActionTester.newRequest()
.setMethod("POST")
- .setParam("profile_key", qualityProfile.getKee());
+ .setParam(PARAM_TARGET_PROFILE, qualityProfile.getKee());
thrown.expect(ForbiddenException.class);
request.execute();
import org.sonar.server.tester.ServerTester;
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.WsTester;
-import org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ActivateActionParameters;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_ACTIVATE_RULE;
import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_ACTIVATE_RULES;
import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_DEACTIVATE_RULE;
+import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.ACTION_DEACTIVATE_RULES;
import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_PROFILE;
import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_RESET;
import static org.sonarqube.ws.client.qualityprofile.QualityProfileWsParameters.PARAM_RULE;
assertThat(dbClient.activeRuleDao().selectByProfileUuid(dbSession, profile.getKee())).hasSize(4);
// 1. Deactivate Rule
- WsTester.TestRequest request = ws.newPostRequest(QProfilesWs.API_ENDPOINT, DeactivateRulesAction.DEACTIVATE_RULES_ACTION);
- request.setParam(ActivateActionParameters.PARAM_PROFILE_KEY, profile.getKee());
+ WsTester.TestRequest request = ws.newPostRequest(QProfilesWs.API_ENDPOINT, ACTION_DEACTIVATE_RULES);
+ request.setParam(PARAM_TARGET_PROFILE, profile.getKee());
WsTester.Result result = request.execute();
dbSession.clearCache();
assertThat(dbClient.activeRuleDao().selectByProfileUuid(dbSession, profile.getKee())).hasSize(2);
// 1. Deactivate Rule
- WsTester.TestRequest request = ws.newPostRequest(QProfilesWs.API_ENDPOINT, DeactivateRulesAction.DEACTIVATE_RULES_ACTION);
- request.setParam(ActivateActionParameters.PARAM_PROFILE_KEY, profile.getKee());
+ WsTester.TestRequest request = ws.newPostRequest(QProfilesWs.API_ENDPOINT, ACTION_DEACTIVATE_RULES);
+ request.setParam(PARAM_TARGET_PROFILE, profile.getKee());
WsTester.Result result = request.execute();
dbSession.clearCache();
assertThat(dbClient.activeRuleDao().selectByProfileUuid(dbSession, profile.getKee())).hasSize(2);
// 1. Deactivate Rule
- WsTester.TestRequest request = ws.newPostRequest(QProfilesWs.API_ENDPOINT, DeactivateRulesAction.DEACTIVATE_RULES_ACTION);
- request.setParam(ActivateActionParameters.PARAM_PROFILE_KEY, profile.getKee());
+ WsTester.TestRequest request = ws.newPostRequest(QProfilesWs.API_ENDPOINT, ACTION_DEACTIVATE_RULES);
+ request.setParam(PARAM_TARGET_PROFILE, profile.getKee());
request.setParam(Param.TEXT_QUERY, "hello");
WsTester.Result result = request.execute();
dbSession.clearCache();
public static final String CONTROLLER_QUALITY_PROFILES = "api/qualityprofiles";
- public interface ActivateActionParameters {
- String PARAM_PROFILE_KEY = "profile_key";
- }
- public static final String ACTION_RESTORE = "restore";
-
public interface RestoreActionParameters {
String PARAM_BACKUP = "backup";
}
public static final String ACTION_COPY = "copy";
public static final String ACTION_CREATE = "create";
public static final String ACTION_DEACTIVATE_RULE = "deactivate_rule";
+ public static final String ACTION_DEACTIVATE_RULES = "deactivate_rules";
public static final String ACTION_DELETE = "delete";
public static final String ACTION_REMOVE_PROJECT = "remove_project";
+ public static final String ACTION_RESTORE = "restore";
public static final String ACTION_SEARCH = "search";
public static final String ACTION_SET_DEFAULT = "set_default";