Преглед изворни кода

SONAR-15487 added unit test for quickFixAvailable added in Issue and DefaultIssue

tags/9.2.0.49834
Lukasz Jarocki пре 2 година
родитељ
комит
b5fbdff6d4

+ 2
- 0
server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/TrackerRawInputFactoryTest.java Прегледај датотеку

@@ -124,6 +124,7 @@ public class TrackerRawInputFactoryTest {
.setRuleKey(ruleKey.rule())
.setSeverity(Constants.Severity.BLOCKER)
.setGap(3.14)
.setQuickFixAvailable(true)
.build();
reportReader.putIssues(FILE.getReportAttributes().getRef(), singletonList(reportIssue));
Input<DefaultIssue> input = underTest.create(FILE);
@@ -138,6 +139,7 @@ public class TrackerRawInputFactoryTest {
assertThat(issue.line()).isEqualTo(2);
assertThat(issue.gap()).isEqualTo(3.14);
assertThat(issue.message()).isEqualTo("the message");
assertThat(issue.isQuickFixAvailable()).isTrue();

// fields set by compute engine
assertThat(issue.checksum()).isEqualTo(input.getLineHashSequence().getHashForLine(2));

+ 1
- 1
server/sonar-db-dao/src/main/java/org/sonar/db/issue/IssueDto.java Прегледај датотеку

@@ -758,7 +758,7 @@ public final class IssueDto implements Serializable {
issue.setSelectedAt(selectedAt);
issue.setLocations(parseLocations());
issue.setIsFromExternalRuleEngine(isExternal);
issue.setQuickFixAvailable(quickFixAvailable != null ? quickFixAvailable : false);
issue.setQuickFixAvailable(quickFixAvailable != null && quickFixAvailable);
return issue;
}
}

+ 102
- 0
server/sonar-db-dao/src/test/java/org/sonar/db/issue/IssueDtoTest.java Прегледај датотеку

@@ -19,14 +19,18 @@
*/
package org.sonar.db.issue;

import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.time.DateUtils;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.issue.Issue;
import org.sonar.api.rule.RuleKey;
import org.sonar.api.rules.RuleType;
import org.sonar.api.utils.Duration;
import org.sonar.core.issue.DefaultIssue;
@@ -149,4 +153,102 @@ public class IssueDtoTest {
dto.setTagsString("");
assertThat(dto.getTags()).isEmpty();
}

@Test
public void toDtoForComputationInsert_givenDefaultIssueWithAllFields_returnFullIssueDto() {
long now = System.currentTimeMillis();
Date dateNow = Date.from(new Date(now).toInstant().truncatedTo(ChronoUnit.SECONDS));
DefaultIssue defaultIssue = createExampleDefaultIssue(dateNow);

IssueDto issueDto = IssueDto.toDtoForComputationInsert(defaultIssue, "ruleUuid", now);

assertThat(issueDto).extracting(IssueDto::getKey, IssueDto::getType, IssueDto::getRuleKey).
containsExactly("key", RuleType.BUG.getDbConstant(), RuleKey.of("repo", "rule"));

assertThat(issueDto).extracting(IssueDto::getIssueCreationDate, IssueDto::getIssueCloseDate,
IssueDto::getIssueUpdateDate, IssueDto::getSelectedAt, IssueDto::getUpdatedAt, IssueDto::getCreatedAt)
.containsExactly(dateNow, dateNow, dateNow, dateNow.getTime(), now, now);

assertThat(issueDto).extracting(IssueDto::getLine, IssueDto::getMessage,
IssueDto::getGap, IssueDto::getEffort, IssueDto::getResolution, IssueDto::getStatus, IssueDto::getSeverity)
.containsExactly(1, "message", 1.0, 1L, Issue.RESOLUTION_FALSE_POSITIVE, Issue.STATUS_CLOSED, "BLOCKER");

assertThat(issueDto).extracting(IssueDto::getTags, IssueDto::getAuthorLogin)
.containsExactly(Set.of("todo"), "admin");

assertThat(issueDto).extracting(IssueDto::isManualSeverity, IssueDto::getChecksum, IssueDto::getAssigneeUuid,
IssueDto::isExternal, IssueDto::getComponentUuid, IssueDto::getComponentKey, IssueDto::getModuleUuid,
IssueDto::getModuleUuidPath, IssueDto::getProjectUuid, IssueDto::getProjectKey, IssueDto::getIssueAttributes,
IssueDto::getRuleUuid)
.containsExactly(true, "123", "123", true, "123", "componentKey", "moduleUuid",
"path/to/module/uuid", "123", "projectKey", "key=value", "ruleUuid");

assertThat(issueDto.isQuickFixAvailable()).isTrue();

}

@Test
public void toDtoForUpdate_givenDefaultIssueWithAllFields_returnFullIssueDto() {
long now = System.currentTimeMillis();
Date dateNow = Date.from(new Date(now).toInstant().truncatedTo(ChronoUnit.SECONDS));
DefaultIssue defaultIssue = createExampleDefaultIssue(dateNow);

IssueDto issueDto = IssueDto.toDtoForUpdate(defaultIssue, now);

assertThat(issueDto).extracting(IssueDto::getKey, IssueDto::getType, IssueDto::getRuleKey).
containsExactly("key", RuleType.BUG.getDbConstant(), RuleKey.of("repo", "rule"));

assertThat(issueDto).extracting(IssueDto::getIssueCreationDate, IssueDto::getIssueCloseDate,
IssueDto::getIssueUpdateDate, IssueDto::getSelectedAt, IssueDto::getUpdatedAt)
.containsExactly(dateNow, dateNow, dateNow, dateNow.getTime(), now);

assertThat(issueDto).extracting(IssueDto::getLine, IssueDto::getMessage,
IssueDto::getGap, IssueDto::getEffort, IssueDto::getResolution, IssueDto::getStatus, IssueDto::getSeverity)
.containsExactly(1, "message", 1.0, 1L, Issue.RESOLUTION_FALSE_POSITIVE, Issue.STATUS_CLOSED, "BLOCKER");

assertThat(issueDto).extracting(IssueDto::getTags, IssueDto::getAuthorLogin)
.containsExactly(Set.of("todo"), "admin");

assertThat(issueDto).extracting(IssueDto::isManualSeverity, IssueDto::getChecksum, IssueDto::getAssigneeUuid,
IssueDto::isExternal, IssueDto::getComponentUuid, IssueDto::getComponentKey, IssueDto::getModuleUuid,
IssueDto::getModuleUuidPath, IssueDto::getProjectUuid, IssueDto::getProjectKey, IssueDto::getIssueAttributes)
.containsExactly(true, "123", "123", true, "123", "componentKey", "moduleUuid",
"path/to/module/uuid", "123", "projectKey", "key=value");

assertThat(issueDto.isQuickFixAvailable()).isTrue();

}

private DefaultIssue createExampleDefaultIssue(Date dateNow) {
DefaultIssue defaultIssue = new DefaultIssue();
defaultIssue.setKey("key")
.setType(RuleType.BUG)
.setLine(1)
.setMessage("message")
.setGap(1.0)
.setEffort(Duration.create(1))
.setResolution(Issue.RESOLUTION_FALSE_POSITIVE)
.setStatus(Issue.STATUS_CLOSED)
.setSeverity("BLOCKER")
.setManualSeverity(true)
.setChecksum("123")
.setAssigneeUuid("123")
.setRuleKey(RuleKey.of("repo", "rule"))
.setIsFromExternalRuleEngine(true)
.setTags(List.of("todo"))
.setComponentUuid("123")
.setComponentKey("componentKey")
.setModuleUuid("moduleUuid")
.setModuleUuidPath("path/to/module/uuid")
.setProjectUuid("123")
.setProjectKey("projectKey")
.setAttribute("key", "value")
.setAuthorLogin("admin")
.setCreationDate(dateNow)
.setCloseDate(dateNow)
.setUpdateDate(dateNow)
.setSelectedAt(dateNow.getTime())
.setQuickFixAvailable(true);
return defaultIssue;
}
}

+ 13
- 0
sonar-core/src/test/java/org/sonar/core/issue/DefaultIssueTest.java Прегледај датотеку

@@ -221,4 +221,17 @@ public class DefaultIssueTest {

assertThat(issue.changes()).isEmpty();
}

@Test
public void isQuickFixAvailable_givenQuickFixAvailable_returnTrue() {
DefaultIssue defaultIssue = new DefaultIssue();

defaultIssue.setQuickFixAvailable(true);

assertThat(defaultIssue.isQuickFixAvailable()).isTrue();

defaultIssue.setQuickFixAvailable(false);

assertThat(defaultIssue.isQuickFixAvailable()).isFalse();
}
}

+ 3
- 1
sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/IssuePublisherTest.java Прегледај датотеку

@@ -128,7 +128,8 @@ public class IssuePublisherTest {
DefaultIssue issue = new DefaultIssue(project)
.at(new DefaultIssueLocation().on(file).at(file.selectLine(3)).message("Foo"))
.forRule(SQUID_RULE_KEY)
.overrideSeverity(org.sonar.api.batch.rule.Severity.CRITICAL);
.overrideSeverity(org.sonar.api.batch.rule.Severity.CRITICAL)
.setQuickFixAvailable(true);

when(filters.accept(any(InputComponent.class), any(ScannerReport.Issue.class))).thenReturn(true);

@@ -138,6 +139,7 @@ public class IssuePublisherTest {
ArgumentCaptor<ScannerReport.Issue> argument = ArgumentCaptor.forClass(ScannerReport.Issue.class);
verify(reportPublisher.getWriter()).appendComponentIssue(eq(file.scannerId()), argument.capture());
assertThat(argument.getValue().getSeverity()).isEqualTo(org.sonar.scanner.protocol.Constants.Severity.CRITICAL);
assertThat(argument.getValue().getQuickFixAvailable()).isTrue();
}

@Test

Loading…
Откажи
Сачувај