aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-ce-task-projectanalysis
diff options
context:
space:
mode:
authorBenjamin Campomenosi <benjamin.campomenosi@sonarsource.com>2023-05-30 12:07:04 +0200
committersonartech <sonartech@sonarsource.com>2023-06-01 20:02:59 +0000
commit9bc77e5b117af186e37aff6e22a0ed6da96d5ae5 (patch)
tree863b0c0ac4bfbcd050cabb590d7a7a84c88fa422 /server/sonar-ce-task-projectanalysis
parentcd2200061453646ec5a1563dc68ee5799c18bef3 (diff)
downloadsonarqube-9bc77e5b117af186e37aff6e22a0ed6da96d5ae5.tar.gz
sonarqube-9bc77e5b117af186e37aff6e22a0ed6da96d5ae5.zip
SONAR-19407 Fix ComponentUuidFactory to load uuid for portfolio from `portfolio` table
Diffstat (limited to 'server/sonar-ce-task-projectanalysis')
-rw-r--r--server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/ComponentUuidFactoryImplIT.java26
-rw-r--r--server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/ComponentUuidFactoryImpl.java14
2 files changed, 38 insertions, 2 deletions
diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/ComponentUuidFactoryImplIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/ComponentUuidFactoryImplIT.java
index 6b3ee0a9d70..6da6104b038 100644
--- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/ComponentUuidFactoryImplIT.java
+++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/ComponentUuidFactoryImplIT.java
@@ -26,6 +26,8 @@ import org.sonar.ce.task.projectanalysis.analysis.Branch;
import org.sonar.db.DbTester;
import org.sonar.db.component.BranchType;
import org.sonar.db.component.ComponentDto;
+import org.sonar.db.component.ComponentTesting;
+import org.sonar.db.portfolio.PortfolioDto;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
@@ -84,4 +86,28 @@ public class ComponentUuidFactoryImplIT {
// uuid is kept in memory for further calls with same key
assertThat(underTest.getOrCreateForKey("foo")).isEqualTo(generatedKey);
}
+
+ @Test
+ public void getOrCreateForKey_whenExistingComponentsInDbForPortfolioAndSubPortfolio_shouldLoadUuidsFromComponentTable() {
+ ComponentDto portfolioDto = db.components().insertPublicPortfolio("pft1", p -> p.setKey("root_portfolio"));
+ ComponentDto subView = db.components().insertSubView(portfolioDto, s -> s.setKey("sub_portfolio").setUuid("subPtf1"));
+ ComponentUuidFactory underTest = new ComponentUuidFactoryImpl(db.getDbClient(), db.getSession(), portfolioDto.getKey(), mockedBranch);
+
+ assertThat(underTest.getOrCreateForKey("root_portfolio")).isEqualTo(portfolioDto.uuid());
+ assertThat(underTest.getOrCreateForKey("sub_portfolio")).isEqualTo(subView.uuid());
+ }
+
+ @Test
+ public void getOrCreateForKey_whenNoExistingComponentsInDbForPortfolioAndSubPortfolio_shouldLoadUuidFromPortfolioTable() {
+ PortfolioDto portfolioDto = ComponentTesting.newPortfolioDto("uuid_ptf1", "ptf1", "Portfolio1", null);
+ db.getDbClient().portfolioDao().insert(db.getSession(), portfolioDto);
+ PortfolioDto subPortfolio = ComponentTesting.newPortfolioDto("subPtf1", "sub_ptf_1", "portfolio", portfolioDto);
+ db.getDbClient().portfolioDao().insert(db.getSession(), subPortfolio);
+
+ ComponentUuidFactory underTest = new ComponentUuidFactoryImpl(db.getDbClient(), db.getSession(), portfolioDto.getKey());
+
+ assertThat(underTest.getOrCreateForKey("ptf1")).isEqualTo(portfolioDto.getUuid());
+ assertThat(underTest.getOrCreateForKey("sub_ptf_1")).isEqualTo(subPortfolio.getUuid());
+ }
+
}
diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/ComponentUuidFactoryImpl.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/ComponentUuidFactoryImpl.java
index 9d3e6352744..c2bef0e1f0f 100644
--- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/ComponentUuidFactoryImpl.java
+++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/component/ComponentUuidFactoryImpl.java
@@ -32,9 +32,19 @@ import org.sonar.db.component.KeyWithUuidDto;
public class ComponentUuidFactoryImpl implements ComponentUuidFactory {
private final Map<String, String> uuidsByKey = new HashMap<>();
+ /** For the sake of consistency it is important that sub-portfolios have the same uuid as the associated component.
+ * As sub-portfolio have no component associated with their creation, it is necessary to look search for their uuid.
+ * see SONAR-19407 for more info
+ *
+ * @param dbClient
+ * @param dbSession
+ * @param rootKey
+ */
public ComponentUuidFactoryImpl(DbClient dbClient, DbSession dbSession, String rootKey) {
- List<KeyWithUuidDto> keys = dbClient.componentDao().selectUuidsByKeyFromProjectKey(dbSession, rootKey);
- keys.forEach(dto -> uuidsByKey.put(dto.key(), dto.uuid()));
+ List<KeyWithUuidDto> projectKeys = dbClient.componentDao().selectUuidsByKeyFromProjectKey(dbSession, rootKey);
+ List<KeyWithUuidDto> portFolioKeys = dbClient.portfolioDao().selectUuidsByKey(dbSession, rootKey);
+ projectKeys.forEach(dto -> uuidsByKey.put(dto.key(), dto.uuid()));
+ portFolioKeys.forEach(dto -> uuidsByKey.putIfAbsent(dto.key(), dto.uuid()));
}
public ComponentUuidFactoryImpl(DbClient dbClient, DbSession dbSession, String rootKey, Branch branch) {