private RuleKey createCustomRule( RuleKey ruleKey, NewRule newRule, RuleDto templateRuleDto, DbSession dbSession) { RuleDto ruleDto = RuleDto.createFor(ruleKey) .setTemplateId(templateRuleDto.getId()) .setConfigKey(templateRuleDto.getConfigKey()) .setName(newRule.name()) .setDescription(newRule.markdownDescription()) .setDescriptionFormat(Format.MARKDOWN) .setSeverity(newRule.severity()) .setStatus(newRule.status()) .setLanguage(templateRuleDto.getLanguage()) .setDefaultSubCharacteristicId(templateRuleDto.getDefaultSubCharacteristicId()) .setDefaultRemediationFunction(templateRuleDto.getDefaultRemediationFunction()) .setDefaultRemediationCoefficient(templateRuleDto.getDefaultRemediationCoefficient()) .setDefaultRemediationOffset(templateRuleDto.getDefaultRemediationOffset()) .setEffortToFixDescription(templateRuleDto.getEffortToFixDescription()) .setTags(templateRuleDto.getTags()) .setSystemTags(templateRuleDto.getSystemTags()); dbClient.ruleDao().insert(dbSession, ruleDto); for (RuleParamDto templateRuleParamDto : dbClient.ruleDao().findRuleParamsByRuleKey(dbSession, templateRuleDto.getKey())) { String customRuleParamValue = Strings.emptyToNull(newRule.parameter(templateRuleParamDto.getName())); createCustomRuleParams(customRuleParamValue, ruleDto, templateRuleParamDto, dbSession); } return ruleKey; }
@Test public void getByKey() throws InterruptedException { RuleDto ruleDto = RuleTesting.newDto(RuleKey.of("javascript", "S001")); dao.insert(dbSession, ruleDto); dbSession.commit(); Rule rule = index.getByKey(RuleKey.of("javascript", "S001")); assertThat(rule.htmlDescription()).isEqualTo(ruleDto.getDescription()); assertThat(rule.key()).isEqualTo(ruleDto.getKey()); // TODO // assertThat(rule.debtSubCharacteristicKey()) // .isEqualTo(ruleDto.getDefaultSubCharacteristicId().toString()); assertThat(rule.debtRemediationFunction().type().name()) .isEqualTo(ruleDto.getRemediationFunction()); assertThat(Sets.newHashSet(rule.tags())).isEqualTo(ruleDto.getTags()); assertThat(Sets.newHashSet(rule.systemTags())).isEqualTo(ruleDto.getSystemTags()); }
@Test public void remove_end_user_tags_that_are_declared_as_system() { verifyRulesInDb(); Rule rule = index.getByKey(RuleTesting.XOO_X1); assertThat(rule.systemTags()).contains("tag1"); assertThat(rule.tags()).isEmpty(); // Add a user tag tester .get(RuleUpdater.class) .update( RuleUpdate.createForPluginRule(rule.key()).setTags(newHashSet("user-tag")), UserSession.get()); dbSession.clearCache(); // Verify tags Rule ruleUpdated = index.getByKey(RuleTesting.XOO_X1); assertThat(ruleUpdated.systemTags()).contains("tag1"); assertThat(ruleUpdated.tags()).contains("user-tag"); // The plugin X1 will be updated rulesDefinition.includeX1 = false; rulesDefinition.includeX1bis = true; tester.get(Platform.class).executeStartupTasks(); dbSession.clearCache(); // User tag should become a system tag RuleDto ruleDtoReloaded = db.ruleDao().getByKey(dbSession, RuleTesting.XOO_X1); assertThat(ruleDtoReloaded.getSystemTags()).contains("tag1", "tag2", "user-tag"); assertThat(ruleDtoReloaded.getTags()).isEmpty(); // User tag should become a system tag Rule ruleReloaded = index.getByKey(RuleTesting.XOO_X1); assertThat(ruleReloaded.systemTags()).contains("tag1", "tag2", "user-tag"); assertThat(ruleReloaded.tags()).isEmpty(); }