assertThat(underTest.selectSubProjectsByComponentUuids(dbSession, Collections.emptyList())).isEmpty();
}
- @Test
- public void select_enabled_modules_tree() {
- ComponentDto project = db.components().insertPrivateProject();
- ComponentDto removedProject = db.components().insertPrivateProject(p -> p.setEnabled(false));
- ComponentDto module = db.components().insertComponent(newModuleDto(project));
- ComponentDto removedModule = db.components().insertComponent(newModuleDto(project).setEnabled(false));
- ComponentDto subModule = db.components().insertComponent(newModuleDto(module));
- ComponentDto removedSubModule = db.components().insertComponent(newModuleDto(module).setEnabled(false));
- ComponentDto directory = db.components().insertComponent(newDirectory(subModule, "src"));
- ComponentDto removedDirectory = db.components().insertComponent(newDirectory(subModule, "src2").setEnabled(false));
- ComponentDto file = db.components().insertComponent(newFileDto(subModule, directory));
- ComponentDto removedFile = db.components().insertComponent(newFileDto(subModule, directory).setEnabled(false));
-
- // From root project
- assertThat(underTest.selectEnabledDescendantModules(dbSession, project.uuid()))
- .extracting(ComponentDto::uuid)
- .containsExactlyInAnyOrder(project.uuid(), module.uuid(), subModule.uuid())
- .doesNotContain(removedModule.uuid(), removedSubModule.uuid());
-
- // From module
- assertThat(underTest.selectEnabledDescendantModules(dbSession, module.uuid()))
- .extracting(ComponentDto::uuid)
- .containsExactlyInAnyOrder(module.uuid(), subModule.uuid())
- .doesNotContain(removedModule.uuid(), removedModule.uuid());
-
- // From sub module
- assertThat(underTest.selectEnabledDescendantModules(dbSession, subModule.uuid()))
- .extracting(ComponentDto::uuid)
- .containsExactlyInAnyOrder(subModule.uuid());
-
- // Folder
- assertThat(underTest.selectEnabledDescendantModules(dbSession, directory.uuid())).isEmpty();
- assertThat(underTest.selectEnabledDescendantModules(dbSession, "unknown")).isEmpty();
- }
-
- @Test
- public void select_all_modules_tree() {
- ComponentDto project = db.components().insertPrivateProject();
- ComponentDto removedProject = db.components().insertPrivateProject(p -> p.setEnabled(false));
- ComponentDto module = db.components().insertComponent(newModuleDto(project));
- ComponentDto removedModule = db.components().insertComponent(newModuleDto(project).setEnabled(false));
- ComponentDto subModule = db.components().insertComponent(newModuleDto(module));
- ComponentDto removedSubModule = db.components().insertComponent(newModuleDto(module).setEnabled(false));
- ComponentDto directory = db.components().insertComponent(newDirectory(subModule, "src"));
- ComponentDto removedDirectory = db.components().insertComponent(newDirectory(subModule, "src2").setEnabled(false));
- ComponentDto file = db.components().insertComponent(newFileDto(subModule, directory));
- ComponentDto removedFile = db.components().insertComponent(newFileDto(subModule, directory).setEnabled(false));
-
- // From root project, disabled sub module is returned
- assertThat(underTest.selectDescendantModules(dbSession, project.uuid()))
- .extracting(ComponentDto::uuid)
- .containsExactlyInAnyOrder(project.uuid(), module.uuid(), removedModule.uuid(), subModule.uuid(), removedSubModule.uuid());
-
- // From module, disabled sub module is returned
- assertThat(underTest.selectDescendantModules(dbSession, module.uuid()))
- .extracting(ComponentDto::uuid)
- .containsExactlyInAnyOrder(module.uuid(), subModule.uuid(), removedSubModule.uuid());
-
- // From removed sub module -> should not be returned
- assertThat(underTest.selectDescendantModules(dbSession, removedSubModule.uuid())).isEmpty();
- }
-
@Test
public void select_enabled_module_files_tree_from_module() {
ComponentDto project = db.components().insertPrivateProject();
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.sonar.api.resources.Scopes;
import org.sonar.server.user.UserSession;
import org.sonarqube.ws.MediaTypes;
-import static com.google.common.base.Preconditions.checkArgument;
import static java.lang.String.format;
import static java.util.Optional.ofNullable;
import static java.util.stream.Collectors.toMap;
try (DbSession dbSession = dbClient.openSession(false)) {
ComponentDto component = loadComponent(dbSession, request);
userSession.checkComponentPermission(USER, component);
- Map<String, String> keysByUUid = keysByUUid(dbSession, component);
ScannerInput.ServerIssue.Builder responseBuilder = ScannerInput.ServerIssue.newBuilder();
response.stream().setMediaType(MediaTypes.PROTOBUF);
issueDtos.forEach(issue -> {
issue.setAssigneeUuid(userLoginsByUserUuids.get(issue.getAssigneeUuid()));
- handleIssue(issue, responseBuilder, keysByUUid, output);
+ handleIssue(issue, responseBuilder, output);
});
}
}
- private static void handleIssue(IssueDto issue, ScannerInput.ServerIssue.Builder issueBuilder, Map<String, String> keysByUUid, OutputStream out) {
+ private static void handleIssue(IssueDto issue, ScannerInput.ServerIssue.Builder issueBuilder, OutputStream out) {
issueBuilder.setKey(issue.getKey());
- String moduleUuid = extractModuleUuid(issue);
- issueBuilder.setModuleKey(keysByUUid.get(moduleUuid));
ofNullable(issue.getFilePath()).ifPresent(issueBuilder::setPath);
issueBuilder.setRuleRepository(issue.getRuleRepo());
issueBuilder.setRuleKey(issue.getRule());
issueBuilder.clear();
}
- private static String extractModuleUuid(IssueDto issue) {
- List<String> split = MODULE_PATH_SPLITTER.splitToList(issue.getModuleUuidPath());
- return split.get(split.size() - 1);
- }
-
- private Map<String, String> keysByUUid(DbSession session, ComponentDto component) {
- Map<String, String> keysByUUid = new HashMap<>();
- if (Scopes.PROJECT.equals(component.scope())) {
- List<ComponentDto> modulesTree = dbClient.componentDao().selectDescendantModules(session, component.uuid());
- for (ComponentDto componentDto : modulesTree) {
- keysByUUid.put(componentDto.uuid(), componentDto.getKey());
- }
- } else {
- String moduleUuid = component.moduleUuid();
- checkArgument(moduleUuid != null, "The component '%s' has no module uuid", component.uuid());
- ComponentDto module = dbClient.componentDao().selectOrFailByUuid(session, moduleUuid);
- keysByUUid.put(module.uuid(), module.getKey());
- }
- return keysByUUid;
- }
-
private ComponentDto loadComponent(DbSession dbSession, Request request) {
String componentKey = request.mandatoryParam(PARAM_KEY);
String branch = request.param(PARAM_BRANCH);
import java.io.IOException;
import java.util.stream.Stream;
import javax.annotation.Nullable;
-import org.assertj.core.groups.Tuple;
import org.junit.Rule;
import org.junit.Test;
import org.sonar.api.rules.RuleType;
import static org.apache.commons.lang.math.RandomUtils.nextInt;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.assertj.core.api.Assertions.tuple;
import static org.sonar.api.rules.RuleType.BUG;
import static org.sonar.db.component.ComponentTesting.newDirectory;
import static org.sonar.db.component.ComponentTesting.newFileDto;
ServerIssue serverIssue = call(project.getKey());
assertThat(serverIssue.getKey()).isEqualTo(issue.getKey());
- assertThat(serverIssue.getModuleKey()).isEqualTo(module.getKey());
assertThat(serverIssue.getRuleRepository()).isEqualTo(rule.getRepositoryKey());
assertThat(serverIssue.getRuleKey()).isEqualTo(rule.getRuleKey());
assertThat(serverIssue.getStatus()).isEqualTo("OPEN");
ServerIssue serverIssue = call(project.getKey());
assertThat(serverIssue.getKey()).isEqualTo(issue.getKey());
- assertThat(serverIssue.getModuleKey()).isEqualTo(module.getKey());
assertThat(serverIssue.getRuleRepository()).isEqualTo(rule.getRepositoryKey());
assertThat(serverIssue.getRuleKey()).isEqualTo(rule.getRuleKey());
assertThat(serverIssue.getStatus()).isEqualTo("OPEN");
try (CloseableIterator<ServerIssue> result = callStream(project.getKey(), null)) {
assertThat(result)
.toIterable()
- .extracting(ServerIssue::getKey, ServerIssue::getModuleKey)
+ .extracting(ServerIssue::getKey)
.containsExactlyInAnyOrder(
- tuple(issueOnFile.getKey(), module.getKey()),
- tuple(issueOnModule.getKey(), module.getKey()),
- tuple(issueOnProject.getKey(), project.getKey()));
+ issueOnFile.getKey(),
+ issueOnModule.getKey(),
+ issueOnProject.getKey());
}
}
try (CloseableIterator<ServerIssue> result = callStream(project.getKey(), null)) {
assertThat(result)
.toIterable()
- .extracting(ServerIssue::getKey, ServerIssue::getModuleKey)
+ .extracting(ServerIssue::getKey)
.containsExactlyInAnyOrder(
- tuple(issueOnFile.getKey(), module.getKey()),
- tuple(issueOnModule.getKey(), module.getKey()),
- tuple(issueOnProject.getKey(), project.getKey()),
- tuple(issueFromMigratedRule.getKey(), module.getKey()));
- }
- }
-
- @Test
- public void return_issues_of_module() {
- RuleDto rule = db.rules().insert();
- ComponentDto project = db.components().insertPrivateProject();
- ComponentDto module = db.components().insertComponent(newModuleDto(project));
- ComponentDto file = db.components().insertComponent(newFileDto(module, null));
- IssueDto issueOnFile = db.issues().insert(rule, project, file, i -> i.setKee("ON_FILE").setType(randomRuleTypeExceptHotspot()));
- IssueDto issueOnModule = db.issues().insert(rule, project, module, i -> i.setKee("ON_MODULE").setType(randomRuleTypeExceptHotspot()));
- IssueDto issueOnProject = db.issues().insert(rule, project, project, i -> i.setKee("ON_PROJECT").setType(randomRuleTypeExceptHotspot()));
-
- addPermissionTo(project);
- try (CloseableIterator<ServerIssue> result = callStream(module.getKey(), null)) {
- assertThat(result)
- .toIterable()
- .extracting(ServerIssue::getKey, ServerIssue::getModuleKey)
- .containsExactlyInAnyOrder(
- tuple(issueOnFile.getKey(), module.getKey()),
- tuple(issueOnModule.getKey(), module.getKey()));
+ issueOnFile.getKey(),
+ issueOnModule.getKey(),
+ issueOnProject.getKey(),
+ issueFromMigratedRule.getKey());
}
}
try (CloseableIterator<ServerIssue> result = callStream(file.getKey(), null)) {
assertThat(result)
.toIterable()
- .extracting(ServerIssue::getKey, ServerIssue::getModuleKey)
- .containsExactlyInAnyOrder(
- tuple(issueOnFile.getKey(), module.getKey()));
+ .extracting(ServerIssue::getKey)
+ .containsExactlyInAnyOrder(issueOnFile.getKey());
}
}
IssueDto issueOnFile = db.issues().insert(rule, branch, file, i -> i.setType(randomRuleTypeExceptHotspot()));
IssueDto issueOnBranch = db.issues().insert(rule, branch, branch, i -> i.setType(randomRuleTypeExceptHotspot()));
- assertResult(project.getKey(), "my_branch",
- tuple(issueOnFile.getKey(), branch.getKey()),
- tuple(issueOnBranch.getKey(), branch.getKey()));
- }
-
- @Test
- public void return_issues_by_module_and_branch() {
- RuleDto rule = db.rules().insert();
- ComponentDto project = db.components().insertPrivateProject();
- addPermissionTo(project);
- ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setKey("my_branch"));
- ComponentDto module = db.components().insertComponent(newModuleDto(branch));
- ComponentDto subModule = db.components().insertComponent(newModuleDto(module));
- ComponentDto file = db.components().insertComponent(newFileDto(subModule));
- IssueDto issueOnFile = db.issues().insert(rule, branch, file, i -> i.setType(randomRuleTypeExceptHotspot()));
- IssueDto issueOnSubModule = db.issues().insert(rule, branch, subModule, i -> i.setType(randomRuleTypeExceptHotspot()));
- IssueDto issueOnModule = db.issues().insert(rule, branch, module, i -> i.setType(randomRuleTypeExceptHotspot()));
-
- assertResult(module.getKey(), "my_branch",
- tuple(issueOnFile.getKey(), subModule.getKey()),
- tuple(issueOnSubModule.getKey(), subModule.getKey()),
- tuple(issueOnModule.getKey(), module.getKey())
- );
+ assertResult(project.getKey(), "my_branch", issueOnFile.getKey(), issueOnBranch.getKey());
}
@Test
.hasMessage("Component of scope 'DIR' is not allowed");
}
- @Test
- public void issues_on_disabled_modules_are_returned() {
- RuleDto rule = db.rules().insert();
- ComponentDto project = db.components().insertPrivateProject();
- ComponentDto module = db.components().insertComponent(newModuleDto(project).setEnabled(false));
- ComponentDto file = db.components().insertComponent(newFileDto(module, null).setEnabled(false));
- IssueDto issue = db.issues().insert(rule, project, file, i -> i.setType(randomRuleTypeExceptHotspot()));
-
- addPermissionTo(project);
- try (CloseableIterator<ServerIssue> result = callStream(project.getKey(), null)) {
- // Module key of removed file should be returned
- assertThat(result)
- .toIterable()
- .extracting(ServerIssue::getKey, ServerIssue::getModuleKey)
- .containsExactly(tuple(issue.getKey(), module.getKey()));
- }
- }
-
@Test
public void fail_if_user_does_not_have_permission_on_project() {
ComponentDto project = db.components().insertPrivateProject();
@Test
public void fail_if_branch_does_not_exist() {
ComponentDto project = db.components().insertPrivateProject();
- db.components().insertProjectBranch(project, b -> b.setKey("my_branch"));
+ db.components().insertProjectBranch(project, b -> b.setKey("my_branch"));
addPermissionTo(project);
assertThatThrownBy(() -> {
tester.newRequest()
- .setParam("key",project.getKey())
+ .setParam("key", project.getKey())
.setParam("branch", "does_not_exist")
.execute();
})
return Protobuf.readStream(request.execute().getInputStream(), ServerIssue.parser());
}
- private void assertResult(String componentKey, String branch, Tuple... tuples) {
+ private void assertResult(String componentKey, String branch, String... issueKeys) {
try (CloseableIterator<ServerIssue> result = callStream(componentKey, branch)) {
assertThat(result)
.toIterable()
- .extracting(ServerIssue::getKey, ServerIssue::getModuleKey)
- .containsExactlyInAnyOrder(tuples);
+ .extracting(ServerIssue::getKey)
+ .containsExactlyInAnyOrder(issueKeys);
}
}