diff options
author | Benjamin Campomenosi <benjamin.campomenosi@sonarsource.com> | 2023-05-30 12:07:04 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2023-06-01 20:02:59 +0000 |
commit | 9bc77e5b117af186e37aff6e22a0ed6da96d5ae5 (patch) | |
tree | 863b0c0ac4bfbcd050cabb590d7a7a84c88fa422 /server/sonar-ce-task-projectanalysis | |
parent | cd2200061453646ec5a1563dc68ee5799c18bef3 (diff) | |
download | sonarqube-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')
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) { |