From ac076a048acaadc3945b76da6ad282c60fcd7096 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Wed, 22 May 2013 09:42:17 +0200 Subject: [PATCH] SONAR-4301 Add project Id on issues table --- .../sonar/batch/issue/ScanIssueStorage.java | 20 ++- .../batch/issue/ScanIssueStorageTest.java | 31 ++++- ...oad_component_id_if_unknown_component.xml} | 0 .../org/sonar/core/issue/DefaultIssue.java | 11 ++ .../sonar/core/issue/DefaultIssueBuilder.java | 10 ++ .../org/sonar/core/issue/db/IssueDto.java | 28 ++++- .../org/sonar/core/issue/db/IssueStorage.java | 5 +- .../core/persistence/DatabaseVersion.java | 2 +- .../org/sonar/core/issue/db/IssueMapper.xml | 25 ++-- .../org/sonar/core/persistence/rows-h2.sql | 4 +- .../org/sonar/core/persistence/schema-h2.ddl | 3 + .../org/sonar/core/issue/db/IssueDaoTest.java | 3 + .../org/sonar/core/issue/db/IssueDtoTest.java | 7 +- .../sonar/core/issue/db/IssueMapperTest.java | 2 + .../sonar/core/issue/db/IssueStorageTest.java | 5 + .../db/IssueDaoTest/should_select_all.xml | 3 + .../should_select_by_action_plans.xml | 3 + .../should_select_by_assigned.xml | 3 + .../should_select_by_component_root.xml | 2 + .../should_select_by_date_creation.xml | 2 + .../db/IssueDaoTest/should_select_by_ids.xml | 3 + .../db/IssueDaoTest/should_select_by_key.xml | 1 + .../IssueDaoTest/should_select_by_planned.xml | 3 + .../IssueDaoTest/should_select_by_query.xml | 1 + .../should_select_by_resolved.xml | 3 + .../IssueDaoTest/should_select_by_rules.xml | 3 + .../should_select_issue_and_component_ids.xml | 3 + .../should_select_issue_and_project_ids.xml | 3 + .../should_select_open_issues.xml | 3 + ...ect_returned_sorted_result_by_assignee.xml | 3 + ...t_returned_sorted_result_by_close_date.xml | 3 + ...eturned_sorted_result_by_creation_date.xml | 3 + ...ect_returned_sorted_result_by_severity.xml | 3 + ...elect_returned_sorted_result_by_status.xml | 3 + ..._returned_sorted_result_by_update_date.xml | 3 + .../db/IssueMapperTest/testInsert-result.xml | 1 + .../db/IssueMapperTest/testUpdate-result.xml | 20 +-- .../issue/db/IssueMapperTest/testUpdate.xml | 20 +-- .../should_insert_new_issues-result.xml | 1 + .../should_update_issues-result.xml | 1 + .../IssueStorageTest/should_update_issues.xml | 1 + .../server/issue/ServerIssueStorage.java | 9 ++ ..._create_issues.rb => 398_create_issues.rb} | 2 + ...changes.rb => 399_create_issue_changes.rb} | 0 ...s.rb => 400_delete_review_duplications.rb} | 0 ...rb => 401_migrate_violations_to_issues.rb} | 0 .../server/issue/ServerIssueStorageTest.java | 114 ++++++++++++++++++ ...load_component_id_if_unknown_component.xml | 1 + ...o_load_project_id_if_unknown_component.xml | 1 + .../should_load_component_id_from_db.xml | 3 + .../should_load_project_id_from_db.xml | 7 ++ 51 files changed, 332 insertions(+), 59 deletions(-) rename sonar-batch/src/test/resources/org/sonar/batch/issue/ScanIssueStorageTest/{should_fail_if_unknown_component.xml => should_fail_to_load_component_id_if_unknown_component.xml} (100%) rename sonar-server/src/main/webapp/WEB-INF/db/migrate/{395_create_issues.rb => 398_create_issues.rb} (95%) rename sonar-server/src/main/webapp/WEB-INF/db/migrate/{396_create_issue_changes.rb => 399_create_issue_changes.rb} (100%) rename sonar-server/src/main/webapp/WEB-INF/db/migrate/{398_delete_review_duplications.rb => 400_delete_review_duplications.rb} (100%) rename sonar-server/src/main/webapp/WEB-INF/db/migrate/{399_migrate_violations_to_issues.rb => 401_migrate_violations_to_issues.rb} (100%) create mode 100644 sonar-server/src/test/java/org/sonar/server/issue/ServerIssueStorageTest.java create mode 100644 sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_fail_to_load_component_id_if_unknown_component.xml create mode 100644 sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_fail_to_load_project_id_if_unknown_component.xml create mode 100644 sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_load_component_id_from_db.xml create mode 100644 sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_load_project_id_from_db.xml diff --git a/sonar-batch/src/main/java/org/sonar/batch/issue/ScanIssueStorage.java b/sonar-batch/src/main/java/org/sonar/batch/issue/ScanIssueStorage.java index 124d5f2137b..13f12576c5b 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/issue/ScanIssueStorage.java +++ b/sonar-batch/src/main/java/org/sonar/batch/issue/ScanIssueStorage.java @@ -43,7 +43,7 @@ public class ScanIssueStorage extends IssueStorage implements BatchComponent { @Override protected int componentId(DefaultIssue issue) { - Snapshot snapshot = snapshotCache.get(issue.componentKey()); + Snapshot snapshot = getSnapshot(issue); if (snapshot != null) { return snapshot.getResourceId(); } @@ -55,4 +55,22 @@ public class ScanIssueStorage extends IssueStorage implements BatchComponent { } return resourceDto.getId().intValue(); } + + @Override + protected int projectId(DefaultIssue issue) { + Snapshot snapshot = getSnapshot(issue); + if (snapshot != null) { + return snapshot.getRootProjectId(); + } + throw new IllegalStateException("Unknown component: " + issue.componentKey()); + } + + private Snapshot getSnapshot(DefaultIssue issue) { + Snapshot snapshot = snapshotCache.get(issue.componentKey()); + if (snapshot != null) { + return snapshot; + } + return null; + } + } diff --git a/sonar-batch/src/test/java/org/sonar/batch/issue/ScanIssueStorageTest.java b/sonar-batch/src/test/java/org/sonar/batch/issue/ScanIssueStorageTest.java index e805a06b68c..8bb35616a75 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/issue/ScanIssueStorageTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/issue/ScanIssueStorageTest.java @@ -62,8 +62,8 @@ public class ScanIssueStorageTest extends AbstractDaoTestCase { } @Test - public void should_fail_if_unknown_component() throws Exception { - setupData("should_fail_if_unknown_component"); + public void should_fail_to_load_component_id_if_unknown_component() throws Exception { + setupData("should_fail_to_load_component_id_if_unknown_component"); SnapshotCache snapshotCache = mock(SnapshotCache.class); when(snapshotCache.get("struts:Action.java")).thenReturn(null); @@ -76,6 +76,31 @@ public class ScanIssueStorageTest extends AbstractDaoTestCase { } } + @Test + public void should_load_project_id() throws Exception { + SnapshotCache snapshotCache = mock(SnapshotCache.class); + when(snapshotCache.get("struts:Action.java")).thenReturn(new Snapshot().setResourceId(123).setRootProjectId(100)); + + ScanIssueStorage storage = new ScanIssueStorage(getMyBatis(), new FakeRuleFinder(), snapshotCache, new ResourceDao(getMyBatis())); + int projectId = storage.projectId(new DefaultIssue().setComponentKey("struts:Action.java")); + + assertThat(projectId).isEqualTo(100); + } + + @Test + public void should_fail_to_load_project_id_if_unknown_component() throws Exception { + SnapshotCache snapshotCache = mock(SnapshotCache.class); + when(snapshotCache.get("struts:Action.java")).thenReturn(null); + + ScanIssueStorage storage = new ScanIssueStorage(getMyBatis(), new FakeRuleFinder(), snapshotCache, new ResourceDao(getMyBatis())); + try { + storage.projectId(new DefaultIssue().setComponentKey("struts:Action.java")); + fail(); + } catch (Exception e) { + assertThat(e).hasMessage("Unknown component: struts:Action.java"); + } + } + static class FakeRuleFinder implements RuleFinder { @Override @@ -90,7 +115,7 @@ public class ScanIssueStorageTest extends AbstractDaoTestCase { @Override public Rule findByKey(RuleKey key) { - Rule rule = new Rule().setRepositoryKey(key.repository()).setKey(key.rule()); + Rule rule = Rule.create().setRepositoryKey(key.repository()).setKey(key.rule()); rule.setId(200); return rule; } diff --git a/sonar-batch/src/test/resources/org/sonar/batch/issue/ScanIssueStorageTest/should_fail_if_unknown_component.xml b/sonar-batch/src/test/resources/org/sonar/batch/issue/ScanIssueStorageTest/should_fail_to_load_component_id_if_unknown_component.xml similarity index 100% rename from sonar-batch/src/test/resources/org/sonar/batch/issue/ScanIssueStorageTest/should_fail_if_unknown_component.xml rename to sonar-batch/src/test/resources/org/sonar/batch/issue/ScanIssueStorageTest/should_fail_to_load_component_id_if_unknown_component.xml diff --git a/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssue.java b/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssue.java index 5f2ba2f22f8..a020f13445b 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssue.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssue.java @@ -35,6 +35,7 @@ import org.sonar.api.rule.Severity; import javax.annotation.CheckForNull; import javax.annotation.Nullable; + import java.io.Serializable; import java.util.Collections; import java.util.Date; @@ -45,6 +46,7 @@ public class DefaultIssue implements Issue { private String key; private String componentKey; + private String projectKey; private RuleKey ruleKey; private String severity; private boolean manualSeverity = false; @@ -97,6 +99,15 @@ public class DefaultIssue implements Issue { return this; } + public String projectKey() { + return projectKey; + } + + public DefaultIssue setProjectKey(String projectKey) { + this.projectKey = projectKey; + return this; + } + public RuleKey ruleKey() { return ruleKey; } diff --git a/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssueBuilder.java b/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssueBuilder.java index 88847d97804..0546585f7aa 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssueBuilder.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssueBuilder.java @@ -29,6 +29,7 @@ import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.Severity; import javax.annotation.Nullable; + import java.util.Date; import java.util.Map; import java.util.UUID; @@ -36,6 +37,7 @@ import java.util.UUID; public class DefaultIssueBuilder implements Issuable.IssueBuilder { private String componentKey; + private String projectKey; private RuleKey ruleKey; private Integer line; private String message; @@ -54,6 +56,11 @@ public class DefaultIssueBuilder implements Issuable.IssueBuilder { return this; } + public DefaultIssueBuilder projectKey(String projectKey) { + this.projectKey = projectKey; + return this; + } + public DefaultIssueBuilder createdDate(@Nullable Date date) { this.createdDate = date; return this; @@ -107,6 +114,8 @@ public class DefaultIssueBuilder implements Issuable.IssueBuilder { @Override public DefaultIssue build() { Preconditions.checkNotNull(componentKey, "Component key must be set"); + // TODO + //Preconditions.checkNotNull(projectKey, "Project key must be set"); Preconditions.checkNotNull(ruleKey, "Rule key must be set"); DefaultIssue issue = new DefaultIssue(); @@ -119,6 +128,7 @@ public class DefaultIssueBuilder implements Issuable.IssueBuilder { issue.setCreationDate(date); issue.setUpdateDate(date); issue.setComponentKey(componentKey); + issue.setProjectKey(projectKey); issue.setRuleKey(ruleKey); issue.setMessage(message); issue.setSeverity(Objects.firstNonNull(severity, Severity.MAJOR)); diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDto.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDto.java index c79b4837172..d6179b68b82 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDto.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueDto.java @@ -29,6 +29,7 @@ import org.sonar.core.issue.DefaultIssue; import javax.annotation.CheckForNull; import javax.annotation.Nullable; + import java.util.Date; /** @@ -39,6 +40,7 @@ public final class IssueDto { private Long id; private String kee; private Integer resourceId; + private Integer projectId; private Integer ruleId; private String severity; private boolean manualSeverity; @@ -67,6 +69,7 @@ public final class IssueDto { private transient String ruleKey; private transient String ruleRepo; private transient String componentKey; + private transient String projectKey; public Long getId() { return id; @@ -95,6 +98,15 @@ public final class IssueDto { return this; } + public Integer getProjectId() { + return projectId; + } + + public IssueDto setProjectId(Integer projectId) { + this.projectId = projectId; + return this; + } + public Integer getRuleId() { return ruleId; } @@ -288,6 +300,10 @@ public final class IssueDto { return componentKey; } + public String getProjectKey() { + return projectKey; + } + /** * Only for unit tests */ @@ -305,12 +321,20 @@ public final class IssueDto { return this; } + /** + * Only for unit tests + */ + public IssueDto setProjectKey_unit_test_only(String projectKey) { + this.projectKey = projectKey; + return this; + } + @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); } - public static IssueDto toDtoForInsert(DefaultIssue issue, Integer componentId, Integer ruleId, Date now) { + public static IssueDto toDtoForInsert(DefaultIssue issue, Integer componentId, Integer projectId, Integer ruleId, Date now) { return new IssueDto() .setKee(issue.key()) .setLine(issue.line()) @@ -325,6 +349,7 @@ public final class IssueDto { .setAssignee(issue.assignee()) .setRuleId(ruleId) .setResourceId(componentId) + .setProjectId(projectId) .setActionPlanKey(issue.actionPlanKey()) .setIssueAttributes(issue.attributes() != null ? KeyValueFormat.format(issue.attributes()) : "") .setAuthorLogin(issue.authorLogin()) @@ -372,6 +397,7 @@ public final class IssueDto { issue.setAssignee(assignee); issue.setAttributes(KeyValueFormat.parse(Objects.firstNonNull(issueAttributes, ""))); issue.setComponentKey(componentKey); + issue.setProjectKey(projectKey); issue.setManualSeverity(manualSeverity); issue.setRuleKey(RuleKey.of(ruleRepo, ruleKey)); issue.setActionPlanKey(actionPlanKey); diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueStorage.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueStorage.java index e38c4198eec..f89b426f73f 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueStorage.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueStorage.java @@ -58,8 +58,9 @@ public abstract class IssueStorage { for (DefaultIssue issue : issues) { if (issue.isNew()) { int componentId = componentId(issue); + int projectId = projectId(issue); int ruleId = ruleId(issue); - IssueDto dto = IssueDto.toDtoForInsert(issue, componentId, ruleId, now); + IssueDto dto = IssueDto.toDtoForInsert(issue, componentId, projectId, ruleId, now); issueMapper.insert(dto); } else if (issue.isChanged()) { @@ -96,6 +97,8 @@ public abstract class IssueStorage { protected abstract int componentId(DefaultIssue issue); + protected abstract int projectId(DefaultIssue issue); + private int ruleId(Issue issue) { Rule rule = ruleFinder.findByKey(issue.ruleKey()); if (rule == null) { diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java index 39fdd04cd98..3ff9b2c536f 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java @@ -32,7 +32,7 @@ import java.util.List; */ public class DatabaseVersion implements BatchComponent, ServerComponent { - public static final int LAST_VERSION = 399; + public static final int LAST_VERSION = 401; public static enum Status { UP_TO_DATE, REQUIRES_UPGRADE, REQUIRES_DOWNGRADE, FRESH_INSTALL diff --git a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml index 3023ba9b728..4b27aa1f2dd 100644 --- a/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/issue/db/IssueMapper.xml @@ -8,6 +8,7 @@ i.id, i.kee as kee, i.resource_id as resourceId, + i.project_id as projectId, i.rule_id as ruleId, i.action_plan_key as actionPlanKey, i.severity as severity, @@ -29,7 +30,8 @@ i.updated_at as updatedAt, r.plugin_rule_key as ruleKey, r.plugin_name as ruleRepo, - p.kee as componentKey + p.kee as componentKey, + root.kee as projectKey @@ -67,11 +69,11 @@ - INSERT INTO issues (kee, resource_id, rule_id, action_plan_key, severity, manual_severity, + INSERT INTO issues (kee, resource_id, project_id, rule_id, action_plan_key, severity, manual_severity, message, line, effort_to_fix, status, resolution, checksum, reporter, assignee, author_login, issue_attributes, issue_creation_date, issue_update_date, issue_close_date, created_at, updated_at) - VALUES (#{kee}, #{resourceId}, #{ruleId}, #{actionPlanKey}, #{severity}, #{manualSeverity}, + VALUES (#{kee}, #{resourceId}, #{projectId}, #{ruleId}, #{actionPlanKey}, #{severity}, #{manualSeverity}, #{message}, #{line}, #{effortToFix}, #{status}, #{resolution}, #{checksum}, #{reporter}, #{assignee}, #{authorLogin}, #{issueAttributes}, #{issueCreationDate}, #{issueUpdateDate}, #{issueCloseDate}, #{createdAt}, #{updatedAt}) @@ -83,11 +85,11 @@ select issues_seq.NEXTVAL from DUAL - INSERT INTO issues (id, kee, resource_id, rule_id, action_plan_key, severity, manual_severity, + INSERT INTO issues (id, kee, resource_id, project_id, rule_id, action_plan_key, severity, manual_severity, message, line, effort_to_fix, status, resolution, checksum, reporter, assignee, author_login, issue_attributes, issue_creation_date, issue_update_date, issue_close_date, created_at, updated_at) - VALUES (#{id}, #{kee}, #{resourceId}, #{ruleId}, #{actionPlanKey}, #{severity}, #{manualSeverity}, + VALUES (#{id}, #{kee}, #{resourceId}, #{projectId}, #{ruleId}, #{actionPlanKey}, #{severity}, #{manualSeverity}, #{message}, #{line}, #{effortToFix}, #{status}, #{resolution}, #{checksum}, #{reporter}, #{assignee}, #{authorLogin}, #{issueAttributes}, #{issueCreationDate}, #{issueUpdateDate}, #{issueCloseDate}, #{createdAt}, #{updatedAt}) @@ -121,24 +123,25 @@ @@ -169,7 +173,7 @@ - from issues i, projects p, rules r + from issues i, projects p, rules r, projects root , projects rootprojects, snapshots rootsnapshots, snapshots s @@ -178,6 +182,7 @@ and i.resource_id=p.id + and i.project_id=root.id and i.rule_id=r.id and rootprojects.enabled=${_true} diff --git a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql index a6aaa812b52..59ecbe41c2d 100644 --- a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql +++ b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-h2.sql @@ -159,11 +159,11 @@ INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('388'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('391'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('392'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('394'); -INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('395'); -INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('396'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('397'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('398'); INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('399'); +INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('400'); +INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('401'); INSERT INTO USERS(ID, LOGIN, NAME, EMAIL, CRYPTED_PASSWORD, SALT, CREATED_AT, UPDATED_AT, REMEMBER_TOKEN, REMEMBER_TOKEN_EXPIRES_AT) VALUES (1, 'admin', 'Administrator', '', 'a373a0e667abb2604c1fd571eb4ad47fe8cc0878', '48bc4b0d93179b5103fd3885ea9119498e9d161b', '2011-09-26 22:27:48.0', '2011-09-26 22:27:48.0', null, null); ALTER TABLE USERS ALTER COLUMN ID RESTART WITH 2; diff --git a/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl b/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl index 79018bd010c..8f5fb36dc4a 100644 --- a/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl +++ b/sonar-core/src/main/resources/org/sonar/core/persistence/schema-h2.ddl @@ -520,6 +520,7 @@ CREATE TABLE "ISSUES" ( "ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1), "KEE" VARCHAR(50) UNIQUE NOT NULL, "RESOURCE_ID" INTEGER NOT NULL, + "PROJECT_ID" INTEGER, "RULE_ID" INTEGER, "SEVERITY" VARCHAR(10), "MANUAL_SEVERITY" BOOLEAN NOT NULL, @@ -678,6 +679,8 @@ CREATE UNIQUE INDEX "ISSUES_KEE" ON "ISSUES" ("KEE"); CREATE INDEX "ISSUES_RESOURCE_ID" ON "ISSUES" ("RESOURCE_ID"); +CREATE INDEX "ISSUES_PROJECT_ID" ON "ISSUES" ("PROJECT_ID"); + CREATE INDEX "ISSUES_RULE_ID" ON "ISSUES" ("RULE_ID"); CREATE INDEX "ISSUES_SEVERITY" ON "ISSUES" ("SEVERITY"); diff --git a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDaoTest.java b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDaoTest.java index 8ed5fdc2384..6f8d460f0c1 100644 --- a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDaoTest.java +++ b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDaoTest.java @@ -50,6 +50,7 @@ public class IssueDaoTest extends AbstractDaoTestCase { assertThat(issue.getKee()).isEqualTo("ABCDE"); assertThat(issue.getId()).isEqualTo(100L); assertThat(issue.getResourceId()).isEqualTo(401); + assertThat(issue.getProjectId()).isEqualTo(399); assertThat(issue.getRuleId()).isEqualTo(500); assertThat(issue.getSeverity()).isEqualTo("BLOCKER"); assertThat(issue.isManualSeverity()).isFalse(); @@ -71,6 +72,7 @@ public class IssueDaoTest extends AbstractDaoTestCase { assertThat(issue.getRuleRepo()).isEqualTo("squid"); assertThat(issue.getRule()).isEqualTo("AvoidCycle"); assertThat(issue.getComponentKey()).isEqualTo("Action.java"); + assertThat(issue.getProjectKey()).isEqualTo("struts"); } @Test @@ -94,6 +96,7 @@ public class IssueDaoTest extends AbstractDaoTestCase { assertThat(issue.getRuleRepo()).isEqualTo("squid"); assertThat(issue.getRule()).isEqualTo("AvoidCycle"); assertThat(issue.getComponentKey()).isEqualTo("Action.java"); + assertThat(issue.getProjectKey()).isEqualTo("struts"); } @Test diff --git a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDtoTest.java b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDtoTest.java index a935fbcdcbd..339473eb050 100644 --- a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDtoTest.java +++ b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueDtoTest.java @@ -57,8 +57,10 @@ public class IssueDtoTest { .setKee("100") .setRuleId(1) .setRuleKey_unit_test_only("squid", "AvoidCycle") - .setComponentKey_unit_test_only("component-key") + .setComponentKey_unit_test_only("org.sonar.sample:Sample") + .setProjectKey_unit_test_only("org.sonar.sample") .setResourceId(1) + .setProjectId(1) .setStatus(Issue.STATUS_CLOSED) .setResolution(Issue.RESOLUTION_FALSE_POSITIVE) .setEffortToFix(15.0) @@ -77,7 +79,8 @@ public class IssueDtoTest { DefaultIssue issue = dto.toDefaultIssue(); assertThat(issue.key()).isEqualTo("100"); assertThat(issue.ruleKey().toString()).isEqualTo("squid:AvoidCycle"); - assertThat(issue.componentKey()).isEqualTo("component-key"); + assertThat(issue.componentKey()).isEqualTo("org.sonar.sample:Sample"); + assertThat(issue.projectKey()).isEqualTo("org.sonar.sample"); assertThat(issue.status()).isEqualTo(Issue.STATUS_CLOSED); assertThat(issue.resolution()).isEqualTo(Issue.RESOLUTION_FALSE_POSITIVE); assertThat(issue.effortToFix()).isEqualTo(15.0); diff --git a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueMapperTest.java b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueMapperTest.java index 942514f5411..f6844202bf3 100644 --- a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueMapperTest.java +++ b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueMapperTest.java @@ -40,6 +40,7 @@ public class IssueMapperTest extends AbstractDaoTestCase { public void testInsert() throws Exception { IssueDto dto = new IssueDto(); dto.setResourceId(123); + dto.setProjectId(100); dto.setRuleId(200); dto.setKee("ABCDE"); dto.setLine(500); @@ -73,6 +74,7 @@ public class IssueMapperTest extends AbstractDaoTestCase { IssueDto dto = new IssueDto(); dto.setResourceId(123); + dto.setProjectId(100); dto.setRuleId(200); dto.setKee("ABCDE"); dto.setLine(500); diff --git a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueStorageTest.java b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueStorageTest.java index fd7f8f58b1e..47cd904bff1 100644 --- a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueStorageTest.java +++ b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueStorageTest.java @@ -118,6 +118,11 @@ public class IssueStorageTest extends AbstractDaoTestCase { protected int componentId(DefaultIssue issue) { return 100; } + + @Override + protected int projectId(DefaultIssue issue) { + return 10; + } } static class FakeRuleFinder implements RuleFinder { diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_all.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_all.xml index 1536bfcd739..dc88f9291bf 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_all.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_all.xml @@ -5,6 +5,7 @@ id="100" kee="ABCDE-1" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -29,6 +30,7 @@ id="101" kee="ABCDE-2" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -55,6 +57,7 @@ id="102" kee="ABCDE-3" resource_id="401" + project_id="399" rule_id="501" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_action_plans.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_action_plans.xml index ca8d6ea634f..6c3452b6e17 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_action_plans.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_action_plans.xml @@ -4,6 +4,7 @@ id="100" kee="ABCDE-1" resource_id="401" + project_id="399" rule_id="500" action_plan_key="ABC" severity="BLOCKER" @@ -29,6 +30,7 @@ id="101" kee="ABCDE-2" resource_id="401" + project_id="399" rule_id="500" action_plan_key="ABC" severity="BLOCKER" @@ -55,6 +57,7 @@ id="102" kee="ABCDE-3" resource_id="401" + project_id="399" rule_id="501" action_plan_key="DEF" severity="BLOCKER" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_assigned.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_assigned.xml index e0ab0887a43..8663285f41c 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_assigned.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_assigned.xml @@ -5,6 +5,7 @@ id="100" kee="ABCDE-1" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -29,6 +30,7 @@ id="101" kee="ABCDE-2" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -55,6 +57,7 @@ id="102" kee="ABCDE-3" resource_id="401" + project_id="399" rule_id="501" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_component_root.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_component_root.xml index 72522e55360..ee35e68f6b1 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_component_root.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_component_root.xml @@ -4,6 +4,7 @@ id="100" kee="100" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -28,6 +29,7 @@ id="101" kee="101" resource_id="402" + project_id="399" rule_id="501" severity="MAJOR" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_date_creation.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_date_creation.xml index be585789722..ed7532a0666 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_date_creation.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_date_creation.xml @@ -4,6 +4,7 @@ id="100" kee="ABCDE-1" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -28,6 +29,7 @@ id="101" kee="ABCDE-2" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_ids.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_ids.xml index 986c069e9e4..33530589537 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_ids.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_ids.xml @@ -5,6 +5,7 @@ id="100" kee="ABCDE-1" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -29,6 +30,7 @@ id="101" kee="ABCDE-2" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -55,6 +57,7 @@ id="102" kee="ABCDE" resource_id="401" + project_id="399" rule_id="501" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_key.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_key.xml index 853f580260f..705a0cb90fc 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_key.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_key.xml @@ -4,6 +4,7 @@ id="100" kee="ABCDE" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_planned.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_planned.xml index 8ab824158e0..58f34c08ccf 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_planned.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_planned.xml @@ -4,6 +4,7 @@ id="100" kee="ABCDE" resource_id="401" + project_id="399" rule_id="500" action_plan_key="ABC" severity="BLOCKER" @@ -29,6 +30,7 @@ id="101" kee="ABCDF" resource_id="401" + project_id="399" rule_id="500" action_plan_key="ABC" severity="BLOCKER" @@ -55,6 +57,7 @@ id="102" kee="ABCDG" resource_id="401" + project_id="399" rule_id="501" action_plan_key="[null]" severity="BLOCKER" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_query.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_query.xml index 8c885378061..cb897cd64ca 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_query.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_query.xml @@ -4,6 +4,7 @@ id="100" kee="ABCDE" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_resolved.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_resolved.xml index aa6105074d7..2134f045362 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_resolved.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_resolved.xml @@ -4,6 +4,7 @@ id="100" kee="ABCDE-1" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -28,6 +29,7 @@ id="101" kee="ABCDE-2" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -52,6 +54,7 @@ id="102" kee="ABCDE-3" resource_id="401" + project_id="399" rule_id="501" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_rules.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_rules.xml index 746d55ec021..24f222c2fa6 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_rules.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_by_rules.xml @@ -5,6 +5,7 @@ id="100" kee="ABCDE-1" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -29,6 +30,7 @@ id="101" kee="ABCDE-2" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -55,6 +57,7 @@ id="102" kee="ABCDE-3" resource_id="401" + project_id="399" rule_id="501" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_issue_and_component_ids.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_issue_and_component_ids.xml index 1536bfcd739..dc88f9291bf 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_issue_and_component_ids.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_issue_and_component_ids.xml @@ -5,6 +5,7 @@ id="100" kee="ABCDE-1" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -29,6 +30,7 @@ id="101" kee="ABCDE-2" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -55,6 +57,7 @@ id="102" kee="ABCDE-3" resource_id="401" + project_id="399" rule_id="501" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_issue_and_project_ids.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_issue_and_project_ids.xml index 23853c9aa95..b581467050c 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_issue_and_project_ids.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_issue_and_project_ids.xml @@ -5,6 +5,7 @@ id="100" kee="ABCDE-1" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -29,6 +30,7 @@ id="101" kee="ABCDE-2" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -55,6 +57,7 @@ id="102" kee="ABCDE-3" resource_id="401" + project_id="399" rule_id="501" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_open_issues.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_open_issues.xml index 2314297dc66..a7be9512891 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_open_issues.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_open_issues.xml @@ -4,6 +4,7 @@ id="100" kee="100" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -28,6 +29,7 @@ id="101" kee="101" resource_id="402" + project_id="399" rule_id="501" severity="MAJOR" manual_severity="[false]" @@ -52,6 +54,7 @@ id="102" kee="102" resource_id="402" + project_id="399" rule_id="501" severity="MAJOR" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_assignee.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_assignee.xml index 2e5e66e3bbb..ffebd21b94d 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_assignee.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_assignee.xml @@ -5,6 +5,7 @@ id="100" kee="ABCDE-1" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -29,6 +30,7 @@ id="101" kee="ABCDE-2" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -55,6 +57,7 @@ id="102" kee="ABCDE-3" resource_id="401" + project_id="399" rule_id="501" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_close_date.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_close_date.xml index 4de78ef752e..34af2900385 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_close_date.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_close_date.xml @@ -5,6 +5,7 @@ id="100" kee="ABCDE-1" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -29,6 +30,7 @@ id="101" kee="ABCDE-2" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -55,6 +57,7 @@ id="102" kee="ABCDE-3" resource_id="401" + project_id="399" rule_id="501" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_creation_date.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_creation_date.xml index 4af4496b6ee..0662d409941 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_creation_date.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_creation_date.xml @@ -4,6 +4,7 @@ id="100" kee="ABCDE-1" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -28,6 +29,7 @@ id="101" kee="ABCDE-2" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -52,6 +54,7 @@ id="102" kee="ABCDE-3" resource_id="401" + project_id="399" rule_id="501" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_severity.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_severity.xml index ae7bf813659..c86cba753bd 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_severity.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_severity.xml @@ -4,6 +4,7 @@ id="100" kee="ABCDE-1" resource_id="401" + project_id="399" rule_id="500" severity="MINOR" manual_severity="[false]" @@ -28,6 +29,7 @@ id="101" kee="ABCDE-2" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -52,6 +54,7 @@ id="102" kee="ABCDE-3" resource_id="401" + project_id="399" rule_id="501" severity="MAJOR" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_status.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_status.xml index 963dfcfa98d..8c81f058bc2 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_status.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_status.xml @@ -5,6 +5,7 @@ id="100" kee="ABCDE-1" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -29,6 +30,7 @@ id="101" kee="ABCDE-2" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -55,6 +57,7 @@ id="102" kee="ABCDE-3" resource_id="401" + project_id="399" rule_id="501" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_update_date.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_update_date.xml index 0fe27358625..32dab2f3371 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_update_date.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueDaoTest/should_select_returned_sorted_result_by_update_date.xml @@ -4,6 +4,7 @@ id="100" kee="ABCDE-1" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -28,6 +29,7 @@ id="101" kee="ABCDE-2" resource_id="401" + project_id="399" rule_id="500" severity="BLOCKER" manual_severity="[false]" @@ -52,6 +54,7 @@ id="102" kee="ABCDE-3" resource_id="401" + project_id="399" rule_id="501" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueMapperTest/testInsert-result.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueMapperTest/testInsert-result.xml index 9bf0949ff96..bed99059123 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueMapperTest/testInsert-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueMapperTest/testInsert-result.xml @@ -3,6 +3,7 @@ id="100" kee="ABCDE" resource_id="123" + project_id="100" rule_id="200" severity="BLOCKER" manual_severity="[false]" diff --git a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueMapperTest/testUpdate-result.xml b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueMapperTest/testUpdate-result.xml index 7b426decdde..ee9bb753acd 100644 --- a/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueMapperTest/testUpdate-result.xml +++ b/sonar-core/src/test/resources/org/sonar/core/issue/db/IssueMapperTest/testUpdate-result.xml @@ -1,27 +1,9 @@ - false, :limit => 50 t.column :resource_id, :integer, :null => false + t.column :project_id, :integer, :null => true t.column :rule_id, :integer, :null => true t.column :severity, :string, :null => true, :limit => 10 t.column :manual_severity, :boolean, :null => false @@ -54,6 +55,7 @@ class CreateIssues < ActiveRecord::Migration add_index :issues, :kee, :name => 'issues_kee', :unique => true add_index :issues, :resource_id, :name => 'issues_resource_id' + add_index :issues, :project_id, :name => 'issues_project_id' add_index :issues, :rule_id, :name => 'issues_rule_id' add_index :issues, :severity, :name => 'issues_severity' add_index :issues, :status, :name => 'issues_status' diff --git a/sonar-server/src/main/webapp/WEB-INF/db/migrate/396_create_issue_changes.rb b/sonar-server/src/main/webapp/WEB-INF/db/migrate/399_create_issue_changes.rb similarity index 100% rename from sonar-server/src/main/webapp/WEB-INF/db/migrate/396_create_issue_changes.rb rename to sonar-server/src/main/webapp/WEB-INF/db/migrate/399_create_issue_changes.rb diff --git a/sonar-server/src/main/webapp/WEB-INF/db/migrate/398_delete_review_duplications.rb b/sonar-server/src/main/webapp/WEB-INF/db/migrate/400_delete_review_duplications.rb similarity index 100% rename from sonar-server/src/main/webapp/WEB-INF/db/migrate/398_delete_review_duplications.rb rename to sonar-server/src/main/webapp/WEB-INF/db/migrate/400_delete_review_duplications.rb diff --git a/sonar-server/src/main/webapp/WEB-INF/db/migrate/399_migrate_violations_to_issues.rb b/sonar-server/src/main/webapp/WEB-INF/db/migrate/401_migrate_violations_to_issues.rb similarity index 100% rename from sonar-server/src/main/webapp/WEB-INF/db/migrate/399_migrate_violations_to_issues.rb rename to sonar-server/src/main/webapp/WEB-INF/db/migrate/401_migrate_violations_to_issues.rb diff --git a/sonar-server/src/test/java/org/sonar/server/issue/ServerIssueStorageTest.java b/sonar-server/src/test/java/org/sonar/server/issue/ServerIssueStorageTest.java new file mode 100644 index 00000000000..18eb7c46c2a --- /dev/null +++ b/sonar-server/src/test/java/org/sonar/server/issue/ServerIssueStorageTest.java @@ -0,0 +1,114 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2013 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package org.sonar.server.issue; + +import org.junit.Test; +import org.sonar.api.rule.RuleKey; +import org.sonar.api.rules.Rule; +import org.sonar.api.rules.RuleFinder; +import org.sonar.api.rules.RuleQuery; +import org.sonar.core.issue.DefaultIssue; +import org.sonar.core.persistence.AbstractDaoTestCase; +import org.sonar.core.resource.ResourceDao; + +import java.util.Collection; + +import static org.fest.assertions.Assertions.assertThat; +import static org.fest.assertions.Fail.fail; + +public class ServerIssueStorageTest extends AbstractDaoTestCase { + + @Test + public void should_load_component_id_from_db() throws Exception { + setupData("should_load_component_id_from_db"); + + ServerIssueStorage storage = new ServerIssueStorage(getMyBatis(), new FakeRuleFinder(), new ResourceDao(getMyBatis())); + int componentId = storage.componentId(new DefaultIssue().setComponentKey("struts:Action.java")); + + assertThat(componentId).isEqualTo(123); + } + + @Test + public void should_fail_to_load_component_id_if_unknown_component() throws Exception { + setupData("should_fail_to_load_component_id_if_unknown_component"); + + ServerIssueStorage storage = new ServerIssueStorage(getMyBatis(), new FakeRuleFinder(), new ResourceDao(getMyBatis())); + try { + storage.componentId(new DefaultIssue().setComponentKey("struts:Action.java")); + fail(); + } catch (Exception e) { + assertThat(e).hasMessage("Unknown component: struts:Action.java"); + } + } + + @Test + public void should_load_project_id_from_db() throws Exception { + setupData("should_load_project_id_from_db"); + + ServerIssueStorage storage = new ServerIssueStorage(getMyBatis(), new FakeRuleFinder(), new ResourceDao(getMyBatis())); + int projectId = storage.projectId(new DefaultIssue().setComponentKey("struts:Action.java")); + + assertThat(projectId).isEqualTo(1); + } + + @Test + public void should_fail_to_load_project_id_if_unknown_component() throws Exception { + setupData("should_fail_to_load_project_id_if_unknown_component"); + + ServerIssueStorage storage = new ServerIssueStorage(getMyBatis(), new FakeRuleFinder(), new ResourceDao(getMyBatis())); + try { + storage.projectId(new DefaultIssue().setComponentKey("struts:Action.java")); + fail(); + } catch (Exception e) { + assertThat(e).hasMessage("Unknown component: struts:Action.java"); + } + } + + static class FakeRuleFinder implements RuleFinder { + + @Override + public Rule findById(int ruleId) { + return null; + } + + @Override + public Rule findByKey(String repositoryKey, String key) { + return null; + } + + @Override + public Rule findByKey(RuleKey key) { + Rule rule = Rule.create().setRepositoryKey(key.repository()).setKey(key.rule()); + rule.setId(200); + return rule; + } + + @Override + public Rule find(RuleQuery query) { + return null; + } + + @Override + public Collection findAll(RuleQuery query) { + return null; + } + } +} diff --git a/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_fail_to_load_component_id_if_unknown_component.xml b/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_fail_to_load_component_id_if_unknown_component.xml new file mode 100644 index 00000000000..5ed00ba028b --- /dev/null +++ b/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_fail_to_load_component_id_if_unknown_component.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_fail_to_load_project_id_if_unknown_component.xml b/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_fail_to_load_project_id_if_unknown_component.xml new file mode 100644 index 00000000000..5ed00ba028b --- /dev/null +++ b/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_fail_to_load_project_id_if_unknown_component.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_load_component_id_from_db.xml b/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_load_component_id_from_db.xml new file mode 100644 index 00000000000..cf7e75fd7f7 --- /dev/null +++ b/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_load_component_id_from_db.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_load_project_id_from_db.xml b/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_load_project_id_from_db.xml new file mode 100644 index 00000000000..315634fb803 --- /dev/null +++ b/sonar-server/src/test/resources/org/sonar/server/issue/ServerIssueStorageTest/should_load_project_id_from_db.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file -- 2.39.5