Skip to content

Commit

Permalink
SONAR-6013 Return manual rules in /batch/project to be able to handle…
Browse files Browse the repository at this point in the history
… manual issues
  • Loading branch information
julienlancelot committed Jan 22, 2015
1 parent 70d20c4 commit d34d826
Show file tree
Hide file tree
Showing 9 changed files with 79 additions and 160 deletions.
Expand Up @@ -74,4 +74,5 @@ public void handle(Request request, Response response) throws Exception {
response.stream().setMediaType(MimeTypes.JSON); response.stream().setMediaType(MimeTypes.JSON);
IOUtils.write(ref.toJson(), response.stream().output()); IOUtils.write(ref.toJson(), response.stream().output());
} }

} }
Expand Up @@ -26,6 +26,7 @@
import org.sonar.api.ServerComponent; import org.sonar.api.ServerComponent;
import org.sonar.api.resources.Language; import org.sonar.api.resources.Language;
import org.sonar.api.resources.Languages; import org.sonar.api.resources.Languages;
import org.sonar.api.rule.RuleKey;
import org.sonar.batch.protocol.input.FileData; import org.sonar.batch.protocol.input.FileData;
import org.sonar.batch.protocol.input.ProjectReferentials; import org.sonar.batch.protocol.input.ProjectReferentials;
import org.sonar.core.UtcDateUtils; import org.sonar.core.UtcDateUtils;
Expand All @@ -43,11 +44,16 @@
import org.sonar.server.qualityprofile.QProfileLoader; import org.sonar.server.qualityprofile.QProfileLoader;
import org.sonar.server.rule.Rule; import org.sonar.server.rule.Rule;
import org.sonar.server.rule.RuleService; import org.sonar.server.rule.RuleService;
import org.sonar.server.rule.index.RuleNormalizer;
import org.sonar.server.rule.index.RuleQuery;
import org.sonar.server.search.QueryContext;
import org.sonar.server.search.Result;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;


import javax.annotation.Nullable; import javax.annotation.Nullable;


import java.util.Collections; import java.util.Collections;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;


Expand Down Expand Up @@ -82,41 +88,43 @@ public ProjectReferentials load(ProjectRepositoryQuery query) {
ComponentDto module = dbClient.componentDao().getNullableByKey(session, query.getModuleKey()); ComponentDto module = dbClient.componentDao().getNullableByKey(session, query.getModuleKey());
// Current project/module can be null when analysing a new project // Current project/module can be null when analysing a new project
if (module != null) { if (module != null) {
ComponentDto project = dbClient.componentDao().getNullableRootProjectByKey(query.getModuleKey(), session); ComponentDto project = getProject(module, session);

if (!project.key().equals(module.key())) {
// Can be null if the given project is a provisioned one addSettings(ref, module.getKey(), getSettingsFromParents(module, hasScanPerm, session));
if (project != null) { projectKey = project.key();
if (!project.key().equals(module.key())) {
addSettings(ref, module.getKey(), getSettingsFromParents(module.key(), hasScanPerm, session));
projectKey = project.key();
}

List<ComponentDto> moduleChildren = dbClient.componentDao().findChildrenModulesFromModule(session, query.getModuleKey());
Map<String, String> moduleUuidsByKey = moduleUuidsByKey(module, moduleChildren);
Map<String, Long> moduleIdsByKey = moduleIdsByKey(module, moduleChildren);

List<PropertyDto> moduleChildrenSettings = dbClient.propertiesDao().findChildrenModuleProperties(query.getModuleKey(), session);
TreeModuleSettings treeModuleSettings = new TreeModuleSettings(moduleUuidsByKey, moduleIdsByKey, moduleChildren, moduleChildrenSettings, module);

addSettingsToChildrenModules(ref, query.getModuleKey(), Maps.<String, String>newHashMap(), treeModuleSettings, hasScanPerm, session);
addFileData(session, ref, moduleChildren, module.key());
} else {
// Add settings of the provisioned project
addSettings(ref, query.getModuleKey(), getPropertiesMap(dbClient.propertiesDao().selectProjectProperties(query.getModuleKey(), session), hasScanPerm));
} }

List<ComponentDto> moduleChildren = dbClient.componentDao().findChildrenModulesFromModule(session, query.getModuleKey());
Map<String, String> moduleUuidsByKey = moduleUuidsByKey(module, moduleChildren);
Map<String, Long> moduleIdsByKey = moduleIdsByKey(module, moduleChildren);

List<PropertyDto> moduleChildrenSettings = dbClient.propertiesDao().findChildrenModuleProperties(query.getModuleKey(), session);
TreeModuleSettings treeModuleSettings = new TreeModuleSettings(moduleUuidsByKey, moduleIdsByKey, moduleChildren, moduleChildrenSettings, module);

addSettingsToChildrenModules(ref, query.getModuleKey(), Maps.<String, String>newHashMap(), treeModuleSettings, hasScanPerm, session);
addFileData(session, ref, moduleChildren, module.key());
} }


addProfiles(ref, projectKey, query.getProfileName(), session); addProfiles(ref, projectKey, query.getProfileName(), session);
addActiveRules(ref); addActiveRules(ref);
addManualRules(ref);
return ref; return ref;
} finally { } finally {
MyBatis.closeQuietly(session); MyBatis.closeQuietly(session);
} }
} }


private Map<String, String> getSettingsFromParents(String moduleKey, boolean hasScanPerm, DbSession session) { private ComponentDto getProject(ComponentDto module, DbSession session) {
if (!module.isRootProject()) {
return dbClient.componentDao().getNullableByUuid(session, module.projectUuid());
} else {
return module;
}
}

private Map<String, String> getSettingsFromParents(ComponentDto module, boolean hasScanPerm, DbSession session) {
List<ComponentDto> parents = newArrayList(); List<ComponentDto> parents = newArrayList();
aggregateParentModules(moduleKey, parents, session); aggregateParentModules(module, parents, session);
Collections.reverse(parents); Collections.reverse(parents);


Map<String, String> parentProperties = newHashMap(); Map<String, String> parentProperties = newHashMap();
Expand All @@ -126,11 +134,14 @@ private Map<String, String> getSettingsFromParents(String moduleKey, boolean has
return parentProperties; return parentProperties;
} }


private void aggregateParentModules(String component, List<ComponentDto> parents, DbSession session) { private void aggregateParentModules(ComponentDto component, List<ComponentDto> parents, DbSession session) {
ComponentDto parent = dbClient.componentDao().getParentModuleByKey(component, session); String moduleUuid = component.moduleUuid();
if (parent != null) { if (moduleUuid != null) {
parents.add(parent); ComponentDto parent = dbClient.componentDao().getByUuid(session, moduleUuid);
aggregateParentModules(parent.key(), parents, session); if (parent != null) {
parents.add(parent);
aggregateParentModules(parent, parents, session);
}
} }
} }


Expand Down Expand Up @@ -220,6 +231,20 @@ private void addActiveRules(ProjectReferentials ref) {
} }
} }


private void addManualRules(ProjectReferentials ref) {
Result<Rule> ruleSearchResult = ruleService.search(new RuleQuery().setRepositories(newArrayList(RuleKey.MANUAL_REPOSITORY_KEY)), new QueryContext().setScroll(true)
.setFieldsToReturn(newArrayList(RuleNormalizer.RuleField.KEY.field(), RuleNormalizer.RuleField.NAME.field())));
Iterator<Rule> rules = ruleSearchResult.scroll();
while (rules.hasNext()) {
Rule rule = rules.next();
ref.addActiveRule(new org.sonar.batch.protocol.input.ActiveRule(
RuleKey.MANUAL_REPOSITORY_KEY,
rule.key().rule(),
rule.name(),
null, null, null));
}
}

private void addFileData(DbSession session, ProjectReferentials ref, List<ComponentDto> moduleChildren, String moduleKey) { private void addFileData(DbSession session, ProjectReferentials ref, List<ComponentDto> moduleChildren, String moduleKey) {
Map<String, String> moduleKeysByUuid = newHashMap(); Map<String, String> moduleKeysByUuid = newHashMap();
for (ComponentDto module : moduleChildren) { for (ComponentDto module : moduleChildren) {
Expand Down
Expand Up @@ -83,28 +83,6 @@ public boolean existsById(Long id, DbSession session) {
return mapper(session).countById(id) > 0; return mapper(session).countById(id) > 0;
} }


/**
* Return null only if the component does not exists.
* If the component if a root project, it will return itself.
*/
@CheckForNull
public ComponentDto getNullableRootProjectByKey(String componentKey, DbSession session) {
return mapper(session).selectRootProjectByKey(componentKey);
}

public ComponentDto getRootProjectByKey(String componentKey, DbSession session) {
ComponentDto componentDto = getNullableRootProjectByKey(componentKey, session);
if (componentDto == null) {
throw new NotFoundException(String.format("Root project for project '%s' not found", componentKey));
}
return componentDto;
}

@CheckForNull
public ComponentDto getParentModuleByKey(String componentKey, DbSession session) {
return mapper(session).selectParentModuleByKey(componentKey);
}

public List<ComponentDto> findModulesByProject(String projectKey, DbSession session) { public List<ComponentDto> findModulesByProject(String projectKey, DbSession session) {
return mapper(session).findModulesByProject(projectKey); return mapper(session).findModulesByProject(projectKey);
} }
Expand Down
Expand Up @@ -38,7 +38,6 @@
import org.sonar.api.web.UserRole; import org.sonar.api.web.UserRole;
import org.sonar.core.component.ComponentDto; import org.sonar.core.component.ComponentDto;
import org.sonar.core.issue.DefaultIssueBuilder; import org.sonar.core.issue.DefaultIssueBuilder;
import org.sonar.server.issue.notification.IssueNotifications;
import org.sonar.core.issue.IssueUpdater; import org.sonar.core.issue.IssueUpdater;
import org.sonar.core.issue.db.IssueDao; import org.sonar.core.issue.db.IssueDao;
import org.sonar.core.issue.db.IssueDto; import org.sonar.core.issue.db.IssueDto;
Expand All @@ -52,6 +51,7 @@
import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.issue.actionplan.ActionPlanService; import org.sonar.server.issue.actionplan.ActionPlanService;
import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.index.IssueIndex;
import org.sonar.server.issue.notification.IssueNotifications;
import org.sonar.server.search.FacetValue; import org.sonar.server.search.FacetValue;
import org.sonar.server.search.IndexClient; import org.sonar.server.search.IndexClient;
import org.sonar.server.search.QueryContext; import org.sonar.server.search.QueryContext;
Expand Down Expand Up @@ -251,7 +251,7 @@ public DefaultIssue createManualIssue(String componentKey, RuleKey ruleKey, @Nul
DbSession session = dbClient.openSession(false); DbSession session = dbClient.openSession(false);
try { try {
ComponentDto component = dbClient.componentDao().getByKey(session, componentKey); ComponentDto component = dbClient.componentDao().getByKey(session, componentKey);
ComponentDto project = dbClient.componentDao().getRootProjectByKey(componentKey, session); ComponentDto project = dbClient.componentDao().getByUuid(session, component.projectUuid());


UserSession.get().checkProjectPermission(UserRole.USER, project.getKey()); UserSession.get().checkProjectPermission(UserRole.USER, project.getKey());
if (!ruleKey.isManual()) { if (!ruleKey.isManual()) {
Expand Down
Expand Up @@ -34,7 +34,6 @@
import org.sonar.batch.protocol.input.ProjectReferentials; import org.sonar.batch.protocol.input.ProjectReferentials;
import org.sonar.batch.protocol.input.QProfile; import org.sonar.batch.protocol.input.QProfile;
import org.sonar.core.component.ComponentDto; import org.sonar.core.component.ComponentDto;
import org.sonar.core.component.SnapshotDto;
import org.sonar.core.permission.GlobalPermissions; import org.sonar.core.permission.GlobalPermissions;
import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.DbSession;
import org.sonar.core.properties.PropertyDto; import org.sonar.core.properties.PropertyDto;
Expand All @@ -44,7 +43,6 @@
import org.sonar.core.source.db.FileSourceDao; import org.sonar.core.source.db.FileSourceDao;
import org.sonar.core.source.db.FileSourceDto; import org.sonar.core.source.db.FileSourceDto;
import org.sonar.server.component.ComponentTesting; import org.sonar.server.component.ComponentTesting;
import org.sonar.server.component.SnapshotTesting;
import org.sonar.server.db.DbClient; import org.sonar.server.db.DbClient;
import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.qualityprofile.QProfileName; import org.sonar.server.qualityprofile.QProfileName;
Expand Down Expand Up @@ -296,28 +294,6 @@ public void return_project_with_two_modules() throws Exception {
)); ));
} }


@Test
public void return_provisioned_project_settings() throws Exception {
MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION);

// No snapshot attached on the project -> provisioned project
ComponentDto project = ComponentTesting.newProjectDto();
tester.get(DbClient.class).componentDao().insert(dbSession, project);
addDefaultProfile();

// Project properties
tester.get(DbClient.class).propertiesDao().setProperty(new PropertyDto().setKey("sonar.jira.project.key").setValue("SONAR").setResourceId(project.getId()), dbSession);
tester.get(DbClient.class).propertiesDao().setProperty(new PropertyDto().setKey("sonar.jira.login.secured").setValue("john").setResourceId(project.getId()), dbSession);

dbSession.commit();

ProjectReferentials ref = loader.load(ProjectRepositoryQuery.create().setModuleKey(project.key()));
assertThat(ref.settings(project.key())).isEqualTo(ImmutableMap.of(
"sonar.jira.project.key", "SONAR",
"sonar.jira.login.secured", "john"
));
}

@Test @Test
public void return_sub_module_settings() throws Exception { public void return_sub_module_settings() throws Exception {
MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION);
Expand Down Expand Up @@ -357,24 +333,19 @@ public void return_sub_module_settings_including_settings_from_parent_modules()


ComponentDto project = ComponentTesting.newProjectDto(); ComponentDto project = ComponentTesting.newProjectDto();
tester.get(DbClient.class).componentDao().insert(dbSession, project); tester.get(DbClient.class).componentDao().insert(dbSession, project);
SnapshotDto projectSnapshot = SnapshotTesting.createForProject(project);
tester.get(DbClient.class).snapshotDao().insert(dbSession, projectSnapshot);
addDefaultProfile(); addDefaultProfile();


// Project property // Project property
tester.get(DbClient.class).propertiesDao().setProperty(new PropertyDto().setKey("sonar.jira.project.key").setValue("SONAR").setResourceId(project.getId()), dbSession); tester.get(DbClient.class).propertiesDao().setProperty(new PropertyDto().setKey("sonar.jira.project.key").setValue("SONAR").setResourceId(project.getId()), dbSession);


ComponentDto module = ComponentTesting.newModuleDto(project); ComponentDto module = ComponentTesting.newModuleDto(project);
tester.get(DbClient.class).componentDao().insert(dbSession, module); tester.get(DbClient.class).componentDao().insert(dbSession, module);
SnapshotDto moduleSnapshot = SnapshotTesting.createForComponent(module, projectSnapshot);
tester.get(DbClient.class).snapshotDao().insert(dbSession, moduleSnapshot);


// Module property // Module property
tester.get(DbClient.class).propertiesDao().setProperty(new PropertyDto().setKey("sonar.jira.login.secured").setValue("john").setResourceId(module.getId()), dbSession); tester.get(DbClient.class).propertiesDao().setProperty(new PropertyDto().setKey("sonar.jira.login.secured").setValue("john").setResourceId(module.getId()), dbSession);


ComponentDto subModule = ComponentTesting.newModuleDto(module); ComponentDto subModule = ComponentTesting.newModuleDto(module);
tester.get(DbClient.class).componentDao().insert(dbSession, subModule); tester.get(DbClient.class).componentDao().insert(dbSession, subModule);
tester.get(DbClient.class).snapshotDao().insert(dbSession, SnapshotTesting.createForComponent(subModule, moduleSnapshot));


// Sub module properties // Sub module properties
tester.get(DbClient.class).propertiesDao().setProperty(new PropertyDto().setKey("sonar.coverage.exclusions").setValue("**/*.java").setResourceId(subModule.getId()), dbSession); tester.get(DbClient.class).propertiesDao().setProperty(new PropertyDto().setKey("sonar.coverage.exclusions").setValue("**/*.java").setResourceId(subModule.getId()), dbSession);
Expand All @@ -397,8 +368,6 @@ public void return_sub_module_settings_only_inherited_from_project() throws Exce


ComponentDto project = ComponentTesting.newProjectDto(); ComponentDto project = ComponentTesting.newProjectDto();
tester.get(DbClient.class).componentDao().insert(dbSession, project); tester.get(DbClient.class).componentDao().insert(dbSession, project);
SnapshotDto projectSnapshot = SnapshotTesting.createForProject(project);
tester.get(DbClient.class).snapshotDao().insert(dbSession, projectSnapshot);
addDefaultProfile(); addDefaultProfile();


// Project properties // Project properties
Expand All @@ -408,13 +377,10 @@ public void return_sub_module_settings_only_inherited_from_project() throws Exce


ComponentDto module = ComponentTesting.newModuleDto(project); ComponentDto module = ComponentTesting.newModuleDto(project);
tester.get(DbClient.class).componentDao().insert(dbSession, module); tester.get(DbClient.class).componentDao().insert(dbSession, module);
SnapshotDto moduleSnapshot = SnapshotTesting.createForComponent(module, projectSnapshot);
tester.get(DbClient.class).snapshotDao().insert(dbSession, moduleSnapshot);
// No module property // No module property


ComponentDto subModule = ComponentTesting.newModuleDto(module); ComponentDto subModule = ComponentTesting.newModuleDto(module);
tester.get(DbClient.class).componentDao().insert(dbSession, subModule); tester.get(DbClient.class).componentDao().insert(dbSession, subModule);
tester.get(DbClient.class).snapshotDao().insert(dbSession, SnapshotTesting.createForComponent(subModule, moduleSnapshot));
// No sub module property // No sub module property


dbSession.commit(); dbSession.commit();
Expand All @@ -435,8 +401,6 @@ public void return_sub_module_settings_inherited_from_project_and_module() throw


ComponentDto project = ComponentTesting.newProjectDto(); ComponentDto project = ComponentTesting.newProjectDto();
tester.get(DbClient.class).componentDao().insert(dbSession, project); tester.get(DbClient.class).componentDao().insert(dbSession, project);
SnapshotDto projectSnapshot = SnapshotTesting.createForProject(project);
tester.get(DbClient.class).snapshotDao().insert(dbSession, projectSnapshot);
addDefaultProfile(); addDefaultProfile();


// Project properties // Project properties
Expand All @@ -445,15 +409,12 @@ public void return_sub_module_settings_inherited_from_project_and_module() throw


ComponentDto module = ComponentTesting.newModuleDto(project); ComponentDto module = ComponentTesting.newModuleDto(project);
tester.get(DbClient.class).componentDao().insert(dbSession, module); tester.get(DbClient.class).componentDao().insert(dbSession, module);
SnapshotDto moduleSnapshot = SnapshotTesting.createForComponent(module, projectSnapshot);
tester.get(DbClient.class).snapshotDao().insert(dbSession, moduleSnapshot);


// Module property // Module property
tester.get(DbClient.class).propertiesDao().setProperty(new PropertyDto().setKey("sonar.jira.project.key").setValue("SONAR-SERVER").setResourceId(module.getId()), dbSession); tester.get(DbClient.class).propertiesDao().setProperty(new PropertyDto().setKey("sonar.jira.project.key").setValue("SONAR-SERVER").setResourceId(module.getId()), dbSession);


ComponentDto subModule = ComponentTesting.newModuleDto(module); ComponentDto subModule = ComponentTesting.newModuleDto(module);
tester.get(DbClient.class).componentDao().insert(dbSession, subModule); tester.get(DbClient.class).componentDao().insert(dbSession, subModule);
tester.get(DbClient.class).snapshotDao().insert(dbSession, SnapshotTesting.createForComponent(subModule, moduleSnapshot));
// No sub module property // No sub module property


dbSession.commit(); dbSession.commit();
Expand Down Expand Up @@ -637,10 +598,31 @@ public void return_active_rules() throws Exception {
assertThat(activeRules.get(0).language()).isEqualTo("xoo"); assertThat(activeRules.get(0).language()).isEqualTo("xoo");
assertThat(activeRules.get(0).severity()).isEqualTo("MINOR"); assertThat(activeRules.get(0).severity()).isEqualTo("MINOR");
assertThat(activeRules.get(0).internalKey()).isEqualTo("squid-1"); assertThat(activeRules.get(0).internalKey()).isEqualTo("squid-1");
assertThat(activeRules.get(0).language()).isEqualTo("xoo");
assertThat(activeRules.get(0).params()).isEqualTo(ImmutableMap.of("max", "2")); assertThat(activeRules.get(0).params()).isEqualTo(ImmutableMap.of("max", "2"));
} }


@Test
public void return_manual_rules() throws Exception {
MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION);

ComponentDto project = ComponentTesting.newProjectDto();
tester.get(DbClient.class).componentDao().insert(dbSession, project);
addDefaultProfile();

RuleDto rule = RuleTesting.newManualRule("manualRuleKey").setName("Name manualRuleKey");
tester.get(DbClient.class).ruleDao().insert(dbSession, rule);

dbSession.commit();

ProjectReferentials ref = loader.load(ProjectRepositoryQuery.create().setModuleKey(project.key()));
List<ActiveRule> activeRules = newArrayList(ref.activeRules());
assertThat(activeRules).extracting("repositoryKey").containsOnly(RuleKey.MANUAL_REPOSITORY_KEY);
assertThat(activeRules).extracting("ruleKey").containsOnly("manualRuleKey");
assertThat(activeRules).extracting("name").containsOnly("Name manualRuleKey");
assertThat(activeRules).extracting("language").containsNull();
assertThat(activeRules).extracting("severity").containsNull();
}

@Test @Test
public void fail_if_no_permission() throws Exception { public void fail_if_no_permission() throws Exception {
MockUserSession.set().setLogin("john").setGlobalPermissions(); MockUserSession.set().setLogin("john").setGlobalPermissions();
Expand Down
Expand Up @@ -256,46 +256,6 @@ public void find_modules_by_project() throws Exception {
assertThat(dao.findModulesByProject("unknown", session)).isEmpty(); assertThat(dao.findModulesByProject("unknown", session)).isEmpty();
} }


@Test
public void get_nullable_root_project_by_key() throws Exception {
setupData("multi-modules");

assertThat(dao.getNullableRootProjectByKey("org.struts:struts-data", session).getKey()).isEqualTo("org.struts:struts");
assertThat(dao.getNullableRootProjectByKey("org.struts:struts-core", session).getKey()).isEqualTo("org.struts:struts");

// Root project of a project is itself
assertThat(dao.getNullableRootProjectByKey("org.struts:struts", session).getKey()).isEqualTo("org.struts:struts");

assertThat(dao.getNullableRootProjectByKey("unknown", session)).isNull();
}

@Test
public void get_root_project_by_key() throws Exception {
setupData("multi-modules");

assertThat(dao.getRootProjectByKey("org.struts:struts-data", session).getKey()).isEqualTo("org.struts:struts");
assertThat(dao.getRootProjectByKey("org.struts:struts-core", session).getKey()).isEqualTo("org.struts:struts");

// Root project of a project is itself
assertThat(dao.getRootProjectByKey("org.struts:struts", session).getKey()).isEqualTo("org.struts:struts");
}

@Test(expected = NotFoundException.class)
public void get_root_project_by_key_on_unknown_project() throws Exception {
dao.getRootProjectByKey("unknown", session);
}

@Test
public void get_parent_module_by_key() throws Exception {
setupData("multi-modules");

assertThat(dao.getParentModuleByKey("org.struts:struts-data", session).getKey()).isEqualTo("org.struts:struts-core");
assertThat(dao.getParentModuleByKey("org.struts:struts-core", session).getKey()).isEqualTo("org.struts:struts");
assertThat(dao.getParentModuleByKey("org.struts:struts", session)).isNull();

assertThat(dao.getParentModuleByKey("unknown", session)).isNull();
}

@Test @Test
public void find_sub_projects_by_component_keys() throws Exception { public void find_sub_projects_by_component_keys() throws Exception {
setupData("multi-modules"); setupData("multi-modules");
Expand Down
Expand Up @@ -98,7 +98,7 @@ public static RuleDto newCustomRule(RuleDto templateRule){
public static RuleDto newManualRule(String manualKey){ public static RuleDto newManualRule(String manualKey){
return new RuleDto().setRuleKey(manualKey) return new RuleDto().setRuleKey(manualKey)
.setName("Name " + manualKey) .setName("Name " + manualKey)
.setRepositoryKey("manual") .setRepositoryKey(RuleKey.MANUAL_REPOSITORY_KEY)
.setDescription("Description " + manualKey) .setDescription("Description " + manualKey)
.setStatus(RuleStatus.READY); .setStatus(RuleStatus.READY);
} }
Expand Down

0 comments on commit d34d826

Please sign in to comment.