private CeTaskQuery buildQuery(DbSession dbSession, Request request, @Nullable ComponentDto component) { CeTaskQuery query = new CeTaskQuery(); query.setType(request.getType()); query.setOnlyCurrents(parseBoolean(request.getOnlyCurrents())); Date minSubmittedAt = parseStartingDateOrDateTime(request.getMinSubmittedAt()); query.setMinSubmittedAt(minSubmittedAt == null ? null : minSubmittedAt.getTime()); Date maxExecutedAt = parseEndingDateOrDateTime(request.getMaxExecutedAt()); query.setMaxExecutedAt(maxExecutedAt == null ? null : maxExecutedAt.getTime()); List<String> statuses = request.getStatus(); if (statuses != null && !statuses.isEmpty()) { query.setStatuses(request.getStatus()); } String componentQuery = request.getQ(); if (component != null) { query.setMainComponentUuid(component.uuid()); } else if (componentQuery != null) { query.setMainComponentUuids(loadComponents(dbSession, componentQuery).stream() .map(ComponentDto::uuid) .collect(toList())); } return query; }
@Test public void filter_on_component_uuid() { underTest.setMainComponentUuid("UUID1"); assertThat(underTest.getMainComponentUuids()).containsOnly("UUID1"); assertThat(underTest.isShortCircuitedByMainComponentUuids()).isFalse(); }
@Test public void selectByQuery_populates_hasScannerContext_flag() { insert("TASK_1", REPORT, MAINCOMPONENT_1, SUCCESS); CeActivityDto dto2 = insert("TASK_2", REPORT, MAINCOMPONENT_2, SUCCESS); insertScannerContext(dto2.getUuid()); CeActivityDto dto = underTest.selectByQuery(db.getSession(), new CeTaskQuery().setMainComponentUuid(MAINCOMPONENT_1), forPage(1).andSize(100)).iterator().next(); assertThat(dto.isHasScannerContext()).isFalse(); dto = underTest.selectByQuery(db.getSession(), new CeTaskQuery().setMainComponentUuid(MAINCOMPONENT_2), forPage(1).andSize(100)).iterator().next(); assertThat(dto.isHasScannerContext()).isTrue(); }
@Override public void handle(Request wsRequest, Response wsResponse) throws Exception { try (DbSession dbSession = dbClient.openSession(false)) { ComponentDto component = loadComponent(dbSession, wsRequest); userSession.checkComponentPermission(UserRole.USER, component); List<CeQueueDto> queueDtos = dbClient.ceQueueDao().selectByMainComponentUuid(dbSession, component.uuid()); CeTaskQuery activityQuery = new CeTaskQuery() .setMainComponentUuid(component.uuid()) .setOnlyCurrents(true); List<CeActivityDto> activityDtos = dbClient.ceActivityDao().selectByQuery(dbSession, activityQuery, forPage(1).andSize(1)); Ce.ComponentResponse.Builder wsResponseBuilder = ComponentResponse.newBuilder(); wsResponseBuilder.addAllQueue(formatter.formatQueue(dbSession, queueDtos)); if (activityDtos.size() == 1) { wsResponseBuilder.setCurrent(formatter.formatActivity(dbSession, activityDtos.get(0), null, emptyList())); } writeProtobuf(wsResponseBuilder.build(), wsRequest, wsResponse); } }
@Test public void selectByQuery_does_not_populate_errorStacktrace_field() { insert("TASK_1", REPORT, MAINCOMPONENT_1, FAILED); underTest.insert(db.getSession(), createActivityDto("TASK_2", REPORT, COMPONENT_1, MAINCOMPONENT_1, FAILED).setErrorStacktrace("some stack")); List<CeActivityDto> dtos = underTest.selectByQuery(db.getSession(), new CeTaskQuery().setMainComponentUuid(MAINCOMPONENT_1), forPage(1).andSize(100)); assertThat(dtos) .hasSize(2) .extracting("errorStacktrace").containsOnly((String) null); }
@Test public void test_selectByQuery() { insert("TASK_1", REPORT, MAINCOMPONENT_1, SUCCESS); insert("TASK_2", REPORT, MAINCOMPONENT_1, FAILED); insert("TASK_3", REPORT, MAINCOMPONENT_2, SUCCESS); insert("TASK_4", "views", null, SUCCESS); // no filters CeTaskQuery query = new CeTaskQuery().setStatuses(Collections.emptyList()); List<CeActivityDto> dtos = underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(10)); assertThat(dtos).extracting("uuid").containsExactly("TASK_4", "TASK_3", "TASK_2", "TASK_1"); // select by component uuid query = new CeTaskQuery().setMainComponentUuid(MAINCOMPONENT_1); dtos = underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100)); assertThat(dtos).extracting("uuid").containsExactly("TASK_2", "TASK_1"); // select by status query = new CeTaskQuery().setStatuses(singletonList(SUCCESS.name())); dtos = underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100)); assertThat(dtos).extracting("uuid").containsExactly("TASK_4", "TASK_3", "TASK_1"); // select by type query = new CeTaskQuery().setType(REPORT); dtos = underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100)); assertThat(dtos).extracting("uuid").containsExactly("TASK_3", "TASK_2", "TASK_1"); query = new CeTaskQuery().setType("views"); dtos = underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100)); assertThat(dtos).extracting("uuid").containsExactly("TASK_4"); // select by multiple conditions query = new CeTaskQuery().setType(REPORT).setOnlyCurrents(true).setMainComponentUuid(MAINCOMPONENT_1); dtos = underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100)); assertThat(dtos).extracting("uuid").containsExactly("TASK_2"); }
query = new CeTaskQuery().setMainComponentUuid("PROJECT_1"); assertThat(underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100))) .extracting(CeActivityDto::getUuid, CeActivityDto::getWarningCount) query = new CeTaskQuery().setType(REPORT).setOnlyCurrents(true).setMainComponentUuid("PROJECT_1"); assertThat(underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100))) .extracting(CeActivityDto::getUuid, CeActivityDto::getWarningCount)