@@ -77,7 +77,7 @@ public class RulesProvider extends ProviderAdapter { | |||
.setName(ruleDto.getName()) | |||
.setSeverity(ruleDto.getSeverityString()) | |||
.setDescription(ruleDto.getDescription()) | |||
.setStatus(RuleStatus.valueOf(ruleDto.getStatus())) | |||
.setStatus(ruleDto.getStatus()) | |||
.setInternalKey(ruleDto.getConfigKey()); | |||
if (hasCharacteristic(ruleDto)) { |
@@ -25,6 +25,7 @@ import org.apache.commons.lang.builder.HashCodeBuilder; | |||
import org.apache.commons.lang.builder.ReflectionToStringBuilder; | |||
import org.apache.commons.lang.builder.ToStringStyle; | |||
import org.sonar.api.rule.RuleKey; | |||
import org.sonar.api.rule.RuleStatus; | |||
import org.sonar.check.Cardinality; | |||
import org.sonar.core.persistence.Dto; | |||
@@ -44,7 +45,7 @@ public final class RuleDto extends Dto<RuleKey> { | |||
private String repositoryKey; | |||
private String ruleKey; | |||
private String description; | |||
private String status; | |||
private RuleStatus status; | |||
private String name; | |||
private String configKey; | |||
private Integer severity; | |||
@@ -113,12 +114,12 @@ public final class RuleDto extends Dto<RuleKey> { | |||
return this; | |||
} | |||
public String getStatus() { | |||
public RuleStatus getStatus() { | |||
return status; | |||
} | |||
public RuleDto setStatus(String status) { | |||
this.status = status; | |||
public RuleDto setStatus(@Nullable RuleStatus s) { | |||
this.status = s; | |||
return this; | |||
} | |||
@@ -126,7 +127,7 @@ public final class RuleDto extends Dto<RuleKey> { | |||
return name; | |||
} | |||
public RuleDto setName(String name) { | |||
public RuleDto setName(@Nullable String name) { | |||
this.name = name; | |||
return this; | |||
} | |||
@@ -135,7 +136,7 @@ public final class RuleDto extends Dto<RuleKey> { | |||
return configKey; | |||
} | |||
public RuleDto setConfigKey(String configKey) { | |||
public RuleDto setConfigKey(@Nullable String configKey) { | |||
this.configKey = configKey; | |||
return this; | |||
} | |||
@@ -152,7 +153,7 @@ public final class RuleDto extends Dto<RuleKey> { | |||
return this.setSeverity(SeverityUtil.getOrdinalFromSeverity(severity)); | |||
} | |||
public RuleDto setSeverity(Integer severity) { | |||
public RuleDto setSeverity(@Nullable Integer severity) { | |||
this.severity = severity; | |||
return this; | |||
} | |||
@@ -161,7 +162,7 @@ public final class RuleDto extends Dto<RuleKey> { | |||
return cardinality; | |||
} | |||
public RuleDto setCardinality(Cardinality cardinality) { | |||
public RuleDto setCardinality(@Nullable Cardinality cardinality) { | |||
this.cardinality = cardinality; | |||
return this; | |||
} |
@@ -21,7 +21,7 @@ package org.sonar.core.rule; | |||
import org.junit.Before; | |||
import org.junit.Test; | |||
import org.sonar.api.rules.Rule; | |||
import org.sonar.api.rule.RuleStatus; | |||
import org.sonar.core.persistence.AbstractDaoTestCase; | |||
import java.util.List; | |||
@@ -47,7 +47,7 @@ public class RuleDaoTest extends AbstractDaoTestCase { | |||
assertThat(ruleDto.getId()).isEqualTo(1); | |||
assertThat(ruleDto.getName()).isEqualTo("Avoid Null"); | |||
assertThat(ruleDto.getDescription()).isEqualTo("Should avoid NULL"); | |||
assertThat(ruleDto.getStatus()).isEqualTo(Rule.STATUS_READY); | |||
assertThat(ruleDto.getStatus()).isEqualTo(RuleStatus.READY); | |||
assertThat(ruleDto.getRepositoryKey()).isEqualTo("checkstyle"); | |||
assertThat(ruleDto.getNoteData()).isEqualTo("Rule note with accents \u00e9\u00e8\u00e0"); | |||
assertThat(ruleDto.getSubCharacteristicId()).isEqualTo(100); |
@@ -67,7 +67,7 @@ public class RuleActivationContextFactory implements ServerComponent { | |||
if (rule == null) { | |||
throw new IllegalArgumentException("Rule not found: " + ruleKey); | |||
} | |||
if (RuleStatus.REMOVED == RuleStatus.valueOf(rule.getStatus())) { | |||
if (RuleStatus.REMOVED == rule.getStatus()) { | |||
throw new IllegalArgumentException("Rule was removed: " + ruleKey); | |||
} | |||
if (Cardinality.MULTIPLE.equals(rule.getCardinality())) { |
@@ -175,7 +175,7 @@ public class RegisterRules implements Startable { | |||
.setLanguage(ruleDef.repository().language()) | |||
.setName(ruleDef.name()) | |||
.setSeverity(ruleDef.severity()) | |||
.setStatus(ruleDef.status().name()) | |||
.setStatus(ruleDef.status()) | |||
.setEffortToFixDescription(ruleDef.effortToFixDescription()) | |||
.setSystemTags(ruleDef.tags()); | |||
@@ -210,9 +210,8 @@ public class RegisterRules implements Startable { | |||
dto.setCardinality(cardinality); | |||
changed = true; | |||
} | |||
String status = def.status().name(); | |||
if (!StringUtils.equals(dto.getStatus(), status)) { | |||
dto.setStatus(status); | |||
if (def.status() != dto.getStatus()) { | |||
dto.setStatus(def.status()); | |||
changed = true; | |||
} | |||
if (!StringUtils.equals(dto.getLanguage(), def.repository().language())) { | |||
@@ -342,7 +341,7 @@ public class RegisterRules implements Startable { | |||
// Update custom rules from template | |||
if (ruleDto.getParentId() != null) { | |||
RuleDto parent = dbClient.ruleDao().getParent(ruleDto, session); | |||
if (parent != null && !Rule.STATUS_REMOVED.equals(parent.getStatus())) { | |||
if (parent != null && RuleStatus.REMOVED != parent.getStatus()) { | |||
ruleDto.setLanguage(parent.getLanguage()); | |||
ruleDto.setStatus(parent.getStatus()); | |||
ruleDto.setDefaultSubCharacteristicId(parent.getDefaultSubCharacteristicId()); | |||
@@ -354,9 +353,9 @@ public class RegisterRules implements Startable { | |||
toBeRemoved = false; | |||
} | |||
} | |||
if (toBeRemoved && !RuleStatus.REMOVED.toString().equals(ruleDto.getStatus())) { | |||
if (toBeRemoved && RuleStatus.REMOVED != ruleDto.getStatus()) { | |||
LOG.info(String.format("Disable rule %s", ruleDto.getKey())); | |||
ruleDto.setStatus(Rule.STATUS_REMOVED); | |||
ruleDto.setStatus(RuleStatus.REMOVED); | |||
ruleDto.setSystemTags(Collections.<String>emptySet()); | |||
ruleDto.setTags(Collections.<String>emptySet()); | |||
dbClient.ruleDao().update(session, ruleDto); |
@@ -19,13 +19,8 @@ | |||
*/ | |||
package org.sonar.server.rule; | |||
import org.apache.commons.lang.StringUtils; | |||
import org.sonar.api.ServerComponent; | |||
import org.sonar.api.rule.RuleKey; | |||
import org.sonar.core.permission.GlobalPermissions; | |||
import org.sonar.core.persistence.DbSession; | |||
import org.sonar.core.rule.RuleDto; | |||
import org.sonar.server.db.DbClient; | |||
import org.sonar.server.rule.index.RuleIndex; | |||
import org.sonar.server.rule.index.RuleNormalizer; | |||
import org.sonar.server.rule.index.RuleQuery; | |||
@@ -34,8 +29,6 @@ import org.sonar.server.search.QueryOptions; | |||
import org.sonar.server.user.UserSession; | |||
import javax.annotation.CheckForNull; | |||
import javax.annotation.Nullable; | |||
import java.util.Date; | |||
import java.util.Set; | |||
/** | |||
@@ -44,12 +37,10 @@ import java.util.Set; | |||
public class RuleService implements ServerComponent { | |||
private final RuleIndex index; | |||
private final DbClient db; | |||
private final RuleUpdater ruleUpdater; | |||
public RuleService(RuleIndex index, DbClient db, RuleUpdater ruleUpdater) { | |||
public RuleService(RuleIndex index, RuleUpdater ruleUpdater) { | |||
this.index = index; | |||
this.db = db; | |||
this.ruleUpdater = ruleUpdater; | |||
} | |||
@@ -74,63 +65,7 @@ public class RuleService implements ServerComponent { | |||
return index.terms(RuleNormalizer.RuleField._TAGS.field()); | |||
} | |||
/** | |||
* Set tags for rule. | |||
* | |||
* @param ruleKey the required key | |||
* @param tags Set of tags. <code>null</code> to remove all tags. | |||
*/ | |||
public void setTags(RuleKey ruleKey, Set<String> tags) { | |||
checkAdminPermission(UserSession.get()); | |||
DbSession dbSession = db.openSession(false); | |||
try { | |||
RuleDto rule = db.ruleDao().getNonNullByKey(dbSession, ruleKey); | |||
boolean changed = RuleTagHelper.applyTags(rule, tags); | |||
if (changed) { | |||
db.ruleDao().update(dbSession, rule); | |||
dbSession.commit(); | |||
} | |||
} finally { | |||
dbSession.close(); | |||
} | |||
} | |||
/** | |||
* Extend rule description by adding a note. | |||
* | |||
* @param ruleKey the required key | |||
* @param markdownNote markdown text. <code>null</code> to remove current note. | |||
*/ | |||
public void setNote(RuleKey ruleKey, @Nullable String markdownNote) { | |||
UserSession userSession = UserSession.get(); | |||
checkAdminPermission(userSession); | |||
DbSession dbSession = db.openSession(false); | |||
try { | |||
RuleDto rule = db.ruleDao().getNonNullByKey(dbSession, ruleKey); | |||
if (StringUtils.isBlank(markdownNote)) { | |||
rule.setNoteData(null); | |||
rule.setNoteCreatedAt(null); | |||
rule.setNoteUpdatedAt(null); | |||
rule.setNoteUserLogin(null); | |||
} else { | |||
rule.setNoteData(markdownNote); | |||
rule.setNoteCreatedAt(rule.getNoteCreatedAt() != null ? rule.getNoteCreatedAt() : new Date()); | |||
rule.setNoteUpdatedAt(new Date()); | |||
rule.setNoteUserLogin(userSession.login()); | |||
} | |||
db.ruleDao().update(dbSession, rule); | |||
dbSession.commit(); | |||
} finally { | |||
dbSession.close(); | |||
} | |||
} | |||
public void update(RuleUpdate update) { | |||
ruleUpdater.update(update, UserSession.get()); | |||
} | |||
private void checkAdminPermission(UserSession userSession) { | |||
userSession.checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); | |||
} | |||
} |
@@ -76,7 +76,7 @@ public class RuleUpdater implements ServerComponent { | |||
try { | |||
Context context = new Context(); | |||
context.rule = dbClient.ruleDao().getNonNullByKey(dbSession, change.getRuleKey()); | |||
if (RuleStatus.REMOVED.name().equals(context.rule.getStatus())) { | |||
if (RuleStatus.REMOVED == context.rule.getStatus()) { | |||
throw new IllegalArgumentException("Rule with REMOVED status cannot be updated: " + change.getRuleKey()); | |||
} | |||
@@ -107,7 +107,7 @@ public class RuleNormalizer extends BaseNormalizer<RuleDto, RuleKey> { | |||
update.put(RuleField.UPDATED_AT.field(), rule.getUpdatedAt()); | |||
update.put(RuleField.HTML_DESCRIPTION.field(), rule.getDescription()); | |||
update.put(RuleField.SEVERITY.field(), rule.getSeverityString()); | |||
update.put(RuleField.STATUS.field(), rule.getStatus()); | |||
update.put(RuleField.STATUS.field(), rule.getStatus().name()); | |||
update.put(RuleField.LANGUAGE.field(), rule.getLanguage()); | |||
update.put(RuleField.INTERNAL_KEY.field(), rule.getConfigKey()); | |||
update.put(RuleField.TEMPLATE.field(), rule.getCardinality() == Cardinality.MULTIPLE); |
@@ -30,6 +30,7 @@ import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.sonar.api.ServerComponent; | |||
import org.sonar.api.platform.ServerUpgradeStatus; | |||
import org.sonar.api.rule.RuleStatus; | |||
import org.sonar.api.rules.Rule; | |||
import org.sonar.api.server.debt.DebtRemediationFunction; | |||
import org.sonar.api.utils.Duration; | |||
@@ -111,7 +112,7 @@ public class CopyRequirementsFromCharacteristicsToRules implements ServerCompone | |||
private void convert(RuleDto rule, Collection<RequirementDto> requirementsForRule, DbSession session) { | |||
RequirementDto enabledRequirement = enabledRequirement(requirementsForRule); | |||
if (enabledRequirement == null && !Rule.STATUS_REMOVED.equals(rule.getStatus())) { | |||
if (enabledRequirement == null && RuleStatus.REMOVED != rule.getStatus()) { | |||
// If no enabled requirement is found, it means that the requirement has been disabled for this rule | |||
convertDisableRequirement(rule, session); | |||
@@ -0,0 +1,36 @@ | |||
/* | |||
* SonarQube, open source software quality management tool. | |||
* Copyright (C) 2008-2014 SonarSource | |||
* mailto:contact AT sonarsource DOT com | |||
* | |||
* SonarQube is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU Lesser General Public | |||
* License as published by the Free Software Foundation; either | |||
* version 3 of the License, or (at your option) any later version. | |||
* | |||
* SonarQube is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
* Lesser General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Lesser General Public License | |||
* along with this program; if not, write to the Free Software Foundation, | |||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |||
*/ | |||
package org.sonar.server.debt; | |||
import org.apache.commons.lang.StringUtils; | |||
import org.sonar.core.technicaldebt.db.CharacteristicDto; | |||
public class DebtTesting { | |||
private DebtTesting() { | |||
// only static helpers | |||
} | |||
public static CharacteristicDto newCharacteristicDto(String key) { | |||
return new CharacteristicDto() | |||
.setKey(key) | |||
.setName(StringUtils.capitalize(key)) | |||
.setEnabled(true); | |||
} | |||
} |
@@ -394,48 +394,6 @@ public class RuleActivatorMediumTest { | |||
} | |||
@Test | |||
public void find_active_rules() throws Exception { | |||
QualityProfileDto profile1 = QualityProfileDto.createFor("p1", "java"); | |||
QualityProfileDto profile2 = QualityProfileDto.createFor("p2", "java"); | |||
db.qualityProfileDao().insert(dbSession, profile1, profile2); | |||
RuleDto rule1 = RuleDto.createFor(RuleKey.of("java", "r1")).setSeverity(Severity.MAJOR); | |||
RuleDto rule2 = RuleDto.createFor(RuleKey.of("java", "r2")).setSeverity(Severity.MAJOR); | |||
db.ruleDao().insert(dbSession, rule1); | |||
db.ruleDao().insert(dbSession, rule2); | |||
db.activeRuleDao().insert(dbSession, ActiveRuleDto.createFor(profile1, rule1).setSeverity(Severity.MINOR)); | |||
db.activeRuleDao().insert(dbSession, ActiveRuleDto.createFor(profile1, rule2).setSeverity(Severity.BLOCKER)); | |||
db.activeRuleDao().insert(dbSession, ActiveRuleDto.createFor(profile2, rule2).setSeverity(Severity.CRITICAL)); | |||
dbSession.commit(); | |||
// find by rule key | |||
List<ActiveRule> activeRules = index.findByRule(RuleKey.of("java", "r1")); | |||
assertThat(activeRules).hasSize(1); | |||
assertThat(activeRules.get(0).key().ruleKey()).isEqualTo(RuleKey.of("java", "r1")); | |||
activeRules = index.findByRule(RuleKey.of("java", "r2")); | |||
assertThat(activeRules).hasSize(2); | |||
assertThat(activeRules.get(0).key().ruleKey()).isEqualTo(RuleKey.of("java", "r2")); | |||
activeRules = index.findByRule(RuleKey.of("java", "r3")); | |||
assertThat(activeRules).isEmpty(); | |||
// find by profile | |||
activeRules = index.findByProfile(profile1.getKey()); | |||
assertThat(activeRules).hasSize(2); | |||
assertThat(activeRules.get(0).key().qProfile()).isEqualTo(profile1.getKey()); | |||
assertThat(activeRules.get(1).key().qProfile()).isEqualTo(profile1.getKey()); | |||
activeRules = index.findByProfile(profile2.getKey()); | |||
assertThat(activeRules).hasSize(1); | |||
assertThat(activeRules.get(0).key().qProfile()).isEqualTo(profile2.getKey()); | |||
activeRules = index.findByProfile(QualityProfileKey.of("unknown", "unknown")); | |||
assertThat(activeRules).isEmpty(); | |||
} | |||
private void grantPermission() { | |||
MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("marius"); | |||
} |
@@ -32,10 +32,12 @@ import org.sonar.core.persistence.DbSession; | |||
import org.sonar.core.qualityprofile.db.ActiveRuleDto; | |||
import org.sonar.core.qualityprofile.db.ActiveRuleParamDto; | |||
import org.sonar.core.qualityprofile.db.QualityProfileDto; | |||
import org.sonar.core.qualityprofile.db.QualityProfileKey; | |||
import org.sonar.core.rule.RuleDto; | |||
import org.sonar.core.rule.RuleParamDto; | |||
import org.sonar.server.db.DbClient; | |||
import org.sonar.server.qualityprofile.ActiveRule; | |||
import org.sonar.server.rule.RuleTesting; | |||
import org.sonar.server.tester.ServerTester; | |||
import java.util.Collection; | |||
@@ -137,96 +139,52 @@ public class ActiveRuleIndexMediumTest { | |||
} | |||
@Test | |||
public void find_active_rules() throws InterruptedException { | |||
public void find_active_rules() throws Exception { | |||
QualityProfileDto profile1 = QualityProfileDto.createFor("p1", "java"); | |||
QualityProfileDto profile2 = QualityProfileDto.createFor("p2", "java"); | |||
db.qualityProfileDao().insert(dbSession, profile1); | |||
db.qualityProfileDao().insert(dbSession, profile2); | |||
db.qualityProfileDao().insert(dbSession, profile1, profile2); | |||
// insert db | |||
RuleDto ruleDto = newRuleDto(RuleKey.of("javascript", "S001")); | |||
db.ruleDao().insert(dbSession, ruleDto); | |||
// insert db | |||
RuleDto ruleDto2 = newRuleDto(RuleKey.of("javascript", "S002")); | |||
db.ruleDao().insert(dbSession, ruleDto2); | |||
ActiveRuleDto find1 = ActiveRuleDto.createFor(profile1, ruleDto) | |||
.setInheritance(ActiveRule.Inheritance.INHERIT.name()) | |||
.setSeverity(Severity.BLOCKER); | |||
ActiveRuleDto find2 = ActiveRuleDto.createFor(profile2, ruleDto) | |||
.setInheritance(ActiveRule.Inheritance.INHERIT.name()) | |||
.setSeverity(Severity.BLOCKER); | |||
ActiveRuleDto notFound = ActiveRuleDto.createFor(profile2, ruleDto2) | |||
.setInheritance(ActiveRule.Inheritance.INHERIT.name()) | |||
.setSeverity(Severity.BLOCKER); | |||
db.activeRuleDao().insert(dbSession, find1); | |||
db.activeRuleDao().insert(dbSession, find2); | |||
db.activeRuleDao().insert(dbSession, notFound); | |||
dbSession.commit(); | |||
// verify that activeRules are persisted in db | |||
List<ActiveRuleDto> persistedDtos = db.activeRuleDao().findByRule(ruleDto, dbSession); | |||
assertThat(persistedDtos).hasSize(2); | |||
persistedDtos = db.activeRuleDao().findByRule(ruleDto2, dbSession); | |||
assertThat(persistedDtos).hasSize(1); | |||
// verify that activeRules are indexed in es | |||
Collection<ActiveRule> hits = index.findByRule(RuleKey.of("javascript", "S001")); | |||
assertThat(hits).isNotNull(); | |||
assertThat(hits).hasSize(2); | |||
} | |||
@Test | |||
public void find_activeRules_by_qprofile() throws InterruptedException { | |||
QualityProfileDto profileDto = QualityProfileDto.createFor("P1", "java"); | |||
QualityProfileDto profileDto2 = QualityProfileDto.createFor("P2", "java"); | |||
db.qualityProfileDao().insert(dbSession, profileDto); | |||
db.qualityProfileDao().insert(dbSession, profileDto2); | |||
// insert db | |||
RuleDto rule1 = newRuleDto(RuleKey.of("javascript", "S001")); | |||
RuleDto rule2 = newRuleDto(RuleKey.of("javascript", "S002")); | |||
RuleDto rule1 = RuleTesting.newDto(RuleKey.of("java", "r1")).setSeverity(Severity.MAJOR); | |||
RuleDto rule2 = RuleTesting.newDto(RuleKey.of("java", "r2")).setSeverity(Severity.MAJOR); | |||
db.ruleDao().insert(dbSession, rule1); | |||
db.ruleDao().insert(dbSession, rule2); | |||
ActiveRuleDto onP1 = ActiveRuleDto.createFor(profileDto, rule1) | |||
.setInheritance(ActiveRule.Inheritance.INHERIT.name()) | |||
.setSeverity(Severity.BLOCKER); | |||
db.activeRuleDao().insert(dbSession, ActiveRuleDto.createFor(profile1, rule1).setSeverity(Severity.MINOR)); | |||
db.activeRuleDao().insert(dbSession, ActiveRuleDto.createFor(profile1, rule2).setSeverity(Severity.BLOCKER)); | |||
db.activeRuleDao().insert(dbSession, ActiveRuleDto.createFor(profile2, rule2).setSeverity(Severity.CRITICAL)); | |||
dbSession.commit(); | |||
ActiveRuleDto firstOnP1 = ActiveRuleDto.createFor(profileDto2, rule1) | |||
.setInheritance(ActiveRule.Inheritance.INHERIT.name()) | |||
.setSeverity(Severity.BLOCKER); | |||
// 1. find by rule key | |||
ActiveRuleDto firstOnP2 = ActiveRuleDto.createFor(profileDto2, rule2) | |||
.setInheritance(ActiveRule.Inheritance.INHERIT.name()) | |||
.setSeverity(Severity.BLOCKER); | |||
// in db | |||
dbSession.clearCache(); | |||
assertThat(db.activeRuleDao().findByRule(rule1, dbSession)).hasSize(1); | |||
assertThat(db.activeRuleDao().findByRule(rule2, dbSession)).hasSize(2); | |||
db.activeRuleDao().insert(dbSession, onP1); | |||
db.activeRuleDao().insert(dbSession, firstOnP1); | |||
db.activeRuleDao().insert(dbSession, firstOnP2); | |||
dbSession.commit(); | |||
// verify that activeRules are persisted in db | |||
List<ActiveRuleDto> persistedDtos = db.activeRuleDao().findByRule(rule1, dbSession); | |||
assertThat(persistedDtos).hasSize(2); | |||
persistedDtos = db.activeRuleDao().findByRule(rule2, dbSession); | |||
assertThat(persistedDtos).hasSize(1); | |||
// in es | |||
List<ActiveRule> activeRules = index.findByRule(RuleKey.of("java", "r1")); | |||
assertThat(activeRules).hasSize(1); | |||
assertThat(activeRules.get(0).key().ruleKey()).isEqualTo(RuleKey.of("java", "r1")); | |||
// verify that activeRules are indexed in es | |||
activeRules = index.findByRule(RuleKey.of("java", "r2")); | |||
assertThat(activeRules).hasSize(2); | |||
assertThat(activeRules.get(0).key().ruleKey()).isEqualTo(RuleKey.of("java", "r2")); | |||
activeRules = index.findByRule(RuleKey.of("java", "r3")); | |||
assertThat(activeRules).isEmpty(); | |||
Collection<ActiveRule> hits = index.findByRule(RuleKey.of("javascript", "S001")); | |||
// 2. find by profile | |||
activeRules = index.findByProfile(profile1.getKey()); | |||
assertThat(activeRules).hasSize(2); | |||
assertThat(activeRules.get(0).key().qProfile()).isEqualTo(profile1.getKey()); | |||
assertThat(activeRules.get(1).key().qProfile()).isEqualTo(profile1.getKey()); | |||
assertThat(hits).isNotNull(); | |||
assertThat(hits).hasSize(2); | |||
activeRules = index.findByProfile(profile2.getKey()); | |||
assertThat(activeRules).hasSize(1); | |||
assertThat(activeRules.get(0).key().qProfile()).isEqualTo(profile2.getKey()); | |||
activeRules = index.findByProfile(QualityProfileKey.of("unknown", "unknown")); | |||
assertThat(activeRules).isEmpty(); | |||
} | |||
@Test | |||
@@ -254,7 +212,7 @@ public class ActiveRuleIndexMediumTest { | |||
.setRepositoryKey(ruleKey.repository()) | |||
.setName("Rule " + ruleKey.rule()) | |||
.setDescription("Description " + ruleKey.rule()) | |||
.setStatus(RuleStatus.READY.toString()) | |||
.setStatus(RuleStatus.READY) | |||
.setConfigKey("InternalKey" + ruleKey.rule()) | |||
.setSeverity(Severity.INFO) | |||
.setCardinality(Cardinality.SINGLE) |
@@ -373,7 +373,7 @@ public class QProfilesWsMediumTest { | |||
RuleDto rule = RuleDto.createFor(RuleKey.of("blah", id)) | |||
.setLanguage(lang) | |||
.setSeverity(Severity.BLOCKER) | |||
.setStatus(RuleStatus.READY.name()); | |||
.setStatus(RuleStatus.READY); | |||
db.ruleDao().insert(session, rule); | |||
return rule; | |||
} |
@@ -88,7 +88,7 @@ public class RegisterRulesTest extends AbstractDaoTestCase { | |||
assertThat(rule1.getTags()).isEmpty(); | |||
assertThat(rule1.getSystemTags()).containsOnly("tag1", "tag2", "tag3"); | |||
assertThat(rule1.getConfigKey()).isEqualTo("config1"); | |||
assertThat(rule1.getStatus()).isEqualTo(RuleStatus.BETA.toString()); | |||
assertThat(rule1.getStatus()).isEqualTo(RuleStatus.BETA); | |||
assertThat(rule1.getCreatedAt()).isEqualTo(DATE1); | |||
assertThat(rule1.getUpdatedAt()).isEqualTo(DATE1); | |||
assertThat(rule1.getEffortToFixDescription()).isEqualTo("squid.S115.effortToFix"); | |||
@@ -142,7 +142,7 @@ public class RegisterRulesTest extends AbstractDaoTestCase { | |||
assertThat(rule1.getConfigKey()).isEqualTo("config1 v2"); | |||
assertThat(rule1.getNoteData()).isEqualTo("user *note*"); | |||
assertThat(rule1.getNoteUserLogin()).isEqualTo("marius"); | |||
assertThat(rule1.getStatus()).isEqualTo(RuleStatus.READY.toString()); | |||
assertThat(rule1.getStatus()).isEqualTo(RuleStatus.READY); | |||
assertThat(rule1.getCreatedAt()).isEqualTo(DATE1); | |||
assertThat(rule1.getUpdatedAt()).isEqualTo(DATE2); | |||
assertThat(rule1.getEffortToFixDescription()).isEqualTo("squid.S115.effortToFix.v2"); | |||
@@ -155,13 +155,13 @@ public class RegisterRulesTest extends AbstractDaoTestCase { | |||
// rule2 has been removed -> status set to REMOVED but db row is not deleted | |||
RuleDto rule2 = dbClient.ruleDao().getByKey(dbSession, RuleKey.of("fake", "rule2")); | |||
assertThat(rule2.getStatus()).isEqualTo(RuleStatus.REMOVED.toString()); | |||
assertThat(rule2.getStatus()).isEqualTo(RuleStatus.REMOVED); | |||
assertThat(rule2.getUpdatedAt()).isEqualTo(DATE2); | |||
// rule3 has been created | |||
RuleDto rule3 = dbClient.ruleDao().getByKey(dbSession, RuleKey.of("fake", "rule3")); | |||
assertThat(rule3).isNotNull(); | |||
assertThat(rule3.getStatus()).isEqualTo(RuleStatus.READY.toString()); | |||
assertThat(rule3.getStatus()).isEqualTo(RuleStatus.READY); | |||
} | |||
@Test | |||
@@ -177,7 +177,7 @@ public class RegisterRulesTest extends AbstractDaoTestCase { | |||
execute(new FakeRepositoryV2()); | |||
// -> rule2 is still removed, but not update at DATE3 | |||
RuleDto rule2 = dbClient.ruleDao().getByKey(dbSession, RuleKey.of("fake", "rule2")); | |||
assertThat(rule2.getStatus()).isEqualTo(RuleStatus.REMOVED.toString()); | |||
assertThat(rule2.getStatus()).isEqualTo(RuleStatus.REMOVED); | |||
assertThat(rule2.getUpdatedAt()).isEqualTo(DATE2); | |||
} | |||
@@ -302,12 +302,10 @@ public class RuleDataMediumTest { | |||
public void should_not_find_removed() { | |||
// insert db | |||
RuleKey ruleKey = RuleKey.of("javascript", "S001"); | |||
RuleDto ruleDto = newRuleDto(ruleKey) | |||
.setStatus(RuleStatus.READY.toString()); | |||
RuleDto ruleDto = newRuleDto(ruleKey).setStatus(RuleStatus.READY); | |||
RuleKey removedKey = RuleKey.of("javascript", "S002"); | |||
RuleDto removedDto = newRuleDto(removedKey) | |||
.setStatus(RuleStatus.REMOVED.toString()); | |||
RuleDto removedDto = newRuleDto(removedKey).setStatus(RuleStatus.REMOVED); | |||
dao.insert(dbSession, ruleDto); | |||
dao.insert(dbSession, removedDto); | |||
dbSession.commit(); | |||
@@ -329,7 +327,7 @@ public class RuleDataMediumTest { | |||
.setRepositoryKey(ruleKey.repository()) | |||
.setName("Rule " + ruleKey.rule()) | |||
.setDescription("Description " + ruleKey.rule()) | |||
.setStatus(RuleStatus.READY.toString()) | |||
.setStatus(RuleStatus.READY) | |||
.setConfigKey("InternalKey" + ruleKey.rule()) | |||
.setSeverity(Severity.INFO) | |||
.setCardinality(Cardinality.SINGLE) |
@@ -19,38 +19,23 @@ | |||
*/ | |||
package org.sonar.server.rule; | |||
import com.google.common.collect.ImmutableSet; | |||
import com.google.common.collect.Sets; | |||
import org.junit.After; | |||
import org.junit.Before; | |||
import org.junit.ClassRule; | |||
import org.junit.Test; | |||
import org.sonar.api.rule.RuleKey; | |||
import org.sonar.api.rule.RuleStatus; | |||
import org.sonar.api.rule.Severity; | |||
import org.sonar.api.server.debt.DebtRemediationFunction; | |||
import org.sonar.check.Cardinality; | |||
import org.sonar.core.permission.GlobalPermissions; | |||
import org.sonar.core.persistence.DbSession; | |||
import org.sonar.core.persistence.MyBatis; | |||
import org.sonar.core.qualityprofile.db.ActiveRuleDto; | |||
import org.sonar.core.qualityprofile.db.QualityProfileDao; | |||
import org.sonar.core.qualityprofile.db.QualityProfileDto; | |||
import org.sonar.core.rule.RuleDto; | |||
import org.sonar.server.exceptions.ForbiddenException; | |||
import org.sonar.server.exceptions.NotFoundException; | |||
import org.sonar.server.qualityprofile.persistence.ActiveRuleDao; | |||
import org.sonar.server.rule.db.RuleDao; | |||
import org.sonar.server.rule.index.RuleIndex; | |||
import org.sonar.server.rule.index.RuleNormalizer; | |||
import org.sonar.server.tester.ServerTester; | |||
import org.sonar.server.user.MockUserSession; | |||
import java.util.Collections; | |||
import java.util.Set; | |||
import static org.fest.assertions.Assertions.assertThat; | |||
import static org.fest.assertions.Fail.fail; | |||
public class RuleServiceMediumTest { | |||
@@ -73,192 +58,30 @@ public class RuleServiceMediumTest { | |||
dbSession.close(); | |||
} | |||
@Test | |||
public void setTags() throws InterruptedException { | |||
MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); | |||
// insert db | |||
RuleKey rule1 = RuleKey.of("javascript", "S001"); | |||
dao.insert(dbSession, newRuleDto(rule1) | |||
.setTags(Sets.newHashSet("security")) | |||
.setSystemTags(Collections.<String>emptySet()) | |||
); | |||
RuleKey rule2 = RuleKey.of("java", "S001"); | |||
dao.insert(dbSession, newRuleDto(rule2) | |||
.setTags(Sets.newHashSet("toberemoved")) | |||
.setSystemTags(Sets.newHashSet("bug"))); | |||
dbSession.commit(); | |||
service.setTags(rule2, Sets.newHashSet("bug", "security")); | |||
// verify that tags are indexed in index | |||
Set<String> tags = service.listTags(); | |||
assertThat(tags).containsOnly("security", "bug"); | |||
} | |||
@Test | |||
public void setTags_fail_if_rule_does_not_exist() { | |||
try { | |||
MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); | |||
service.setTags(RuleKey.of("java", "S001"), Sets.newHashSet("bug", "security")); | |||
fail(); | |||
} catch (NotFoundException e) { | |||
assertThat(e).hasMessage("Key 'java:S001' not found"); | |||
} | |||
} | |||
@Test | |||
public void setTags_fail_if_not_permitted() { | |||
try { | |||
MockUserSession.set(); | |||
service.setTags(RuleKey.of("java", "S001"), Sets.newHashSet("bug", "security")); | |||
fail(); | |||
} catch (ForbiddenException e) { | |||
assertThat(e).hasMessage("Insufficient privileges"); | |||
} | |||
} | |||
@Test | |||
public void setNote() throws Exception { | |||
MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("marius"); | |||
RuleKey ruleKey = RuleKey.of("javascript", "S001"); | |||
dao.insert(dbSession, newRuleDto(ruleKey)); | |||
dbSession.commit(); | |||
// 1. CREATE NOTE | |||
service.setNote(ruleKey, "my *note*"); | |||
// verify db | |||
RuleDto dto = dao.getNonNullByKey(dbSession, ruleKey); | |||
assertThat(dto.getNoteData()).isEqualTo("my *note*"); | |||
assertThat(dto.getNoteCreatedAt()).isNotNull(); | |||
assertThat(dto.getNoteUpdatedAt()).isNotNull(); | |||
assertThat(dto.getNoteUserLogin()).isEqualTo("marius"); | |||
// verify es | |||
Rule rule = index.getByKey(ruleKey); | |||
assertThat(rule.markdownNote()).isEqualTo("my *note*"); | |||
assertThat(rule.noteCreatedAt()).isNotNull(); | |||
assertThat(rule.noteUpdatedAt()).isNotNull(); | |||
assertThat(rule.noteLogin()).isEqualTo("marius"); | |||
// 2. DELETE NOTE | |||
service.setNote(ruleKey, null); | |||
dbSession.clearCache(); | |||
dto = dao.getNonNullByKey(dbSession, ruleKey); | |||
assertThat(dto.getNoteData()).isNull(); | |||
assertThat(dto.getNoteCreatedAt()).isNull(); | |||
assertThat(dto.getNoteUpdatedAt()).isNull(); | |||
assertThat(dto.getNoteUserLogin()).isNull(); | |||
rule = index.getByKey(ruleKey); | |||
assertThat(rule.markdownNote()).isNull(); | |||
assertThat(rule.noteCreatedAt()).isNull(); | |||
assertThat(rule.noteUpdatedAt()).isNull(); | |||
assertThat(rule.noteLogin()).isNull(); | |||
} | |||
@Test | |||
public void test_list_tags() throws InterruptedException { | |||
// insert db | |||
RuleKey rule1 = RuleKey.of("javascript", "S001"); | |||
dao.insert(dbSession, newRuleDto(rule1) | |||
.setTags(Sets.newHashSet("security")) | |||
.setSystemTags(Sets.newHashSet("java-coding", "stephane.gamard@sonarsource.com")) | |||
); | |||
RuleKey rule2 = RuleKey.of("java", "S001"); | |||
dao.insert(dbSession, newRuleDto(rule2) | |||
.setTags(Sets.newHashSet("mytag")) | |||
.setSystemTags(Sets.newHashSet(""))); | |||
RuleKey key1 = RuleKey.of("javascript", "S001"); | |||
dao.insert(dbSession, RuleTesting.newDto(key1) | |||
.setTags(Sets.newHashSet("tag1")) | |||
.setSystemTags(Sets.newHashSet("sys1", "sys2"))); | |||
RuleKey key2 = RuleKey.of("java", "S001"); | |||
dao.insert(dbSession, RuleTesting.newDto(key2) | |||
.setTags(Sets.newHashSet("tag2")) | |||
.setSystemTags(Collections.<String>emptySet())); | |||
dbSession.commit(); | |||
// all tags, including system | |||
Set<String> tags = service.listTags(); | |||
assertThat(tags).containsOnly("tag1", "tag2", "sys1", "sys2"); | |||
Set<String> tags = index.terms(RuleNormalizer.RuleField._TAGS.field()); | |||
assertThat(tags).containsOnly("java-coding", "security", | |||
"stephane.gamard@sonarsource.com", "mytag"); | |||
// verify user tags in es | |||
tags = index.terms(RuleNormalizer.RuleField.TAGS.field()); | |||
assertThat(tags).containsOnly("tag1", "tag2"); | |||
// verify system tags in es | |||
tags = index.terms(RuleNormalizer.RuleField.SYSTEM_TAGS.field()); | |||
assertThat(tags).containsOnly("java-coding", | |||
"stephane.gamard@sonarsource.com"); | |||
} | |||
@Test | |||
public void test_search_activation_on_rules() throws InterruptedException { | |||
// 1. Create in DB | |||
QualityProfileDto qprofile1 = QualityProfileDto.createFor("profile1", "java"); | |||
QualityProfileDto qprofile2 = QualityProfileDto.createFor("profile2", "java"); | |||
tester.get(QualityProfileDao.class).insert(dbSession, qprofile1); | |||
tester.get(QualityProfileDao.class).insert(dbSession, qprofile2); | |||
RuleDto rule1 = newRuleDto(RuleKey.of("test", "rule1")); | |||
RuleDto rule2 = newRuleDto(RuleKey.of("test", "rule2")); | |||
tester.get(RuleDao.class).insert(dbSession, rule1); | |||
tester.get(RuleDao.class).insert(dbSession, rule2); | |||
ActiveRuleDto activeRule1 = ActiveRuleDto.createFor(qprofile1, rule1) | |||
.setSeverity(Severity.BLOCKER); | |||
ActiveRuleDto activeRule2 = ActiveRuleDto.createFor(qprofile1, rule2) | |||
.setSeverity(Severity.BLOCKER); | |||
ActiveRuleDto activeRule3 = ActiveRuleDto.createFor(qprofile2, rule2) | |||
.setSeverity(Severity.BLOCKER); | |||
tester.get(ActiveRuleDao.class).insert(dbSession, activeRule1); | |||
tester.get(ActiveRuleDao.class).insert(dbSession, activeRule2); | |||
tester.get(ActiveRuleDao.class).insert(dbSession, activeRule3); | |||
dbSession.commit(); | |||
// 2. test in DB | |||
assertThat(tester.get(RuleDao.class).findAll(dbSession)).hasSize(2); | |||
assertThat(tester.get(ActiveRuleDao.class).findByRule(rule1, dbSession)).hasSize(1); | |||
assertThat(tester.get(ActiveRuleDao.class).findByRule(rule2, dbSession)).hasSize(2); | |||
// 3. Test for ALL activations | |||
// TODO | |||
// RuleQuery query = new RuleQuery() | |||
// .setActivation("all"); | |||
// RuleResult result = service.search(query, new QueryOptions()); | |||
// assertThat(result.getActiveRules().values()).hasSize(3); | |||
// | |||
// // 4. Test for NO active rules | |||
// query = new RuleQuery() | |||
// .setActivation("false"); | |||
// result = service.search(query, new QueryOptions()); | |||
// assertThat(result.getActiveRules().values()).hasSize(0); | |||
// | |||
// // 4. Test for active rules of QProfile | |||
// query = new RuleQuery() | |||
// .setActivation("true") | |||
// .setQProfileKey(qprofile1.getKey().toString()); | |||
// result = service.search(query, new QueryOptions()); | |||
// assertThat(result.getActiveRules().values()).hasSize(2); | |||
} | |||
private RuleDto newRuleDto(RuleKey ruleKey) { | |||
return new RuleDto() | |||
.setRuleKey(ruleKey.rule()) | |||
.setRepositoryKey(ruleKey.repository()) | |||
.setName("Rule " + ruleKey.rule()) | |||
.setDescription("Description " + ruleKey.rule()) | |||
.setStatus(RuleStatus.READY.toString()) | |||
.setConfigKey("InternalKey" + ruleKey.rule()) | |||
.setSeverity(Severity.INFO) | |||
.setCardinality(Cardinality.SINGLE) | |||
.setLanguage("js") | |||
.setTags(ImmutableSet.of("tag1", "tag2")) | |||
.setSystemTags(ImmutableSet.of("systag1", "systag2")) | |||
.setRemediationFunction(DebtRemediationFunction.Type.LINEAR.toString()) | |||
.setDefaultRemediationFunction(DebtRemediationFunction.Type.LINEAR_OFFSET.toString()) | |||
.setRemediationCoefficient("1h") | |||
.setDefaultRemediationCoefficient("5d") | |||
.setRemediationOffset("5min") | |||
.setDefaultRemediationOffset("10h") | |||
.setEffortToFixDescription(ruleKey.repository() + "." + ruleKey.rule() + ".effortToFix"); | |||
assertThat(tags).containsOnly("sys1", "sys2"); | |||
} | |||
} |
@@ -27,15 +27,27 @@ import org.sonar.api.server.debt.DebtRemediationFunction; | |||
import org.sonar.check.Cardinality; | |||
import org.sonar.core.rule.RuleDto; | |||
public class RuleTests { | |||
public class RuleTesting { | |||
private RuleTesting() { | |||
// only static helpers | |||
} | |||
/** | |||
* Full RuleDto used to feed database with fake data. Tests must not rely on the | |||
* field contents declared here. They should override the fields they need to test, | |||
* for example: | |||
* <pre> | |||
* ruleDao.insert(dbSession, RuleTesting.newDto(key).setStatus(RuleStatus.BETA)); | |||
* </pre> | |||
*/ | |||
public static RuleDto newDto(RuleKey ruleKey) { | |||
return new RuleDto() | |||
.setRuleKey(ruleKey.rule()) | |||
.setRepositoryKey(ruleKey.repository()) | |||
.setName("Rule " + ruleKey.rule()) | |||
.setDescription("Description " + ruleKey.rule()) | |||
.setStatus(RuleStatus.READY.toString()) | |||
.setStatus(RuleStatus.READY) | |||
.setConfigKey("InternalKey" + ruleKey.rule()) | |||
.setSeverity(Severity.INFO) | |||
.setCardinality(Cardinality.SINGLE) |
@@ -35,6 +35,7 @@ import org.sonar.core.persistence.DbSession; | |||
import org.sonar.core.rule.RuleDto; | |||
import org.sonar.core.technicaldebt.db.CharacteristicDto; | |||
import org.sonar.server.db.DbClient; | |||
import org.sonar.server.debt.DebtTesting; | |||
import org.sonar.server.exceptions.UnauthorizedException; | |||
import org.sonar.server.rule.index.RuleIndex; | |||
import org.sonar.server.tester.ServerTester; | |||
@@ -74,7 +75,7 @@ public class RuleUpdaterMediumTest { | |||
@Test | |||
public void do_not_update_rule_with_removed_status() throws Exception { | |||
grantPermission(); | |||
db.ruleDao().insert(dbSession, RuleTests.newDto(RULE_KEY).setStatus(RuleStatus.REMOVED.name())); | |||
db.ruleDao().insert(dbSession, RuleTesting.newDto(RULE_KEY).setStatus(RuleStatus.REMOVED)); | |||
dbSession.commit(); | |||
RuleUpdate update = new RuleUpdate(RULE_KEY).setTags(Sets.newHashSet("java9")); | |||
@@ -82,14 +83,14 @@ public class RuleUpdaterMediumTest { | |||
updater.update(update, UserSession.get()); | |||
fail(); | |||
} catch (IllegalArgumentException e) { | |||
assertThat(e).hasMessage("Rule with REMOVED status cannot be updated: squid:S001"); | |||
assertThat(e).hasMessage("Rule with REMOVED status cannot be updated: squid:S001"); | |||
} | |||
} | |||
@Test | |||
public void no_changes() throws Exception { | |||
grantPermission(); | |||
db.ruleDao().insert(dbSession, RuleTests.newDto(RULE_KEY) | |||
db.ruleDao().insert(dbSession, RuleTesting.newDto(RULE_KEY) | |||
// the following fields are not supposed to be updated | |||
.setNoteData("my *note*") | |||
.setNoteUserLogin("me") | |||
@@ -118,7 +119,7 @@ public class RuleUpdaterMediumTest { | |||
@Test | |||
public void set_markdown_note() throws Exception { | |||
grantPermission(); | |||
db.ruleDao().insert(dbSession, RuleTests.newDto(RULE_KEY) | |||
db.ruleDao().insert(dbSession, RuleTesting.newDto(RULE_KEY) | |||
.setNoteData(null) | |||
.setNoteUserLogin(null) | |||
@@ -149,9 +150,9 @@ public class RuleUpdaterMediumTest { | |||
} | |||
@Test | |||
public void delete_markdown_note() throws Exception { | |||
public void remove_markdown_note() throws Exception { | |||
grantPermission(); | |||
db.ruleDao().insert(dbSession, RuleTests.newDto(RULE_KEY) | |||
db.ruleDao().insert(dbSession, RuleTesting.newDto(RULE_KEY) | |||
.setNoteData("my *note*") | |||
.setNoteUserLogin("me")); | |||
dbSession.commit(); | |||
@@ -171,7 +172,7 @@ public class RuleUpdaterMediumTest { | |||
public void set_tags() throws Exception { | |||
grantPermission(); | |||
// insert db | |||
db.ruleDao().insert(dbSession, RuleTests.newDto(RULE_KEY) | |||
db.ruleDao().insert(dbSession, RuleTesting.newDto(RULE_KEY) | |||
.setTags(Sets.newHashSet("security")) | |||
.setSystemTags(Sets.newHashSet("java8", "javadoc")) | |||
); | |||
@@ -194,7 +195,7 @@ public class RuleUpdaterMediumTest { | |||
@Test | |||
public void remove_tags() throws Exception { | |||
grantPermission(); | |||
db.ruleDao().insert(dbSession, RuleTests.newDto(RULE_KEY) | |||
db.ruleDao().insert(dbSession, RuleTesting.newDto(RULE_KEY) | |||
.setTags(Sets.newHashSet("security")) | |||
.setSystemTags(Sets.newHashSet("java8", "javadoc"))); | |||
dbSession.commit(); | |||
@@ -213,10 +214,10 @@ public class RuleUpdaterMediumTest { | |||
} | |||
@Test | |||
public void fail_to_update_if_not_granted() throws Exception { | |||
public void do_not_update_if_not_granted() throws Exception { | |||
MockUserSession.set().setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); | |||
db.ruleDao().insert(dbSession, RuleTests.newDto(RULE_KEY) | |||
db.ruleDao().insert(dbSession, RuleTesting.newDto(RULE_KEY) | |||
.setTags(Sets.newHashSet("security")) | |||
.setSystemTags(Sets.newHashSet("java8", "javadoc"))); | |||
dbSession.commit(); | |||
@@ -236,7 +237,7 @@ public class RuleUpdaterMediumTest { | |||
public void override_debt() throws Exception { | |||
grantPermission(); | |||
insertDebtCharacteristics(dbSession); | |||
db.ruleDao().insert(dbSession, RuleTests.newDto(RULE_KEY) | |||
db.ruleDao().insert(dbSession, RuleTesting.newDto(RULE_KEY) | |||
.setDefaultSubCharacteristicId(hardReliabilityId) | |||
.setDefaultRemediationFunction(DebtRemediationFunction.Type.LINEAR.name()) | |||
.setDefaultRemediationCoefficient("1d") | |||
@@ -273,7 +274,7 @@ public class RuleUpdaterMediumTest { | |||
public void reset_debt() throws Exception { | |||
grantPermission(); | |||
insertDebtCharacteristics(dbSession); | |||
db.ruleDao().insert(dbSession, RuleTests.newDto(RULE_KEY) | |||
db.ruleDao().insert(dbSession, RuleTesting.newDto(RULE_KEY) | |||
.setDefaultSubCharacteristicId(hardReliabilityId) | |||
.setDefaultRemediationFunction(DebtRemediationFunction.Type.LINEAR.name()) | |||
.setDefaultRemediationCoefficient("1d") | |||
@@ -309,7 +310,7 @@ public class RuleUpdaterMediumTest { | |||
public void unset_debt() throws Exception { | |||
grantPermission(); | |||
insertDebtCharacteristics(dbSession); | |||
db.ruleDao().insert(dbSession, RuleTests.newDto(RULE_KEY) | |||
db.ruleDao().insert(dbSession, RuleTesting.newDto(RULE_KEY) | |||
.setDefaultSubCharacteristicId(hardReliabilityId) | |||
.setDefaultRemediationFunction(DebtRemediationFunction.Type.LINEAR.name()) | |||
.setDefaultRemediationCoefficient("1d") | |||
@@ -346,26 +347,17 @@ public class RuleUpdaterMediumTest { | |||
} | |||
private void insertDebtCharacteristics(DbSession dbSession) { | |||
CharacteristicDto reliability = new CharacteristicDto() | |||
.setKey("RELIABILITY") | |||
.setName("Reliability") | |||
.setEnabled(true); | |||
CharacteristicDto reliability = DebtTesting.newCharacteristicDto("RELIABILITY"); | |||
db.debtCharacteristicDao().insert(reliability, dbSession); | |||
reliabilityId = reliability.getId(); | |||
CharacteristicDto softReliability = new CharacteristicDto() | |||
.setKey("SOFT_RELIABILITY") | |||
.setName("Software reliability") | |||
.setParentId(reliability.getId()) | |||
.setEnabled(true); | |||
CharacteristicDto softReliability = DebtTesting.newCharacteristicDto("SOFT_RELIABILITY") | |||
.setParentId(reliability.getId()); | |||
db.debtCharacteristicDao().insert(softReliability, dbSession); | |||
softReliabilityId = softReliability.getId(); | |||
CharacteristicDto hardReliability = new CharacteristicDto() | |||
.setKey("HARD_RELIABILITY") | |||
.setName("Hardware reliability") | |||
.setParentId(reliability.getId()) | |||
.setEnabled(true); | |||
CharacteristicDto hardReliability = DebtTesting.newCharacteristicDto("HARD_RELIABILITY") | |||
.setParentId(reliability.getId()); | |||
db.debtCharacteristicDao().insert(hardReliability, dbSession); | |||
hardReliabilityId = hardReliability.getId(); | |||
} |
@@ -25,8 +25,8 @@ import org.junit.After; | |||
import org.junit.Before; | |||
import org.junit.Test; | |||
import org.sonar.api.rule.RuleKey; | |||
import org.sonar.api.rule.RuleStatus; | |||
import org.sonar.api.rule.Severity; | |||
import org.sonar.api.rules.Rule; | |||
import org.sonar.api.server.debt.DebtRemediationFunction; | |||
import org.sonar.api.utils.DateUtils; | |||
import org.sonar.api.utils.System2; | |||
@@ -72,7 +72,7 @@ public class RuleDaoTest extends AbstractDaoTestCase { | |||
assertThat(ruleDto.getId()).isEqualTo(1); | |||
assertThat(ruleDto.getName()).isEqualTo("Avoid Null"); | |||
assertThat(ruleDto.getDescription()).isEqualTo("Should avoid NULL"); | |||
assertThat(ruleDto.getStatus()).isEqualTo(Rule.STATUS_READY); | |||
assertThat(ruleDto.getStatus()).isEqualTo(RuleStatus.READY); | |||
assertThat(ruleDto.getRepositoryKey()).isEqualTo("checkstyle"); | |||
assertThat(ruleDto.getNoteData()).isEqualTo("Rule note with accents \u00e9\u00e8\u00e0"); | |||
assertThat(ruleDto.getSubCharacteristicId()).isEqualTo(100); | |||
@@ -96,7 +96,7 @@ public class RuleDaoTest extends AbstractDaoTestCase { | |||
assertThat(ruleDto.getId()).isEqualTo(1); | |||
assertThat(ruleDto.getName()).isEqualTo("Avoid Null"); | |||
assertThat(ruleDto.getDescription()).isEqualTo("Should avoid NULL"); | |||
assertThat(ruleDto.getStatus()).isEqualTo(Rule.STATUS_READY); | |||
assertThat(ruleDto.getStatus()).isEqualTo(RuleStatus.READY); | |||
assertThat(ruleDto.getRepositoryKey()).isEqualTo("checkstyle"); | |||
assertThat(ruleDto.getNoteData()).isEqualTo("Rule note with accents \u00e9\u00e8\u00e0"); | |||
assertThat(ruleDto.getSubCharacteristicId()).isEqualTo(100); | |||
@@ -118,7 +118,7 @@ public class RuleDaoTest extends AbstractDaoTestCase { | |||
assertThat(ruleDto.getId()).isEqualTo(2); | |||
assertThat(ruleDto.getName()).isEqualTo("Avoid Null"); | |||
assertThat(ruleDto.getDescription()).isEqualTo("Should avoid NULL"); | |||
assertThat(ruleDto.getStatus()).isEqualTo(Rule.STATUS_READY); | |||
assertThat(ruleDto.getStatus()).isEqualTo(RuleStatus.READY); | |||
assertThat(ruleDto.getRepositoryKey()).isEqualTo("checkstyle"); | |||
} | |||
@@ -140,7 +140,7 @@ public class RuleDaoTest extends AbstractDaoTestCase { | |||
assertThat(ruleDto.getId()).isEqualTo(2); | |||
assertThat(ruleDto.getName()).isEqualTo("Avoid Null"); | |||
assertThat(ruleDto.getDescription()).isEqualTo("Should avoid NULL"); | |||
assertThat(ruleDto.getStatus()).isEqualTo(Rule.STATUS_READY); | |||
assertThat(ruleDto.getStatus()).isEqualTo(RuleStatus.READY); | |||
assertThat(ruleDto.getRepositoryKey()).isEqualTo("checkstyle"); | |||
} | |||
@@ -156,28 +156,10 @@ public class RuleDaoTest extends AbstractDaoTestCase { | |||
assertThat(ruleDto.getId()).isEqualTo(1); | |||
assertThat(ruleDto.getName()).isEqualTo("Avoid Null"); | |||
assertThat(ruleDto.getDescription()).isEqualTo("Should avoid NULL"); | |||
assertThat(ruleDto.getStatus()).isEqualTo(Rule.STATUS_READY); | |||
assertThat(ruleDto.getStatus()).isEqualTo(RuleStatus.READY); | |||
assertThat(ruleDto.getRepositoryKey()).isEqualTo("checkstyle"); | |||
} | |||
// @Test | |||
// public void select_by_sub_characteristic_id(){ | |||
// setupData("select_by_sub_characteristic_id"); | |||
// | |||
// // Rules from sub characteristic (even REMOVED ones are returned) | |||
// List<RuleDto> ruleDtos = dao.findBySubCharacteristicId(3); | |||
// assertThat(ruleDtos).hasSize(3); | |||
// assertThat(idsFromRuleDtos(ruleDtos)).containsExactly(2, 4, 5); | |||
// | |||
// // Nothing on root characteristic | |||
// ruleDtos = dao.selectBySubCharacteristicId(1); | |||
// assertThat(ruleDtos).isEmpty(); | |||
// | |||
// // Rules from disabled characteristic | |||
// ruleDtos = dao.selectBySubCharacteristicId(11); | |||
// assertThat(idsFromRuleDtos(ruleDtos)).containsExactly(3); | |||
// } | |||
@Test | |||
public void update() { | |||
@@ -191,7 +173,7 @@ public class RuleDaoTest extends AbstractDaoTestCase { | |||
.setRepositoryKey("plugin") | |||
.setName("new name") | |||
.setDescription("new description") | |||
.setStatus(Rule.STATUS_DEPRECATED) | |||
.setStatus(RuleStatus.DEPRECATED) | |||
.setConfigKey("NewConfigKey") | |||
.setSeverity(Severity.INFO) | |||
.setCardinality(Cardinality.MULTIPLE) | |||
@@ -231,7 +213,7 @@ public class RuleDaoTest extends AbstractDaoTestCase { | |||
.setRepositoryKey("plugin") | |||
.setName("new name") | |||
.setDescription("new description") | |||
.setStatus(Rule.STATUS_DEPRECATED) | |||
.setStatus(RuleStatus.DEPRECATED) | |||
.setConfigKey("NewConfigKey") | |||
.setSeverity(Severity.INFO) | |||
.setCardinality(Cardinality.MULTIPLE) | |||
@@ -265,7 +247,7 @@ public class RuleDaoTest extends AbstractDaoTestCase { | |||
.setRepositoryKey("plugin") | |||
.setName("new name") | |||
.setDescription("new description") | |||
.setStatus(Rule.STATUS_DEPRECATED) | |||
.setStatus(RuleStatus.DEPRECATED) | |||
.setConfigKey("NewConfigKey") | |||
.setSeverity(Severity.INFO) | |||
.setCardinality(Cardinality.MULTIPLE) | |||
@@ -287,7 +269,7 @@ public class RuleDaoTest extends AbstractDaoTestCase { | |||
.setRepositoryKey("plugin2") | |||
.setName("new name2") | |||
.setDescription("new description2") | |||
.setStatus(Rule.STATUS_BETA) | |||
.setStatus(RuleStatus.BETA) | |||
.setConfigKey("NewConfigKey2") | |||
.setSeverity(Severity.MAJOR) | |||
.setCardinality(Cardinality.SINGLE) |
@@ -375,8 +375,8 @@ public class RuleIndexMediumTest { | |||
@Test | |||
public void search_by_any_of_statuses() throws InterruptedException { | |||
dao.insert(dbSession, newRuleDto(RuleKey.of("java", "S001")).setStatus(RuleStatus.BETA.name())); | |||
dao.insert(dbSession, newRuleDto(RuleKey.of("java", "S002")).setStatus(RuleStatus.READY.name())); | |||
dao.insert(dbSession, newRuleDto(RuleKey.of("java", "S001")).setStatus(RuleStatus.BETA)); | |||
dao.insert(dbSession, newRuleDto(RuleKey.of("java", "S002")).setStatus(RuleStatus.READY)); | |||
dbSession.commit(); | |||
@@ -612,7 +612,7 @@ public class RuleIndexMediumTest { | |||
.setRepositoryKey(ruleKey.repository()) | |||
.setName("Rule " + ruleKey.rule()) | |||
.setDescription("Description " + ruleKey.rule()) | |||
.setStatus(RuleStatus.READY.toString()) | |||
.setStatus(RuleStatus.READY) | |||
.setConfigKey("InternalKey" + ruleKey.rule()) | |||
.setSeverity(Severity.INFO) | |||
.setCardinality(Cardinality.SINGLE) |
@@ -362,9 +362,7 @@ public class RulesWebServiceTest { | |||
private QualityProfileDto newQualityProfile() { | |||
return new QualityProfileDto() | |||
.setLanguage("java") | |||
.setName("My Profile"); | |||
return QualityProfileDto.createFor("My Profile", "java"); | |||
} | |||
private RuleDto newRuleDto(RuleKey ruleKey) { | |||
@@ -373,7 +371,7 @@ public class RulesWebServiceTest { | |||
.setRepositoryKey(ruleKey.repository()) | |||
.setName("Rule " + ruleKey.rule()) | |||
.setDescription("Description " + ruleKey.rule()) | |||
.setStatus(RuleStatus.READY.toString()) | |||
.setStatus(RuleStatus.READY) | |||
.setConfigKey("InternalKey" + ruleKey.rule()) | |||
.setSeverity(Severity.INFO) | |||
.setCardinality(Cardinality.SINGLE) |
@@ -24,6 +24,7 @@ import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRespon | |||
import org.elasticsearch.common.xcontent.XContentBuilder; | |||
import org.junit.After; | |||
import org.junit.Before; | |||
import org.junit.Ignore; | |||
import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.junit.rules.TemporaryFolder; | |||
@@ -41,6 +42,8 @@ import static org.fest.assertions.Assertions.assertThat; | |||
import static org.mockito.Mockito.mock; | |||
import static org.mockito.Mockito.when; | |||
@Ignore | |||
//TODO fix tempFolder | |||
public class BaseIndexTest { | |||
@Rule |
@@ -31,7 +31,6 @@ public class IndexClientMediumTest{ | |||
@ClassRule | |||
public static ServerTester tester = new ServerTester(); | |||
@Test | |||
public void get_index_class(){ | |||
IndexClient indexClient = tester.get(IndexClient.class); |