]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8028 WS issues/search from and to inclusive for date and date+time
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Mon, 12 Sep 2016 15:47:51 +0000 (17:47 +0200)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Tue, 13 Sep 2016 09:36:39 +0000 (11:36 +0200)
server/sonar-server/src/main/java/org/sonar/server/issue/IssueQueryService.java
server/sonar-server/src/test/java/org/sonar/server/issue/IssueQueryServiceTest.java

index 4ffc976929af38287a6a07ed61ccdd0b900a01ce..08d0f6db3e2e504ddb3b0abe7ac7e9fc770c7dcf 100644 (file)
@@ -122,7 +122,7 @@ public class IssueQueryService {
         .hideRules(RubyUtils.toBoolean(params.get(IssueFilterParameters.HIDE_RULES)))
         .createdAt(RubyUtils.toDate(params.get(IssueFilterParameters.CREATED_AT)))
         .createdAfter(buildCreatedAfterFromDates(RubyUtils.toDate(params.get(CREATED_AFTER)), (String) params.get(CREATED_IN_LAST)))
-        .createdBefore(RubyUtils.toDate(params.get(IssueFilterParameters.CREATED_BEFORE)));
+        .createdBefore(RubyUtils.toDate(buildCreatedBefore((String) params.get(IssueFilterParameters.CREATED_BEFORE))));
 
       Set<String> allComponentUuids = Sets.newHashSet();
       boolean effectiveOnComponentOnly = mergeDeprecatedComponentParameters(session,
@@ -165,6 +165,7 @@ public class IssueQueryService {
     }
   }
 
+  @CheckForNull
   private Date buildCreatedAfterFromDates(@Nullable Date createdAfter, @Nullable String createdInLast) {
     checkArgument(createdAfter == null || createdInLast == null, format("%s and %s cannot be set simultaneously", CREATED_AFTER, CREATED_IN_LAST));
 
@@ -192,7 +193,7 @@ public class IssueQueryService {
         .types(request.getTypes())
         .assigned(request.getAssigned())
         .createdAt(parseAsDateTime(request.getCreatedAt()))
-        .createdBefore(parseAsDateTime(request.getCreatedBefore()))
+        .createdBefore(buildCreatedBefore(request.getCreatedBefore()))
         .facetMode(request.getFacetMode());
 
       Set<String> allComponentUuids = Sets.newHashSet();
@@ -246,6 +247,18 @@ public class IssueQueryService {
     return buildCreatedAfterFromDates(createdAfterFromSnapshot, createdInLast);
   }
 
+  @CheckForNull
+  private static Date buildCreatedBefore(String stringDate) {
+    Date date = DateUtils.parseDateTimeQuietly(stringDate);
+    if (date != null) {
+      return date;
+    }
+
+    date = DateUtils.parseDateQuietly(stringDate);
+
+    return date == null ? null : DateUtils.addDays(date, 1);
+  }
+
   @CheckForNull
   private Date findCreatedAfterFromComponentUuid(DbSession dbSession, String uuid) {
     ComponentDto component = checkFoundWithOptional(componentService.getByUuid(uuid), "Component with id '%s' not found", uuid);
index becabf751633b9039cdab5adab0a46cc3537b2f9..d80e0a407c9de62fe17bf5c287c8b0b18a62d630 100644 (file)
@@ -160,6 +160,18 @@ public class IssueQueryServiceTest {
     assertThat(query.asc()).isTrue();
   }
 
+  @Test
+  public void dates_are_inclusive() {
+    SearchWsRequest request = new SearchWsRequest()
+      .setCreatedAfter("2013-04-16")
+      .setCreatedBefore("2013-04-17");
+
+    IssueQuery query = underTest.createFromRequest(request);
+
+    assertThat(query.createdAfter()).isEqualTo(DateUtils.parseDate("2013-04-16"));
+    assertThat(query.createdBefore()).isEqualTo(DateUtils.parseDate("2013-04-18"));
+  }
+
   @Test
   public void add_unknown_when_no_component_found() {
     Map<String, Object> map = newHashMap();