]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-17421 Do not fail if user provided timezone is unknown by the server
authorAurelien Poscia <aurelien.poscia@sonarsource.com>
Fri, 30 Sep 2022 08:24:02 +0000 (10:24 +0200)
committerPhilippe Perrin <philippe.perrin@sonarsource.com>
Fri, 7 Oct 2022 10:13:56 +0000 (12:13 +0200)
server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueQueryFactory.java
server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueQueryFactoryTest.java

index ef43b30c23a34956999be70a82134f137689477e..f6c2773b80663cfab3b1dc4f4d9d62208d984804 100644 (file)
@@ -45,6 +45,8 @@ import org.sonar.api.resources.Qualifiers;
 import org.sonar.api.rule.RuleKey;
 import org.sonar.api.rules.RuleType;
 import org.sonar.api.server.ServerSide;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
 import org.sonar.core.util.stream.MoreCollectors;
 import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
@@ -87,6 +89,8 @@ import static org.sonarqube.ws.client.issue.IssuesWsParameters.PARAM_SINCE_LEAK_
 @ServerSide
 public class IssueQueryFactory {
 
+  private static final Logger LOGGER = Loggers.get(IssueQueryFactory.class);
+
   public static final String UNKNOWN = "<UNKNOWN>";
   public static final List<String> ISSUE_STATUSES = STATUSES.stream()
     .filter(s -> !s.equals(STATUS_TO_REVIEW))
@@ -167,7 +171,8 @@ public class IssueQueryFactory {
     try {
       return Optional.of(ZoneId.of(timeZone));
     } catch (DateTimeException e) {
-      throw new IllegalArgumentException("TimeZone '" + timeZone + "' cannot be parsed as a valid zone ID");
+      LOGGER.warn("TimeZone '" + timeZone + "' cannot be parsed as a valid zone ID");
+      return Optional.empty();
     }
   }
 
index a3dd520af593abfe6f18148b8585a5ba2136cfc5..772d49480d137b1957dd255f058245c506eebff2 100644 (file)
@@ -30,6 +30,7 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.sonar.api.resources.Qualifiers;
 import org.sonar.api.rule.RuleKey;
+import org.sonar.api.utils.log.LogTester;
 import org.sonar.db.DbTester;
 import org.sonar.db.component.ComponentDto;
 import org.sonar.db.component.SnapshotDto;
@@ -67,6 +68,8 @@ public class IssueQueryFactoryTest {
   public UserSessionRule userSession = UserSessionRule.standalone();
   @Rule
   public DbTester db = DbTester.create();
+  @Rule
+  public LogTester logTester = new LogTester();
 
   private final RuleDbTester ruleDbTester = new RuleDbTester(db);
   private final Clock clock = mock(Clock.class);
@@ -330,13 +333,13 @@ public class IssueQueryFactoryTest {
   }
 
   @Test
-  public void fail_if_invalid_timezone() {
-    SearchRequest request = new SearchRequest()
-      .setTimeZone("Poitou-Charentes");
+  public void timeZone_ifZoneFromQueryIsUnknown_fallbacksToClockZone() {
+    SearchRequest request = new SearchRequest().setTimeZone("Poitou-Charentes");
+    when(clock.getZone()).thenReturn(ZoneId.systemDefault());
 
-    assertThatThrownBy(() -> underTest.create(request))
-      .isInstanceOf(IllegalArgumentException.class)
-      .hasMessageContaining("TimeZone 'Poitou-Charentes' cannot be parsed as a valid zone ID");
+    IssueQuery issueQuery = underTest.create(request);
+    assertThat(issueQuery.timeZone()).isEqualTo(clock.getZone());
+    assertThat(logTester.logs()).containsOnly("TimeZone 'Poitou-Charentes' cannot be parsed as a valid zone ID");
   }
 
   @Test