From: Julien Lancelot Date: Thu, 24 Apr 2014 16:02:12 +0000 (+0200) Subject: SONAR-4764 Add method to get existing profile that match provided profiles for a... X-Git-Tag: 4.4-RC1~1402 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=26680d528d424837683d5a1edf4e3c7f85c53d92;p=sonarqube.git SONAR-4764 Add method to get existing profile that match provided profiles for a language --- diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileBackup.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileBackup.java index c00e297cc86..93f2afe8a17 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileBackup.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileBackup.java @@ -131,10 +131,10 @@ public class QProfileBackup implements ServerComponent { } /** - * Restore default profile for a given language. + * Restore provided profile for a given language. * If a profile with same name than default profile already exists, an exception will be thrown. */ - public QProfileResult restoreDefaultProfilesFromLanguage(String language) { + public QProfileResult restoreProvidedProfilesFromLanguage(String language) { checkPermission(UserSession.get()); QProfileResult result = new QProfileResult(); @@ -187,6 +187,21 @@ public class QProfileBackup implements ServerComponent { } } + /** + * Return the list of existing profiles that match the provided ones for a given language + */ + public List findProvidedProfilesByLanguage(String language) { + List profiles = newArrayList(); + ListMultimap profilesByName = profilesByName(language, new QProfileResult()); + for (RulesProfile rulesProfile : profilesByName.values()) { + QProfile profile = qProfileLookup.profile(rulesProfile.getName(), language); + if (profile != null) { + profiles.add(profile); + } + } + return profiles; + } + private void checkProfileDoesNotExists(RulesProfile importedProfile, boolean deleteExisting, DatabaseSession hibernateSession) { RulesProfile existingProfile = hibernateSession.getSingleResult(RulesProfile.class, "name", importedProfile.getName(), "language", importedProfile.getLanguage()); if (existingProfile != null && !deleteExisting) { diff --git a/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileBackupTest.java b/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileBackupTest.java index 725674ba53b..dec4f775dd4 100644 --- a/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileBackupTest.java +++ b/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileBackupTest.java @@ -297,7 +297,7 @@ public class QProfileBackupTest { } @Test - public void restore_default_profiles_from_language() throws Exception { + public void restore_provided_profiles_from_language() throws Exception { String name = "Default"; String language = "java"; @@ -314,7 +314,7 @@ public class QProfileBackupTest { when(qProfileOperations.newProfile(eq(name), eq(language), eq(true), any(UserSession.class), eq(session))).thenReturn(new QProfile().setId(1)); - backup.restoreDefaultProfilesFromLanguage(language); + backup.restoreProvidedProfilesFromLanguage(language); verify(qProfileActiveRuleOperations).createActiveRule(eq(1), eq(RuleKey.of("pmd", "rule")), eq("BLOCKER"), eq(session)); verify(qProfileActiveRuleOperations).updateActiveRuleParam(any(ActiveRuleDto.class), eq("max"), eq("10"), eq(session)); @@ -326,7 +326,7 @@ public class QProfileBackupTest { } @Test - public void restore_default_profiles_from_language_with_multiple_profiles_with_same_name_and_same_language() throws Exception { + public void restore_provided_profiles_from_language_with_multiple_profiles_with_same_name_and_same_language() throws Exception { RulesProfile profile1 = RulesProfile.create("Default", "java"); profile1.activateRule(Rule.create("pmd", "rule").setSeverity(RulePriority.BLOCKER), null); ProfileDefinition profileDefinition1 = mock(ProfileDefinition.class); @@ -341,7 +341,7 @@ public class QProfileBackupTest { when(qProfileOperations.newProfile(eq("Default"), eq("java"), eq(true), any(UserSession.class), eq(session))).thenReturn(new QProfile().setId(1)); - backup.restoreDefaultProfilesFromLanguage("java"); + backup.restoreProvidedProfilesFromLanguage("java"); verify(qProfileActiveRuleOperations).createActiveRule(eq(1), eq(RuleKey.of("pmd", "rule")), eq("BLOCKER"), eq(session)); verify(qProfileActiveRuleOperations).createActiveRule(eq(1), eq(RuleKey.of("checkstyle", "rule")), eq("MAJOR"), eq(session)); @@ -353,19 +353,37 @@ public class QProfileBackupTest { } @Test - public void not_restore_default_profiles_from_another_language() throws Exception { + public void not_restore_provided_profiles_from_another_language() throws Exception { RulesProfile profile = RulesProfile.create("Default", "java"); profile.activateRule(Rule.create("pmd", "rule").setSeverity(RulePriority.BLOCKER), null); ProfileDefinition profileDefinition = mock(ProfileDefinition.class); when(profileDefinition.createProfile(any(ValidationMessages.class))).thenReturn(profile); - definitions.add(profileDefinition); - backup.restoreDefaultProfilesFromLanguage("js"); + backup.restoreProvidedProfilesFromLanguage("js"); verifyZeroInteractions(qProfileOperations); verifyZeroInteractions(qProfileActiveRuleOperations); verifyZeroInteractions(esActiveRule); } + + @Test + public void find_provided_profiles_by_language() throws Exception { + RulesProfile rulesProfile1 = RulesProfile.create("Basic", "java"); + ProfileDefinition profileDefinition1 = mock(ProfileDefinition.class); + when(profileDefinition1.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile1); + definitions.add(profileDefinition1); + + RulesProfile rulesProfile2 = RulesProfile.create("Default", "java"); + ProfileDefinition profileDefinition2 = mock(ProfileDefinition.class); + when(profileDefinition2.createProfile(any(ValidationMessages.class))).thenReturn(rulesProfile2); + definitions.add(profileDefinition2); + + // Only basic profile is existing + when(qProfileLookup.profile("Basic", "java")).thenReturn(new QProfile().setId(1)); + + List result = backup.findProvidedProfilesByLanguage("java"); + assertThat(result).hasSize(1); + } } diff --git a/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilesMediumTest.java b/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilesMediumTest.java index 941c5859068..26830e2e1f6 100644 --- a/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilesMediumTest.java +++ b/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilesMediumTest.java @@ -73,7 +73,7 @@ public class QProfilesMediumTest { } @Test - public void restore_default_profile_from_language() throws Exception { + public void restore_provided_profile_from_language() throws Exception { MockUserSession.set().setLogin("julien").setName("Julien").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); QProfiles qProfiles = serverTester.get(QProfiles.class); @@ -91,11 +91,15 @@ public class QProfilesMediumTest { Rule rule2 = rules.find(RuleQuery.builder().searchQuery("x2").build()).results().iterator().next(); qProfiles.deactivateRule(qProfiles.profile("Basic", "xoo").id(), rule2.id()); + assertThat(qProfileBackup.findProvidedProfilesByLanguage("xoo")).hasSize(1); + // Renamed profile qProfiles.renameProfile(profile.id(), "Old Basic"); + assertThat(qProfileBackup.findProvidedProfilesByLanguage("xoo")).isEmpty(); + // Restore default profiles of xoo - qProfileBackup.restoreDefaultProfilesFromLanguage("xoo"); + qProfileBackup.restoreProvidedProfilesFromLanguage("xoo"); // Reload profile profile = qProfiles.profile("Basic", "xoo");