aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2014-09-02 16:07:33 +0200
committerJulien Lancelot <julien.lancelot@sonarsource.com>2014-09-02 16:07:33 +0200
commit17c62b8bdda7f882626e0cbec7d5338deb49617d (patch)
tree3a6b795d285b77324e8795bbdf93b0de5eb3fd22
parent0364cc8e773de292df9e69e9d003916b9fd1e4b6 (diff)
downloadsonarqube-17c62b8bdda7f882626e0cbec7d5338deb49617d.tar.gz
sonarqube-17c62b8bdda7f882626e0cbec7d5338deb49617d.zip
SONAR-5417 Fix issues when properties on a module were wrongly copied on other modules
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/batch/ProjectReferentialsAction.java10
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/batch/ProjectReferentialsActionTest.java30
-rw-r--r--server/sonar-server/src/test/resources/org/sonar/server/batch/ProjectReferentialsActionTest/return_project_with_two_modules.json27
3 files changed, 62 insertions, 5 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/batch/ProjectReferentialsAction.java b/server/sonar-server/src/main/java/org/sonar/server/batch/ProjectReferentialsAction.java
index f39c8a4fb87..6988fda03b5 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/batch/ProjectReferentialsAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/batch/ProjectReferentialsAction.java
@@ -168,12 +168,14 @@ public class ProjectReferentialsAction implements RequestHandler {
}
private void addSettingsToChildrenModules(ProjectReferentials ref, String projectKey, Map<String, String> parentProperties, boolean hasScanPerm, DbSession session) {
- parentProperties.putAll(getPropertiesMap(propertiesDao.selectProjectProperties(projectKey, session), hasScanPerm));
- addSettings(ref, projectKey, parentProperties);
+ Map<String, String> currentParentProperties = newHashMap();
+ currentParentProperties.putAll(parentProperties);
+ currentParentProperties.putAll(getPropertiesMap(propertiesDao.selectProjectProperties(projectKey, session), hasScanPerm));
+ addSettings(ref, projectKey, currentParentProperties);
for (ComponentDto module : dbClient.componentDao().findModulesByProject(projectKey, session)) {
- addSettings(ref, module.key(), parentProperties);
- addSettingsToChildrenModules(ref, module.key(), parentProperties, hasScanPerm, session);
+ addSettings(ref, module.key(), currentParentProperties);
+ addSettingsToChildrenModules(ref, module.key(), currentParentProperties, hasScanPerm, session);
}
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/ProjectReferentialsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/ProjectReferentialsActionTest.java
index 12ba20d1c52..34125be594b 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/batch/ProjectReferentialsActionTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/batch/ProjectReferentialsActionTest.java
@@ -158,7 +158,7 @@ public class ProjectReferentialsActionTest {
when(propertiesDao.selectProjectProperties(project.key(), session)).thenReturn(newArrayList(
new PropertyDto().setKey("sonar.jira.project.key").setValue("SONAR"),
new PropertyDto().setKey("sonar.jira.login.secured").setValue("john")
- ));
+ ));
when(propertiesDao.selectProjectProperties(module.key(), session)).thenReturn(newArrayList(
new PropertyDto().setKey("sonar.jira.project.key").setValue("SONAR-SERVER"),
@@ -213,6 +213,34 @@ public class ProjectReferentialsActionTest {
}
@Test
+ public void return_project_with_two_modules() throws Exception {
+ MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION);
+
+ ComponentDto module2 = new ComponentDto().setKey("org.codehaus.sonar:sonar-application").setQualifier(Qualifiers.MODULE);
+
+ when(componentDao.getNullableRootProjectByKey(project.key(), session)).thenReturn(project);
+ when(componentDao.findModulesByProject(project.key(), session)).thenReturn(newArrayList(module, module2));
+
+ when(propertiesDao.selectProjectProperties(project.key(), session)).thenReturn(newArrayList(
+ new PropertyDto().setKey("sonar.jira.project.key").setValue("SONAR"),
+ new PropertyDto().setKey("sonar.jira.login.secured").setValue("john")
+ ));
+
+ when(propertiesDao.selectProjectProperties(module.key(), session)).thenReturn(newArrayList(
+ new PropertyDto().setKey("sonar.jira.project.key").setValue("SONAR-SERVER"),
+ // This property should not be found on the other module
+ new PropertyDto().setKey("sonar.coverage.exclusions").setValue("**/*.java")
+ ));
+
+ when(propertiesDao.selectProjectProperties(module2.key(), session)).thenReturn(newArrayList(
+ new PropertyDto().setKey("sonar.jira.project.key").setValue("SONAR-APPLICATION")
+ ));
+
+ WsTester.TestRequest request = tester.newGetRequest("batch", "project").setParam("key", project.key());
+ request.execute().assertJson(getClass(), "return_project_with_two_modules.json");
+ }
+
+ @Test
public void return_provisioned_project_settings() throws Exception {
MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION);
diff --git a/server/sonar-server/src/test/resources/org/sonar/server/batch/ProjectReferentialsActionTest/return_project_with_two_modules.json b/server/sonar-server/src/test/resources/org/sonar/server/batch/ProjectReferentialsActionTest/return_project_with_two_modules.json
new file mode 100644
index 00000000000..302176c60f1
--- /dev/null
+++ b/server/sonar-server/src/test/resources/org/sonar/server/batch/ProjectReferentialsActionTest/return_project_with_two_modules.json
@@ -0,0 +1,27 @@
+{
+ "timestamp": 0,
+ "qprofilesByLanguage": {
+ "java": {
+ "key": "abcd",
+ "name": "Default",
+ "language": "java",
+ "rulesUpdatedAt": "Jan 14, 2014 1:00:00 PM"
+ }
+ },
+ "activeRules": [],
+ "settingsByModule": {
+ "org.codehaus.sonar:sonar": {
+ "sonar.jira.project.key": "SONAR",
+ "sonar.jira.login.secured": "john"
+ },
+ "org.codehaus.sonar:sonar-server": {
+ "sonar.jira.project.key": "SONAR-SERVER",
+ "sonar.jira.login.secured": "john",
+ "sonar.coverage.exclusions": "**/*.java"
+ },
+ "org.codehaus.sonar:sonar-application": {
+ "sonar.jira.project.key": "SONAR-APPLICATION",
+ "sonar.jira.login.secured": "john"
+ }
+ }
+}