]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-18860 Fix sql queries for components in the main branch and fix ITs
authorDuarte Meneses <duarte.meneses@sonarsource.com>
Tue, 11 Apr 2023 21:20:59 +0000 (16:20 -0500)
committersonartech <sonartech@sonarsource.com>
Wed, 12 Apr 2023 20:03:18 +0000 (20:03 +0000)
server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/BuildComponentTreeStepIT.java
server/sonar-db-dao/src/it/java/org/sonar/db/component/ComponentDaoIT.java
server/sonar-db-dao/src/main/resources/org/sonar/db/component/ComponentMapper.xml
server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentDbTester.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ws/SearchActionIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ws/SuggestionsActionIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/permission/ws/template/BulkApplyTemplateActionIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/project/ws/SearchActionIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/project/ws/SearchMyProjectsActionIT.java

index 141a461ff31abe4d633aa795c701a00ceb975a4b..f126df4a22380c630731e22d0c71badb7370c75a 100644 (file)
@@ -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));
 
index e5f5acc66c65be3364ea2d95c82b41f1c635c559..5349f72589fb0f8e2622ed563cd9ed72ec905412 100644 (file)
@@ -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<ComponentDto> 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<ComponentDto> 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<ComponentDto> 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<ComponentDto> 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<String> 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();
 
index 70ad9b92fdf14bdf833917d13ed9f3eb10e6640e..5435920ae118911641e19e85ccb8e8abb077b6a6 100644 (file)
     p.created_at as createdAt
   </sql>
 
+  <sql id="mainBranchOrPortfolio">
+    (pb.is_main = ${_true} OR (pb.uuid is NULL AND (p.qualifier IN ('VW', 'SVW') OR (p.qualifier = 'TRK' AND p.scope = 'FIL'))))
+  </sql>
+
   <select id="selectByKey" parameterType="String" resultType="Component">
     SELECT
       <include refid="componentColumns"/>
@@ -28,7 +32,8 @@
     left outer join project_branches pb on pb.uuid = p.branch_uuid
     where
       p.kee=#{key,jdbcType=VARCHAR}
-      and (pb.is_main = null or pb.is_main = ${_true}) </select>
+      and <include refid="mainBranchOrPortfolio"/>
+  </select>
 
   <select id="selectByKeyCaseInsensitive" parameterType="String" resultType="Component">
     SELECT
@@ -37,7 +42,7 @@
     inner join project_branches pb on pb.uuid = p.branch_uuid
     where
       lower(p.kee)=lower(#{key,jdbcType=VARCHAR})
-      and pb.is_main = ${_true}
+      and <include refid="mainBranchOrPortfolio"/>
   </select>
 
   <select id="selectByKeyAndBranchKey" parameterType="String" resultType="Component">
@@ -92,7 +97,7 @@
         AND pb.branch_type = 'PULL_REQUEST'
       </when>
       <otherwise>
-        AND (pb.is_main = ${_true} OR p.qualifier IN ('VW', 'SVW') OR (p.qualifier = 'TRK' AND p.scope = 'FIL'))
+        AND <include refid="mainBranchOrPortfolio"/>
       </otherwise>
     </choose>
   </select>
         AND pb.branch_type = 'PULL_REQUEST'
       </when>
       <otherwise>
-        AND (pb.is_main = ${_true} OR p.qualifier IN ('VW', 'SVW') OR (p.qualifier = 'TRK' AND p.scope = 'FIL'))
+        AND <include refid="mainBranchOrPortfolio"/>
       </otherwise>
     </choose>
   </select>
     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 <include refid="mainBranchOrPortfolio"/>
       AND p.copy_component_uuid is null
       <if test="query.qualifiers!=null">
         and p.qualifier in
         AND pb.branch_type = 'PULL_REQUEST'
       </when>
       <otherwise>
-        (pb.uuid is null or pb.is_main = ${_true})
+        <include refid="mainBranchOrPortfolio"/>
       </otherwise>
     </choose>
   </select>
     where
       p.enabled=${_true}
       and p.copy_component_uuid is null
-      and (pb.uuid is null or pb.is_main = ${_true})
+      and <include refid="mainBranchOrPortfolio"/>
       and p.scope = 'PRJ'
       and p.qualifier in ('TRK','VW','SVW','APP')
       <if test="branchUuid != null">
index 985668d9163b95f8f1203b04317025bf268b123a..610447c331158d78010d35c1ec27fd4be781833a 100644 (file)
@@ -390,7 +390,8 @@ public class ComponentDbTester {
   }
 
   public final ComponentDto insertSubView(ComponentDto view, Consumer<ComponentDto> 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> 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()
index 33c6b7d711bcc5bdcdb5ff26d55e6f89ea9fa6f2..ba1046dc567d5ad3f78ec707824d9f2c37050605 100644 (file)
@@ -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<ComponentDto> 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<ComponentDto> projects) {
     setBrowsePermissionOnUserAndIndex(projects);
     db.commit();
   }
 
-  private void setBrowsePermissionOnUserAndIndex(ComponentDto... projects) {
+  private void setBrowsePermissionOnUserAndIndex(List<ComponentDto> projects) {
     index();
-    Arrays.stream(projects).forEach(project -> authorizationIndexerTester.allowOnlyUser(project, user));
+    projects.forEach(project -> authorizationIndexerTester.allowOnlyUser(project, user));
   }
 
   private SearchWsResponse call(SearchRequest wsRequest) {
index af10e2a0daedf17723fe434882f4d6729011cf92..2c868f1c3e424ffa44e5fb1d3a106a78d42a6aa2 100644 (file)
@@ -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<ComponentDto> 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();
index d481e77d5218da6e47ab2ecdca08455ccb9d16ef..8a4154cb213103ddb47a039176c2ccbafb08d1fa 100644 (file)
@@ -161,8 +161,8 @@ public class BulkApplyTemplateActionIT extends BasePermissionWsIT<BulkApplyTempl
   public void apply_template_by_qualifiers() {
     ComponentDto publicProject = db.components().insertPublicProject();
     ComponentDto privateProject = db.components().insertPrivateProject();
-    ComponentDto view = db.components().insertComponent(newPortfolio());
-    ComponentDto application = db.components().insertComponent(newApplication());
+    ComponentDto view = db.components().insertPrivatePortfolio();
+    ComponentDto application = db.components().insertPublicApplication();
     loginAsAdmin();
 
     newRequest()
index e964c41dff7a03b5477c7835161eda0c8725b3f8..d35222efc647d01e8de38eb32ba5e0557282d656 100644 (file)
@@ -85,10 +85,9 @@ public class SearchActionIT {
   @Test
   public void search_by_key_query_with_partial_match_case_insensitive() {
     userSession.addPermission(ADMINISTER);
-    db.components().insertComponents(
-      ComponentTesting.newPrivateProjectDto().setKey("project-_%-key"),
-      ComponentTesting.newPrivateProjectDto().setKey("PROJECT-_%-KEY"),
-      ComponentTesting.newPrivateProjectDto().setKey("project-key-without-escaped-characters"));
+    db.components().insertPrivateProject(p -> 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<ComponentDto> 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"));
index b06a2cc0d98fd4ed77060cc1017d9eefaf1dc9d4..4f73015cef9b5337622bb1d59c8f183a1403e657 100644 (file)
@@ -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"));