Browse Source

Fix some code smell debt (#2143)

tags/8.1.0.31237
Jacek 4 years ago
parent
commit
b83cfa7f76

+ 10
- 10
server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/ExportRuleDto.java View File

import org.sonar.db.rule.SeverityUtil; import org.sonar.db.rule.SeverityUtil;


public class ExportRuleDto { public class ExportRuleDto {
private Integer activeRuleId;
private String repository;
private String rule;
private String name;
private String description;
private String extendedDescription;
private String template;
private Integer severity;
private Integer type;
private String tags;
private Integer activeRuleId = null;
private String repository = null;
private String rule = null;
private String name = null;
private String description = null;
private String extendedDescription = null;
private String template = null;
private Integer severity = null;
private Integer type = null;
private String tags = null;


private List<ExportRuleParamDto> params; private List<ExportRuleParamDto> params;



+ 3
- 3
server/sonar-db-dao/src/main/java/org/sonar/db/qualityprofile/ExportRuleParamDto.java View File

package org.sonar.db.qualityprofile; package org.sonar.db.qualityprofile;


public class ExportRuleParamDto { public class ExportRuleParamDto {
private Integer activeRuleId;
private String kee;
private String value;
private Integer activeRuleId = null;
private String kee = null;
private String value = null;


public Integer getActiveRuleId() { public Integer getActiveRuleId() {
return activeRuleId; return activeRuleId;

+ 36
- 13
server/sonar-db-dao/src/test/java/org/sonar/db/qualityprofile/QualityProfileExportDaoTest.java View File



List<ExportRuleDto> results = underTest.selectRulesByProfile(dbSession, profile); List<ExportRuleDto> results = underTest.selectRulesByProfile(dbSession, profile);
assertThat(results).isNotNull(); assertThat(results).isNotNull();
assertThat(results).asList()
assertThat(results)
.extracting("ruleKey") .extracting("ruleKey")
.containsOnly(rule1.getKey(), rule2.getKey(), rule3.getKey()); .containsOnly(rule1.getKey(), rule2.getKey(), rule3.getKey());
} }
public void selectRulesByProfile_verify_columns() { public void selectRulesByProfile_verify_columns() {
String language = "java"; String language = "java";
RuleDefinitionDto ruleTemplate = createRule(language); RuleDefinitionDto ruleTemplate = createRule(language);
RuleDefinitionDto rule = createRule(language, RuleStatus.READY, ruleTemplate.getId());
RuleMetadataDto ruleMetadata = createRuleMetadata(new RuleMetadataDto()
.setRuleId(rule.getId())
RuleDefinitionDto customRule = createRule(language, RuleStatus.READY, ruleTemplate.getId());
RuleMetadataDto customRuleMetadata = createRuleMetadata(new RuleMetadataDto()
.setRuleId(customRule.getId())
.setOrganizationUuid(db.getDefaultOrganization().getUuid()) .setOrganizationUuid(db.getDefaultOrganization().getUuid())
.setNoteData("Extended description") .setNoteData("Extended description")
.setTags(Sets.newHashSet("tag1", "tag2", "tag3"))); .setTags(Sets.newHashSet("tag1", "tag2", "tag3")));


RuleDefinitionDto rule = createRule(language, RuleStatus.READY, null);
RuleMetadataDto ruleMetadata = createRuleMetadata(new RuleMetadataDto()
.setRuleId(rule.getId())
.setOrganizationUuid(db.getDefaultOrganization().getUuid()));

QProfileDto profile = createProfile(language); QProfileDto profile = createProfile(language);


List<ActiveRuleDto> activeRules = activate(profile, rule);
List<ActiveRuleDto> activeRules = activate(profile, customRule, rule);


List<ExportRuleDto> results = underTest.selectRulesByProfile(dbSession, profile); List<ExportRuleDto> results = underTest.selectRulesByProfile(dbSession, profile);
assertThat(results).isNotNull(); assertThat(results).isNotNull();
assertThat(results).asList().isNotEmpty();

ExportRuleDto exportRuleDto = results.get(0);
assertThat(results).isNotEmpty();

//verify custom rule
ExportRuleDto exportCustomRuleDto = results.stream().filter(ExportRuleDto::isCustomRule).findFirst().get();
assertThat(exportCustomRuleDto).isNotNull();
assertThat(exportCustomRuleDto.isCustomRule()).isTrue();
assertThat(exportCustomRuleDto.getParams()).isEmpty();
assertThat(exportCustomRuleDto.getDescription()).isEqualTo(customRule.getDescription());
assertThat(exportCustomRuleDto.getExtendedDescription()).isEqualTo(customRuleMetadata.getNoteData());
assertThat(exportCustomRuleDto.getName()).isEqualTo(customRule.getName());
assertThat(exportCustomRuleDto.getRuleKey()).isEqualTo(customRule.getKey());
assertThat(exportCustomRuleDto.getRuleType()).isEqualTo(RuleType.valueOf(customRule.getType()));
assertThat(exportCustomRuleDto.getTags()).isEqualTo(String.join(",", customRuleMetadata.getTags()));
assertThat(exportCustomRuleDto.getTemplateRuleKey()).isEqualTo(ruleTemplate.getKey());

ActiveRuleDto activeCustomRule = activeRules.stream().filter(activeRuleDto -> activeRuleDto.getRuleKey().equals(customRule.getKey())).findFirst().get();
assertThat(exportCustomRuleDto.getSeverityString()).isEqualTo(activeCustomRule.getSeverityString());

//verify regular rule
ExportRuleDto exportRuleDto = results.stream().filter(regularRule -> !regularRule.isCustomRule()).findFirst().get();
assertThat(exportRuleDto).isNotNull(); assertThat(exportRuleDto).isNotNull();
assertThat(exportRuleDto.getParams()).asList().isEmpty();
assertThat(exportRuleDto.isCustomRule()).isFalse();
assertThat(exportRuleDto.getParams()).isEmpty();
assertThat(exportRuleDto.getDescription()).isEqualTo(rule.getDescription()); assertThat(exportRuleDto.getDescription()).isEqualTo(rule.getDescription());
assertThat(exportRuleDto.getExtendedDescription()).isEqualTo(ruleMetadata.getNoteData()); assertThat(exportRuleDto.getExtendedDescription()).isEqualTo(ruleMetadata.getNoteData());
assertThat(exportRuleDto.getName()).isEqualTo(rule.getName()); assertThat(exportRuleDto.getName()).isEqualTo(rule.getName());
assertThat(exportRuleDto.getRuleKey()).isEqualTo(rule.getKey()); assertThat(exportRuleDto.getRuleKey()).isEqualTo(rule.getKey());
assertThat(exportRuleDto.getRuleType()).isEqualTo(RuleType.valueOf(rule.getType())); assertThat(exportRuleDto.getRuleType()).isEqualTo(RuleType.valueOf(rule.getType()));
assertThat(exportRuleDto.getSeverityString()).isEqualTo(activeRules.get(0).getSeverityString());
assertThat(exportRuleDto.getTags()).isEqualTo(String.join(",", ruleMetadata.getTags()));
assertThat(exportRuleDto.getTemplateRuleKey()).isEqualTo(ruleTemplate.getKey());
ActiveRuleDto activeRule = activeRules.stream().filter(activeRuleDto -> activeRuleDto.getRuleKey().equals(rule.getKey())).findFirst().get();
assertThat(exportRuleDto.getSeverityString()).isEqualTo(activeRule.getSeverityString());
} }


@Test @Test
.extracting("activeRuleId") .extracting("activeRuleId")
.containsOnly(firstActivatedRule.getId(), secondActivatedRule.getId()); .containsOnly(firstActivatedRule.getId(), secondActivatedRule.getId());


assertThat(otherProfileResults).asList()
assertThat(otherProfileResults)
.extracting("activeRuleId") .extracting("activeRuleId")
.containsOnly(thirdActivatedRule.getId()); .containsOnly(thirdActivatedRule.getId());



+ 5
- 4
server/sonar-webserver-webapi/src/main/java/org/sonar/server/ce/ws/ActivityAction.java View File

import static org.sonar.server.ce.ws.CeWsParameters.PARAM_ONLY_CURRENTS; import static org.sonar.server.ce.ws.CeWsParameters.PARAM_ONLY_CURRENTS;
import static org.sonar.server.ce.ws.CeWsParameters.PARAM_STATUS; import static org.sonar.server.ce.ws.CeWsParameters.PARAM_STATUS;
import static org.sonar.server.ce.ws.CeWsParameters.PARAM_TYPE; import static org.sonar.server.ce.ws.CeWsParameters.PARAM_TYPE;
import static org.sonar.server.exceptions.NotFoundException.checkFoundWithOptional;
import static org.sonar.server.exceptions.BadRequestException.checkRequest; import static org.sonar.server.exceptions.BadRequestException.checkRequest;
import static org.sonar.server.exceptions.NotFoundException.checkFoundWithOptional;
import static org.sonar.server.ws.WsUtils.writeProtobuf; import static org.sonar.server.ws.WsUtils.writeProtobuf;


public class ActivityAction implements CeWsAction { public class ActivityAction implements CeWsAction {
private static final int MAX_PAGE_SIZE = 1000; private static final int MAX_PAGE_SIZE = 1000;
private static final String[] POSSIBLE_QUALIFIERS = new String[] {Qualifiers.PROJECT, Qualifiers.APP, Qualifiers.VIEW}; private static final String[] POSSIBLE_QUALIFIERS = new String[] {Qualifiers.PROJECT, Qualifiers.APP, Qualifiers.VIEW};
private static final String INVALID_QUERY_PARAM_ERROR_MESSAGE = "%s and %s must not be set at the same time";


private final UserSession userSession; private final UserSession userSession;
private final DbClient dbClient; private final DbClient dbClient;
.setOnlyCurrents(String.valueOf(request.paramAsBoolean(PARAM_ONLY_CURRENTS))) .setOnlyCurrents(String.valueOf(request.paramAsBoolean(PARAM_ONLY_CURRENTS)))
.setPs(String.valueOf(request.mandatoryParamAsInt(Param.PAGE_SIZE))); .setPs(String.valueOf(request.mandatoryParamAsInt(Param.PAGE_SIZE)));


checkRequest(activityWsRequest.getComponentId() == null || activityWsRequest.getQ() == null, "%s and %s must not be set at the same time",
checkRequest(activityWsRequest.getComponentId() == null || activityWsRequest.getQ() == null, INVALID_QUERY_PARAM_ERROR_MESSAGE,
PARAM_COMPONENT_ID, TEXT_QUERY); PARAM_COMPONENT_ID, TEXT_QUERY);


checkRequest(activityWsRequest.getComponent() == null || activityWsRequest.getQ() == null, "%s and %s must not be set at the same time",
checkRequest(activityWsRequest.getComponent() == null || activityWsRequest.getQ() == null, INVALID_QUERY_PARAM_ERROR_MESSAGE,
PARAM_COMPONENT, TEXT_QUERY); PARAM_COMPONENT, TEXT_QUERY);


checkRequest(activityWsRequest.getComponentId() == null || activityWsRequest.getComponent() == null, "%s and %s must not be set at the same time",
checkRequest(activityWsRequest.getComponentId() == null || activityWsRequest.getComponent() == null, INVALID_QUERY_PARAM_ERROR_MESSAGE,
PARAM_COMPONENT_ID, PARAM_COMPONENT); PARAM_COMPONENT_ID, PARAM_COMPONENT);


return activityWsRequest; return activityWsRequest;

+ 25
- 18
server/sonar-webserver-webapi/src/main/java/org/sonar/server/newcodeperiod/ws/SetAction.java View File

private static final String PARAM_PROJECT = "project"; private static final String PARAM_PROJECT = "project";
private static final String PARAM_TYPE = "type"; private static final String PARAM_TYPE = "type";
private static final String PARAM_VALUE = "value"; private static final String PARAM_VALUE = "value";
private static final String BEGIN_LIST = "<ul>";
private static final String END_LIST = "</ul>";
private static final String BEGIN_ITEM_LIST = "<li>";
private static final String END_ITEM_LIST = "</li>";

private static final Set<NewCodePeriodType> OVERALL_TYPES = EnumSet.of(PREVIOUS_VERSION, NUMBER_OF_DAYS); private static final Set<NewCodePeriodType> OVERALL_TYPES = EnumSet.of(PREVIOUS_VERSION, NUMBER_OF_DAYS);
private static final Set<NewCodePeriodType> PROJECT_TYPES = EnumSet.of(PREVIOUS_VERSION, NUMBER_OF_DAYS); private static final Set<NewCodePeriodType> PROJECT_TYPES = EnumSet.of(PREVIOUS_VERSION, NUMBER_OF_DAYS);
private static final Set<NewCodePeriodType> BRANCH_TYPES = EnumSet.of(PREVIOUS_VERSION, NUMBER_OF_DAYS, SPECIFIC_ANALYSIS); private static final Set<NewCodePeriodType> BRANCH_TYPES = EnumSet.of(PREVIOUS_VERSION, NUMBER_OF_DAYS, SPECIFIC_ANALYSIS);
WebService.NewAction action = context.createAction("set") WebService.NewAction action = context.createAction("set")
.setPost(true) .setPost(true)
.setDescription("Updates the setting for the New Code Period on different levels:<br>" + .setDescription("Updates the setting for the New Code Period on different levels:<br>" +
"<ul>" +
"<li>Project key must be provided to update the value for a project</li>" +
"<li>Both project and branch keys must be provided to update the value for a branch\n</li>" +
"</ul>" +
BEGIN_LIST +
BEGIN_ITEM_LIST + "Project key must be provided to update the value for a project" + END_ITEM_LIST +
BEGIN_ITEM_LIST + "Both project and branch keys must be provided to update the value for a branch" + END_ITEM_LIST +
END_LIST +
"Requires one of the following permissions: " + "Requires one of the following permissions: " +
"<ul>" +
"<li>'Administer System' to change the global setting</li>" +
"<li>'Administer' rights on the specified project to change the project setting</li>" +
"</ul>")
BEGIN_LIST +
BEGIN_ITEM_LIST + "'Administer System' to change the global setting" + END_ITEM_LIST +
BEGIN_ITEM_LIST + "'Administer' rights on the specified project to change the project setting" + END_ITEM_LIST +
END_LIST)
.setSince("8.0") .setSince("8.0")
.setHandler(this); .setHandler(this);


.setRequired(true) .setRequired(true)
.setDescription("Type<br/>" + .setDescription("Type<br/>" +
"New code periods of the following types are allowed:" + "New code periods of the following types are allowed:" +
"<ul>" +
"<li>" + SPECIFIC_ANALYSIS.name() + " - can be set at branch level only</li>" +
"<li>" + PREVIOUS_VERSION.name() + " - can be set at any level (global, project, branch)</li>" +
"<li>" + NUMBER_OF_DAYS.name() + " - can be set can be set at any level (global, project, branch)</li>" +
"</ul>");
BEGIN_LIST +
BEGIN_ITEM_LIST + SPECIFIC_ANALYSIS.name() + " - can be set at branch level only" + END_ITEM_LIST +
BEGIN_ITEM_LIST + PREVIOUS_VERSION.name() + " - can be set at any level (global, project, branch)" + END_ITEM_LIST +
BEGIN_ITEM_LIST + NUMBER_OF_DAYS.name() + " - can be set can be set at any level (global, project, branch)" + END_ITEM_LIST +
END_LIST
);
action.createParam(PARAM_VALUE) action.createParam(PARAM_VALUE)
.setDescription("Value<br/>" + .setDescription("Value<br/>" +
"For each type, a different value is expected:" + "For each type, a different value is expected:" +
"<ul>" +
"<li>the uuid of an analysis, when type is " + SPECIFIC_ANALYSIS.name() + "</li>" +
"<li>no value, when type is " + PREVIOUS_VERSION.name() + "</li>" +
"<li>a number, when type is " + NUMBER_OF_DAYS.name() + "</li>" +
"</ul>");
BEGIN_LIST +
BEGIN_ITEM_LIST + "the uuid of an analysis, when type is " + SPECIFIC_ANALYSIS.name() + END_ITEM_LIST +
BEGIN_ITEM_LIST + "no value, when type is " + PREVIOUS_VERSION.name() + END_ITEM_LIST +
BEGIN_ITEM_LIST + "a number, when type is " + NUMBER_OF_DAYS.name() + END_ITEM_LIST +
END_LIST
);
} }


@Override @Override

+ 7
- 4
server/sonar-webserver-webapi/src/main/java/org/sonar/server/project/ws/CreateAction.java View File

import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;
import org.sonarqube.ws.Projects.CreateWsResponse; import org.sonarqube.ws.Projects.CreateWsResponse;


import static java.util.Objects.requireNonNull;
import static org.apache.commons.lang.StringUtils.abbreviate; import static org.apache.commons.lang.StringUtils.abbreviate;
import static org.sonar.api.resources.Qualifiers.PROJECT; import static org.sonar.api.resources.Qualifiers.PROJECT;
import static org.sonar.core.component.ComponentKeys.MAX_COMPONENT_KEY_LENGTH; import static org.sonar.core.component.ComponentKeys.MAX_COMPONENT_KEY_LENGTH;
return organization; return organization;
} }


@CheckForNull
public String getProjectKey() { public String getProjectKey() {
return projectKey; return projectKey;
} }


@CheckForNull
public String getName() { public String getName() {
return name; return name;
} }
return this; return this;
} }


public Builder setProjectKey(@Nullable String projectKey) {
public Builder setProjectKey(String projectKey) {
requireNonNull(projectKey);
this.projectKey = projectKey; this.projectKey = projectKey;
return this; return this;
} }


public Builder setName(@Nullable String name) {
public Builder setName(String name) {
requireNonNull(name);
this.name = name; this.name = name;
return this; return this;
} }
} }


public CreateRequest build() { public CreateRequest build() {
requireNonNull(projectKey);
requireNonNull(name);
return new CreateRequest(this); return new CreateRequest(this);
} }
} }

+ 4
- 0
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ImportedQProfile.java View File



import java.util.List; import java.util.List;


import static java.util.Objects.requireNonNull;

class ImportedQProfile { class ImportedQProfile {
private final String profileName; private final String profileName;
private final String profileLang; private final String profileLang;
private final List<ImportedRule> rules; private final List<ImportedRule> rules;


public ImportedQProfile(String profileName, String profileLang, List<ImportedRule> rules) { public ImportedQProfile(String profileName, String profileLang, List<ImportedRule> rules) {
requireNonNull(profileName, "Profile name should not be empty!");
requireNonNull(profileLang, "Profile language should not be empty!");
this.profileName = profileName; this.profileName = profileName;
this.profileLang = profileLang; this.profileLang = profileLang;
this.rules = rules; this.rules = rules;

+ 7
- 8
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/ImportedRule.java View File

import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleKey;


class ImportedRule { class ImportedRule {
private RuleKey ruleKey;
private RuleKey templateKey;
private String name;
private String type;
private String severity;
private String description;
private RuleKey ruleKey = null;
private RuleKey templateKey = null;
private String name = null;
private String type = null;
private String severity = null;
private String description = null;
private Map<String, String> parameters = null;


public Map<String, String> getParameters() { public Map<String, String> getParameters() {
return parameters; return parameters;
} }


private Map<String, String> parameters;

public RuleKey getRuleKey() { public RuleKey getRuleKey() {
return ruleKey; return ruleKey;
} }

+ 3
- 7
server/sonar-webserver-webapi/src/main/java/org/sonar/server/qualityprofile/QProfileParser.java View File

*/ */
package org.sonar.server.qualityprofile; package org.sonar.server.qualityprofile;


import com.google.common.base.Joiner;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import java.io.Reader; import java.io.Reader;
import java.io.Writer; import java.io.Writer;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors;
import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamException;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;


@ServerSide @ServerSide
public class QProfileParser { public class QProfileParser {
private static final Joiner RULE_KEY_JOINER = Joiner.on(", ").skipNulls();

private static final String ATTRIBUTE_PROFILE = "profile"; private static final String ATTRIBUTE_PROFILE = "profile";
private static final String ATTRIBUTE_NAME = "name"; private static final String ATTRIBUTE_NAME = "name";
private static final String ATTRIBUTE_LANGUAGE = "language"; private static final String ATTRIBUTE_LANGUAGE = "language";
private static final String ATTRIBUTE_PARAMETER_KEY = "key"; private static final String ATTRIBUTE_PARAMETER_KEY = "key";
private static final String ATTRIBUTE_PARAMETER_VALUE = "value"; private static final String ATTRIBUTE_PARAMETER_VALUE = "value";


public QProfileParser() {
}

public void writeXml(Writer writer, QProfileDto profile, Iterator<ExportRuleDto> rulesToExport) { public void writeXml(Writer writer, QProfileDto profile, Iterator<ExportRuleDto> rulesToExport) {
XmlWriter xml = XmlWriter.of(writer).declaration(); XmlWriter xml = XmlWriter.of(writer).declaration();
xml.begin(ATTRIBUTE_PROFILE); xml.begin(ATTRIBUTE_PROFILE);
} }
if (!duplicatedKeys.isEmpty()) { if (!duplicatedKeys.isEmpty()) {
throw new IllegalArgumentException("The quality profile cannot be restored as it contains duplicates for the following rules: " + throw new IllegalArgumentException("The quality profile cannot be restored as it contains duplicates for the following rules: " +
RULE_KEY_JOINER.join(duplicatedKeys));
duplicatedKeys.stream().map(RuleKey::toString).filter(Objects::nonNull).collect(Collectors.joining(", ")));
} }
return activations; return activations;
} }

+ 4
- 3
server/sonar-webserver-webapi/src/main/java/org/sonar/server/rule/RuleCreator.java View File



@ServerSide @ServerSide
public class RuleCreator { public class RuleCreator {
private static final String TEMPLATE_KEY_NOT_EXIST_FORMAT = "The template key doesn't exist: %s";


private final System2 system2; private final System2 system2;
private final RuleIndexer ruleIndexer; private final RuleIndexer ruleIndexer;
OrganizationDto defaultOrganization = dbClient.organizationDao().selectByUuid(dbSession, defaultOrganizationUuid) OrganizationDto defaultOrganization = dbClient.organizationDao().selectByUuid(dbSession, defaultOrganizationUuid)
.orElseThrow(() -> new IllegalStateException(format("Could not find default organization for uuid '%s'", defaultOrganizationUuid))); .orElseThrow(() -> new IllegalStateException(format("Could not find default organization for uuid '%s'", defaultOrganizationUuid)));
RuleDto templateRule = dbClient.ruleDao().selectByKey(dbSession, defaultOrganization.getUuid(), templateKey) RuleDto templateRule = dbClient.ruleDao().selectByKey(dbSession, defaultOrganization.getUuid(), templateKey)
.orElseThrow(() -> new IllegalArgumentException(format("The template key doesn't exist: %s", templateKey)));
.orElseThrow(() -> new IllegalArgumentException(format(TEMPLATE_KEY_NOT_EXIST_FORMAT, templateKey)));
checkArgument(templateRule.isTemplate(), "This rule is not a template rule: %s", templateKey.toString()); checkArgument(templateRule.isTemplate(), "This rule is not a template rule: %s", templateKey.toString());
checkArgument(templateRule.getStatus() != RuleStatus.REMOVED, "The template key doesn't exist: %s", templateKey.toString());
checkArgument(templateRule.getStatus() != RuleStatus.REMOVED, TEMPLATE_KEY_NOT_EXIST_FORMAT, templateKey.toString());
validateCustomRule(newRule, dbSession, templateKey); validateCustomRule(newRule, dbSession, templateKey);


RuleKey customRuleKey = RuleKey.of(templateRule.getRepositoryKey(), newRule.ruleKey()); RuleKey customRuleKey = RuleKey.of(templateRule.getRepositoryKey(), newRule.ruleKey());
checkArgument(!templateRules.isEmpty() && templateKeys.size() == templateRules.size(), "Rule template keys should exists for each custom rule!"); checkArgument(!templateRules.isEmpty() && templateKeys.size() == templateRules.size(), "Rule template keys should exists for each custom rule!");
templateRules.values().forEach(ruleDto -> { templateRules.values().forEach(ruleDto -> {
checkArgument(ruleDto.isTemplate(), "This rule is not a template rule: %s", ruleDto.getKey().toString()); checkArgument(ruleDto.isTemplate(), "This rule is not a template rule: %s", ruleDto.getKey().toString());
checkArgument(ruleDto.getStatus() != RuleStatus.REMOVED, "The template key doesn't exist: %s", ruleDto.getKey().toString());
checkArgument(ruleDto.getStatus() != RuleStatus.REMOVED, TEMPLATE_KEY_NOT_EXIST_FORMAT, ruleDto.getKey().toString());
} }
); );



+ 45
- 5
server/sonar-webserver-webapi/src/test/java/org/sonar/server/project/ws/CreateActionTest.java View File

package org.sonar.server.project.ws; package org.sonar.server.project.ws;


import com.google.common.base.Strings; import com.google.common.base.Strings;
import javax.annotation.Nullable;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.ExpectedException; import org.junit.rules.ExpectedException;
expectedException.expect(IllegalArgumentException.class); expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("The 'project' parameter is missing"); expectedException.expectMessage("The 'project' parameter is missing");


call(CreateRequest.builder().setName(DEFAULT_PROJECT_NAME).build());
call(null, null, DEFAULT_PROJECT_NAME);
} }


@Test @Test
expectedException.expect(IllegalArgumentException.class); expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("The 'name' parameter is missing"); expectedException.expectMessage("The 'name' parameter is missing");


call(CreateRequest.builder().setProjectKey(DEFAULT_PROJECT_KEY).build());
call(null, DEFAULT_PROJECT_KEY, null);
} }


@Test @Test
assertThat(name.description()).isEqualTo("Name of the project. If name is longer than 500, it is abbreviated."); assertThat(name.description()).isEqualTo("Name of the project. If name is longer than 500, it is abbreviated.");
} }


@Test
public void fail_when_set_null_project_name_on_create_request_builder() {
expectedException.expect(NullPointerException.class);

CreateRequest.builder()
.setProjectKey(DEFAULT_PROJECT_KEY)
.setName(null);
}

@Test
public void fail_when_set_null_project_key_on_create_request_builder() {
expectedException.expect(NullPointerException.class);

CreateRequest.builder()
.setProjectKey(null)
.setName(DEFAULT_PROJECT_NAME);
}

@Test
public void fail_when_project_key_not_set_on_create_request_builder() {
expectedException.expect(NullPointerException.class);
CreateRequest.builder()
.setName(DEFAULT_PROJECT_NAME)
.build();
}

@Test
public void fail_when_project_name_not_set_on_create_request_builder() {
expectedException.expect(NullPointerException.class);

CreateRequest.builder()
.setProjectKey(DEFAULT_PROJECT_KEY)
.build();
}

private CreateWsResponse call(CreateRequest request) { private CreateWsResponse call(CreateRequest request) {
return call(request.getOrganization(), request.getProjectKey(), request.getName());
}

private CreateWsResponse call(@Nullable String organization, @Nullable String projectKey, @Nullable String projectName) {
TestRequest httpRequest = ws.newRequest() TestRequest httpRequest = ws.newRequest()
.setMethod(POST.name()); .setMethod(POST.name());
ofNullable(request.getOrganization()).ifPresent(org -> httpRequest.setParam("organization", org));
ofNullable(request.getProjectKey()).ifPresent(key -> httpRequest.setParam("project", key));
ofNullable(request.getName()).ifPresent(name -> httpRequest.setParam("name", name));
ofNullable(organization).ifPresent(org -> httpRequest.setParam("organization", org));
ofNullable(projectKey).ifPresent(key -> httpRequest.setParam("project", key));
ofNullable(projectName).ifPresent(name -> httpRequest.setParam("name", name));
return httpRequest.executeProtobuf(CreateWsResponse.class); return httpRequest.executeProtobuf(CreateWsResponse.class);
} }



+ 5
- 5
sonar-plugin-api-impl/src/test/java/org/sonar/api/impl/utils/TestSystem2Test.java View File

package org.sonar.api.impl.utils; package org.sonar.api.impl.utils;


import java.util.TimeZone; import java.util.TimeZone;
import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.ExpectedException; import org.junit.rules.ExpectedException;


import static org.assertj.core.api.Assertions.assertThat;



public class TestSystem2Test { public class TestSystem2Test {


public void test_tick() { public void test_tick() {
underTest.setNow(1000L); underTest.setNow(1000L);
underTest.tick(); underTest.tick();
Assert.assertEquals(underTest.now(), 1001L);
assertThat(underTest.now()).isEqualTo(1001L);
} }


@Test @Test
public void test_now() { public void test_now() {
underTest.setNow(1000L); underTest.setNow(1000L);
Assert.assertEquals(underTest.now(), 1000L);
assertThat(underTest.now()).isEqualTo(1000L);
} }


@Test @Test
public void test_default_time_zone() { public void test_default_time_zone() {
underTest.setDefaultTimeZone(TimeZone.getDefault()); underTest.setDefaultTimeZone(TimeZone.getDefault());
TimeZone result = underTest.getDefaultTimeZone(); TimeZone result = underTest.getDefaultTimeZone();
Assert.assertNotNull(result);
Assert.assertEquals(result.getID(), TimeZone.getDefault().getID());
assertThat(result.getID()).isEqualTo(TimeZone.getDefault().getID());
} }


@Test @Test

Loading…
Cancel
Save