]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8028 WS ce/activity from and to inclusive for date and date+time
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Mon, 12 Sep 2016 15:22:34 +0000 (17:22 +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/ce/ws/ActivityAction.java
server/sonar-server/src/test/java/org/sonar/server/ce/ws/ActivityActionTest.java

index 34eb3d7504f9d8d273d73a461f536878ef298422..d06e82c90b13686e731a6f95ff2b6fcb47460c56 100644 (file)
@@ -211,8 +211,8 @@ public class ActivityAction implements CeWsAction {
     CeTaskQuery query = new CeTaskQuery();
     query.setType(request.getType());
     query.setOnlyCurrents(request.getOnlyCurrents());
-    query.setMinSubmittedAt(parseDateTimeAsLong(request.getMinSubmittedAt()));
-    query.setMaxExecutedAt(parseDateTimeAsLong(request.getMaxExecutedAt()));
+    query.setMinSubmittedAt(parseFromDate(request.getMinSubmittedAt()));
+    query.setMaxExecutedAt(parseToDate(request.getMaxExecutedAt()));
 
     List<String> statuses = request.getStatus();
     if (statuses != null && !statuses.isEmpty()) {
@@ -265,7 +265,7 @@ public class ActivityAction implements CeWsAction {
   }
 
   @CheckForNull
-  private static Long parseDateTimeAsLong(@Nullable String dateAsString) {
+  private static Long parseToDate(@Nullable String dateAsString) {
     if (dateAsString == null) {
       return null;
     }
@@ -280,6 +280,21 @@ public class ActivityAction implements CeWsAction {
     return date.getTime();
   }
 
+  @CheckForNull
+  private static Long parseFromDate(@Nullable String dateAsString) {
+    if (dateAsString == null) {
+      return null;
+    }
+
+    Date date = parseDateTimeQuietly(dateAsString);
+    if (date == null) {
+      date = parseDateQuietly(dateAsString);
+      checkRequest(date != null, "Date '%s' cannot be parsed as either a date or date+time", dateAsString);
+    }
+
+    return date.getTime();
+  }
+
   public static boolean isAllowedOnComponentUuid(UserSession userSession, String componentUuid) {
     return userSession.hasPermission(GlobalPermissions.SYSTEM_ADMIN) || userSession.hasComponentUuidPermission(UserRole.ADMIN, componentUuid);
   }
index 50cf0643a3f4b1fda1c7925e352dfaea81c011d6..34b86270e3d023ce867bee4b9f8f47bfa45e9c26 100644 (file)
@@ -48,7 +48,6 @@ import org.sonar.test.JsonAssert;
 import org.sonarqube.ws.MediaTypes;
 import org.sonarqube.ws.WsCe;
 import org.sonarqube.ws.WsCe.ActivityResponse;
-import org.sonarqube.ws.client.ce.CeWsParameters;
 
 import static java.util.Arrays.asList;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -60,6 +59,8 @@ import static org.sonar.db.component.ComponentTesting.newProjectDto;
 import static org.sonar.db.component.ComponentTesting.newView;
 import static org.sonarqube.ws.client.ce.CeWsParameters.PARAM_COMPONENT_ID;
 import static org.sonarqube.ws.client.ce.CeWsParameters.PARAM_COMPONENT_QUERY;
+import static org.sonarqube.ws.client.ce.CeWsParameters.PARAM_MAX_EXECUTED_AT;
+import static org.sonarqube.ws.client.ce.CeWsParameters.PARAM_MIN_SUBMITTED_AT;
 import static org.sonarqube.ws.client.ce.CeWsParameters.PARAM_STATUS;
 import static org.sonarqube.ws.client.ce.CeWsParameters.PARAM_TYPE;
 
@@ -87,7 +88,7 @@ public class ActivityActionTest {
     insertActivity("T2", "PROJECT_2", CeActivityDto.Status.FAILED);
 
     ActivityResponse activityResponse = call(ws.newRequest()
-      .setParam(CeWsParameters.PARAM_MAX_EXECUTED_AT, formatDateTime(EXECUTED_AT + 2_000)));
+      .setParam(PARAM_MAX_EXECUTED_AT, formatDateTime(EXECUTED_AT + 2_000)));
 
     assertThat(activityResponse.getTasksCount()).isEqualTo(2);
     // chronological order, from newest to oldest
@@ -127,19 +128,20 @@ public class ActivityActionTest {
 
     ActivityResponse activityResponse = call(ws.newRequest()
       .setParam("status", "FAILED,IN_PROGRESS,SUCCESS")
-      .setParam(CeWsParameters.PARAM_MAX_EXECUTED_AT, "2016-02-15"));
+      .setParam(PARAM_MAX_EXECUTED_AT, "2016-02-15"));
 
     assertThat(activityResponse.getTasksCount()).isEqualTo(0);
   }
 
   @Test
-  public void filter_by_max_executed_at_include_day_filled() {
+  public void filter_by_min_submitted_and_max_executed_at_include_day() {
     globalAdmin();
     insertActivity("T1", "PROJECT_1", CeActivityDto.Status.SUCCESS);
     String today = formatDate(new Date(EXECUTED_AT));
 
     ActivityResponse activityResponse = call(ws.newRequest()
-      .setParam(CeWsParameters.PARAM_MAX_EXECUTED_AT, today));
+      .setParam(PARAM_MIN_SUBMITTED_AT, today)
+      .setParam(PARAM_MAX_EXECUTED_AT, today));
 
     assertThat(activityResponse.getTasksCount()).isEqualTo(1);
   }
@@ -314,7 +316,7 @@ public class ActivityActionTest {
     expectedException.expectMessage("Date 'ill-formatted-date' cannot be parsed as either a date or date+time");
 
     ws.newRequest()
-      .setParam(CeWsParameters.PARAM_MAX_EXECUTED_AT, "ill-formatted-date")
+      .setParam(PARAM_MAX_EXECUTED_AT, "ill-formatted-date")
       .execute();
   }
 
@@ -348,6 +350,7 @@ public class ActivityActionTest {
     queueDto.setTaskType(CeTaskTypes.REPORT);
     queueDto.setComponentUuid(componentUuid);
     queueDto.setUuid(taskUuid);
+    queueDto.setCreatedAt(EXECUTED_AT);
     CeActivityDto activityDto = new CeActivityDto(queueDto);
     activityDto.setStatus(status);
     activityDto.setExecutionTimeMs(500L);