aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java10
-rw-r--r--server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueQueryFactoryTest.java81
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());
+ }
+
}