]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-19850 Fix permissions on tests
authorLéo Geoffroy <leo.geoffroy@sonarsource.com>
Mon, 10 Jul 2023 14:52:59 +0000 (16:52 +0200)
committersonartech <sonartech@sonarsource.com>
Mon, 10 Jul 2023 20:02:56 +0000 (20:02 +0000)
12 files changed:
server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentDbTester.java
server/sonar-webserver-auth/src/testFixtures/java/org/sonar/server/tester/UserSessionRule.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/badge/ws/MeasureActionIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/badge/ws/QualityGateActionIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/batch/ProjectDataLoaderIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/branch/ws/ListActionIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/ce/queue/BranchReportSubmitterIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/ce/queue/ReportSubmitterIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/ce/ws/ActivityActionIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/ce/ws/TaskActionIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ws/AppActionIT.java
server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ws/ShowActionIT.java

index dae0201910a4edb7b038340fe14f07b6e3d95789..ec11da29f8968b633ee375785ef0bbd77c9df641 100644 (file)
@@ -120,8 +120,12 @@ public class ComponentDbTester {
     return insertComponentAndBranchAndProject(componentDto, false);
   }
 
-  public ProjectData insertPrivateProject(String uuid) {
-    return insertComponentAndBranchAndProject(ComponentTesting.newPrivateProjectDto(), true, defaults(), defaults(), p -> p.setUuid(uuid));
+  public ProjectData insertPrivateProject(String projectUuid) {
+    return insertComponentAndBranchAndProject(ComponentTesting.newPrivateProjectDto(), true, defaults(), defaults(), p -> p.setUuid(projectUuid));
+  }
+
+  public ProjectData insertPrivateProject(String projectUuid, ComponentDto mainBranch) {
+    return insertComponentAndBranchAndProject(mainBranch, true, defaults(), defaults(), p -> p.setUuid(projectUuid));
   }
 
   public final ProjectData insertPrivateProject(Consumer<ComponentDto> dtoPopulator) {
@@ -330,6 +334,13 @@ public class ComponentDbTester {
     addPortfolioProject(portfolio.uuid(), projectUuids);
   }
 
+  public void addPortfolioProject(ComponentDto portfolio, ProjectDto... projects) {
+    for (ProjectDto project : projects) {
+      dbClient.portfolioDao().addProject(dbSession, portfolio.uuid(), project.getUuid());
+    }
+    db.commit();
+  }
+
   public void addPortfolioProject(ComponentDto portfolio, ComponentDto... mainBranches) {
     List<BranchDto> branchDtos = dbClient.branchDao().selectByUuids(db.getSession(), Arrays.stream(mainBranches).map(ComponentDto::uuid).toList());
     addPortfolioProject(portfolio, branchDtos.stream().map(BranchDto::getProjectUuid).toArray(String[]::new));
index b5a9a32cf0a1dba0a264da1c194940f5ff6e6b38..6f9daa71c4ae7c0392695ddfec16d0c9245a2028 100644 (file)
@@ -200,6 +200,11 @@ public class UserSessionRule implements TestRule, UserSession {
     return this;
   }
 
+  public UserSessionRule addPortfolioPermission(String projectPermission, ComponentDto... components) {
+    ensureAbstractMockUserSession().addProjectPermission(projectPermission, components);
+    return this;
+  }
+
   public UserSessionRule addProjectBranchMapping(String projectUuid, ComponentDto... branchComponents) {
     ensureAbstractMockUserSession().addProjectBranchMapping(projectUuid, branchComponents);
     return this;
index 311e9be3edc13bb72b8ce5d77bd959a84f28a2ca..294e1b9dc5c9d88060302747643b3b3db26539ae 100644 (file)
@@ -369,7 +369,7 @@ public class MeasureActionIT {
 
   @Test
   public void return_error_on_private_project_without_token() throws ParseException {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
+    ProjectDto project = db.components().insertPrivateProject().getProjectDto();
     UserDto user = db.users().insertUser();
     userSession.logIn(user).addProjectPermission(USER, project);
     MetricDto metric = db.measures().insertMetric(m -> m.setKey(BUGS_KEY).setValueType(INT.name()));
index 0995757dd93edd502bc4182fa0ca119d52bc1629..96b963bfbf10a7617fab61afed83e04125e3d739 100644 (file)
@@ -272,7 +272,7 @@ public class QualityGateActionIT {
 
   @Test
   public void return_error_on_private_project() throws ParseException {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
+    ProjectDto project = db.components().insertPrivateProject().getProjectDto();
     UserDto user = db.users().insertUser();
     userSession.logIn(user).addProjectPermission(USER, project);
 
index c0d47cd874971b4265515e5ca8243de0681a14fb..3a82f135a32962fe77a5ce84696a513e6333fd66 100644 (file)
@@ -28,7 +28,9 @@ 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.ProjectData;
 import org.sonar.db.component.ResourceTypesRule;
+import org.sonar.db.project.ProjectDto;
 import org.sonar.db.source.FileSourceDto;
 import org.sonar.scanner.protocol.input.FileData;
 import org.sonar.scanner.protocol.input.ProjectRepositories;
@@ -57,8 +59,10 @@ public class ProjectDataLoaderIT {
 
   @Test
   public void throws_NotFoundException_when_branch_does_not_exist() {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
-    userSession.logIn().addProjectPermission(SCAN.getKey(), project);
+    ProjectData projectData = db.components().insertPrivateProject();
+    ProjectDto project = projectData.getProjectDto();
+    userSession.logIn().addProjectPermission(SCAN.getKey(), project)
+        .registerBranches(projectData.getMainBranchDto());
 
     assertThatThrownBy(() -> {
       underTest.load(ProjectDataQuery.create()
@@ -71,9 +75,11 @@ public class ProjectDataLoaderIT {
 
   @Test
   public void return_file_data_from_single_project() {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
-    userSession.logIn().addProjectPermission(SCAN.getKey(), project);
-    ComponentDto file = db.components().insertComponent(newFileDto(project));
+    ProjectData projectData = db.components().insertPrivateProject();
+    ProjectDto project = projectData.getProjectDto();
+    userSession.logIn().addProjectPermission(SCAN.getKey(), project)
+      .registerBranches(projectData.getMainBranchDto());
+    ComponentDto file = db.components().insertComponent(newFileDto(projectData.getMainBranchComponent()));
     dbClient.fileSourceDao().insert(dbSession, newFileSourceDto(file).setSrcHash("123456"));
     db.commit();
 
@@ -86,16 +92,19 @@ public class ProjectDataLoaderIT {
 
   @Test
   public void return_file_data_from_branch() {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
-    ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setKey("my_branch"));
-    userSession.logIn().addProjectPermission(SCAN.getKey(), project);
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    ComponentDto branch = db.components().insertProjectBranch(mainBranch, b -> b.setKey("my_branch"));
+    userSession.logIn().addProjectPermission(SCAN.getKey(), projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto())
+      .addProjectBranchMapping(projectData.projectUuid(), branch);
     // File on branch
-    ComponentDto projectFile = db.components().insertComponent(newFileDto(branch, project.uuid()));
+    ComponentDto projectFile = db.components().insertComponent(newFileDto(branch, mainBranch.uuid()));
     dbClient.fileSourceDao().insert(dbSession, newFileSourceDto(projectFile).setSrcHash("123456"));
     dbSession.commit();
 
     ProjectRepositories ref = underTest.load(ProjectDataQuery.create()
-      .setProjectKey(project.getKey())
+      .setProjectKey(mainBranch.getKey())
       .setBranch("my_branch"));
 
     assertThat(ref.fileDataByPath(projectFile.path()).hash()).isEqualTo("123456");
index 213a55e283dc4018ded912a2c81587cd0f6565a9..258c1f4f0c7c33212cdc650d5c117f9e1369e018 100644 (file)
@@ -279,9 +279,10 @@ public class ListActionIT {
 
   @Test
   public void fail_if_not_a_reference_on_project() {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
-    ComponentDto file = db.components().insertComponent(ComponentTesting.newFileDto(project));
-    userSession.logIn().addProjectPermission(USER, project);
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    ComponentDto file = db.components().insertComponent(ComponentTesting.newFileDto(mainBranch));
+    userSession.logIn().addProjectPermission(USER, projectData.getProjectDto());
     TestRequest request = ws.newRequest().setParam("project", file.getKey());
     assertThatThrownBy(request::execute)
       .isInstanceOf(NotFoundException.class)
index e41ad6f5ce97b71a95e30c119acd91de927925d2..26845b14251b51fade91e8227ef33e53da97e1c7 100644 (file)
@@ -21,6 +21,7 @@ package org.sonar.server.ce.queue;
 
 import com.google.common.collect.ImmutableMap;
 import com.tngtech.java.junit.dataprovider.DataProviderRunner;
+import java.awt.event.ComponentEvent;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.Map;
@@ -45,6 +46,8 @@ import org.sonar.db.component.BranchDto;
 import org.sonar.db.component.BranchType;
 import org.sonar.db.component.ComponentDto;
 import org.sonar.db.component.ComponentTesting;
+import org.sonar.db.component.ProjectData;
+import org.sonar.db.project.ProjectDto;
 import org.sonar.db.user.UserDto;
 import org.sonar.server.component.ComponentCreationData;
 import org.sonar.server.component.ComponentUpdater;
@@ -82,6 +85,7 @@ import static org.sonar.db.permission.GlobalPermission.SCAN;
 @RunWith(DataProviderRunner.class)
 public class BranchReportSubmitterIT {
 
+  private static final String PROJECT_UUID = "PROJECT_UUID";
   @Rule
   public final UserSessionRule userSession = UserSessionRule.standalone();
   @Rule
@@ -106,105 +110,113 @@ public class BranchReportSubmitterIT {
 
   @Test
   public void submit_does_not_use_delegate_if_characteristics_are_empty() {
-    ComponentDto project = db.components().insertPublicProject().getMainBranchComponent();
+    ProjectData projectData = db.components().insertPublicProject();
+    ProjectDto project = projectData.getProjectDto();
     UserDto user = db.users().insertUser();
-    userSession.logIn(user).addProjectPermission(SCAN.getKey(), project);
+    userSession.logIn(user).addProjectPermission(SCAN.getKey(), project)
+        .registerBranches(projectData.getMainBranchDto());
     mockSuccessfulPrepareSubmitCall();
     InputStream reportInput = IOUtils.toInputStream("{binary}", StandardCharsets.UTF_8);
 
-    underTest.submit(project.getKey(), project.name(), emptyMap(), reportInput);
+    underTest.submit(project.getKey(), project.getName(), emptyMap(), reportInput);
 
     verifyNoInteractions(branchSupportDelegate);
   }
 
   @Test
   public void submit_a_report_on_existing_branch() {
-    ComponentDto project = db.components().insertPublicProject().getMainBranchComponent();
-    ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setKey("branch1"));
+    ProjectData projectData = db.components().insertPublicProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    ComponentDto branch = db.components().insertProjectBranch(mainBranch, b -> b.setKey("branch1"));
     UserDto user = db.users().insertUser();
-    userSession.logIn(user).addProjectPermission(SCAN.getKey(), project).addProjectBranchMapping(project.uuid(), branch);
+    userSession.logIn(user).addProjectPermission(SCAN.getKey(), projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto())
+      .addProjectBranchMapping(projectData.projectUuid(), branch);
     Map<String, String> randomCharacteristics = randomNonEmptyMap();
-    BranchSupport.ComponentKey componentKey = createComponentKeyOfBranch(project.getKey(), "branch1");
-    when(branchSupportDelegate.createComponentKey(project.getKey(), randomCharacteristics)).thenReturn(componentKey);
+    BranchSupport.ComponentKey componentKey = createComponentKeyOfBranch(mainBranch.getKey(), "branch1");
+    when(branchSupportDelegate.createComponentKey(mainBranch.getKey(), randomCharacteristics)).thenReturn(componentKey);
     InputStream reportInput = IOUtils.toInputStream("{binary}", StandardCharsets.UTF_8);
     String taskUuid = mockSuccessfulPrepareSubmitCall();
 
-    underTest.submit(project.getKey(), project.name(), randomCharacteristics, reportInput);
+    underTest.submit(mainBranch.getKey(), mainBranch.name(), randomCharacteristics, reportInput);
 
     verifyNoInteractions(permissionTemplateService);
     verifyNoInteractions(favoriteUpdater);
     verify(branchSupport, times(0)).createBranchComponent(any(), any(), any(), any());
-    verify(branchSupportDelegate).createComponentKey(project.getKey(), randomCharacteristics);
+    verify(branchSupportDelegate).createComponentKey(mainBranch.getKey(), randomCharacteristics);
     verify(branchSupportDelegate, times(0)).createBranchComponent(any(), any(), any(), any());
     verifyNoMoreInteractions(branchSupportDelegate);
-    verifyQueueSubmit(project, branch, user, randomCharacteristics, taskUuid);
+    verifyQueueSubmit(mainBranch, branch, user, randomCharacteristics, taskUuid);
   }
 
   @Test
   public void submit_a_report_on_missing_branch_but_existing_project() {
-    ComponentDto existingProject = db.components().insertPublicProject().getMainBranchComponent();
-    BranchDto exitingProjectMainBranch = db.getDbClient().branchDao().selectByUuid(db.getSession(), existingProject.uuid()).get();
+    ProjectData projectData = db.components().insertPublicProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    BranchDto exitingProjectMainBranch = db.getDbClient().branchDao().selectByUuid(db.getSession(), mainBranch.uuid()).get();
     UserDto user = db.users().insertUser();
-    userSession.logIn(user).addProjectPermission(SCAN.getKey(), existingProject);
+    userSession.logIn(user).addProjectPermission(SCAN.getKey(), projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
     Map<String, String> randomCharacteristics = randomNonEmptyMap();
-    ComponentDto createdBranch = createButDoNotInsertBranch(existingProject);
-    userSession.addProjectBranchMapping(existingProject.uuid(), createdBranch);
-    BranchSupport.ComponentKey componentKey = createComponentKeyOfBranch(existingProject.getKey(), "branch1");
-    when(branchSupportDelegate.createComponentKey(existingProject.getKey(), randomCharacteristics)).thenReturn(componentKey);
-    when(branchSupportDelegate.createBranchComponent(any(DbSession.class), same(componentKey), eq(existingProject), eq(exitingProjectMainBranch))).thenReturn(createdBranch);
+    ComponentDto createdBranch = createButDoNotInsertBranch(mainBranch, projectData.projectUuid());
+    userSession.addProjectBranchMapping(projectData.projectUuid(), createdBranch);
+    BranchSupport.ComponentKey componentKey = createComponentKeyOfBranch(mainBranch.getKey(), "branch1");
+    when(branchSupportDelegate.createComponentKey(mainBranch.getKey(), randomCharacteristics)).thenReturn(componentKey);
+    when(branchSupportDelegate.createBranchComponent(any(DbSession.class), same(componentKey), eq(mainBranch), eq(exitingProjectMainBranch))).thenReturn(createdBranch);
     InputStream reportInput = IOUtils.toInputStream("{binary}", StandardCharsets.UTF_8);
     String taskUuid = mockSuccessfulPrepareSubmitCall();
 
-    underTest.submit(existingProject.getKey(), existingProject.name(), randomCharacteristics, reportInput);
+    underTest.submit(mainBranch.getKey(), mainBranch.name(), randomCharacteristics, reportInput);
 
     verifyNoInteractions(permissionTemplateService);
     verifyNoInteractions(favoriteUpdater);
-    verify(branchSupport).createBranchComponent(any(DbSession.class), same(componentKey), eq(existingProject), eq(exitingProjectMainBranch));
-    verify(branchSupportDelegate).createComponentKey(existingProject.getKey(), randomCharacteristics);
-    verify(branchSupportDelegate).createBranchComponent(any(DbSession.class), same(componentKey), eq(existingProject), eq(exitingProjectMainBranch));
+    verify(branchSupport).createBranchComponent(any(DbSession.class), same(componentKey), eq(mainBranch), eq(exitingProjectMainBranch));
+    verify(branchSupportDelegate).createComponentKey(mainBranch.getKey(), randomCharacteristics);
+    verify(branchSupportDelegate).createBranchComponent(any(DbSession.class), same(componentKey), eq(mainBranch), eq(exitingProjectMainBranch));
     verifyNoMoreInteractions(branchSupportDelegate);
     verify(componentUpdater, times(0)).commitAndIndex(any(), any());
-    verifyQueueSubmit(existingProject, createdBranch, user, randomCharacteristics, taskUuid);
+    verifyQueueSubmit(mainBranch, createdBranch, user, randomCharacteristics, taskUuid);
   }
 
   @Test
   public void submit_report_on_missing_branch_of_missing_project_provisions_project_when_PROVISION_PROJECT_perm() {
-    ComponentDto nonExistingProject = newPrivateProjectDto();
+    ComponentDto nonExistingBranch = newPrivateProjectDto();
     UserDto user = db.users().insertUser();
     userSession.logIn(user)
       .addPermission(PROVISION_PROJECTS)
       .addPermission(SCAN);
 
     Map<String, String> randomCharacteristics = randomNonEmptyMap();
-    ComponentDto createdBranch = createButDoNotInsertBranch(nonExistingProject);
-    BranchSupport.ComponentKey componentKey = createComponentKeyOfBranch(nonExistingProject.getKey());
-    when(branchSupportDelegate.createComponentKey(nonExistingProject.getKey(), randomCharacteristics)).thenReturn(componentKey);
+    ComponentDto createdBranch = createButDoNotInsertBranch(nonExistingBranch, PROJECT_UUID);
+    BranchSupport.ComponentKey componentKey = createComponentKeyOfBranch(nonExistingBranch.getKey());
+    when(branchSupportDelegate.createComponentKey(nonExistingBranch.getKey(), randomCharacteristics)).thenReturn(componentKey);
     ComponentCreationData componentCreationData = mock(ComponentCreationData.class);
     when(componentCreationData.mainBranchComponent())
-      .thenAnswer((Answer<ComponentDto>) invocation -> db.components().insertPrivateProject(nonExistingProject).getMainBranchComponent());
+      .thenAnswer((Answer<ComponentDto>) invocation -> db.components().insertPrivateProject(PROJECT_UUID, nonExistingBranch).getMainBranchComponent());
     when(componentUpdater.createWithoutCommit(any(), any(), eq(user.getUuid()), eq(user.getLogin())))
       .thenReturn(componentCreationData);
-    when(branchSupportDelegate.createBranchComponent(any(DbSession.class), same(componentKey), eq(nonExistingProject), any())).thenReturn(createdBranch);
-    when(permissionTemplateService.wouldUserHaveScanPermissionWithDefaultTemplate(any(DbSession.class), any(), eq(nonExistingProject.getKey()))).thenReturn(true);
+    when(branchSupportDelegate.createBranchComponent(any(DbSession.class), same(componentKey), any(), any())).thenReturn(createdBranch);
+    when(permissionTemplateService.wouldUserHaveScanPermissionWithDefaultTemplate(any(DbSession.class), any(), eq(nonExistingBranch.getKey()))).thenReturn(true);
     String taskUuid = mockSuccessfulPrepareSubmitCall();
     InputStream reportInput = IOUtils.toInputStream("{binary}", StandardCharsets.UTF_8);
 
-    underTest.submit(nonExistingProject.getKey(), nonExistingProject.name(), randomCharacteristics, reportInput);
+    underTest.submit(nonExistingBranch.getKey(), nonExistingBranch.name(), randomCharacteristics, reportInput);
 
-    BranchDto exitingProjectMainBranch = db.getDbClient().branchDao().selectByUuid(db.getSession(), nonExistingProject.uuid()).get();
-    verify(branchSupport).createBranchComponent(any(DbSession.class), same(componentKey), eq(nonExistingProject), eq(exitingProjectMainBranch));
-    verify(branchSupportDelegate).createComponentKey(nonExistingProject.getKey(), randomCharacteristics);
-    verify(branchSupportDelegate).createBranchComponent(any(DbSession.class), same(componentKey), eq(nonExistingProject), eq(exitingProjectMainBranch));
+    BranchDto exitingProjectMainBranch = db.getDbClient().branchDao().selectByUuid(db.getSession(), nonExistingBranch.uuid()).get();
+    verify(branchSupport).createBranchComponent(any(DbSession.class), same(componentKey), eq(nonExistingBranch), eq(exitingProjectMainBranch));
+    verify(branchSupportDelegate).createComponentKey(nonExistingBranch.getKey(), randomCharacteristics);
+    verify(branchSupportDelegate).createBranchComponent(any(DbSession.class), same(componentKey), eq(nonExistingBranch), eq(exitingProjectMainBranch));
     verifyNoMoreInteractions(branchSupportDelegate);
-    verifyQueueSubmit(nonExistingProject, createdBranch, user, randomCharacteristics, taskUuid);
+    verifyQueueSubmit(nonExistingBranch, createdBranch, user, randomCharacteristics, taskUuid);
     verify(componentUpdater).commitAndIndex(any(DbSession.class), eq(componentCreationData));
   }
 
   @Test
   public void submit_fails_if_branch_support_delegate_createComponentKey_throws_an_exception() {
-    ComponentDto project = db.components().insertPublicProject().getMainBranchComponent();
+    ProjectData projectData = db.components().insertPublicProject();
+    ComponentDto project = projectData.getMainBranchComponent();
     UserDto user = db.users().insertUser();
-    userSession.logIn(user).addProjectPermission(SCAN.getKey(), project);
+    userSession.logIn(user).addProjectPermission(SCAN.getKey(), projectData.getProjectDto());
     Map<String, String> randomCharacteristics = randomNonEmptyMap();
     InputStream reportInput = IOUtils.toInputStream("{binary}", StandardCharsets.UTF_8);
     RuntimeException expected = new RuntimeException("Faking an exception thrown by branchSupportDelegate");
@@ -220,27 +232,27 @@ public class BranchReportSubmitterIT {
 
   @Test
   public void submit_report_on_missing_branch_of_missing_project_fails_with_ForbiddenException_if_only_scan_permission() {
-    ComponentDto nonExistingProject = newPrivateProjectDto();
+    ComponentDto nonExistingBranch = newPrivateProjectDto();
     UserDto user = db.users().insertUser();
-    userSession.logIn(user).addProjectPermission(SCAN.getKey(), nonExistingProject);
+
     Map<String, String> randomCharacteristics = randomNonEmptyMap();
-    ComponentDto createdBranch = createButDoNotInsertBranch(nonExistingProject);
-    BranchSupport.ComponentKey componentKey = createComponentKeyOfBranch(nonExistingProject.getKey());
-    String nonExistingProjectDbKey = nonExistingProject.getKey();
+    ComponentDto createdBranch = createButDoNotInsertBranch(nonExistingBranch, PROJECT_UUID);
+    BranchSupport.ComponentKey componentKey = createComponentKeyOfBranch(nonExistingBranch.getKey());
+    String nonExistingProjectDbKey = nonExistingBranch.getKey();
     when(branchSupportDelegate.createComponentKey(nonExistingProjectDbKey, randomCharacteristics)).thenReturn(componentKey);
-    when(branchSupportDelegate.createBranchComponent(any(DbSession.class), same(componentKey), eq(nonExistingProject), any())).thenReturn(createdBranch);
+    when(branchSupportDelegate.createBranchComponent(any(DbSession.class), same(componentKey), any(), any())).thenReturn(createdBranch);
     InputStream reportInput = IOUtils.toInputStream("{binary}", StandardCharsets.UTF_8);
 
-    String name = nonExistingProject.name();
+    String name = nonExistingBranch.name();
     assertThatThrownBy(() -> underTest.submit(nonExistingProjectDbKey, name, randomCharacteristics, reportInput))
       .isInstanceOf(ForbiddenException.class)
       .hasMessage("Insufficient privileges");
   }
 
-  private static ComponentDto createButDoNotInsertBranch(ComponentDto project) {
+  private static ComponentDto createButDoNotInsertBranch(ComponentDto mainBranch, String projectUuid) {
     BranchType randomBranchType = BranchType.values()[new Random().nextInt(BranchType.values().length)];
-    BranchDto branchDto = newBranchDto(project.branchUuid(), randomBranchType);
-    return ComponentTesting.newBranchComponent(project, branchDto);
+    BranchDto branchDto = newBranchDto(projectUuid, randomBranchType);
+    return ComponentTesting.newBranchComponent(mainBranch, branchDto);
   }
 
   private String mockSuccessfulPrepareSubmitCall() {
index 8eb6efbc79338e0f390cffa326eb4736a8fae96b..ec0a9ac2a1890437c958a630cda54c1a5049d264 100644 (file)
@@ -37,6 +37,7 @@ import org.sonar.db.DbSession;
 import org.sonar.db.DbTester;
 import org.sonar.db.ce.CeTaskTypes;
 import org.sonar.db.component.ComponentDto;
+import org.sonar.db.component.ProjectData;
 import org.sonar.db.permission.GlobalPermission;
 import org.sonar.db.project.ProjectDto;
 import org.sonar.db.user.UserDto;
@@ -261,7 +262,7 @@ public class ReportSubmitterIT {
   @Test
   public void fail_if_component_is_not_a_project() {
     ComponentDto component = db.components().insertPublicPortfolio();
-    userSession.logIn().addProjectPermission(SCAN.getKey(), component);
+    userSession.logIn().addPortfolioPermission(SCAN.getKey(), component);
     mockSuccessfulPrepareSubmitCall();
 
     String dbKey = component.getKey();
@@ -275,8 +276,9 @@ public class ReportSubmitterIT {
 
   @Test
   public void fail_if_project_key_already_exists_as_other_component() {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
-    ComponentDto dir = db.components().insertComponent(newDirectory(project, "path"));
+    ProjectData projectData = db.components().insertPrivateProject();
+    ProjectDto project = projectData.getProjectDto();
+    ComponentDto dir = db.components().insertComponent(newDirectory(projectData.getMainBranchComponent(), "path"));
     userSession.logIn().addProjectPermission(SCAN.getKey(), project);
     mockSuccessfulPrepareSubmitCall();
 
@@ -303,8 +305,8 @@ public class ReportSubmitterIT {
 
   @Test
   public void fail_with_forbidden_exception_on_new_project_when_only_project_scan_permission() {
-    ComponentDto component = db.components().insertPrivateProject(PROJECT_UUID).getMainBranchComponent();
-    userSession.addProjectPermission(SCAN.getKey(), component);
+    ProjectDto project = db.components().insertPrivateProject(PROJECT_UUID).getProjectDto();
+    userSession.addProjectPermission(SCAN.getKey(), project);
     mockSuccessfulPrepareSubmitCall();
 
     Map<String, String> emptyMap = emptyMap();
index 0f06e7200beb341bae03231d5f8cef10c6b1e462..fc866c680e037bebbbf7b2432e9ba66cc8fbaae2 100644 (file)
@@ -381,7 +381,7 @@ public class ActivityActionIT {
     // is reserved to roots
     PortfolioData view = db.components().insertPrivatePortfolioData();
     insertActivity("T1", view, SUCCESS);
-    userSession.logIn().addProjectPermission(UserRole.ADMIN, view.getRootComponent());
+    userSession.logIn().addPortfolioPermission(UserRole.ADMIN, view.getPortfolioDto());
 
     TestRequest request = ws.newRequest().setParam(TEXT_QUERY, "T1");
     assertThatThrownBy(() -> call(request))
index 425e40f5ceb48bbca40911dccc685a0c40786110..6cab61c613532b26136aded9909f71ea944bde01 100644 (file)
@@ -57,6 +57,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.sonar.api.web.UserRole.ADMIN;
 import static org.sonar.api.web.UserRole.SCAN;
+import static org.sonar.api.web.UserRole.USER;
 import static org.sonar.db.ce.CeTaskCharacteristicDto.BRANCH_KEY;
 import static org.sonar.db.ce.CeTaskCharacteristicDto.BRANCH_TYPE_KEY;
 import static org.sonar.db.component.BranchType.BRANCH;
@@ -75,13 +76,16 @@ public class TaskActionIT {
   private final TaskAction underTest = new TaskAction(db.getDbClient(), formatter, userSession);
   private final WsActionTester ws = new WsActionTester(underTest);
 
-  private ComponentDto privateProject;
+  private ComponentDto privateProjectMainBranch;
   private ComponentDto publicProjectMainBranch;
   private ProjectDto publicProject;
+  private ProjectDto privateProject;
 
   @Before
   public void setUp() {
-    privateProject = db.components().insertPrivateProject().getMainBranchComponent();
+    ProjectData privateProjectData = db.components().insertPrivateProject();
+    privateProject = privateProjectData.getProjectDto();
+    privateProjectMainBranch = privateProjectData.getMainBranchComponent();
     userSession.logIn().addProjectPermission(ADMIN, privateProject);
     ProjectData publicProjectData = db.components().insertPublicProject();
     publicProject = publicProjectData.getProjectDto();
@@ -91,12 +95,12 @@ public class TaskActionIT {
   @Test
   public void task_is_in_queue() {
     UserDto user = db.users().insertUser();
-    userSession.addProjectPermission(SCAN, privateProject);
+    loginAndAddProjectPermission(null, SCAN);
 
     CeQueueDto queueDto = new CeQueueDto();
     queueDto.setTaskType(CeTaskTypes.REPORT);
     queueDto.setUuid(SOME_TASK_UUID);
-    queueDto.setComponentUuid(privateProject.uuid());
+    queueDto.setComponentUuid(privateProjectMainBranch.uuid());
     queueDto.setStatus(CeQueueDto.Status.PENDING);
     queueDto.setSubmitterUuid(user.getUuid());
     persist(queueDto);
@@ -107,9 +111,9 @@ public class TaskActionIT {
     assertThat(taskResponse.getTask().getId()).isEqualTo(SOME_TASK_UUID);
     assertThat(taskResponse.getTask().getStatus()).isEqualTo(Ce.TaskStatus.PENDING);
     assertThat(taskResponse.getTask().getSubmitterLogin()).isEqualTo(user.getLogin());
-    assertThat(taskResponse.getTask().getComponentId()).isEqualTo(privateProject.uuid());
-    assertThat(taskResponse.getTask().getComponentKey()).isEqualTo(privateProject.getKey());
-    assertThat(taskResponse.getTask().getComponentName()).isEqualTo(privateProject.name());
+    assertThat(taskResponse.getTask().getComponentId()).isEqualTo(privateProjectMainBranch.uuid());
+    assertThat(taskResponse.getTask().getComponentKey()).isEqualTo(privateProjectMainBranch.getKey());
+    assertThat(taskResponse.getTask().getComponentName()).isEqualTo(privateProjectMainBranch.name());
     assertThat(taskResponse.getTask().hasExecutionTimeMs()).isFalse();
     assertThat(taskResponse.getTask().getWarningCount()).isZero();
     assertThat(taskResponse.getTask().getWarningsList()).isEmpty();
@@ -141,7 +145,7 @@ public class TaskActionIT {
   @Test
   public void task_is_archived() {
     UserDto user = db.users().insertUser();
-    userSession.logIn(user).addProjectPermission(SCAN, privateProject);
+    loginAndAddProjectPermission(user, GlobalPermission.SCAN.getKey());
 
     CeActivityDto activityDto = createActivityDto(SOME_TASK_UUID);
     persist(activityDto);
@@ -152,9 +156,9 @@ public class TaskActionIT {
     Ce.Task task = taskResponse.getTask();
     assertThat(task.getId()).isEqualTo(SOME_TASK_UUID);
     assertThat(task.getStatus()).isEqualTo(Ce.TaskStatus.FAILED);
-    assertThat(task.getComponentId()).isEqualTo(privateProject.uuid());
-    assertThat(task.getComponentKey()).isEqualTo(privateProject.getKey());
-    assertThat(task.getComponentName()).isEqualTo(privateProject.name());
+    assertThat(task.getComponentId()).isEqualTo(privateProjectMainBranch.uuid());
+    assertThat(task.getComponentKey()).isEqualTo(privateProjectMainBranch.getKey());
+    assertThat(task.getComponentName()).isEqualTo(privateProjectMainBranch.name());
     assertThat(task.getAnalysisId()).isEqualTo(activityDto.getAnalysisUuid());
     assertThat(task.getExecutionTimeMs()).isEqualTo(500L);
     assertThat(task.getWarningCount()).isZero();
@@ -164,12 +168,13 @@ public class TaskActionIT {
   @Test
   public void branch_in_past_activity() {
     logInAsSystemAdministrator();
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
-    userSession.addProjectPermission(UserRole.USER, project);
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    userSession.addProjectPermission(UserRole.USER, projectData.getProjectDto());
     String branchName = randomAlphanumeric(248);
-    ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setBranchType(BRANCH).setKey(branchName));
+    ComponentDto branch = db.components().insertProjectBranch(mainBranch, b -> b.setBranchType(BRANCH).setKey(branchName));
     db.components().insertSnapshot(branch);
-    CeActivityDto activity = createAndPersistArchivedTask(project);
+    CeActivityDto activity = createAndPersistArchivedTask(mainBranch);
     insertCharacteristic(activity, BRANCH_KEY, branchName);
     insertCharacteristic(activity, BRANCH_TYPE_KEY, BRANCH.name());
 
@@ -303,8 +308,8 @@ public class TaskActionIT {
   @Test
   public void get_project_queue_task_with_scan_permission_on_project() {
     UserDto user = db.users().insertUser();
-    userSession.logIn(user).addProjectPermission(GlobalPermission.SCAN.getKey(), privateProject);
-    CeQueueDto task = createAndPersistQueueTask(privateProject, user);
+    loginAndAddProjectPermission(user, GlobalPermission.SCAN.getKey());
+    CeQueueDto task = createAndPersistQueueTask(privateProjectMainBranch, user);
 
     call(task.getUuid());
   }
@@ -324,7 +329,7 @@ public class TaskActionIT {
   public void get_project_queue_task_of_private_project_with_user_permission_fails_with_ForbiddenException() {
     UserDto user = db.users().insertUser();
     userSession.logIn().addProjectPermission(UserRole.USER, privateProject);
-    CeQueueDto task = createAndPersistQueueTask(privateProject, user);
+    CeQueueDto task = createAndPersistQueueTask(privateProjectMainBranch, user);
 
     String uuid = task.getUuid();
     assertThatThrownBy(() -> call(uuid))
@@ -334,25 +339,35 @@ public class TaskActionIT {
   @Test
   public void get_project_queue_task_on_public_project() {
     UserDto user = db.users().insertUser();
-    userSession.logIn(user).addProjectPermission(GlobalPermission.SCAN.getKey(), privateProject);
-    CeQueueDto task = createAndPersistQueueTask(privateProject, user);
+    loginAndAddProjectPermission(user, GlobalPermission.SCAN.getKey());
+    CeQueueDto task = createAndPersistQueueTask(privateProjectMainBranch, user);
 
     call(task.getUuid());
   }
 
+  private void loginAndAddProjectPermission(@Nullable UserDto user, String permission) {
+    if (user != null) {
+      userSession.logIn(user);
+    } else {
+      userSession.logIn();
+    }
+    userSession.addProjectPermission(permission, privateProject)
+      .addProjectBranchMapping(privateProject.getUuid(), privateProjectMainBranch);
+  }
+
   @Test
   public void get_project_queue_task_with_scan_permission_but_not_on_project() {
     UserDto user = db.users().insertUser();
     userSession.logIn(user).addPermission(GlobalPermission.SCAN);
-    CeQueueDto task = createAndPersistQueueTask(privateProject, user);
+    CeQueueDto task = createAndPersistQueueTask(privateProjectMainBranch, user);
 
     call(task.getUuid());
   }
 
   @Test
   public void get_project_queue_task_with_project_admin_permission() {
-    userSession.logIn().addProjectPermission(ADMIN, privateProject);
-    CeActivityDto task = createAndPersistArchivedTask(privateProject);
+    loginAndAddProjectPermission(null, ADMIN);
+    CeActivityDto task = createAndPersistArchivedTask(privateProjectMainBranch);
 
     call(task.getUuid());
   }
@@ -361,7 +376,7 @@ public class TaskActionIT {
   public void getting_project_queue_task_throws_ForbiddenException_if_no_admin_nor_scan_permissions() {
     UserDto user = db.users().insertUser();
     userSession.logIn(user);
-    CeQueueDto task = createAndPersistQueueTask(privateProject, user);
+    CeQueueDto task = createAndPersistQueueTask(privateProjectMainBranch, user);
 
     String uuid = task.getUuid();
     assertThatThrownBy(() -> call(uuid))
@@ -390,8 +405,8 @@ public class TaskActionIT {
 
   @Test
   public void get_project_archived_task_with_scan_permission_on_project() {
-    userSession.logIn().addProjectPermission(GlobalPermission.SCAN.getKey(), privateProject);
-    CeActivityDto task = createAndPersistArchivedTask(privateProject);
+    loginAndAddProjectPermission(null, SCAN);
+    CeActivityDto task = createAndPersistArchivedTask(privateProjectMainBranch);
 
     call(task.getUuid());
   }
@@ -409,7 +424,7 @@ public class TaskActionIT {
   @Test
   public void get_project_archived_task_with_scan_permission_but_not_on_project() {
     userSession.logIn().addPermission(GlobalPermission.SCAN);
-    CeActivityDto task = createAndPersistArchivedTask(privateProject);
+    CeActivityDto task = createAndPersistArchivedTask(privateProjectMainBranch);
 
     call(task.getUuid());
   }
@@ -417,7 +432,7 @@ public class TaskActionIT {
   @Test
   public void getting_project_archived_task_throws_ForbiddenException_if_no_admin_nor_scan_permissions() {
     userSession.logIn();
-    CeActivityDto task = createAndPersistArchivedTask(privateProject);
+    CeActivityDto task = createAndPersistArchivedTask(privateProjectMainBranch);
 
     String uuid = task.getUuid();
     assertThatThrownBy(() -> call(uuid))
@@ -462,23 +477,23 @@ public class TaskActionIT {
   public void get_warnings_on_private_project_archived_task_if_user_fails_with_ForbiddenException() {
     userSession.logIn().addProjectPermission(UserRole.USER, privateProject);
 
-    CeActivityDto persistArchivedTask = createAndPersistArchivedTask(privateProject);
+    CeActivityDto persistArchivedTask = createAndPersistArchivedTask(privateProjectMainBranch);
     assertThatThrownBy(() -> insertWarningsCallEndpointAndAssertWarnings(persistArchivedTask))
       .isInstanceOf(ForbiddenException.class);
   }
 
   @Test
   public void get_warnings_on_private_project_archived_task_if_scan() {
-    userSession.logIn().addProjectPermission(GlobalPermission.SCAN.getKey(), privateProject);
+    loginAndAddProjectPermission(null, GlobalPermission.SCAN.getKey());
 
-    insertWarningsCallEndpointAndAssertWarnings(createAndPersistArchivedTask(privateProject));
+    insertWarningsCallEndpointAndAssertWarnings(createAndPersistArchivedTask(privateProjectMainBranch));
   }
 
   @Test
   public void get_warnings_on_private_project_archived_task_if_global_scan_permission() {
     userSession.logIn().addPermission(GlobalPermission.SCAN);
 
-    insertWarningsCallEndpointAndAssertWarnings(createAndPersistArchivedTask(privateProject));
+    insertWarningsCallEndpointAndAssertWarnings(createAndPersistArchivedTask(privateProjectMainBranch));
   }
 
   @Test
@@ -549,7 +564,7 @@ public class TaskActionIT {
     CeQueueDto queueDto = new CeQueueDto();
     queueDto.setTaskType(CeTaskTypes.REPORT);
     queueDto.setUuid(uuid);
-    queueDto.setComponentUuid(privateProject.uuid());
+    queueDto.setComponentUuid(privateProjectMainBranch.uuid());
     return queueDto;
   }
 
index 3f4fc3ffe47d86a1c90fedb451abd18ca4cf620f..7d84ef457699e3148935586fe4051c1a5e5ba7f9 100644 (file)
@@ -74,7 +74,8 @@ public class AppActionIT {
   public void file_info() {
     ComponentDto directory = db.components().insertComponent(newDirectory(mainBranchComponent, "src"));
     ComponentDto file = db.components().insertComponent(newFileDto(mainBranchComponent, directory));
-    userSession.logIn("john").addProjectPermission(USER, mainBranchComponent);
+    userSession.logIn("john").addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
     String result = ws.newRequest()
       .setParam("component", file.getKey())
@@ -100,7 +101,8 @@ public class AppActionIT {
   public void file_on_module() {
     ComponentDto directory = db.components().insertComponent(newDirectory(mainBranchComponent, "src"));
     ComponentDto file = db.components().insertComponent(newFileDto(mainBranchComponent, directory));
-    userSession.logIn("john").addProjectPermission(USER, mainBranchComponent);
+    userSession.logIn("john").addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
     String result = ws.newRequest()
       .setParam("component", file.getKey())
@@ -125,7 +127,8 @@ public class AppActionIT {
   @Test
   public void file_without_measures() {
     ComponentDto file = db.components().insertComponent(newFileDto(mainBranchComponent));
-    userSession.logIn("john").addProjectPermission(USER, mainBranchComponent);
+    userSession.logIn("john").addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
     String result = ws.newRequest()
       .setParam("component", file.getKey())
@@ -153,7 +156,9 @@ public class AppActionIT {
     db.measures().insertLiveMeasure(file, issues, m -> m.setValue(231d));
     MetricDto coverage = db.measures().insertMetric(m -> m.setKey(COVERAGE_KEY));
     db.measures().insertLiveMeasure(file, coverage, m -> m.setValue(95.4d));
-    userSession.logIn("john").addProjectPermission(USER, mainBranchComponent);
+    userSession.logIn("john").addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
+
 
     String result = ws.newRequest()
       .setParam("component", file.getKey())
@@ -176,7 +181,8 @@ public class AppActionIT {
     ComponentDto file = db.components().insertComponent(newFileDto(mainBranchComponent, mainBranchComponent));
     MetricDto coverage = db.measures().insertMetric(m -> m.setKey(COVERAGE_KEY));
     db.measures().insertLiveMeasure(file, coverage, m -> m.setValue(95.4d));
-    userSession.logIn("john").addProjectPermission(USER, mainBranchComponent);
+    userSession.logIn("john").addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
     String result = ws.newRequest()
       .setParam("component", file.getKey())
@@ -194,7 +200,8 @@ public class AppActionIT {
 
   @Test
   public void canMarkAsFavorite_is_true_when_logged() {
-    userSession.logIn("john").addProjectPermission(USER, mainBranchComponent);
+    userSession.logIn("john").addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
     String result = ws.newRequest()
       .setParam("component", mainBranchComponent.getKey())
@@ -208,7 +215,8 @@ public class AppActionIT {
 
   @Test
   public void canMarkAsFavorite_is_false_when_not_logged() {
-    userSession.addProjectPermission(USER, mainBranchComponent);
+    userSession.addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
     String result = ws.newRequest()
       .setParam("component", mainBranchComponent.getKey())
@@ -241,7 +249,8 @@ public class AppActionIT {
 
   @Test
   public void component_is_not_favorite() {
-    userSession.logIn("john").addProjectPermission(USER, mainBranchComponent);
+    userSession.logIn("john").addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
     String result = ws.newRequest()
       .setParam("component", mainBranchComponent.getKey())
@@ -255,10 +264,10 @@ public class AppActionIT {
 
   @Test
   public void branch() {
-    userSession.logIn("john").addProjectPermission(USER, mainBranchComponent);
+    userSession.logIn("john").addProjectPermission(USER, projectData.getProjectDto());
     String branchName = randomAlphanumeric(248);
     ComponentDto branch = db.components().insertProjectBranch(mainBranchComponent, b -> b.setKey(branchName));
-    userSession.addProjectBranchMapping(mainBranchComponent.uuid(), branch);
+    userSession.addProjectBranchMapping(projectData.getProjectDto().getUuid(), branch);
     ComponentDto directory = db.components().insertComponent(newDirectory(branch, "src"));
     ComponentDto file = db.components().insertComponent(newFileDto(mainBranchComponent.uuid(), branch, directory));
     MetricDto coverage = db.measures().insertMetric(m -> m.setKey(COVERAGE_KEY));
@@ -298,10 +307,10 @@ public class AppActionIT {
 
   @Test
   public void component_and_branch_parameters_provided() {
-    userSession.logIn("john").addProjectPermission(USER, mainBranchComponent);
+    userSession.logIn("john").addProjectPermission(USER, projectData.getProjectDto());
     String branchName = randomAlphanumeric(248);
     ComponentDto branch = db.components().insertProjectBranch(mainBranchComponent, b -> b.setKey(branchName));
-    userSession.addProjectBranchMapping(mainBranchComponent.uuid(), branch);
+    userSession.addProjectBranchMapping(projectData.projectUuid(), branch);
     ComponentDto file = db.components().insertComponent(newFileDto(branch, mainBranchComponent.uuid()));
 
     String result = ws.newRequest()
@@ -328,10 +337,11 @@ public class AppActionIT {
 
   @Test
   public void component_and_pull_request_parameters_provided() {
-    userSession.logIn("john").addProjectPermission(USER, mainBranchComponent);
+    userSession.logIn("john").addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
     String pullRequestKey = RandomStringUtils.randomAlphanumeric(100);
     ComponentDto branch = db.components().insertProjectBranch(mainBranchComponent, b -> b.setBranchType(PULL_REQUEST).setKey(pullRequestKey));
-    userSession.addProjectBranchMapping(mainBranchComponent.uuid(), branch);
+    userSession.addProjectBranchMapping(projectData.projectUuid(), branch);
     ComponentDto file = db.components().insertComponent(newFileDto(branch, mainBranchComponent.uuid()));
 
     String result = ws.newRequest()
@@ -358,7 +368,7 @@ public class AppActionIT {
 
   @Test
   public void fail_if_component_and_pull_request_and_branch_parameters_provided() {
-    userSession.logIn("john").addProjectPermission(USER, mainBranchComponent);
+    userSession.logIn("john").addProjectPermission(USER, projectData.getProjectDto());
     ComponentDto branch = db.components().insertProjectBranch(mainBranchComponent, b -> b.setBranchType(PULL_REQUEST));
     ComponentDto file = db.components().insertComponent(newFileDto(branch, mainBranchComponent.uuid()));
 
index 38a3ae9daecaade7617fc5b897ac170555864773..a99b7cdba70601147e9903b1b450fc420c320441 100644 (file)
@@ -125,75 +125,87 @@ public class ShowActionIT {
 
   @Test
   public void show_with_browse_permission() {
-    ComponentDto project = newPrivateProjectDto("project-uuid");
-    db.components().insertProjectAndSnapshot(project);
-    userSession.addProjectPermission(USER, project);
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    db.components().insertSnapshot(mainBranch);
+    userSession.addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
-    ShowWsResponse response = newRequest(project.getKey());
+    ShowWsResponse response = newRequest(mainBranch.getKey());
 
-    assertThat(response.getComponent().getKey()).isEqualTo(project.getKey());
+    assertThat(response.getComponent().getKey()).isEqualTo(mainBranch.getKey());
   }
 
   @Test
   public void show_with_ancestors_when_not_project() {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
-    ComponentDto directory = db.components().insertComponent(newDirectory(project, "dir"));
-    ComponentDto file = db.components().insertComponent(newFileDto(project, directory));
-    userSession.addProjectPermission(USER, project);
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    ComponentDto directory = db.components().insertComponent(newDirectory(mainBranch, "dir"));
+    ComponentDto file = db.components().insertComponent(newFileDto(mainBranch, directory));
+    userSession.addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
     ShowWsResponse response = newRequest(file.getKey());
 
     assertThat(response.getComponent().getKey()).isEqualTo(file.getKey());
-    assertThat(response.getAncestorsList()).extracting(Component::getKey).containsOnly(directory.getKey(), project.getKey());
+    assertThat(response.getAncestorsList()).extracting(Component::getKey).containsOnly(directory.getKey(), mainBranch.getKey());
   }
 
   @Test
   public void show_without_ancestors_when_project() {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
-    userSession.addProjectPermission(USER, project);
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    userSession.addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
-    ShowWsResponse response = newRequest(project.getKey());
+    ShowWsResponse response = newRequest(mainBranch.getKey());
 
-    assertThat(response.getComponent().getKey()).isEqualTo(project.getKey());
+    assertThat(response.getComponent().getKey()).isEqualTo(mainBranch.getKey());
     assertThat(response.getAncestorsList()).isEmpty();
   }
 
   @Test
   public void show_with_last_analysis_date() {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
     db.components().insertSnapshots(
-      newAnalysis(project).setCreatedAt(1_000_000_000L).setLast(false),
-      newAnalysis(project).setCreatedAt(2_000_000_000L).setLast(false),
-      newAnalysis(project).setCreatedAt(3_000_000_000L).setLast(true));
-    userSession.addProjectPermission(USER, project);
+      newAnalysis(mainBranch).setCreatedAt(1_000_000_000L).setLast(false),
+      newAnalysis(mainBranch).setCreatedAt(2_000_000_000L).setLast(false),
+      newAnalysis(mainBranch).setCreatedAt(3_000_000_000L).setLast(true));
+    userSession.addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
-    ShowWsResponse response = newRequest(project.getKey());
+    ShowWsResponse response = newRequest(mainBranch.getKey());
 
     assertThat(response.getComponent().getAnalysisDate()).isNotEmpty().isEqualTo(formatDateTime(new Date(3_000_000_000L)));
   }
 
   @Test
   public void show_with_new_code_period_date() {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
     db.components().insertSnapshots(
-      newAnalysis(project).setPeriodDate(1_000_000_000L).setLast(false),
-      newAnalysis(project).setPeriodDate(2_000_000_000L).setLast(false),
-      newAnalysis(project).setPeriodDate(3_000_000_000L).setLast(true));
+      newAnalysis(mainBranch).setPeriodDate(1_000_000_000L).setLast(false),
+      newAnalysis(mainBranch).setPeriodDate(2_000_000_000L).setLast(false),
+      newAnalysis(mainBranch).setPeriodDate(3_000_000_000L).setLast(true));
 
-    userSession.addProjectPermission(USER, project);
+    userSession.addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
-    ShowWsResponse response = newRequest(project.getKey());
+    ShowWsResponse response = newRequest(mainBranch.getKey());
 
     assertThat(response.getComponent().getLeakPeriodDate()).isNotEmpty().isEqualTo(formatDateTime(new Date(3_000_000_000L)));
   }
 
   @Test
   public void show_with_ancestors_and_analysis_date() {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
-    db.components().insertSnapshot(newAnalysis(project).setCreatedAt(3_000_000_000L).setLast(true));
-    ComponentDto directory = db.components().insertComponent(newDirectory(project, "dir"));
-    ComponentDto file = db.components().insertComponent(newFileDto(project, directory));
-    userSession.addProjectPermission(USER, project);
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    db.components().insertSnapshot(newAnalysis(mainBranch).setCreatedAt(3_000_000_000L).setLast(true));
+    ComponentDto directory = db.components().insertComponent(newDirectory(mainBranch, "dir"));
+    ComponentDto file = db.components().insertComponent(newFileDto(mainBranch, directory));
+    userSession.addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
     ShowWsResponse response = newRequest(file.getKey());
 
@@ -204,10 +216,12 @@ public class ShowActionIT {
 
   @Test
   public void should_return_visibility_for_private_project() {
-    ComponentDto privateProject = db.components().insertPrivateProject().getMainBranchComponent();
-    userSession.addProjectPermission(USER, privateProject);
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    userSession.addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
-    ShowWsResponse result = newRequest(privateProject.getKey());
+    ShowWsResponse result = newRequest(mainBranch.getKey());
     assertThat(result.getComponent().hasVisibility()).isTrue();
     assertThat(result.getComponent().getVisibility()).isEqualTo("private");
   }
@@ -228,7 +242,7 @@ public class ShowActionIT {
   @Test
   public void should_return_visibility_for_portfolio() {
     ComponentDto view = db.components().insertPrivatePortfolio();
-    userSession.addProjectPermission(USER, view);
+    userSession.addPortfolioPermission(USER, view);
 
     ShowWsResponse result = newRequest(view.getKey());
     assertThat(result.getComponent().hasVisibility()).isTrue();
@@ -236,11 +250,13 @@ public class ShowActionIT {
 
   @Test
   public void display_version() {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
-    ComponentDto directory = db.components().insertComponent(newDirectory(project, "dir"));
-    ComponentDto file = db.components().insertComponent(newFileDto(project, directory));
-    db.components().insertSnapshot(project, s -> s.setProjectVersion("1.1"));
-    userSession.addProjectPermission(USER, project);
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    ComponentDto directory = db.components().insertComponent(newDirectory(mainBranch, "dir"));
+    ComponentDto file = db.components().insertComponent(newFileDto(mainBranch, directory));
+    db.components().insertSnapshot(mainBranch, s -> s.setProjectVersion("1.1"));
+    userSession.addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
     ShowWsResponse response = newRequest(file.getKey());
 
@@ -252,13 +268,14 @@ public class ShowActionIT {
 
   @Test
   public void branch() {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
-    userSession.addProjectPermission(UserRole.USER, project);
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    userSession.addProjectPermission(UserRole.USER, projectData.getProjectDto());
     String branchKey = "my_branch";
-    ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setKey(branchKey));
-    userSession.addProjectBranchMapping(project.uuid(), branch);
-    ComponentDto directory = db.components().insertComponent(newDirectoryOnBranch(branch, "dir", project.uuid()));
-    ComponentDto file = db.components().insertComponent(newFileDto(project.uuid(), branch, directory));
+    ComponentDto branch = db.components().insertProjectBranch(mainBranch, b -> b.setKey(branchKey));
+    userSession.addProjectBranchMapping(projectData.projectUuid(), branch);
+    ComponentDto directory = db.components().insertComponent(newDirectoryOnBranch(branch, "dir", mainBranch.uuid()));
+    ComponentDto file = db.components().insertComponent(newFileDto(mainBranch.uuid(), branch, directory));
     db.components().insertSnapshot(branch, s -> s.setProjectVersion("1.1"));
 
     ShowWsResponse response = ws.newRequest()
@@ -277,28 +294,31 @@ public class ShowActionIT {
 
   @Test
   public void dont_show_branch_if_main_branch() {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
-    userSession.addProjectPermission(UserRole.USER, project);
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    userSession.addProjectPermission(UserRole.USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
 
     ShowWsResponse response = ws.newRequest()
-      .setParam(PARAM_COMPONENT, project.getKey())
+      .setParam(PARAM_COMPONENT, mainBranch.getKey())
       .setParam(PARAM_BRANCH, DEFAULT_MAIN_BRANCH_NAME)
       .executeProtobuf(ShowWsResponse.class);
 
     assertThat(response.getComponent())
       .extracting(Component::getKey, Component::getBranch)
-      .containsExactlyInAnyOrder(project.getKey(), "");
+      .containsExactlyInAnyOrder(mainBranch.getKey(), "");
   }
 
   @Test
   public void pull_request() {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
-    userSession.addProjectPermission(UserRole.USER, project);
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    userSession.addProjectPermission(UserRole.USER, projectData.getProjectDto());
     String pullRequest = "pr-1234";
-    ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setKey(pullRequest).setBranchType(PULL_REQUEST));
-    userSession.addProjectBranchMapping(project.uuid(), branch);
-    ComponentDto directory = db.components().insertComponent(newDirectoryOnBranch(branch, "dir", project.uuid()));
-    ComponentDto file = db.components().insertComponent(newFileDto(project.uuid(), branch, directory));
+    ComponentDto branch = db.components().insertProjectBranch(mainBranch, b -> b.setKey(pullRequest).setBranchType(PULL_REQUEST));
+    userSession.addProjectBranchMapping(projectData.projectUuid(), branch);
+    ComponentDto directory = db.components().insertComponent(newDirectoryOnBranch(branch, "dir", mainBranch.uuid()));
+    ComponentDto file = db.components().insertComponent(newFileDto(mainBranch.uuid(), branch, directory));
     db.components().insertSnapshot(branch, s -> s.setProjectVersion("1.1"));
 
     ShowWsResponse response = ws.newRequest()
@@ -414,10 +434,11 @@ public class ShowActionIT {
 
   @Test
   public void fail_if_component_is_removed() {
-    ComponentDto privateProjectDto = newPrivateProjectDto();
-    ComponentDto project = db.components().insertComponent(privateProjectDto);
-    userSession.addProjectPermission(USER, project);
-    db.components().insertComponent(newFileDto(project).setKey("file-key").setEnabled(false));
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    userSession.addProjectPermission(USER, mainBranch)
+      .registerBranches(projectData.getMainBranchDto());
+    db.components().insertComponent(newFileDto(mainBranch).setKey("file-key").setEnabled(false));
 
     assertThatThrownBy(() -> newRequest("file-key"))
       .isInstanceOf(NotFoundException.class)
@@ -426,10 +447,12 @@ public class ShowActionIT {
 
   @Test
   public void fail_if_branch_does_not_exist() {
-    ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent();
-    ComponentDto file = db.components().insertComponent(newFileDto(project));
-    userSession.addProjectPermission(UserRole.USER, project);
-    db.components().insertProjectBranch(project, b -> b.setKey("my_branch"));
+    ProjectData projectData = db.components().insertPrivateProject();
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    ComponentDto file = db.components().insertComponent(newFileDto(mainBranch));
+    userSession.addProjectPermission(UserRole.USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
+    db.components().insertProjectBranch(mainBranch, b -> b.setKey("my_branch"));
 
     TestRequest request = ws.newRequest()
       .setParam(PARAM_COMPONENT, file.getKey())
@@ -449,19 +472,21 @@ public class ShowActionIT {
   }
 
   private void insertJsonExampleComponentsAndSnapshots() {
-    ComponentDto project = db.components().insertPrivateProject(c -> c.setUuid("AVIF98jgA3Ax6PH2efOW")
+    ProjectData projectData = db.components().insertPrivateProject(c -> c.setUuid("AVIF98jgA3Ax6PH2efOW")
         .setBranchUuid("AVIF98jgA3Ax6PH2efOW")
         .setKey("com.sonarsource:java-markdown")
         .setName("Java Markdown")
         .setDescription("Java Markdown Project")
         .setQualifier(Qualifiers.PROJECT),
-      p -> p.setTagsString("language, plugin")).getMainBranchComponent();
-    userSession.addProjectPermission(USER, project);
-    db.components().insertSnapshot(project, snapshot -> snapshot
+      p -> p.setTagsString("language, plugin"));
+    ComponentDto mainBranch = projectData.getMainBranchComponent();
+    userSession.addProjectPermission(USER, projectData.getProjectDto())
+      .registerBranches(projectData.getMainBranchDto());
+    db.components().insertSnapshot(mainBranch, snapshot -> snapshot
       .setProjectVersion("1.1")
       .setCreatedAt(parseDateTime("2017-03-01T11:39:03+0100").getTime())
       .setPeriodDate(parseDateTime("2017-01-01T11:39:03+0100").getTime()));
-    ComponentDto directory = newDirectory(project, "AVIF-FfgA3Ax6PH2efPF", "src/main/java/com/sonarsource/markdown/impl")
+    ComponentDto directory = newDirectory(mainBranch, "AVIF-FfgA3Ax6PH2efPF", "src/main/java/com/sonarsource/markdown/impl")
       .setKey("com.sonarsource:java-markdown:src/main/java/com/sonarsource/markdown/impl")
       .setName("src/main/java/com/sonarsource/markdown/impl")
       .setQualifier(Qualifiers.DIRECTORY);