@Test public void show_rule_with_default_debt_infos() { RuleDefinitionDto rule = db.rules().insert(r -> r .setDefRemediationFunction("LINEAR_OFFSET") .setDefRemediationGapMultiplier("5d") .setDefRemediationBaseEffort("10h") .setGapDescription("gap desc")); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, rule.getKey().toString()) .executeProtobuf(ShowResponse.class); Rule resultRule = result.getRule(); assertThat(resultRule.getDefaultRemFnType()).isEqualTo("LINEAR_OFFSET"); assertThat(resultRule.getDefaultRemFnGapMultiplier()).isEqualTo("5d"); assertThat(resultRule.getDefaultRemFnBaseEffort()).isEqualTo("10h"); assertThat(resultRule.getGapDescription()).isEqualTo("gap desc"); assertThat(resultRule.getRemFnType()).isEqualTo("LINEAR_OFFSET"); assertThat(resultRule.getRemFnGapMultiplier()).isEqualTo("5d"); assertThat(resultRule.getRemFnBaseEffort()).isEqualTo("10h"); assertThat(resultRule.getRemFnOverloaded()).isFalse(); }
@Test public void show_rule_with_default_and_overridden_debt_infos() { RuleDefinitionDto rule = db.rules().insert(r -> r .setDefRemediationFunction("LINEAR_OFFSET") .setDefRemediationGapMultiplier("5d") .setDefRemediationBaseEffort("10h")); db.rules().insertOrUpdateMetadata(rule, db.getDefaultOrganization(), m -> m.setNoteData(null).setNoteUserUuid(null), m -> m .setRemediationFunction("CONSTANT_ISSUE") .setRemediationGapMultiplier(null) .setRemediationBaseEffort("15h")); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, rule.getKey().toString()) .executeProtobuf(ShowResponse.class); Rule resultRule = result.getRule(); assertThat(resultRule.getDefaultRemFnType()).isEqualTo("LINEAR_OFFSET"); assertThat(resultRule.getDefaultRemFnType()).isEqualTo("LINEAR_OFFSET"); assertThat(resultRule.getDefaultRemFnGapMultiplier()).isEqualTo("5d"); assertThat(resultRule.getDefaultRemFnBaseEffort()).isEqualTo("10h"); assertThat(resultRule.getRemFnType()).isEqualTo("CONSTANT_ISSUE"); assertThat(resultRule.hasRemFnGapMultiplier()).isFalse(); assertThat(resultRule.getRemFnBaseEffort()).isEqualTo("15h"); assertThat(resultRule.getRemFnOverloaded()).isTrue(); }
@Test public void show_rule_with_no_default_and_no_overridden_debt() { RuleDefinitionDto rule = db.rules().insert(r -> r .setDefRemediationFunction(null) .setDefRemediationGapMultiplier(null) .setDefRemediationBaseEffort(null)); db.rules().insertOrUpdateMetadata(rule, db.getDefaultOrganization(), m -> m.setNoteData(null).setNoteUserUuid(null), m -> m .setRemediationFunction(null) .setRemediationGapMultiplier(null) .setRemediationBaseEffort(null)); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, rule.getKey().toString()) .executeProtobuf(ShowResponse.class); Rule resultRule = result.getRule(); assertThat(resultRule.hasDefaultRemFnType()).isFalse(); assertThat(resultRule.hasDefaultRemFnGapMultiplier()).isFalse(); assertThat(resultRule.hasDefaultRemFnBaseEffort()).isFalse(); assertThat(resultRule.hasRemFnType()).isFalse(); assertThat(resultRule.hasRemFnGapMultiplier()).isFalse(); assertThat(resultRule.hasRemFnBaseEffort()).isFalse(); assertThat(resultRule.getRemFnOverloaded()).isFalse(); }
private Rule toRule(Rules.ShowResponse showResponse) { Rules.Rule rule = showResponse.getRule(); if (rule == null) { return Rule.newBuilder().build(); } return Rule.newBuilder() .key(rule.getKey()) .repo(rule.getRepo()) .name(rule.getName()) .description(rule.getMdDesc()) .type(rule.getType() != null ? rule.getType().name() : null) .debtRemFnType(rule.getDebtRemFnType()) .debtRemFnBaseEffort(rule.getRemFnBaseEffort()) .build(); } }
public Rule getRule(String key) { Rules.Rule rule = sonarClient.rules().show(null, key).getRule(); return new Rule(rule.getKey(), rule.getName(), rule.getSeverity(), rule.getLang(), rule.getLangName(), rule.getHtmlDesc()); }
@Test public void ignore_predefined_info_on_adhoc_rule() { OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto externalRule = db.rules().insert(r -> r .setIsExternal(true) .setIsAdHoc(true) .setName("predefined name") .setDescription("<div>predefined desc</div>") .setSeverity(Severity.BLOCKER) .setType(RuleType.VULNERABILITY)); RuleMetadataDto metadata = db.rules().insertOrUpdateMetadata(externalRule, organization, m -> m .setAdHocName("adhoc name") .setAdHocDescription("<div>adhoc desc</div>") .setAdHocSeverity(Severity.MAJOR) .setAdHocType(RuleType.CODE_SMELL) .setNoteData(null) .setNoteUserUuid(null)); doReturn("<div>adhoc desc</div>").when(macroInterpreter).interpret(metadata.getAdHocDescription()); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, externalRule.getKey().toString()) .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(ShowResponse.class); Rule resultRule = result.getRule(); assertThat(resultRule) .extracting(Rule::getName, Rule::getHtmlDesc, Rule::getSeverity, Rule::getType) .containsExactlyInAnyOrder("adhoc name", "<div>adhoc desc</div>", Severity.MAJOR, Common.RuleType.CODE_SMELL); }
@Test public void show_deprecated_rule_debt_fields() { RuleDefinitionDto rule = db.rules().insert(r -> r .setDefRemediationFunction("LINEAR_OFFSET") .setDefRemediationGapMultiplier("5d") .setDefRemediationBaseEffort("10h") .setGapDescription("gap desc")); db.rules().insertOrUpdateMetadata(rule, db.getDefaultOrganization(), m -> m.setNoteData(null).setNoteUserUuid(null), m -> m .setRemediationFunction("CONSTANT_ISSUE") .setRemediationGapMultiplier(null) .setRemediationBaseEffort("15h")); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, rule.getKey().toString()) .executeProtobuf(ShowResponse.class); Rule resultRule = result.getRule(); assertThat(resultRule.getDefaultRemFnType()).isEqualTo("LINEAR_OFFSET"); assertThat(resultRule.getDefaultDebtRemFnCoeff()).isEqualTo("5d"); assertThat(resultRule.getDefaultDebtRemFnOffset()).isEqualTo("10h"); assertThat(resultRule.getEffortToFixDescription()).isEqualTo("gap desc"); assertThat(resultRule.getDebtRemFnType()).isEqualTo("CONSTANT_ISSUE"); assertThat(resultRule.hasDebtRemFnCoeff()).isFalse(); assertThat(resultRule.getDebtRemFnOffset()).isEqualTo("15h"); assertThat(resultRule.getDebtOverloaded()).isTrue(); }
@Test public void show_rule_with_only_overridden_debt() { RuleDefinitionDto rule = db.rules().insert(r -> r .setDefRemediationFunction(null) .setDefRemediationGapMultiplier(null) .setDefRemediationBaseEffort(null)); db.rules().insertOrUpdateMetadata(rule, db.getDefaultOrganization(), m -> m.setNoteData(null).setNoteUserUuid(null), m -> m .setRemediationFunction("LINEAR_OFFSET") .setRemediationGapMultiplier("5d") .setRemediationBaseEffort("10h")); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, rule.getKey().toString()) .executeProtobuf(ShowResponse.class); Rule resultRule = result.getRule(); assertThat(resultRule.hasDefaultRemFnType()).isFalse(); assertThat(resultRule.hasDefaultRemFnGapMultiplier()).isFalse(); assertThat(resultRule.hasDefaultRemFnBaseEffort()).isFalse(); assertThat(resultRule.getRemFnType()).isEqualTo("LINEAR_OFFSET"); assertThat(resultRule.getRemFnGapMultiplier()).isEqualTo("5d"); assertThat(resultRule.getRemFnBaseEffort()).isEqualTo("10h"); assertThat(resultRule.getRemFnOverloaded()).isTrue(); }
@Test public void show_adhoc_rule() { OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto externalRule = db.rules().insert(r -> r .setIsExternal(true) .setIsAdHoc(true)); RuleMetadataDto metadata = db.rules().insertOrUpdateMetadata(externalRule, organization, m -> m .setAdHocName("adhoc name") .setAdHocDescription("<div>desc</div>") .setAdHocSeverity(Severity.BLOCKER) .setAdHocType(RuleType.VULNERABILITY) .setNoteData(null) .setNoteUserUuid(null)); doReturn("<div>desc2</div>").when(macroInterpreter).interpret(metadata.getAdHocDescription()); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, externalRule.getKey().toString()) .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(ShowResponse.class); Rule resultRule = result.getRule(); assertThat(resultRule) .extracting(Rule::getName, Rule::getHtmlDesc, Rule::getSeverity, Rule::getType) .containsExactlyInAnyOrder("adhoc name", "<div>desc2</div>", Severity.BLOCKER, VULNERABILITY); }
@Test public void show_rule_with_basic_info() { RuleDefinitionDto rule = db.rules().insert(); RuleParamDto ruleParam = db.rules().insertRuleParam(rule); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, rule.getKey().toString()) .executeProtobuf(ShowResponse.class); Rule resultRule = result.getRule(); assertThat(resultRule.getKey()).isEqualTo(rule.getKey().toString()); assertThat(resultRule.getRepo()).isEqualTo(rule.getRepositoryKey()); assertThat(resultRule.getName()).isEqualTo(rule.getName()); assertThat(resultRule.getSeverity()).isEqualTo(rule.getSeverityString()); assertThat(resultRule.getStatus().toString()).isEqualTo(rule.getStatus().toString()); assertThat(resultRule.getInternalKey()).isEqualTo(rule.getConfigKey()); assertThat(resultRule.getIsTemplate()).isEqualTo(rule.isTemplate()); assertThat(resultRule.getLang()).isEqualTo(rule.getLanguage()); assertThat(resultRule.getParams().getParamsList()) .extracting(Rule.Param::getKey, Rule.Param::getHtmlDesc, Rule.Param::getDefaultValue) .containsExactlyInAnyOrder(tuple(ruleParam.getName(), ruleParam.getDescription(), ruleParam.getDefaultValue())); }
@Test public void adhoc_info_are_empty_when_no_metadata() { OrganizationDto organization = db.organizations().insert(); RuleDefinitionDto externalRule = db.rules().insert(r -> r .setIsExternal(true) .setIsAdHoc(true) .setName(null) .setDescription(null) .setDescriptionFormat(null) .setSeverity((String) null) .setType(0)); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, externalRule.getKey().toString()) .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(ShowResponse.class); Rule resultRule = result.getRule(); assertThat(resultRule) .extracting(Rule::hasName, Rule::hasHtmlDesc, Rule::hasSeverity, Rule::getType) .containsExactlyInAnyOrder(false, false, false, UNKNOWN); }
@Test public void encode_html_description_of_custom_rule() { // Template rule RuleDto templateRule = newTemplateRule(RuleKey.of("java", "S001")); db.rules().insert(templateRule.getDefinition()); // Custom rule RuleDefinitionDto customRule = newCustomRule(templateRule.getDefinition()) .setDescription("<div>line1\nline2</div>") .setDescriptionFormat(MARKDOWN); db.rules().insert(customRule); doReturn("<div>line1<br/>line2</div>").when(macroInterpreter).interpret("<div>line1\nline2</div>"); ShowResponse result = ws.newRequest() .setParam("key", customRule.getKey().toString()) .executeProtobuf(ShowResponse.class); assertThat(result.getRule().getHtmlDesc()).isEqualTo(INTERPRETED); assertThat(result.getRule().getTemplateKey()).isEqualTo(templateRule.getKey().toString()); verify(macroInterpreter).interpret("<div>line1<br/>line2</div>"); }
@Test public void show_external_rule() { RuleDefinitionDto externalRule = db.rules().insert(r -> r .setIsExternal(true) .setName("ext rule name")); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, externalRule.getKey().toString()) .executeProtobuf(ShowResponse.class); Rule resultRule = result.getRule(); assertThat(resultRule.getName()).isEqualTo("ext rule name"); }
@Test public void show_rule_key() { RuleDefinitionDto rule = db.rules().insert(); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, rule.getKey().toString()) .executeProtobuf(ShowResponse.class); assertThat(result.getRule()).extracting(Rule::getKey).containsExactly(rule.getKey().toString()); }
@Test public void show_rule_tags_in_specific_organization() { RuleDefinitionDto rule = db.rules().insert(); OrganizationDto organization = db.organizations().insert(); RuleMetadataDto metadata = db.rules().insertOrUpdateMetadata(rule, organization, setTags("tag1", "tag2"), m -> m.setNoteData(null).setNoteUserUuid(null)); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, rule.getKey().toString()) .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(ShowResponse.class); assertThat(result.getRule().getTags().getTagsList()) .containsExactly(metadata.getTags().toArray(new String[0])); }
@Test public void show_rule_tags_in_default_organization() { RuleDefinitionDto rule = db.rules().insert(); RuleMetadataDto metadata = db.rules().insertOrUpdateMetadata(rule, db.getDefaultOrganization(), setTags("tag1", "tag2"), m -> m.setNoteData(null).setNoteUserUuid(null)); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, rule.getKey().toString()) .executeProtobuf(ShowResponse.class); assertThat(result.getRule().getTags().getTagsList()) .containsExactly(metadata.getTags().toArray(new String[0])); }
@Test public void show_rule_with_note_login() { RuleDefinitionDto rule = db.rules().insert(); UserDto user = db.users().insertUser(); OrganizationDto organization = db.organizations().insert(); db.rules().insertOrUpdateMetadata(rule, user, organization); ShowResponse result = ws.newRequest() .setParam(PARAM_KEY, rule.getKey().toString()) .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(ShowResponse.class); assertThat(result.getRule().getNoteLogin()).isEqualTo(user.getLogin()); }