@@ -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)); |
@@ -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; |
@@ -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())); |
@@ -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); | |||
@@ -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"); |
@@ -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) |
@@ -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() { |
@@ -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(); |
@@ -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)) |
@@ -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; | |||
} | |||
@@ -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())); | |||
@@ -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); |