private static final Splitter STRING_LIST_SPLITTER = Splitter.on(STRING_LIST_SEPARATOR).trimResults().omitEmptyStrings();
private int type;
- private CleanCodeAttribute cleanCodeAttribute;
private String kee;
private String componentUuid;
private String projectUuid;
private String closedChangeData;
private Set<ImpactDto> impacts = new HashSet<>();
+
+ //non-persisted fields
private Set<ImpactDto> ruleDefaultImpacts = new HashSet<>();
+ private CleanCodeAttribute cleanCodeAttribute;
public IssueDto() {
// nothing to do
return this;
}
+
+ public IssueDto setRuleDefaultImpacts(Set<ImpactDto> ruleDefaultImpacts) {
+ this.ruleDefaultImpacts = new HashSet<>(ruleDefaultImpacts);
+ return this;
+ }
+
+
public IssueDto replaceAllImpacts(Collection<ImpactDto> newImpacts) {
Set<SoftwareQuality> newSoftwareQuality = newImpacts.stream().map(ImpactDto::getSoftwareQuality).collect(Collectors.toSet());
if (newSoftwareQuality.size() != newImpacts.size()) {
private static final String ISSUE_CURRENT_ASSIGNEE_UUID = "current assignee uuid";
-
@Rule
public UserSessionRule userSession = standalone();
@Test
public void assign_issue() {
UserDto assignee = db.users().insertUser("john");
- Map<String, Object> properties = new HashMap<>(ImmutableMap.of("assignee", "john"));
+ Map<String, Object> properties = new HashMap<>(Map.of("assignee", "john"));
underTest.verify(properties, Collections.emptyList(), userSession);
boolean executeResult = underTest.execute(properties, context);
@Test
public void unassign_issue_if_assignee_is_empty() {
- Map<String, Object> properties = new HashMap<>(ImmutableMap.of("assignee", ""));
+ Map<String, Object> properties = new HashMap<>(Map.of("assignee", ""));
underTest.verify(properties, Collections.emptyList(), userSession);
boolean executeResult = underTest.execute(properties, context);
import java.util.Map;
import org.junit.Test;
import org.sonar.api.impl.utils.TestSystem2;
+import org.sonar.api.issue.impact.Severity;
+import org.sonar.api.issue.impact.SoftwareQuality;
+import org.sonar.api.rules.CleanCodeAttribute;
import org.sonar.api.rules.RuleType;
import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.Duration;
.setUpdateDate(date)
.setCloseDate(date);
- underTest.save(db.getSession(), singletonList(issue));
+ Collection<IssueDto> createdIssues = underTest.save(db.getSession(), singletonList(issue));
+
+ assertThat(createdIssues).hasSize(1);
+
+ assertThat(createdIssues.iterator().next().getCleanCodeAttribute()).isEqualTo(CleanCodeAttribute.CLEAR);
+ assertThat(createdIssues.iterator().next().getEffectiveImpacts()).isEqualTo(Map.of(SoftwareQuality.MAINTAINABILITY, Severity.HIGH));
assertThat(db.countRowsOfTable("issues")).isOne();
assertThat(db.selectFirst("select * from issues"))
.setUpdateDate(date)
.setCloseDate(date);
- underTest.save(db.getSession(), singletonList(issue));
+ Collection<IssueDto> updatedIssues = underTest.save(db.getSession(), singletonList(issue));
+ assertThat(updatedIssues).hasSize(1);
+
+ assertThat(updatedIssues.iterator().next().getCleanCodeAttribute()).isEqualTo(CleanCodeAttribute.CLEAR);
+ assertThat(updatedIssues.iterator().next().getEffectiveImpacts()).isEqualTo(Map.of(SoftwareQuality.MAINTAINABILITY, Severity.HIGH));
assertThat(db.countRowsOfTable("issues")).isOne();
assertThat(db.countRowsOfTable("issue_changes")).isZero();
import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.TestRequest;
import org.sonar.server.ws.WsActionTester;
+import org.sonarqube.ws.Issues;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
public void assign_to_me() {
IssueDto issue = newIssueWithBrowsePermission();
- ws.newRequest()
+ Issues.AssignResponse assignResponse = ws.newRequest()
.setParam("issue", issue.getKey())
.setParam("assignee", "_me")
- .execute();
+ .executeProtobuf(Issues.AssignResponse.class);
checkIssueAssignee(issue.getKey(), currentUser.getUuid());
Optional<IssueDto> optionalIssueDto = dbClient.issueDao().selectByKey(session, issue.getKey());
import org.sonar.server.rule.ServerRuleFinder;
import static com.google.common.base.MoreObjects.firstNonNull;
-import static com.google.common.collect.Lists.newArrayList;
import static java.util.Collections.emptyList;
/**
* @return the keys of the inserted issues
*/
private Collection<IssueDto> insert(DbSession session, Iterable<DefaultIssue> issuesToInsert, long now) {
- List<IssueDto> inserted = newArrayList();
+ List<IssueDto> inserted = new ArrayList<>();
int count = 0;
IssueChangeMapper issueChangeMapper = session.getMapper(IssueChangeMapper.class);
for (DefaultIssue issue : issuesToInsert) {
private IssueDto doInsert(DbSession session, long now, DefaultIssue issue) {
ComponentDto component = component(session, issue);
ComponentDto project = project(session, issue);
- String ruleUuid = getRuleUuid(issue).orElseThrow(() -> new IllegalStateException("Rule not found: " + issue.ruleKey()));
- IssueDto dto = IssueDto.toDtoForServerInsert(issue, component, project, ruleUuid, now);
+ RuleDto ruleDto = getRule(issue).orElseThrow(() -> new IllegalStateException("Rule not found: " + issue.ruleKey()));
+ IssueDto dto = IssueDto.toDtoForServerInsert(issue, component, project, ruleDto.getUuid(), now);
+ dto.setCleanCodeAttribute(ruleDto.getCleanCodeAttribute());
+ dto.setRuleDefaultImpacts(ruleDto.getDefaultImpacts());
getDbClient().issueDao().insert(session, dto);
return dto;
IssueDto dto = IssueDto.toDtoForUpdate(issue, now);
getDbClient().issueDao().update(session, dto);
// Rule id does not exist in DefaultIssue
- getRuleUuid(issue).ifPresent(dto::setRuleUuid);
+ Optional<RuleDto> rule = getRule(issue);
+ rule.ifPresent(r -> dto.setRuleUuid(r.getUuid()));
+ rule.ifPresent(r -> dto.setCleanCodeAttribute(r.getCleanCodeAttribute()));
+ rule.ifPresent(r -> dto.setRuleDefaultImpacts(r.getDefaultImpacts()));
return dto;
}
- protected Optional<String> getRuleUuid(Issue issue) {
- return ruleFinder.findDtoByKey(issue.ruleKey()).map(RuleDto::getUuid);
+ protected Optional<RuleDto> getRule(Issue issue) {
+ return ruleFinder.findDtoByKey(issue.ruleKey());
}
}
import org.sonar.api.issue.impact.SoftwareQuality;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rule.Severity;
+import org.sonar.api.rules.CleanCodeAttribute;
+import org.sonar.api.rules.CleanCodeAttributeCategory;
import org.sonar.api.rules.RuleType;
import org.sonar.api.utils.Duration;
import org.sonar.core.issue.tracking.Trackable;
public Date getUpdateDate() {
return updateDate;
}
+
}