From 105f998934e88b40b049dea836bd029085de34b0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?L=C3=A9o=20Geoffroy?= Date: Wed, 2 Aug 2023 12:40:52 +0200 Subject: [PATCH] SONAR-20021 Add new dismissNotice 'issueCleanCodeGuide' to DismissNoticeAction --- .../server/user/ws/DismissNoticeActionIT.java | 16 +++++++++++++++- .../org/sonar/server/user/ws/CurrentAction.java | 4 +++- .../server/user/ws/DismissNoticeAction.java | 5 ++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/user/ws/DismissNoticeActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/user/ws/DismissNoticeActionIT.java index 7e5f410dbf8..401b803165f 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/user/ws/DismissNoticeActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/user/ws/DismissNoticeActionIT.java @@ -71,6 +71,20 @@ public class DismissNoticeActionIT { assertThat(propertyDto).isPresent(); } + @Test + public void execute_whenNoticeIsIssueCleanCodeGuide_shouldDismissCorrespondingNotice() { + userSessionRule.logIn(); + + TestResponse testResponse = tester.newRequest() + .setParam("notice", "issueCleanCodeGuide") + .execute(); + + assertThat(testResponse.getStatus()).isEqualTo(204); + + Optional propertyDto = db.properties().findFirstUserProperty(userSessionRule.getUuid(), "user.dismissedNotices.issueCleanCodeGuide"); + assertThat(propertyDto).isPresent(); + } + @Test public void authentication_is_required() { @@ -102,7 +116,7 @@ public class DismissNoticeActionIT { assertThatThrownBy(testRequest::execute) .isInstanceOf(IllegalArgumentException.class) - .hasMessage("Value of parameter 'notice' (not_supported_value) must be one of: [educationPrinciples, sonarlintAd]"); + .hasMessage("Value of parameter 'notice' (not_supported_value) must be one of: [educationPrinciples, sonarlintAd, issueCleanCodeGuide]"); } diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/user/ws/CurrentAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/user/ws/CurrentAction.java index dae5f958d05..8db6b9768fb 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/user/ws/CurrentAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/user/ws/CurrentAction.java @@ -50,6 +50,7 @@ import static java.util.Optional.ofNullable; import static org.apache.commons.lang.StringUtils.EMPTY; import static org.sonar.api.web.UserRole.USER; import static org.sonar.server.user.ws.DismissNoticeAction.EDUCATION_PRINCIPLES; +import static org.sonar.server.user.ws.DismissNoticeAction.ISSUE_CLEAN_CODE_GUIDE; import static org.sonar.server.user.ws.DismissNoticeAction.SONARLINT_AD; import static org.sonar.server.ws.WsUtils.writeProtobuf; import static org.sonarqube.ws.Users.CurrentWsResponse.HomepageType.APPLICATION; @@ -125,7 +126,8 @@ public class CurrentAction implements UsersWsAction { .setHomepage(buildHomepage(dbSession, user)) .setUsingSonarLintConnectedMode(user.getLastSonarlintConnectionDate() != null) .putDismissedNotices(EDUCATION_PRINCIPLES, isNoticeDismissed(user, EDUCATION_PRINCIPLES)) - .putDismissedNotices(SONARLINT_AD, isNoticeDismissed(user, SONARLINT_AD)); + .putDismissedNotices(SONARLINT_AD, isNoticeDismissed(user, SONARLINT_AD)) + .putDismissedNotices(ISSUE_CLEAN_CODE_GUIDE, isNoticeDismissed(user, ISSUE_CLEAN_CODE_GUIDE)); ofNullable(emptyToNull(user.getEmail())).ifPresent(builder::setEmail); ofNullable(emptyToNull(user.getEmail())).ifPresent(u -> builder.setAvatar(avatarResolver.create(user))); ofNullable(user.getExternalLogin()).ifPresent(builder::setExternalIdentity); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/user/ws/DismissNoticeAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/user/ws/DismissNoticeAction.java index 1b7809499ec..f1d2e432ddf 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/user/ws/DismissNoticeAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/user/ws/DismissNoticeAction.java @@ -19,6 +19,7 @@ */ package org.sonar.server.user.ws; +import org.sonar.api.server.ws.Change; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; @@ -34,6 +35,7 @@ public class DismissNoticeAction implements UsersWsAction { public static final String EDUCATION_PRINCIPLES = "educationPrinciples"; public static final String SONARLINT_AD = "sonarlintAd"; + public static final String ISSUE_CLEAN_CODE_GUIDE = "issueCleanCodeGuide"; public static final String USER_DISMISS_CONSTANT = "user.dismissedNotices."; private final UserSession userSession; @@ -48,6 +50,7 @@ public class DismissNoticeAction implements UsersWsAction { public void define(WebService.NewController context) { WebService.NewAction action = context.createAction("dismiss_notice") .setDescription("Dismiss a notice for the current user. Silently ignore if the notice is already dismissed.") + .setChangelog(new Change("10.2", "Support for new notice '%s' was added.".formatted(ISSUE_CLEAN_CODE_GUIDE))) .setSince("9.6") .setInternal(true) .setHandler(this) @@ -56,7 +59,7 @@ public class DismissNoticeAction implements UsersWsAction { action.createParam("notice") .setDescription("notice key to dismiss") .setExampleValue(EDUCATION_PRINCIPLES) - .setPossibleValues(EDUCATION_PRINCIPLES, SONARLINT_AD); + .setPossibleValues(EDUCATION_PRINCIPLES, SONARLINT_AD, ISSUE_CLEAN_CODE_GUIDE); } @Override -- 2.39.5