@Test public void createProfileWithRules() { Map<String, Map<String, BuiltInQualityProfile>> profiles = define(c -> { NewBuiltInQualityProfile profile = c.createBuiltInQualityProfile("Foo", "xoo"); profile.activateRule("repo", "ruleWithoutParam"); profile.activateRule("repo", "ruleWithSeverity").overrideSeverity("CRITICAL"); profile.activateRule("repo", "ruleWithParam").overrideParam("param", "value"); profile.done(); }); assertThat(profiles).containsOnlyKeys("xoo"); assertThat(profiles.get("xoo")).containsOnlyKeys("Foo"); BuiltInQualityProfile profile = profiles.get("xoo").get("Foo"); assertThat(profile.name()).isEqualTo("Foo"); assertThat(profile.language()).isEqualTo("xoo"); assertThat(profile.isDefault()).isFalse(); assertThat(profile.rules()) .extracting(BuiltInQualityProfilesDefinition.BuiltInActiveRule::repoKey, BuiltInQualityProfilesDefinition.BuiltInActiveRule::ruleKey, BuiltInQualityProfilesDefinition.BuiltInActiveRule::overriddenSeverity, r -> r.overriddenParams().size()) .containsOnly( tuple("repo", "ruleWithoutParam", null, 0), tuple("repo", "ruleWithSeverity", "CRITICAL", 0), tuple("repo", "ruleWithParam", null, 1)); assertThat(profile.rule(RuleKey.of("repo", "ruleWithParam")).overriddenParam("param").key()).isEqualTo("param"); assertThat(profile.rule(RuleKey.of("repo", "ruleWithParam")).overriddenParam("param").overriddenValue()).isEqualTo("value"); }
@Override public NewBuiltInActiveRule activateRule(String repoKey, String ruleKey) { RuleKey ruleKeyObj = RuleKey.of(repoKey, ruleKey); checkArgument(!newActiveRules.containsKey(ruleKeyObj), "The rule '%s' is already activated", ruleKeyObj); NewBuiltInActiveRule newActiveRule = new NewBuiltInActiveRule(repoKey, ruleKey); newActiveRules.put(ruleKeyObj, newActiveRule); return newActiveRule; }
private BuiltInActiveRule(NewBuiltInActiveRule newBuiltInActiveRule) { this.repoKey = newBuiltInActiveRule.repoKey(); this.ruleKey = newBuiltInActiveRule.ruleKey(); this.overriddenSeverity = newBuiltInActiveRule.overriddenSeverity; Map<String, OverriddenParam> paramsBuilder = new HashMap<>(); for (NewOverriddenParam newParam : newBuiltInActiveRule.getOverriddenParams()) { paramsBuilder.put(newParam.key, new OverriddenParam(newParam)); } this.overriddenParams = Collections.unmodifiableMap(paramsBuilder); }
private static void define(Context context, RulesProfile profile) { NewBuiltInQualityProfile newQp = context.createBuiltInQualityProfile(profile.getName(), profile.getLanguage()) .setDefault(profile.getDefaultProfile().booleanValue()); for (org.sonar.api.rules.ActiveRule ar : profile.getActiveRules()) { NewBuiltInActiveRule newActiveRule = newQp.activateRule(ar.getRepositoryKey(), ar.getRuleKey()); RulePriority overriddenSeverity = ar.getOverriddenSeverity(); if (overriddenSeverity != null) { newActiveRule.overrideSeverity(overriddenSeverity.name()); } for (ActiveRuleParam param : ar.getActiveRuleParams()) { newActiveRule.overrideParam(param.getKey(), param.getValue()); } } newQp.done(); }
@Override public void define(Context context) { NewBuiltInQualityProfile profile = context.createBuiltInQualityProfile("FooLint Rules", FooLanguage.KEY); profile.setDefault(true); NewBuiltInActiveRule rule1 = profile.activateRule(REPO_KEY, "ExampleRule1"); rule1.overrideSeverity("BLOCKER"); NewBuiltInActiveRule rule2 = profile.activateRule(REPO_KEY, "ExampleRule2"); rule2.overrideSeverity("MAJOR"); NewBuiltInActiveRule rule3 = profile.activateRule(REPO_KEY, "ExampleRule3"); rule3.overrideSeverity("CRITICAL"); profile.done(); }
@Override public void define(Context context) { NewBuiltInQualityProfile profile = context.createBuiltInQualityProfile("test BuiltInQualityProfilesDefinition", Xoo.KEY); profile.setDefault(false); NewBuiltInActiveRule rule = profile.activateRule(XOO_REPOSITORY, HasTagSensor.RULE_KEY); rule.overrideSeverity("BLOCKER"); rule.overrideParam("tag", "TODO"); profile.done(); } }
@CheckForNull void loadActiveRule(BuiltInQualityProfilesDefinition.NewBuiltInQualityProfile profile, String repositoryKey, Class<?> clazz) { BelongsToProfile belongsToProfile = clazz.getAnnotation(BelongsToProfile.class); if ((belongsToProfile != null) && StringUtils.equals(belongsToProfile.title(), profile.name())) { String ruleKey = RuleAnnotationUtils.getRuleKey(clazz); NewBuiltInActiveRule activeRule = profile.activateRule(repositoryKey, ruleKey); activeRule.overrideSeverity(belongsToProfile.priority().name()); } }
private BuiltInActiveRule(NewBuiltInActiveRule newBuiltInActiveRule) { this.repoKey = newBuiltInActiveRule.repoKey(); this.ruleKey = newBuiltInActiveRule.ruleKey(); this.overriddenSeverity = newBuiltInActiveRule.overriddenSeverity; Map<String, OverriddenParam> paramsBuilder = new HashMap<>(); for (NewOverriddenParam newParam : newBuiltInActiveRule.getOverriddenParams()) { paramsBuilder.put(newParam.key, new OverriddenParam(newParam)); } this.overriddenParams = Collections.unmodifiableMap(paramsBuilder); }
@Override public NewBuiltInActiveRule activateRule(String repoKey, String ruleKey) { RuleKey ruleKeyObj = RuleKey.of(repoKey, ruleKey); checkArgument(!newActiveRules.containsKey(ruleKeyObj), "The rule '%s' is already activated", ruleKeyObj); NewBuiltInActiveRule newActiveRule = new NewBuiltInActiveRule(repoKey, ruleKey); newActiveRules.put(ruleKeyObj, newActiveRule); return newActiveRule; }
@Test public void activate_deactivate_and_update_three_rules_at_the_same_time() { RuleDefinitionDto rule1 = db.rules().insert(r -> r.setLanguage("xoo")); RuleDefinitionDto rule2 = db.rules().insert(r -> r.setLanguage("xoo")); RuleDefinitionDto rule3 = db.rules().insert(r -> r.setLanguage("xoo")); BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); NewBuiltInQualityProfile newQp = context.createBuiltInQualityProfile("Sonar way", "xoo"); newQp.activateRule(rule1.getRepositoryKey(), rule1.getRuleKey()).overrideSeverity(Severity.CRITICAL); newQp.activateRule(rule2.getRepositoryKey(), rule2.getRuleKey()).overrideSeverity(Severity.MAJOR); newQp.done(); BuiltInQProfile builtIn = builtInProfileRepository.create(context.profile("xoo", "Sonar way"), rule1, rule2); // rule1 must be updated (blocker to critical) // rule2 must be activated // rule3 must be deactivated activateRuleInDb(persistedProfile, rule1, BLOCKER); activateRuleInDb(persistedProfile, rule3, BLOCKER); underTest.update(db.getSession(), builtIn, persistedProfile); List<ActiveRuleDto> activeRules = db.getDbClient().activeRuleDao().selectByRuleProfile(db.getSession(), persistedProfile); assertThat(activeRules).hasSize(2); assertThatRuleIsUpdated(activeRules, rule1, CRITICAL); assertThatRuleIsNewlyActivated(activeRules, rule2, MAJOR); assertThatRuleIsDeactivated(activeRules, rule3); assertThatProfileIsMarkedAsUpdated(persistedProfile); }
@Test public void insert_active_rules_and_changelog() { OrganizationDto org = db.organizations().insert(); RuleDefinitionDto rule1 = db.rules().insert(r -> r.setLanguage("xoo")); RuleDefinitionDto rule2 = db.rules().insert(r -> r.setLanguage("xoo")); BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); NewBuiltInQualityProfile newQp = context.createBuiltInQualityProfile("the name", "xoo"); newQp.activateRule(rule1.getRepositoryKey(), rule1.getRuleKey()).overrideSeverity(Severity.CRITICAL); newQp.activateRule(rule2.getRepositoryKey(), rule2.getRuleKey()).overrideSeverity(Severity.MAJOR); newQp.done(); BuiltInQProfile builtIn = builtInQProfileRepository.create(context.profile("xoo", "the name"), rule1, rule2); call(builtIn); verifyTableSize("rules_profiles", 1); verifyTableSize("active_rules", 2); verifyTableSize("active_rule_parameters", 0); verifyTableSize("qprofile_changes", 2); QProfileDto profile = verifyProfileInDb(org, builtIn); verifyActiveRuleInDb(profile, rule1, Severity.CRITICAL); verifyActiveRuleInDb(profile, rule2, Severity.MAJOR); }
@Test public void activate_new_rules() { RuleDefinitionDto rule1 = db.rules().insert(r -> r.setLanguage("xoo")); RuleDefinitionDto rule2 = db.rules().insert(r -> r.setLanguage("xoo")); BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); NewBuiltInQualityProfile newQp = context.createBuiltInQualityProfile("Sonar way", "xoo"); newQp.activateRule(rule1.getRepositoryKey(), rule1.getRuleKey()).overrideSeverity(Severity.CRITICAL); newQp.activateRule(rule2.getRepositoryKey(), rule2.getRuleKey()).overrideSeverity(Severity.MAJOR); newQp.done(); BuiltInQProfile builtIn = builtInProfileRepository.create(context.profile("xoo", "Sonar way"), rule1, rule2); underTest.update(db.getSession(), builtIn, persistedProfile); List<ActiveRuleDto> activeRules = db.getDbClient().activeRuleDao().selectByRuleProfile(db.getSession(), persistedProfile); assertThat(activeRules).hasSize(2); assertThatRuleIsNewlyActivated(activeRules, rule1, CRITICAL); assertThatRuleIsNewlyActivated(activeRules, rule2, MAJOR); assertThatProfileIsMarkedAsUpdated(persistedProfile); }
@Test public void deactivate_rule_that_is_not_in_built_in_definition_anymore() { RuleDefinitionDto rule1 = db.rules().insert(r -> r.setLanguage("xoo")); RuleDefinitionDto rule2 = db.rules().insert(r -> r.setLanguage("xoo")); BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); NewBuiltInQualityProfile newQp = context.createBuiltInQualityProfile("Sonar way", "xoo"); newQp.activateRule(rule2.getRepositoryKey(), rule2.getRuleKey()).overrideSeverity(Severity.MAJOR); newQp.done(); BuiltInQProfile builtIn = builtInProfileRepository.create(context.profile("xoo", "Sonar way"), rule1, rule2); // built-in definition contains only rule2 // so rule1 must be deactivated activateRuleInDb(persistedProfile, rule1, CRITICAL); underTest.update(db.getSession(), builtIn, persistedProfile); List<ActiveRuleDto> activeRules = db.getDbClient().activeRuleDao().selectByRuleProfile(db.getSession(), persistedProfile); assertThat(activeRules).hasSize(1); assertThatRuleIsDeactivated(activeRules, rule1); assertThatProfileIsMarkedAsUpdated(persistedProfile); }
@Test public void already_activated_rule_is_not_touched_if_no_differences() { RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("xoo")); BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); NewBuiltInQualityProfile newQp = context.createBuiltInQualityProfile("Sonar way", "xoo"); newQp.activateRule(rule.getRepositoryKey(), rule.getRuleKey()).overrideSeverity(Severity.CRITICAL); newQp.done(); BuiltInQProfile builtIn = builtInProfileRepository.create(context.profile("xoo", "Sonar way"), rule); activateRuleInDb(persistedProfile, rule, CRITICAL); underTest.update(db.getSession(), builtIn, persistedProfile); List<ActiveRuleDto> activeRules = db.getDbClient().activeRuleDao().selectByRuleProfile(db.getSession(), persistedProfile); assertThat(activeRules).hasSize(1); assertThatRuleIsUntouched(activeRules, rule, CRITICAL); assertThatProfileIsNotMarkedAsUpdated(persistedProfile); }
@Test public void already_activated_rule_is_updated_in_case_of_differences() { RuleDefinitionDto rule = db.rules().insert(r -> r.setLanguage("xoo")); BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); NewBuiltInQualityProfile newQp = context.createBuiltInQualityProfile("Sonar way", "xoo"); newQp.activateRule(rule.getRepositoryKey(), rule.getRuleKey()).overrideSeverity(Severity.CRITICAL); newQp.done(); BuiltInQProfile builtIn = builtInProfileRepository.create(context.profile("xoo", "Sonar way"), rule); activateRuleInDb(persistedProfile, rule, BLOCKER); underTest.update(db.getSession(), builtIn, persistedProfile); List<ActiveRuleDto> activeRules = db.getDbClient().activeRuleDao().selectByRuleProfile(db.getSession(), persistedProfile); assertThat(activeRules).hasSize(1); assertThatRuleIsUpdated(activeRules, rule, CRITICAL); assertThatProfileIsMarkedAsUpdated(persistedProfile); }
private static void define(Context context, RulesProfile profile) { NewBuiltInQualityProfile newQp = context.createBuiltInQualityProfile(profile.getName(), profile.getLanguage()) .setDefault(profile.getDefaultProfile().booleanValue()); for (org.sonar.api.rules.ActiveRule ar : profile.getActiveRules()) { NewBuiltInActiveRule newActiveRule = newQp.activateRule(ar.getRepositoryKey(), ar.getRuleKey()); RulePriority overriddenSeverity = ar.getOverriddenSeverity(); if (overriddenSeverity != null) { newActiveRule.overrideSeverity(overriddenSeverity.name()); } for (ActiveRuleParam param : ar.getActiveRuleParams()) { newActiveRule.overrideParam(param.getKey(), param.getValue()); } } newQp.done(); }
private void addPluginProfile(QProfileDto profile, RuleDefinitionDto... dbRules) { BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); NewBuiltInQualityProfile newQp = context.createBuiltInQualityProfile(profile.getName(), profile.getLanguage()); Arrays.stream(dbRules).forEach(dbRule -> newQp.activateRule(dbRule.getRepositoryKey(), dbRule.getRuleKey()).overrideSeverity(Severity.MAJOR)); newQp.done(); BuiltInQProfile.ActiveRule[] activeRules = toActiveRules(context.profile(profile.getLanguage(), profile.getName()).rules(), dbRules); builtInQProfileRepositoryRule.add(newLanguage(profile.getLanguage()), profile.getName(), false, activeRules); }
@Override public void define(Context context) { NewBuiltInQualityProfile profile = context.createBuiltInQualityProfile("test BuiltInQualityProfilesDefinition", Xoo.KEY); profile.setDefault(false); NewBuiltInActiveRule rule = profile.activateRule(XOO_REPOSITORY, HasTagSensor.RULE_KEY); rule.overrideSeverity("BLOCKER"); rule.overrideParam("tag", "TODO"); profile.done(); } }
private void addPluginProfile(RulesProfileDto dbProfile, RuleDefinitionDto... dbRules) { BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); NewBuiltInQualityProfile newQp = context.createBuiltInQualityProfile(dbProfile.getName(), dbProfile.getLanguage()); Arrays.stream(dbRules).forEach(dbRule -> newQp.activateRule(dbRule.getRepositoryKey(), dbRule.getRuleKey()).overrideSeverity(Severity.MAJOR)); newQp.done(); List<BuiltInActiveRule> rules = context.profile(dbProfile.getLanguage(), dbProfile.getName()).rules(); BuiltInQProfile.ActiveRule[] activeRules = toActiveRules(rules, dbRules); builtInQProfileRepositoryRule.add(newLanguage(dbProfile.getLanguage()), dbProfile.getName(), false, activeRules); }
@CheckForNull void loadActiveRule(BuiltInQualityProfilesDefinition.NewBuiltInQualityProfile profile, String repositoryKey, Class<?> clazz) { BelongsToProfile belongsToProfile = clazz.getAnnotation(BelongsToProfile.class); if ((belongsToProfile != null) && StringUtils.equals(belongsToProfile.title(), profile.name())) { String ruleKey = RuleAnnotationUtils.getRuleKey(clazz); NewBuiltInActiveRule activeRule = profile.activateRule(repositoryKey, ruleKey); activeRule.overrideSeverity(belongsToProfile.priority().name()); } }