SONAR-25784 Update the issue APIs to return internal tags

This commit is contained in:
Eric Giffon 2025-09-11 07:04:10 +02:00 committed by Matteo Mara
parent f93ec9c339
commit 4a3a86800b
9 changed files with 23 additions and 8 deletions

View File

@ -205,7 +205,8 @@ public class ListActionIT {
.replaceAllImpacts(List.of(new ImpactDto().setSoftwareQuality(MAINTAINABILITY).setSeverity(org.sonar.api.issue.impact.Severity.BLOCKER)))
.setAuthorLogin("John")
.setAssigneeUuid(simon.getUuid())
.setTags(asList("bug", "owasp"))
.setTags(List.of("bug", "owasp"))
.setInternalTags(List.of("internal1", "internal2"))
.setIssueCreationDate(parseDate("2014-09-03"))
.setIssueUpdateDate(parseDate("2017-12-04"))
.setCodeVariants(List.of("variant1", "variant2")));
@ -222,13 +223,13 @@ public class ListActionIT {
assertThat(response.getIssuesList())
.extracting(
Issue::getKey, Issue::getRule, Issue::getSeverity, Issue::getComponent, Issue::getResolution, Issue::getStatus, Issue::getMessage, Issue::getMessageFormattingsList,
Issue::getEffort, Issue::getAssignee, Issue::getAuthor, Issue::getLine, Issue::getHash, Issue::getTagsList, Issue::getCreationDate, Issue::getUpdateDate,
Issue::getQuickFixAvailable, Issue::getCodeVariantsList, Issue::getImpactsList)
Issue::getEffort, Issue::getAssignee, Issue::getAuthor, Issue::getLine, Issue::getHash, Issue::getTagsList, Issue::getInternalTagsList, Issue::getCreationDate,
Issue::getUpdateDate, Issue::getQuickFixAvailable, Issue::getCodeVariantsList, Issue::getImpactsList)
.containsExactlyInAnyOrder(
tuple(issue.getKey(), rule.getKey().toString(), Severity.BLOCKER, file.getKey(), "", STATUS_OPEN, "the message",
MessageFormattingUtils.dbMessageFormattingListToWs(List.of(MESSAGE_FORMATTING)), "10min",
simon.getLogin(), "John", 42, "a227e508d6646b55a086ee11d63b21e9", asList("bug", "owasp"), formatDateTime(issue.getIssueCreationDate()),
formatDateTime(issue.getIssueUpdateDate()), false, List.of("variant1", "variant2"),
simon.getLogin(), "John", 42, "a227e508d6646b55a086ee11d63b21e9", List.of("bug", "owasp"), List.of("internal1", "internal2"),
formatDateTime(issue.getIssueCreationDate()), formatDateTime(issue.getIssueUpdateDate()), false, List.of("variant1", "variant2"),
List.of(newBuilder().setSoftwareQuality(Common.SoftwareQuality.MAINTAINABILITY).setSeverity(Common.ImpactSeverity.ImpactSeverity_BLOCKER).build())));
assertThat(response.getComponentsList())

View File

@ -230,7 +230,8 @@ class SearchActionIT {
.setSeverity("MAJOR")
.setAuthorLogin("John")
.setAssigneeUuid(simon.getUuid())
.setTags(asList("bug", "owasp"))
.setTags(List.of("bug", "owasp"))
.setInternalTags(List.of("internal1", "internal2"))
.setIssueCreationDate(parseDate("2014-09-03"))
.setIssueUpdateDate(parseDate("2017-12-04"))
.setCodeVariants(List.of("variant1", "variant2")));
@ -242,13 +243,13 @@ class SearchActionIT {
assertThat(response.getIssuesList())
.extracting(
Issue::getKey, Issue::getRule, Issue::getSeverity, Issue::getComponent, Issue::getResolution, Issue::getStatus, Issue::getMessage, Issue::getMessageFormattingsList,
Issue::getEffort, Issue::getAssignee, Issue::getAuthor, Issue::getLine, Issue::getHash, Issue::getTagsList,
Issue::getEffort, Issue::getAssignee, Issue::getAuthor, Issue::getLine, Issue::getHash, Issue::getTagsList, Issue::getInternalTagsList,
Issue::getCreationDate, Issue::getUpdateDate,
Issue::getQuickFixAvailable, Issue::getCodeVariantsList)
.containsExactlyInAnyOrder(
tuple(issue.getKey(), rule.getKey().toString(), Severity.MAJOR, file.getKey(), RESOLUTION_FIXED, STATUS_RESOLVED, "the message",
MessageFormattingUtils.dbMessageFormattingListToWs(List.of(MESSAGE_FORMATTING)), "10min",
simon.getLogin(), "John", 42, "a227e508d6646b55a086ee11d63b21e9", asList("bug", "owasp"),
simon.getLogin(), "John", 42, "a227e508d6646b55a086ee11d63b21e9", List.of("bug", "owasp"), List.of("internal1", "internal2"),
formatDateTime(issue.getIssueCreationDate()),
formatDateTime(issue.getIssueUpdateDate()), false, List.of("variant1", "variant2")));
}

View File

@ -97,6 +97,7 @@ public class ListAction implements IssuesWsAction {
"<br>Requires the 'Browse' permission on the specified project. ")
.setSince("10.2")
.setChangelog(
new Change("2025.5", "Response field 'internalTags' has been added"),
new Change("10.8", format("The parameter '%s' are not deprecated anymore.", PARAM_TYPES)),
new Change("10.8", "The response fields 'severity' and 'type' are not deprecated anymore."),
new Change("10.4", format("Parameter '%s' is deprecated.", PARAM_TYPES)),

View File

@ -241,6 +241,7 @@ public class SearchAction implements IssuesWsAction {
+ "<br/>When issue indexing is in progress returns 503 service unavailable HTTP code.")
.setSince("3.6")
.setChangelog(
new Change(V_2025_5, "Response field 'internalTags' has been added"),
new Change(V_2025_5, format(NEW_FACET_ADDED_MESSAGE, PARAM_FROM_SONAR_QUBE_UPDATE)),
new Change(V_2025_5, format(NEW_PARAM_ADDED_MESSAGE, PARAM_FROM_SONAR_QUBE_UPDATE)),
new Change(V_2025_3, format(NEW_FACET_ADDED_MESSAGE, PARAM_OWASP_MOBILE_TOP_10_2024)),

View File

@ -212,6 +212,7 @@ public class SearchResponseFormat {
issueBuilder.setMessage(nullToEmpty(dto.getMessage()));
issueBuilder.addAllMessageFormattings(MessageFormattingUtils.dbMessageFormattingToWs(dto.parseMessageFormattings()));
issueBuilder.addAllTags(dto.getTags());
issueBuilder.addAllInternalTags(dto.getInternalTags());
issueBuilder.addAllCodeVariants(dto.getCodeVariants());
Long effort = dto.getEffort();
if (effort != null) {

View File

@ -99,6 +99,10 @@
"codeVariants": [
"windows",
"linux"
],
"internalTags": [
"advanced",
"sast"
]
}
],

View File

@ -100,6 +100,10 @@
"codeVariants": [
"windows",
"linux"
],
"internalTags": [
"advanced",
"sast"
]
}
],

View File

@ -142,6 +142,7 @@ class SearchResponseFormatFormatOperationTest {
assertThat(issue.getStatus()).isEqualTo(issueDto.getStatus());
assertThat(issue.getMessage()).isEqualTo(issueDto.getMessage());
assertThat(new ArrayList<>(issue.getTagsList())).containsExactlyInAnyOrderElementsOf(issueDto.getTags());
assertThat(new ArrayList<>(issue.getInternalTagsList())).containsExactlyInAnyOrderElementsOf(issueDto.getInternalTags());
assertThat(issue.getLine()).isEqualTo(issueDto.getLine());
assertThat(issue.getHash()).isEqualTo(issueDto.getChecksum());
assertThat(issue.getAuthor()).isEqualTo(issueDto.getAuthorLogin());

View File

@ -169,6 +169,7 @@ message Issue {
optional string issueStatus = 43;
optional bool prioritizedRule = 44;
optional bool fromSonarQubeUpdate = 45;
repeated string internalTags = 46;
}
message Transitions {