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;
public static ServerTester tester = new ServerTester();
DbClient db;
+ IndexClient indexClient;
DbSession session;
IssueService service;
+ UserSession userSession;
RuleDto rule;
ComponentDto project;
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);
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();
}
@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();
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"))
.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());
}
}
--- /dev/null
+/*
+ * 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());
+ }
+}