From 8a4213f80ea3ed3f42acb76ce3359c37ee03b34e Mon Sep 17 00:00:00 2001 From: Matteo Mara Date: Thu, 8 Jun 2023 23:33:28 +0200 Subject: [PATCH] SONAR-19525 Fix selectByKeyCaseInsensitive components query in order to properly return portfolios --- .../org/sonar/db/component/ComponentMapper.xml | 2 +- .../server/component/ComponentUpdaterIT.java | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/component/ComponentMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/component/ComponentMapper.xml index 7f897a7090f..da43df99c77 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/component/ComponentMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/component/ComponentMapper.xml @@ -39,7 +39,7 @@ SELECT FROM components p - inner join project_branches pb on pb.uuid = p.branch_uuid + left outer join project_branches pb on pb.uuid = p.branch_uuid where lower(p.kee)=lower(#{key,jdbcType=VARCHAR}) and diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ComponentUpdaterIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ComponentUpdaterIT.java index 2fff57a6f82..033a357fc1a 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ComponentUpdaterIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ComponentUpdaterIT.java @@ -374,6 +374,24 @@ public class ComponentUpdaterIT { .hasMessage("Could not create Project with key: \"%s\". A similar key already exists: \"%s, %s\"", newKey, existingKey, existingKeyLowerCase); } + @Test + public void createComponent_shouldFail_whenCreatingComponentWithMultipleExistingPortfolioKeysButDifferentCase() { + String existingKey = randomAlphabetic(5).toUpperCase(); + String existingKeyLowerCase = existingKey.toLowerCase(); + db.components().insertPrivatePortfolio(portfolio -> portfolio.setKey(existingKey)); + db.components().insertPrivatePortfolio(portfolio -> portfolio.setKey(existingKeyLowerCase)); + String newKey = StringUtils.capitalize(existingKeyLowerCase); + + NewComponent newComponent = NewComponent.newComponentBuilder() + .setKey(newKey) + .setName(DEFAULT_PROJECT_NAME) + .build(); + + DbSession dbSession = db.getSession(); + assertThatThrownBy(() -> underTest.create(dbSession, newComponent, null, null)) + .isInstanceOf(BadRequestException.class) + .hasMessage("Could not create Project with key: \"%s\". A similar key already exists: \"%s, %s\"", newKey, existingKey, existingKeyLowerCase); + } @Test public void create_createsComponentWithMasterBranchName() { -- 2.39.5