private Collection<QualityGateConditionDto> getConditions(DbSession dbSession, long qGateId) { return dbClient.gateConditionDao().selectForQualityGate(dbSession, qGateId); }
private void updateQualityConditionsIfRequired(DbSession dbSession, QualityGateDto builtin) { Map<Long, String> idToKeyMetric = dbClient.metricDao().selectAll(dbSession).stream() .collect(toMap(metricDto -> metricDto.getId().longValue(), MetricDto::getKey)); List<QualityGateCondition> qualityGateConditions = qualityGateConditionDao.selectForQualityGate(dbSession, builtin.getId()) .stream() .map(dto -> QualityGateCondition.from(dto, idToKeyMetric)) .collect(MoreCollectors.toList()); // Find all conditions that are not present in QUALITY_GATE_CONDITIONS // Those conditions must be deleted List<QualityGateCondition> qgConditionsToBeDeleted = new ArrayList<>(qualityGateConditions); qgConditionsToBeDeleted.removeAll(QUALITY_GATE_CONDITIONS); qgConditionsToBeDeleted .forEach(qgc -> qualityGateConditionDao.delete(qgc.toQualityGateDto(builtin.getId()), dbSession)); // Find all conditions that are not present in qualityGateConditions // Those conditions must be created List<QualityGateCondition> qgConditionsToBeCreated = new ArrayList<>(QUALITY_GATE_CONDITIONS); qgConditionsToBeCreated.removeAll(qualityGateConditions); qgConditionsToBeCreated .forEach(qgc -> qualityGateConditionsUpdater.createCondition(dbSession, builtin, qgc.getMetricKey(), qgc.getOperator(), qgc.getErrorThreshold())); if (!qgConditionsToBeCreated.isEmpty() || !qgConditionsToBeDeleted.isEmpty()) { LOGGER.info("Built-in quality gate's conditions of [{}] has been updated", BUILTIN_QUALITY_GATE_NAME); } }
public QualityGateDto copy(DbSession dbSession, OrganizationDto organizationDto, QualityGateDto qualityGateDto, String destinationName) { QualityGateDto destinationGate = create(dbSession, organizationDto, destinationName); for (QualityGateConditionDto sourceCondition : dbClient.gateConditionDao().selectForQualityGate(dbSession, qualityGateDto.getId())) { dbClient.gateConditionDao().insert(new QualityGateConditionDto() .setQualityGateId(destinationGate.getId()) .setMetricId(sourceCondition.getMetricId()) .setOperator(sourceCondition.getOperator()) .setErrorThreshold(sourceCondition.getErrorThreshold()), dbSession); } return destinationGate; }
@SafeVarargs public final QualityGateConditionDto addCondition(QualityGateDto qualityGate, MetricDto metric, Consumer<QualityGateConditionDto>... dtoPopulators) { QualityGateConditionDto condition = new QualityGateConditionDto().setQualityGateId(qualityGate.getId()) .setMetricId(metric.getId()) .setOperator("GT") .setErrorThreshold(randomNumeric(10)); Arrays.stream(dtoPopulators).forEach(dtoPopulator -> dtoPopulator.accept(condition)); dbClient.gateConditionDao().insert(condition, dbSession); db.commit(); return condition; } }
QualityGateConditionDto getCondition(DbSession dbSession, long id) { return checkFound(dbClient.gateConditionDao().selectById(id, dbSession), "No quality gate condition with id '%d'", id); }
@Test public void upgrade_should_add_missing_condition() { insertMetrics(); QualityGateDto builtInQualityGate = db.qualityGates().insertBuiltInQualityGate(); List<QualityGateConditionDto> builtInConditions = createBuiltInConditions(builtInQualityGate); // Remove a condition QualityGateConditionDto conditionToBeDeleted = builtInConditions.get(new Random().nextInt(builtInConditions.size())); gateConditionDao.delete(conditionToBeDeleted, dbSession); dbSession.commit(); underTest.start(); assertThat(db.countRowsOfTable("quality_gates")).isEqualTo(1); verifyCorrectBuiltInQualityGate(); assertThat( logTester.logs(LoggerLevel.INFO).contains("Built-in quality gate's conditions of [Sonar way] has been updated")).isTrue(); }
private void sanitizeQualityGates(DbSession session) { dbClient.gateConditionDao().deleteConditionsWithInvalidMetrics(session); }
public QualityGateConditionDto updateCondition(DbSession dbSession, QualityGateConditionDto condition, String metricKey, String operator, String errorThreshold) { MetricDto metric = getNonNullMetric(dbSession, metricKey); validateCondition(metric, operator, errorThreshold); condition .setMetricId(metric.getId()) .setMetricKey(metric.getKey()) .setOperator(operator) .setErrorThreshold(errorThreshold); dbClient.gateConditionDao().update(condition, dbSession); return condition; }
public void deleteConditionsWithInvalidMetrics(DbSession session) { mapper(session).deleteConditionsWithInvalidMetrics(); }
@Test public void builtin_quality_gate_with_incorrect_metricId_should_not_throw_an_exception() { insertMetrics(); QualityGateConditionDto conditionDto = new QualityGateConditionDto() .setMetricId(-1) // This Id does not exist .setOperator(OPERATOR_GREATER_THAN) .setErrorThreshold("1"); gateConditionDao.insert(conditionDto, dbSession); dbSession.commit(); underTest.start(); // No exception thrown verifyCorrectBuiltInQualityGate(); assertThat( logTester.logs(LoggerLevel.INFO).contains("Built-in quality gate's conditions of [Sonar way] has been updated")).isTrue(); }
@Test public void testSelectById() { dbTester.prepareDbUnit(getClass(), "selectForQualityGate.xml"); QualityGateConditionDto selectById = underTest.selectById(1L, dbSession); assertThat(selectById).isNotNull(); assertThat(selectById.getId()).isNotNull().isNotEqualTo(0L); assertThat(selectById.getMetricId()).isEqualTo(2L); assertThat(selectById.getOperator()).isEqualTo("<"); assertThat(selectById.getQualityGateId()).isEqualTo(1L); assertThat(selectById.getErrorThreshold()).isEqualTo("20"); assertThat(underTest.selectById(42L, dbSession)).isNull(); }
@Test public void testDelete() { dbTester.prepareDbUnit(getClass(), "selectForQualityGate.xml"); underTest.delete(new QualityGateConditionDto().setId(1L), dbSession); dbSession.commit(); dbTester.assertDbUnitTable(getClass(), "delete-result.xml", "quality_gate_conditions", COLUMNS_WITHOUT_TIMESTAMPS); }
@Test public void shouldCleanConditions() { dbTester.prepareDbUnit(getClass(), "shouldCleanConditions.xml"); underTest.deleteConditionsWithInvalidMetrics(dbTester.getSession()); dbTester.commit(); dbTester.assertDbUnit(getClass(), "shouldCleanConditions-result.xml", new String[] {"created_at", "updated_at"}, "quality_gate_conditions"); } }
@Test public void testUpdate() { dbTester.prepareDbUnit(getClass(), "selectForQualityGate.xml"); underTest.update(new QualityGateConditionDto().setId(1L).setMetricId(7L).setOperator(">").setErrorThreshold("80"), dbSession); dbSession.commit(); dbTester.assertDbUnitTable(getClass(), "update-result.xml", "quality_gate_conditions", COLUMNS_WITHOUT_TIMESTAMPS); }
public QualityGateConditionDto selectById(long id, DbSession session) { return mapper(session).selectById(id); }
public Collection<QualityGateConditionDto> getConditions(DbSession dbSession, QualityGateDto qualityGate) { return dbClient.gateConditionDao().selectForQualityGate(dbSession, qualityGate.getId()); }
public QualityGateDto copy(DbSession dbSession, OrganizationDto organizationDto, QualityGateDto qualityGateDto, String destinationName) { QualityGateDto destinationGate = create(dbSession, organizationDto, destinationName); for (QualityGateConditionDto sourceCondition : dbClient.gateConditionDao().selectForQualityGate(dbSession, qualityGateDto.getId())) { dbClient.gateConditionDao().insert(new QualityGateConditionDto().setQualityGateId(destinationGate.getId()) .setMetricId(sourceCondition.getMetricId()).setOperator(sourceCondition.getOperator()) .setWarningThreshold(sourceCondition.getWarningThreshold()).setErrorThreshold(sourceCondition.getErrorThreshold()).setPeriod(sourceCondition.getPeriod()), dbSession); } return destinationGate; }
private void updateQualityConditionsIfRequired(DbSession dbSession, QualityGateDto builtin) { Map<Long, String> idToKeyMetric = dbClient.metricDao().selectAll(dbSession).stream() .collect(toMap(metricDto -> metricDto.getId().longValue(), MetricDto::getKey)); List<QualityGateCondition> qualityGateConditions = qualityGateConditionDao.selectForQualityGate(dbSession, builtin.getId()) .stream() .map(dto -> QualityGateCondition.from(dto, idToKeyMetric)) .collect(MoreCollectors.toList()); // Find all conditions that are not present in QUALITY_GATE_CONDITIONS // Those conditions must be deleted List<QualityGateCondition> qgConditionsToBeDeleted = new ArrayList<>(qualityGateConditions); qgConditionsToBeDeleted.removeAll(QUALITY_GATE_CONDITIONS); qgConditionsToBeDeleted.stream() .forEach(qgc -> qualityGateConditionDao.delete(qgc.toQualityGateDto(builtin.getId()), dbSession)); // Find all conditions that are not present in qualityGateConditions // Those conditions must be created List<QualityGateCondition> qgConditionsToBeCreated = new ArrayList<>(QUALITY_GATE_CONDITIONS); qgConditionsToBeCreated.removeAll(qualityGateConditions); qgConditionsToBeCreated.stream() .forEach(qgc -> qualityGateConditionsUpdater.createCondition(dbSession, builtin, qgc.getMetricKey(), qgc.getOperator(), qgc.getWarningThreshold(), qgc.getErrorThreshold(), qgc.getPeriod())); if (!qgConditionsToBeCreated.isEmpty() || !qgConditionsToBeDeleted.isEmpty()) { LOGGER.info("Built-in quality gate's conditions of [{}] has been updated", BUILTIN_QUALITY_GATE_NAME); } }
@Test public void testInsert() { dbTester.prepareDbUnit(getClass(), "insert.xml"); QualityGateConditionDto newCondition = new QualityGateConditionDto() .setQualityGateId(1L).setMetricId(2L).setOperator("GT").setErrorThreshold("20"); underTest.insert(newCondition, dbTester.getSession()); dbTester.commit(); dbTester.assertDbUnitTable(getClass(), "insert-result.xml", "quality_gate_conditions", "metric_id", "operator", "error_value"); assertThat(newCondition.getId()).isNotNull(); }
private void verifyCondition(QualityGateConditionDto dto, QualityGateDto qualityGate, MetricDto metric, String operator, String error) { QualityGateConditionDto reloaded = db.getDbClient().gateConditionDao().selectById(dto.getId(), db.getSession()); assertThat(reloaded.getQualityGateId()).isEqualTo(qualityGate.getId()); assertThat(reloaded.getMetricId()).isEqualTo(metric.getId().longValue()); assertThat(reloaded.getOperator()).isEqualTo(operator); assertThat(reloaded.getErrorThreshold()).isEqualTo(error); assertThat(dto.getQualityGateId()).isEqualTo(qualityGate.getId()); assertThat(dto.getMetricId()).isEqualTo(metric.getId().longValue()); assertThat(dto.getOperator()).isEqualTo(operator); assertThat(dto.getErrorThreshold()).isEqualTo(error); }