From 31feec5fe5a78cf99898555b8ccfac2e85b3115a Mon Sep 17 00:00:00 2001 From: Duarte Meneses Date: Tue, 11 Apr 2023 16:20:59 -0500 Subject: [PATCH] SONAR-18860 Fix sql queries for components in the main branch and fix ITs --- .../step/BuildComponentTreeStepIT.java | 6 +- .../sonar/db/component/ComponentDaoIT.java | 80 ++++++++++++++++--- .../sonar/db/component/ComponentMapper.xml | 19 +++-- .../sonar/db/component/ComponentDbTester.java | 7 +- .../server/component/ws/SearchActionIT.java | 44 +++++----- .../component/ws/SuggestionsActionIT.java | 46 +++++------ .../template/BulkApplyTemplateActionIT.java | 4 +- .../server/project/ws/SearchActionIT.java | 62 ++++++-------- .../project/ws/SearchMyProjectsActionIT.java | 16 ++-- 9 files changed, 163 insertions(+), 121 deletions(-) diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepIT.java index 141a461ff31..f126df4a223 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepIT.java @@ -233,7 +233,7 @@ public class BuildComponentTreeStepIT { @Test public void return_existing_uuids() { setAnalysisMetadataHolder(); - ComponentDto project = insertComponent(newPrivateProjectDto("ABCD").setKey(REPORT_PROJECT_KEY)); + ComponentDto project = dbTester.components().insertPrivateProject("ABCD", p -> p.setKey(REPORT_PROJECT_KEY)); ComponentDto directory = newDirectory(project, "CDEF", REPORT_DIR_PATH_1); insertComponent(directory.setKey(REPORT_PROJECT_KEY + ":" + REPORT_DIR_PATH_1)); insertComponent(newFileDto(project, directory, "DEFG") @@ -359,7 +359,7 @@ public class BuildComponentTreeStepIT { @Test public void set_base_project_snapshot_when_last_snapshot_exist() { setAnalysisMetadataHolder(); - ComponentDto project = insertComponent(newPrivateProjectDto("ABCD").setKey(REPORT_PROJECT_KEY)); + ComponentDto project = dbTester.components().insertPrivateProject("ABCD", p -> p.setKey(REPORT_PROJECT_KEY)); insertSnapshot(newAnalysis(project).setLast(true)); reportReader.putComponent(component(ROOT_REF, PROJECT, REPORT_PROJECT_KEY)); @@ -382,7 +382,7 @@ public class BuildComponentTreeStepIT { @UseDataProvider("oneParameterNullNonNullCombinations") public void set_projectVersion_to_previous_analysis_when_not_set(@Nullable String previousAnalysisProjectVersion) { setAnalysisMetadataHolder(); - ComponentDto project = insertComponent(newPrivateProjectDto("ABCD").setKey(REPORT_PROJECT_KEY)); + ComponentDto project = dbTester.components().insertPrivateProject("ABCD", p -> p.setKey(REPORT_PROJECT_KEY)); insertSnapshot(newAnalysis(project).setProjectVersion(previousAnalysisProjectVersion).setLast(true)); reportReader.putComponent(component(ROOT_REF, PROJECT, REPORT_PROJECT_KEY)); diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/component/ComponentDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/component/ComponentDaoIT.java index e5f5acc66c6..5349f72589f 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/component/ComponentDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/component/ComponentDaoIT.java @@ -276,7 +276,7 @@ public class ComponentDaoIT { } @Test - public void select_by_keys() { + public void selectByKeys_whenPassingKeys_shouldReturnComponentsInMainBranch() { ComponentDto project1 = db.components().insertPrivateProject(); ComponentDto branch = db.components().insertProjectBranch(project1); ComponentDto project2 = db.components().insertPrivateProject(); @@ -293,7 +293,63 @@ public class ComponentDaoIT { } @Test - public void select_by_keys_throws_ISE_if_both_branch_and_pr_are_passed() { + public void selectByKeys_whenAppWithMultipleBranches_shouldReturnMainBranch() { + ProjectDto proj = db.components().insertPrivateProjectDto(); + BranchDto projBranch = db.components().insertProjectBranch(proj); + + ProjectDto app = db.components().insertPrivateApplicationDto(); + BranchDto appBranch = db.components().insertProjectBranch(app); + + db.components().addApplicationProject(app, proj); + db.components().addProjectBranchToApplicationBranch(appBranch, projBranch); + + ComponentDto projInApp = db.components().insertComponent(newProjectCopy(db.components().getComponentDto(proj), db.components().getComponentDto(app))); + db.components().insertComponent(ComponentTesting.newProjectCopy(db.components().getComponentDto(projBranch), db.components().getComponentDto(appBranch))); + + List results = underTest.selectByKeys(dbSession, asList(projInApp.getKey())); + + assertThat(results) + .extracting(ComponentDto::uuid, ComponentDto::getKey) + .containsOnly(tuple(projInApp.uuid(), projInApp.getKey())); + } + + @Test + public void selectByKeys_whenBranchMissingDueToCorruption_shouldNotReturnComponents() { + // this will create an entry in the components table, but not in the project_branches table + ComponentDto project1 = db.components().insertComponent(ComponentTesting.newPublicProjectDto()); + + List results = underTest.selectByKeys(dbSession, asList(project1.getKey())); + + assertThat(results) + .extracting(ComponentDto::uuid, ComponentDto::getKey) + .isEmpty(); + } + + @Test + public void selectByKeys_whenPortfolio_shouldReturnIt() { + ComponentDto portfolio = db.components().insertPrivatePortfolio(); + + List results = underTest.selectByKeys(dbSession, asList(portfolio.getKey())); + + assertThat(results) + .extracting(ComponentDto::uuid, ComponentDto::getKey) + .containsExactlyInAnyOrder(tuple(portfolio.uuid(), portfolio.getKey())); + } + + @Test + public void selectByKeys_whenSubPortfolio_shouldReturnIt() { + ComponentDto portfolio = db.components().insertPrivatePortfolio(); + ComponentDto subPortfolio = db.components().insertSubView(portfolio); + + List results = underTest.selectByKeys(dbSession, asList(subPortfolio.getKey())); + + assertThat(results) + .extracting(ComponentDto::uuid, ComponentDto::getKey) + .containsExactlyInAnyOrder(tuple(subPortfolio.uuid(), subPortfolio.getKey())); + } + + @Test + public void selectByKeys_whenBothBranchAndPrPassed_shouldThrowISE() { DbSession session = db.getSession(); List keys = List.of("key"); assertThatThrownBy(() -> underTest.selectByKeys(session, keys, "branch", "pr")) @@ -301,7 +357,7 @@ public class ComponentDaoIT { } @Test - public void select_by_keys_with_branch() { + public void selectByKeys_whenSpecifyingBranch_shouldReturnComponentsInIt() { String branchKey = "my_branch"; ComponentDto project = db.components().insertPublicProject(); ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setKey(branchKey)); @@ -321,7 +377,7 @@ public class ComponentDaoIT { } @Test - public void select_by_keys_with_pr() { + public void selectByKeys_whenSpecifyingPR_shouldReturnComponentsInIt() { String prKey = "my_branch"; ComponentDto project = db.components().insertPublicProject(); ComponentDto pr = db.components().insertProjectBranch(project, b -> b.setKey(prKey).setBranchType(PULL_REQUEST)); @@ -1382,8 +1438,8 @@ public class ComponentDaoIT { @Test public void selectByQuery_filter_on_visibility() { - db.components().insertComponent(newPrivateProjectDto().setKey("private-key")); - db.components().insertComponent(ComponentTesting.newPublicProjectDto().setKey("public-key")); + db.components().insertPrivateProject(p -> p.setKey("private-key")); + db.components().insertPublicProject(p -> p.setKey("public-key")); ComponentQuery privateProjectsQuery = ComponentQuery.builder().setPrivate(true).setQualifiers(PROJECT).build(); ComponentQuery publicProjectsQuery = ComponentQuery.builder().setPrivate(false).setQualifiers(PROJECT).build(); @@ -1408,9 +1464,9 @@ public class ComponentDaoIT { @Test public void selectByQuery_on_component_keys() { - ComponentDto sonarqube = db.components().insertComponent(newPrivateProjectDto()); - ComponentDto jdk8 = db.components().insertComponent(newPrivateProjectDto()); - ComponentDto cLang = db.components().insertComponent(newPrivateProjectDto()); + ComponentDto sonarqube = db.components().insertPrivateProject(); + ComponentDto jdk8 = db.components().insertPrivateProject(); + ComponentDto cLang = db.components().insertPrivateProject(); ComponentQuery query = ComponentQuery.builder().setQualifiers(PROJECT) .setComponentKeys(newHashSet(sonarqube.getKey(), jdk8.getKey())).build(); @@ -1435,9 +1491,9 @@ public class ComponentDaoIT { @Test public void selectByQuery_on_component_uuids() { - ComponentDto sonarqube = db.components().insertComponent(newPrivateProjectDto()); - ComponentDto jdk8 = db.components().insertComponent(newPrivateProjectDto()); - ComponentDto cLang = db.components().insertComponent(newPrivateProjectDto()); + ComponentDto sonarqube = db.components().insertPrivateProject(); + ComponentDto jdk8 = db.components().insertPrivateProject(); + ComponentDto cLang = db.components().insertPrivateProject(); ComponentQuery query = ComponentQuery.builder().setQualifiers(PROJECT) .setComponentUuids(newHashSet(sonarqube.uuid(), jdk8.uuid())).build(); 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 70ad9b92fdf..5435920ae11 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 @@ -21,6 +21,10 @@ p.created_at as createdAt + + (pb.is_main = ${_true} OR (pb.uuid is NULL AND (p.qualifier IN ('VW', 'SVW') OR (p.qualifier = 'TRK' AND p.scope = 'FIL')))) + + + and + @@ -126,7 +131,7 @@ AND pb.branch_type = 'PULL_REQUEST' - AND (pb.is_main = ${_true} OR p.qualifier IN ('VW', 'SVW') OR (p.qualifier = 'TRK' AND p.scope = 'FIL')) + AND @@ -227,7 +232,7 @@ left join project_branches pb on pb.uuid = p.branch_uuid where p.enabled=${_true} - AND (pb.uuid is null or pb.is_main=${_true}) + AND AND p.copy_component_uuid is null and p.qualifier in @@ -471,7 +476,7 @@ AND pb.branch_type = 'PULL_REQUEST' - (pb.uuid is null or pb.is_main = ${_true}) + @@ -484,7 +489,7 @@ where p.enabled=${_true} and p.copy_component_uuid is null - and (pb.uuid is null or pb.is_main = ${_true}) + and and p.scope = 'PRJ' and p.qualifier in ('TRK','VW','SVW','APP') diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentDbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentDbTester.java index 985668d9163..610447c3311 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentDbTester.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentDbTester.java @@ -390,7 +390,8 @@ public class ComponentDbTester { } public final ComponentDto insertSubView(ComponentDto view, Consumer dtoPopulator) { - return insertComponentAndBranchAndProject(ComponentTesting.newSubPortfolio(view), view.isPrivate(), defaults(), dtoPopulator); + ComponentDto subViewComponent = ComponentTesting.newSubPortfolio(view); + return insertComponentAndPortfolio(subViewComponent, view.isPrivate(), dtoPopulator, p -> p.setParentUuid(view.uuid())); } public void addPortfolioApplicationBranch(String portfolioUuid, String applicationUuid, String branchUuid) { @@ -544,10 +545,6 @@ public class ComponentDbTester { return branch; } - private static T firstNonNull(@Nullable T first, T second) { - return (first != null) ? first : second; - } - // TODO temporary constructor to quickly create project from previous project component. public static ProjectDto toProjectDto(ComponentDto componentDto, long createTime) { return new ProjectDto() diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ws/SearchActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ws/SearchActionIT.java index 33c6b7d711b..ba1046dc567 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ws/SearchActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ws/SearchActionIT.java @@ -21,7 +21,6 @@ package org.sonar.server.component.ws; import com.google.common.base.Joiner; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.Rule; @@ -31,7 +30,6 @@ import org.sonar.api.server.ws.WebService; import org.sonar.api.utils.System2; import org.sonar.db.DbTester; import org.sonar.db.component.ComponentDto; -import org.sonar.db.component.ComponentTesting; import org.sonar.db.component.ResourceTypesRule; import org.sonar.db.user.UserDto; import org.sonar.server.component.index.ComponentIndex; @@ -63,7 +61,6 @@ import static org.sonar.api.server.ws.WebService.Param.PAGE_SIZE; import static org.sonar.api.server.ws.WebService.Param.TEXT_QUERY; import static org.sonar.db.component.ComponentTesting.newDirectory; import static org.sonar.db.component.ComponentTesting.newPortfolio; -import static org.sonar.db.component.ComponentTesting.newPrivateProjectDto; import static org.sonar.test.JsonAssert.assertJson; import static org.sonarqube.ws.client.component.ComponentsWsParameters.PARAM_QUALIFIERS; @@ -123,10 +120,10 @@ public class SearchActionIT { @Test public void search_by_key_query() { - insertProjectsAuthorizedForUser( - ComponentTesting.newPrivateProjectDto().setKey("project-_%-key"), - ComponentTesting.newPrivateProjectDto().setKey("project-key-without-escaped-characters")); + ComponentDto p1 = db.components().insertPrivateProject(p -> p.setKey("project-_%-key")); + ComponentDto p2 = db.components().insertPrivateProject(p -> p.setKey("project-key-without-escaped-characters")); + insertProjectsAuthorizedForUser(List.of(p1, p2)); SearchWsResponse response = call(new SearchRequest().setQuery("project-_%-key").setQualifiers(singletonList(PROJECT))); assertThat(response.getComponentsList()).extracting(Component::getKey).containsOnly("project-_%-key"); @@ -136,9 +133,10 @@ public class SearchActionIT { public void search_with_pagination() { List componentDtoList = new ArrayList<>(); for (int i = 1; i <= 9; i++) { - componentDtoList.add(newPrivateProjectDto("project-uuid-" + i).setKey("project-key-" + i).setName("Project Name " + i)); + int j = i; + componentDtoList.add(db.components().insertPrivateProject("project-uuid-" + j, p -> p.setKey("project-key-" + j).setName("Project Name " + j))); } - insertProjectsAuthorizedForUser(componentDtoList.toArray(new ComponentDto[] {})); + insertProjectsAuthorizedForUser(componentDtoList); SearchWsResponse response = call(new SearchRequest().setPage(2).setPageSize(3).setQualifiers(singletonList(PROJECT))); @@ -147,12 +145,11 @@ public class SearchActionIT { @Test public void return_only_projects_on_which_user_has_browse_permission() { - ComponentDto project1 = ComponentTesting.newPrivateProjectDto(); - ComponentDto project2 = ComponentTesting.newPrivateProjectDto(); - ComponentDto portfolio = ComponentTesting.newPortfolio(); + ComponentDto project1 = db.components().insertPrivateProject(); + ComponentDto project2 = db.components().insertPrivateProject(); + ComponentDto portfolio = db.components().insertPrivatePortfolio(); - db.components().insertComponents(project1, project2, portfolio); - setBrowsePermissionOnUserAndIndex(project1); + setBrowsePermissionOnUserAndIndex(List.of(project1)); SearchWsResponse response = call(new SearchRequest().setQualifiers(singletonList(PROJECT))); @@ -163,12 +160,12 @@ public class SearchActionIT { @Test public void return_project_key() { - ComponentDto project = ComponentTesting.newPublicProjectDto(); + ComponentDto project = db.components().insertPublicProject(); ComponentDto dir1 = newDirectory(project, "dir1").setKey("dir1"); ComponentDto dir2 = newDirectory(project, "dir2").setKey("dir2"); ComponentDto dir3 = newDirectory(project, "dir3").setKey("dir3"); - db.components().insertComponents(project, dir1, dir2, dir3); - setBrowsePermissionOnUserAndIndex(project); + db.components().insertComponents(dir1, dir2, dir3); + setBrowsePermissionOnUserAndIndex(List.of(project)); SearchWsResponse response = call(new SearchRequest().setQualifiers(asList(PROJECT, APP))); @@ -180,7 +177,7 @@ public class SearchActionIT { public void does_not_return_branches() { ComponentDto project = db.components().insertPublicProject(); ComponentDto branch = db.components().insertProjectBranch(project); - setBrowsePermissionOnUserAndIndex(project, branch); + setBrowsePermissionOnUserAndIndex(List.of(project, branch)); SearchWsResponse response = call(new SearchRequest().setQualifiers(asList(PROJECT))); @@ -207,11 +204,11 @@ public class SearchActionIT { @Test public void test_json_example() { db.components().insertComponent(newPortfolio()); - ComponentDto project = newPrivateProjectDto("project-uuid").setName("Project Name").setKey("project-key"); + ComponentDto project = db.components().insertPrivateProject("project-uuid", p -> p.setName("Project Name").setKey("project-key")); ComponentDto directory = newDirectory(project, "path/to/directoy").setUuid("directory-uuid").setKey("directory-key").setName("Directory Name"); ComponentDto view = newPortfolio(); - db.components().insertComponents(project, directory, view); - setBrowsePermissionOnUserAndIndex(project); + db.components().insertComponents(directory, view); + setBrowsePermissionOnUserAndIndex(List.of(project)); String response = underTest.newRequest() .setMediaType(MediaTypes.JSON) @@ -220,15 +217,14 @@ public class SearchActionIT { assertJson(response).isSimilarTo(underTest.getDef().responseExampleAsString()); } - private void insertProjectsAuthorizedForUser(ComponentDto... projects) { - db.components().insertComponents(projects); + private void insertProjectsAuthorizedForUser(List projects) { setBrowsePermissionOnUserAndIndex(projects); db.commit(); } - private void setBrowsePermissionOnUserAndIndex(ComponentDto... projects) { + private void setBrowsePermissionOnUserAndIndex(List projects) { index(); - Arrays.stream(projects).forEach(project -> authorizationIndexerTester.allowOnlyUser(project, user)); + projects.forEach(project -> authorizationIndexerTester.allowOnlyUser(project, user)); } private SearchWsResponse call(SearchRequest wsRequest) { diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ws/SuggestionsActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ws/SuggestionsActionIT.java index af10e2a0dae..2c868f1c3e4 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ws/SuggestionsActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ws/SuggestionsActionIT.java @@ -150,7 +150,7 @@ public class SuggestionsActionIT { @Test public void suggestions_without_query_should_contain_recently_browsed() { - ComponentDto project = db.components().insertComponent(newPrivateProjectDto()); + ComponentDto project = db.components().insertPrivateProject(); componentIndexer.indexAll(); userSessionRule.addProjectPermission(USER, project); @@ -175,7 +175,7 @@ public class SuggestionsActionIT { @Test public void suggestions_without_query_should_contain_recently_browsed_public_project() { - ComponentDto project = db.components().insertComponent(newPublicProjectDto()); + ComponentDto project = db.components().insertPublicProject(); componentIndexer.indexAll(); @@ -199,7 +199,7 @@ public class SuggestionsActionIT { @Test public void suggestions_without_query_should_not_contain_recently_browsed_without_permission() { - ComponentDto project = db.components().insertComponent(newPrivateProjectDto()); + ComponentDto project = db.components().insertPrivateProject(); componentIndexer.indexAll(); @@ -215,7 +215,7 @@ public class SuggestionsActionIT { @Test public void suggestions_without_query_should_contain_favorites() { - ComponentDto project = db.components().insertComponent(newPrivateProjectDto()); + ComponentDto project = db.components().insertPrivateProject(); doReturn(singletonList(project)).when(favoriteFinder).list(); componentIndexer.indexAll(); @@ -240,7 +240,7 @@ public class SuggestionsActionIT { @Test public void suggestions_without_query_should_not_contain_favorites_without_permission() { - ComponentDto project = db.components().insertComponent(newPrivateProjectDto()); + ComponentDto project = db.components().insertPrivateProject(); doReturn(singletonList(project)).when(favoriteFinder).list(); componentIndexer.indexAll(); @@ -256,7 +256,7 @@ public class SuggestionsActionIT { @Test public void suggestions_without_query_should_contain_recently_browsed_favorites() { - ComponentDto project = db.components().insertComponent(newPrivateProjectDto()); + ComponentDto project = db.components().insertPrivateProject(); doReturn(singletonList(project)).when(favoriteFinder).list(); componentIndexer.indexAll(); @@ -282,7 +282,7 @@ public class SuggestionsActionIT { @Test public void suggestions_without_query_should_not_contain_matches_that_are_neither_favorites_nor_recently_browsed() { - ComponentDto project = db.components().insertComponent(newPrivateProjectDto()); + ComponentDto project = db.components().insertPrivateProject(); componentIndexer.indexAll(); userSessionRule.addProjectPermission(USER, project); @@ -300,10 +300,10 @@ public class SuggestionsActionIT { @Test public void suggestions_without_query_should_order_results() { - ComponentDto project1 = db.components().insertComponent(newPrivateProjectDto().setName("Alpha")); - ComponentDto project2 = db.components().insertComponent(newPrivateProjectDto().setName("Bravo")); - ComponentDto project3 = db.components().insertComponent(newPrivateProjectDto().setName("Charlie")); - ComponentDto project4 = db.components().insertComponent(newPrivateProjectDto().setName("Delta")); + ComponentDto project1 = db.components().insertPrivateProject(p -> p.setName("Alpha")); + ComponentDto project2 = db.components().insertPrivateProject(p -> p.setName("Bravo")); + ComponentDto project3 = db.components().insertPrivateProject(p -> p.setName("Charlie")); + ComponentDto project4 = db.components().insertPrivateProject(p -> p.setName("Delta")); doReturn(asList(project4, project2)).when(favoriteFinder).list(); componentIndexer.indexAll(); @@ -330,7 +330,7 @@ public class SuggestionsActionIT { @Test public void suggestions_without_query_should_return_empty_qualifiers() { - ComponentDto project = db.components().insertComponent(newPrivateProjectDto()); + ComponentDto project = db.components().insertPrivateProject(); componentIndexer.indexOnAnalysis(project.branchUuid()); userSessionRule.addProjectPermission(USER, project); @@ -348,7 +348,7 @@ public class SuggestionsActionIT { @Test public void suggestions_should_filter_allowed_qualifiers() { resourceTypes.setAllQualifiers(PROJECT, FILE, UNIT_TEST_FILE); - ComponentDto project = db.components().insertComponent(newPrivateProjectDto()); + ComponentDto project = db.components().insertPrivateProject(); componentIndexer.indexOnAnalysis(project.branchUuid()); userSessionRule.addProjectPermission(USER, project); @@ -364,7 +364,7 @@ public class SuggestionsActionIT { @Test public void exact_match_in_one_qualifier() { - ComponentDto project = db.components().insertComponent(newPrivateProjectDto()); + ComponentDto project = db.components().insertPrivateProject(); componentIndexer.indexAll(); authorizationIndexerTester.allowOnlyAnyone(project); @@ -389,7 +389,7 @@ public class SuggestionsActionIT { @Test public void should_not_return_suggestion_on_non_existing_project() { - ComponentDto project = db.components().insertComponent(newPrivateProjectDto()); + ComponentDto project = db.components().insertPrivateProject(); componentIndexer.indexAll(); authorizationIndexerTester.allowOnlyAnyone(project); @@ -410,7 +410,7 @@ public class SuggestionsActionIT { @Test public void must_not_search_if_no_valid_tokens_are_provided() { - ComponentDto project = db.components().insertComponent(newPrivateProjectDto().setName("SonarQube")); + ComponentDto project = db.components().insertPrivateProject(p -> p.setName("SonarQube")); componentIndexer.indexAll(); authorizationIndexerTester.allowOnlyAnyone(project); @@ -436,7 +436,7 @@ public class SuggestionsActionIT { @Test public void should_warn_about_short_inputs_but_return_results_based_on_other_terms() { - ComponentDto project = db.components().insertComponent(newPrivateProjectDto().setName("SonarQube")); + ComponentDto project = db.components().insertPrivateProject(p -> p.setName("SonarQube")); componentIndexer.indexAll(); authorizationIndexerTester.allowOnlyAnyone(project); @@ -455,7 +455,7 @@ public class SuggestionsActionIT { @Test public void should_contain_component_names() { - ComponentDto project1 = db.components().insertComponent(newPrivateProjectDto().setName("Project1")); + ComponentDto project1 = db.components().insertPrivateProject(p -> p.setName("Project1")); componentIndexer.indexOnAnalysis(project1.branchUuid()); authorizationIndexerTester.allowOnlyAnyone(project1); @@ -472,7 +472,7 @@ public class SuggestionsActionIT { @Test public void should_mark_recently_browsed_items() { - ComponentDto project = db.components().insertComponent(newPrivateProjectDto().setName("ProjectTest")); + ComponentDto project = db.components().insertPrivateProject(p -> p.setName("ProjectTest")); ComponentDto file1 = newFileDto(project).setName("File1"); ComponentDto file2 = newFileDto(project).setName("File2"); componentIndexer.indexOnAnalysis(project.branchUuid()); @@ -492,8 +492,8 @@ public class SuggestionsActionIT { @Test public void should_mark_favorite_items() { - ComponentDto favouriteProject = db.components().insertComponent(newPrivateProjectDto().setName("Project1")); - ComponentDto nonFavouriteProject = db.components().insertComponent(newPublicProjectDto().setName("Project2")); + ComponentDto favouriteProject = db.components().insertPrivateProject(p -> p.setName("Project1")); + ComponentDto nonFavouriteProject = db.components().insertPublicProject(p -> p.setName("Project2")); doReturn(singletonList(favouriteProject)).when(favoriteFinder).list(); componentIndexer.indexOnAnalysis(favouriteProject.branchUuid()); @@ -513,7 +513,7 @@ public class SuggestionsActionIT { @Test public void should_return_empty_qualifiers() { - ComponentDto project = db.components().insertComponent(newPrivateProjectDto()); + ComponentDto project = db.components().insertPrivateProject(); componentIndexer.indexOnAnalysis(project.branchUuid()); authorizationIndexerTester.allowOnlyAnyone(project); @@ -678,7 +678,7 @@ public class SuggestionsActionIT { String namePrefix = "MyProject"; List projects = range(0, numberOfProjects) - .mapToObj(i -> db.components().insertComponent(newPublicProjectDto().setName(namePrefix + i))) + .mapToObj(i -> db.components().insertPublicProject(p -> p.setName(namePrefix + i))) .collect(Collectors.toList()); componentIndexer.indexAll(); diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/permission/ws/template/BulkApplyTemplateActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/permission/ws/template/BulkApplyTemplateActionIT.java index d481e77d521..8a4154cb213 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/permission/ws/template/BulkApplyTemplateActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/permission/ws/template/BulkApplyTemplateActionIT.java @@ -161,8 +161,8 @@ public class BulkApplyTemplateActionIT extends BasePermissionWsIT p.setKey("project-_%-key")); + db.components().insertPrivateProject(p -> p.setKey("PROJECT-_%-KEY")); + db.components().insertPrivateProject(p -> p.setKey("project-key-without-escaped-characters")); SearchWsResponse response = call(SearchRequest.builder().setQuery("JeCt-_%-k").build()); @@ -98,9 +97,8 @@ public class SearchActionIT { @Test public void search_private_projects() { userSession.addPermission(ADMINISTER); - db.components().insertComponents( - ComponentTesting.newPrivateProjectDto().setKey("private-key"), - ComponentTesting.newPublicProjectDto().setKey("public-key")); + db.components().insertPrivateProject(p -> p.setKey("private-key")); + db.components().insertPublicProject(p -> p.setKey("public-key")); SearchWsResponse response = call(SearchRequest.builder().setVisibility("private").build()); @@ -110,9 +108,8 @@ public class SearchActionIT { @Test public void search_public_projects() { userSession.addPermission(ADMINISTER); - db.components().insertComponents( - ComponentTesting.newPrivateProjectDto().setKey("private-key"), - ComponentTesting.newPublicProjectDto().setKey("public-key")); + db.components().insertPrivateProject(p -> p.setKey("private-key")); + db.components().insertPublicProject(p -> p.setKey("public-key")); SearchWsResponse response = call(SearchRequest.builder().setVisibility("public").build()); @@ -122,9 +119,8 @@ public class SearchActionIT { @Test public void search_projects_when_no_qualifier_set() { userSession.addPermission(ADMINISTER); - db.components().insertComponents( - ComponentTesting.newPrivateProjectDto().setKey(PROJECT_KEY_1), - newPortfolio()); + db.components().insertPrivateProject(p -> p.setKey(PROJECT_KEY_1)); + db.components().insertPublicPortfolio(); SearchWsResponse response = call(SearchRequest.builder().build()); @@ -134,13 +130,13 @@ public class SearchActionIT { @Test public void search_projects() { userSession.addPermission(ADMINISTER); - ComponentDto project = ComponentTesting.newPrivateProjectDto().setKey(PROJECT_KEY_1); + ComponentDto project = db.components().insertPrivateProject(p -> p.setKey(PROJECT_KEY_1)); + db.components().insertPrivateProject(p -> p.setKey(PROJECT_KEY_2)); + db.components().insertPublicPortfolio(); + ComponentDto directory = newDirectory(project, "dir"); ComponentDto file = newFileDto(directory); - db.components().insertComponents( - project, directory, file, - ComponentTesting.newPrivateProjectDto().setKey(PROJECT_KEY_2), - newPortfolio()); + db.components().insertComponents(directory, file); SearchWsResponse response = call(SearchRequest.builder().setQualifiers(singletonList("TRK")).build()); @@ -150,9 +146,8 @@ public class SearchActionIT { @Test public void search_views() { userSession.addPermission(ADMINISTER); - db.components().insertComponents( - ComponentTesting.newPrivateProjectDto().setKey(PROJECT_KEY_1), - newPortfolio().setKey("view1")); + db.components().insertPrivateProject(p -> p.setKey(PROJECT_KEY_1)); + db.components().insertPublicPortfolio(p -> p.setKey("view1")); SearchWsResponse response = call(SearchRequest.builder().setQualifiers(singletonList("VW")).build()); @@ -162,9 +157,8 @@ public class SearchActionIT { @Test public void search_projects_and_views() { userSession.addPermission(ADMINISTER); - db.components().insertComponents( - ComponentTesting.newPrivateProjectDto().setKey(PROJECT_KEY_1), - newPortfolio().setKey("view1")); + db.components().insertPrivateProject(p -> p.setKey(PROJECT_KEY_1)); + db.components().insertPublicPortfolio(p -> p.setKey("view1")); SearchWsResponse response = call(SearchRequest.builder().setQualifiers(asList("TRK", "VW")).build()); @@ -174,11 +168,9 @@ public class SearchActionIT { @Test public void search_all() { userSession.addPermission(ADMINISTER); - db.components().insertComponents( - ComponentTesting.newPrivateProjectDto().setKey(PROJECT_KEY_1), - ComponentTesting.newPrivateProjectDto().setKey(PROJECT_KEY_2), - ComponentTesting.newPrivateProjectDto().setKey(PROJECT_KEY_3)); - + db.components().insertPrivateProject(p -> p.setKey(PROJECT_KEY_1)); + db.components().insertPrivateProject(p -> p.setKey(PROJECT_KEY_2)); + db.components().insertPrivateProject(p -> p.setKey(PROJECT_KEY_3)); SearchWsResponse response = call(SearchRequest.builder().build()); assertThat(response.getComponentsList()).extracting(Component::getKey).containsOnly(PROJECT_KEY_1, PROJECT_KEY_2, PROJECT_KEY_3); @@ -233,12 +225,11 @@ public class SearchActionIT { userSession.addPermission(ADMINISTER); List componentDtoList = new ArrayList<>(); for (int i = 1; i <= 9; i++) { - componentDtoList.add(newPrivateProjectDto("project-uuid-" + i).setKey("project-key-" + i).setName("Project Name " + i)); + int j = i; + componentDtoList.add(db.components().insertPrivateProject("project-uuid-" + i, p -> p.setKey("project-key-" + j).setName("Project Name " + j))); } - db.components().insertComponents(componentDtoList.toArray(new ComponentDto[] {})); SearchWsResponse response = call(SearchRequest.builder().setPage(2).setPageSize(3).build()); - assertThat(response.getComponentsList()).extracting(Component::getKey).containsExactly("project-key-4", "project-key-5", "project-key-6"); } @@ -356,11 +347,8 @@ public class SearchActionIT { @Test public void json_example() { userSession.addPermission(ADMINISTER); - ComponentDto publicProject = newPrivateProjectDto("project-uuid-1").setName("Project Name 1").setKey("project-key-1").setPrivate(false); - ComponentDto privateProject = newPrivateProjectDto("project-uuid-2").setName("Project Name 1").setKey("project-key-2"); - db.components().insertComponents( - publicProject, - privateProject); + ComponentDto publicProject = db.components().insertPublicProject("project-uuid-1", p -> p.setName("Project Name 1").setKey("project-key-1").setPrivate(false)); + ComponentDto privateProject = db.components().insertPrivateProject("project-uuid-2", p->p.setName("Project Name 1").setKey("project-key-2")); db.getDbClient().snapshotDao().insert(db.getSession(), newAnalysis(publicProject) .setCreatedAt(parseDateTime("2017-03-01T11:39:03+0300").getTime()) .setRevision("cfb82f55c6ef32e61828c4cb3db2da12795fd767")); diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/project/ws/SearchMyProjectsActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/project/ws/SearchMyProjectsActionIT.java index b06a2cc0d98..4f73015cef9 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/project/ws/SearchMyProjectsActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/project/ws/SearchMyProjectsActionIT.java @@ -34,7 +34,6 @@ import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; import org.sonar.db.component.ComponentDto; -import org.sonar.db.component.ComponentTesting; import org.sonar.db.component.ProjectLinkDto; import org.sonar.db.component.SnapshotDto; import org.sonar.db.metric.MetricDto; @@ -117,7 +116,7 @@ public class SearchMyProjectsActionIT { @Test public void return_only_first_1000_projects() { IntStream.range(0, 1_010).forEach(i -> { - ComponentDto project = db.components().insertComponent(newPrivateProjectDto()); + ComponentDto project = db.components().insertPrivateProject(); db.users().insertProjectPermissionOnUser(user, UserRole.ADMIN, project); }); @@ -128,9 +127,9 @@ public class SearchMyProjectsActionIT { @Test public void sort_projects_by_name() { - ComponentDto b_project = db.components().insertComponent(ComponentTesting.newPrivateProjectDto().setName("B_project_name")); - ComponentDto c_project = db.components().insertComponent(ComponentTesting.newPrivateProjectDto().setName("c_project_name")); - ComponentDto a_project = db.components().insertComponent(ComponentTesting.newPrivateProjectDto().setName("A_project_name")); + ComponentDto b_project = db.components().insertPrivateProject(p -> p.setName("B_project_name")); + ComponentDto c_project = db.components().insertPrivateProject(p -> p.setName("c_project_name")); + ComponentDto a_project = db.components().insertPrivateProject(p -> p.setName("A_project_name")); db.users().insertProjectPermissionOnUser(user, UserRole.ADMIN, b_project); db.users().insertProjectPermissionOnUser(user, UserRole.ADMIN, a_project); @@ -144,7 +143,8 @@ public class SearchMyProjectsActionIT { @Test public void paginate_projects() { for (int i = 0; i < 10; i++) { - ComponentDto project = db.components().insertComponent(ComponentTesting.newPrivateProjectDto().setName("project-" + i)); + int j = i; + ComponentDto project = db.components().insertPrivateProject(p -> p.setName("project-" + j)); db.users().insertProjectPermissionOnUser(user, UserRole.ADMIN, project); } @@ -247,13 +247,13 @@ public class SearchMyProjectsActionIT { } private ComponentDto insertClang() { - return db.components().insertComponent(newPrivateProjectDto(Uuids.UUID_EXAMPLE_01) + return db.components().insertPrivateProject(Uuids.UUID_EXAMPLE_01, p -> p .setName("Clang") .setKey("clang")); } private ComponentDto insertJdk7() { - return db.components().insertComponent(newPrivateProjectDto(Uuids.UUID_EXAMPLE_02) + return db.components().insertPrivateProject(Uuids.UUID_EXAMPLE_02, p -> p .setName("JDK 7") .setKey("net.java.openjdk:jdk7") .setDescription("JDK")); -- 2.39.5