]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5531 - Implemented Synchronization in IssueStorage on Server side
authorStephane Gamard <stephane.gamard@sonarsource.com>
Tue, 16 Sep 2014 07:46:47 +0000 (09:46 +0200)
committerStephane Gamard <stephane.gamard@sonarsource.com>
Tue, 16 Sep 2014 07:46:47 +0000 (09:46 +0200)
server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java
server/sonar-server/src/test/java/org/sonar/server/issue/IssueTesting.java [new file with mode: 0644]

index 4e313a65763d75bd1c73493a7fcb505dfc3c2ec2..e1db9d642e617cf27452b4754854724166b48504 100644 (file)
@@ -23,23 +23,35 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
+import org.sonar.api.issue.DefaultTransitions;
 import org.sonar.api.issue.Issue;
 import org.sonar.api.issue.IssueQuery;
+import org.sonar.api.resources.Qualifiers;
+import org.sonar.api.resources.Scopes;
+import org.sonar.api.rule.Severity;
 import org.sonar.api.security.DefaultGroups;
 import org.sonar.api.utils.DateUtils;
 import org.sonar.api.web.UserRole;
 import org.sonar.core.component.ComponentDto;
 import org.sonar.core.issue.db.IssueDto;
+import org.sonar.core.permission.GlobalPermissions;
 import org.sonar.core.permission.PermissionFacade;
 import org.sonar.core.persistence.DbSession;
 import org.sonar.core.rule.RuleDto;
+import org.sonar.core.user.UserDto;
+import org.sonar.server.component.SnapshotTesting;
 import org.sonar.server.component.db.ComponentDao;
+import org.sonar.server.component.db.SnapshotDao;
 import org.sonar.server.db.DbClient;
 import org.sonar.server.issue.db.IssueDao;
+import org.sonar.server.issue.index.IssueIndex;
 import org.sonar.server.rule.RuleTesting;
 import org.sonar.server.rule.db.RuleDao;
+import org.sonar.server.search.IndexClient;
 import org.sonar.server.search.QueryContext;
 import org.sonar.server.tester.ServerTester;
+import org.sonar.server.user.MockUserSession;
+import org.sonar.server.user.UserSession;
 
 import java.util.Date;
 import java.util.UUID;
@@ -52,8 +64,10 @@ public class IssueServiceMediumTest {
   public static ServerTester tester = new ServerTester();
 
   DbClient db;
+  IndexClient indexClient;
   DbSession session;
   IssueService service;
+  UserSession userSession;
 
   RuleDto rule;
   ComponentDto project;
@@ -63,6 +77,7 @@ public class IssueServiceMediumTest {
   public void setUp() throws Exception {
     tester.clearDbAndIndexes();
     db = tester.get(DbClient.class);
+    indexClient = tester.get(IndexClient.class);
     session = db.openSession(false);
     service = tester.get(IssueService.class);
 
@@ -70,23 +85,34 @@ public class IssueServiceMediumTest {
     tester.get(RuleDao.class).insert(session, rule);
 
     project = new ComponentDto()
-      .setEnabled(true)
       .setId(1L)
+      .setProjectId(1L)
       .setKey("MyProject")
-      .setProjectId(1L);
+      .setLongName("My Project")
+      .setQualifier(Qualifiers.PROJECT)
+      .setScope(Scopes.PROJECT);
     tester.get(ComponentDao.class).insert(session, project);
+    tester.get(SnapshotDao.class).insert(session, SnapshotTesting.createForComponent(project));
 
     resource = new ComponentDto()
-      .setEnabled(true)
+      .setId(2L)
       .setProjectId(1L)
       .setKey("MyComponent")
-      .setId(2L);
+      .setLongName("My Component");
     tester.get(ComponentDao.class).insert(session, resource);
+    tester.get(SnapshotDao.class).insert(session, SnapshotTesting.createForComponent(resource));
 
     // project can be seen by anyone
     tester.get(PermissionFacade.class).insertGroupPermission(project.getId(), DefaultGroups.ANYONE, UserRole.USER, session);
     db.issueAuthorizationDao().synchronizeAfter(session, new Date(0));
 
+    UserDto user = new UserDto().setLogin("gandalf").setName("Gandalf");
+    db.userDao().insert(session, user);
+    tester.get(PermissionFacade.class).insertUserPermission(project.getId(), user.getId(), UserRole.USER, session);
+
+    userSession = MockUserSession.create().setLogin(user.getLogin()).setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN)
+      .addProjectPermissions(UserRole.USER, project.key());
+
     session.commit();
   }
 
@@ -98,7 +124,7 @@ public class IssueServiceMediumTest {
   @Test
   public void can_facet() throws Exception {
     IssueDto issue1 = getIssue().setActionPlanKey("P1");
-    IssueDto issue2 = getIssue().setActionPlanKey("P2");
+    IssueDto issue2 = getIssue().setActionPlanKey("P2").setResolution("NONE");
     tester.get(IssueDao.class).insert(session, issue1, issue2);
     session.commit();
 
@@ -111,6 +137,21 @@ public class IssueServiceMediumTest {
     assertThat(result.getFacetKeys("actionPlan")).hasSize(2);
   }
 
+  @Test
+  public void do_transition() {
+    IssueDto issue = getIssue();
+    tester.get(IssueDao.class).insert(session, issue);
+    session.commit();
+
+    assertThat(db.issueDao().getByKey(session, issue.getKey())).isNotNull();
+
+    IssueTesting.assertIsEquivalent(issue, indexClient.get(IssueIndex.class).getByKey(issue.getKey()));
+
+    service.doTransition(issue.getKey(), DefaultTransitions.CONFIRM, userSession);
+    issue = tester.get(IssueDao.class).getByKey(session, issue.getKey());
+    IssueTesting.assertIsEquivalent(issue, indexClient.get(IssueIndex.class).getByKey(issue.getKey()));
+  }
+
   private IssueDto getIssue() {
     return new IssueDto()
       .setIssueCreationDate(DateUtils.parseDate("2014-09-04"))
@@ -119,8 +160,9 @@ public class IssueServiceMediumTest {
       .setDebt(10L)
       .setRootComponent(project)
       .setComponent(resource)
-      .setStatus("OPEN").setResolution("OPEN")
-      .setSeverity("MAJOR")
+      .setStatus(Issue.STATUS_OPEN)
+      .setResolution(null)
+      .setSeverity(Severity.MAJOR)
       .setKee(UUID.randomUUID().toString());
   }
 }
diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueTesting.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueTesting.java
new file mode 100644 (file)
index 0000000..8711ed8
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 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.sonar.api.issue.Issue;
+import org.sonar.api.rule.RuleKey;
+import org.sonar.core.issue.db.IssueDto;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+public class IssueTesting {
+
+  public static void assertIsEquivalent(IssueDto dto, Issue issue) {
+
+    assertThat(issue).isNotNull();
+    assertThat(dto).isNotNull();
+
+    assertThat(issue.actionPlanKey()).isEqualTo(dto.getActionPlanKey());
+    assertThat(issue.assignee()).isEqualTo(dto.getAssignee());
+    assertThat(issue.authorLogin()).isEqualTo(dto.getAuthorLogin());
+    assertThat(issue.closeDate()).isEqualTo(dto.getIssueCloseDate());
+    assertThat(issue.componentKey()).isEqualTo(dto.getComponentKey());
+    assertThat(issue.effortToFix()).isEqualTo(dto.getEffortToFix());
+    assertThat(issue.resolution()).isEqualTo(dto.getResolution());
+    assertThat(issue.ruleKey()).isEqualTo(RuleKey.of(dto.getRuleRepo(), dto.getRule()));
+    assertThat(issue.line()).isEqualTo(dto.getLine());
+    assertThat(issue.message()).isEqualTo(dto.getMessage());
+    assertThat(issue.reporter()).isEqualTo(dto.getReporter());
+    assertThat(issue.key()).isEqualTo(dto.getKey());
+
+    // assertThat(issue.updateDate()).isEqualTo(dto.getIssueUpdateDate());
+    assertThat(issue.status()).isEqualTo(dto.getStatus());
+    assertThat(issue.severity()).isEqualTo(dto.getSeverity());
+  }
+}