diff options
2 files changed, 91 insertions, 0 deletions
diff --git a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java index 18ca9044a4f..a8c4216b14f 100644 --- a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java +++ b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java @@ -168,6 +168,8 @@ public class IssueQueryFactory { List<ComponentDto> allComponents = new ArrayList<>(); boolean effectiveOnComponentOnly = mergeDeprecatedComponentParameters(dbSession, request, allComponents); addComponentParameters(builder, dbSession, effectiveOnComponentOnly, allComponents, request); + // SONAR-25108 + unsetMainBranch(builder, issueKeys != null && !issueKeys.isEmpty(), allComponents, request); setCreatedAfterFromRequest(dbSession, builder, request, allComponents, timeZone); String sort = request.getSort(); @@ -512,4 +514,12 @@ public class IssueQueryFactory { builder.mainBranch(branchDto.isMain()); } } + + private static void unsetMainBranch(IssueQuery.Builder builder, boolean hasIssueKey, List<ComponentDto> components, SearchRequest request) { + var pullRequest = request.getPullRequest(); + var branch = request.getBranch(); + if ((components.isEmpty() || UNKNOWN_COMPONENT.equals(components.get(0)) || (pullRequest == null && branch == null)) && hasIssueKey) { + builder.mainBranch(null); + } + } } diff --git a/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueQueryFactoryTest.java b/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueQueryFactoryTest.java index eb5c05b4ab6..c62293eb309 100644 --- a/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueQueryFactoryTest.java +++ b/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueQueryFactoryTest.java @@ -25,6 +25,7 @@ import java.time.ZoneOffset; import java.util.ArrayList; import java.util.Collections; import java.util.Date; +import java.util.List; import java.util.Map; import org.junit.Rule; import org.junit.Test; @@ -741,4 +742,84 @@ public class IssueQueryFactoryTest { .hasMessageContaining("'unknown-date' cannot be parsed as either a date or date+time"); } + @Test + public void when_issue_keys_provided_with_no_component_should_not_have_main_branch() { + SearchRequest request = new SearchRequest() + .setIssues(List.of("issue-key-1", "issue-key-2")); + + IssueQuery query = underTest.create(request); + + assertThat(query.isMainBranch()).isNull(); + } + + @Test + public void when_issue_keys_and_component_provided_should_have_main_branch_set() { + // Create a project with main branch + ProjectData projectData = db.components().insertPrivateProject(); + ComponentDto mainBranch = projectData.getMainBranchComponent(); + String branchName = DEFAULT_MAIN_BRANCH_NAME; + + // Request with issue keys and main branch + SearchRequest request = new SearchRequest() + .setIssues(List.of("issue-key-1", "issue-key-2")) + .setComponentKeys(List.of(mainBranch.getKey())) + .setBranch(branchName); + + IssueQuery query = underTest.create(request); + + // Should unset main branch since issue keys are provided + assertThat(query.isMainBranch()).isTrue(); + assertThat(query.branchUuid()).isEqualTo(mainBranch.uuid()); + } + + @Test + public void when_no_issue_keys_provided_should_default_to_main_branch() { + ProjectData projectData = db.components().insertPrivateProject(); + ComponentDto mainBranch = projectData.getMainBranchComponent(); + String branchName = DEFAULT_MAIN_BRANCH_NAME; + + SearchRequest request = new SearchRequest() + .setComponentKeys(List.of(mainBranch.getKey())) + .setBranch(branchName); + + IssueQuery query = underTest.create(request); + + assertThat(query.isMainBranch()).isTrue(); + assertThat(query.branchUuid()).isEqualTo(mainBranch.uuid()); + } + + @Test + public void when_component_is_non_main_branch_should_not_default_to_main_branch() { + ProjectData projectData = db.components().insertPrivateProject(); + ComponentDto mainBranch = projectData.getMainBranchComponent(); + String branchName = "feature-branch"; + ComponentDto branch = db.components().insertProjectBranch(mainBranch, b -> b.setKey(branchName)); + + SearchRequest request = new SearchRequest() + .setComponentKeys(List.of(branch.getKey())) + .setBranch(branchName); + + IssueQuery query = underTest.create(request); + + assertThat(query.isMainBranch()).isFalse(); + assertThat(query.branchUuid()).isEqualTo(branch.uuid()); + } + + @Test + public void when_empty_issue_keys_list_provided_should_default_to_main_branch() { + ProjectData projectData = db.components().insertPrivateProject(); + ComponentDto mainBranch = projectData.getMainBranchComponent(); + String branchName = DEFAULT_MAIN_BRANCH_NAME; + + SearchRequest request = new SearchRequest() + .setIssues(Collections.emptyList()) + .setComponentKeys(List.of(mainBranch.getKey())) + .setBranch(branchName); + + IssueQuery query = underTest.create(request); + + assertThat(query.isMainBranch()).isTrue(); + assertThat(query.branchUuid()).isEqualTo(mainBranch.uuid()); + } + } |