private static void checkNotBuiltIn(QualityGateDto qualityGate) { checkArgument(!qualityGate.isBuiltIn(), "Operation forbidden for built-in Quality Gate '%s'", qualityGate.getName()); }
private void deleteQualityGates(DbSession dbSession, OrganizationDto organization) { Collection<QualityGateDto> qualityGates = dbClient.qualityGateDao().selectAll(dbSession, organization); dbClient.qualityGateDao().deleteByUuids(dbSession, qualityGates.stream() .filter(q -> !q.isBuiltIn()) .map(QualityGateDto::getUuid) .collect(MoreCollectors.toList())); dbClient.qualityGateDao().deleteOrgQualityGatesByOrganization(dbSession, organization); }
private ShowWsResponse buildResponse(OrganizationDto organization, QualityGateDto qualityGate, QualityGateDto defaultQualityGate, Collection<QualityGateConditionDto> conditions, Map<Integer, MetricDto> metricsById) { return ShowWsResponse.newBuilder() .setId(qualityGate.getId()) .setName(qualityGate.getName()) .setIsBuiltIn(qualityGate.isBuiltIn()) .addAllConditions(conditions.stream() .map(toWsCondition(metricsById)) .collect(toList())) .setActions(wsSupport.getActions(organization, qualityGate, defaultQualityGate)) .build(); }
@Test public void create_quality_gate() { OrganizationDto organization = db.organizations().insert(); QualityGateDto result = underTest.create(dbSession, organization, QGATE_NAME); assertThat(result).isNotNull(); assertThat(result.getName()).isEqualTo(QGATE_NAME); assertThat(result.getCreatedAt()).isNotNull(); assertThat(result.isBuiltIn()).isFalse(); QualityGateDto reloaded = dbClient.qualityGateDao().selectByName(dbSession, QGATE_NAME); assertThat(reloaded).isNotNull(); }
private ListWsResponse buildResponse(OrganizationDto organization, Collection<QualityGateDto> qualityGates, @Nullable QualityGateDto defaultQualityGate) { Long defaultId = defaultQualityGate == null ? null : defaultQualityGate.getId(); ListWsResponse.Builder builder = ListWsResponse.newBuilder() .setActions(ListWsResponse.RootActions.newBuilder().setCreate(wsSupport.isQualityGateAdmin(organization))) .addAllQualitygates(qualityGates.stream() .map(qualityGate -> QualityGate.newBuilder() .setId(qualityGate.getId()) .setName(qualityGate.getName()) .setIsDefault(qualityGate.getId().equals(defaultId)) .setIsBuiltIn(qualityGate.isBuiltIn()) .setActions(wsSupport.getActions(organization, qualityGate, defaultQualityGate)) .build()) .collect(toList())); ofNullable(defaultId).ifPresent(builder::setDefault); return builder.build(); }
Qualitygates.Actions getActions(OrganizationDto organization, QualityGateDto qualityGate, @Nullable QualityGateDto defaultQualityGate) { Long defaultId = defaultQualityGate == null ? null : defaultQualityGate.getId(); boolean isDefault = qualityGate.getId().equals(defaultId); boolean isBuiltIn = qualityGate.isBuiltIn(); boolean isQualityGateAdmin = isQualityGateAdmin(organization); return Qualitygates.Actions.newBuilder() .setCopy(isQualityGateAdmin) .setRename(!isBuiltIn && isQualityGateAdmin) .setManageConditions(!isBuiltIn && isQualityGateAdmin) .setDelete(!isDefault && !isBuiltIn && isQualityGateAdmin) .setSetAsDefault(!isDefault && isQualityGateAdmin) .setAssociateProjects(!isDefault && isQualityGateAdmin) .build(); }
@Test public void ensure_only_one_built_in_quality_gate() { insertMetrics(); String qualityGateName = "IncorrectQualityGate"; QualityGateDto builtin = new QualityGateDto().setName(qualityGateName).setBuiltIn(true).setUuid(Uuids.createFast()); qualityGateDao.insert(dbSession, builtin); dbSession.commit(); underTest.start(); QualityGateDto oldQualityGate = qualityGateDao.selectByName(dbSession, qualityGateName); assertThat(oldQualityGate).isNotNull(); assertThat(oldQualityGate.isBuiltIn()).isFalse(); assertThat(db.select("select name as \"name\" from quality_gates where is_built_in is true")) .extracting(column -> column.get("name")) .containsExactly(BUILT_IN_NAME); assertThat( logTester.logs(LoggerLevel.INFO).contains("Built-in quality gate [Sonar way] has been created")).isTrue(); assertThat( logTester.logs(LoggerLevel.INFO).contains("Built-in quality gate's conditions of [Sonar way] has been updated")).isTrue(); }
@Test public void insert() { QualityGateDto newQgate = new QualityGateDto() .setUuid(Uuids.createFast()) .setName("My Quality Gate") .setBuiltIn(false) .setUpdatedAt(new Date()); underTest.insert(dbSession, newQgate); dbSession.commit(); QualityGateDto reloaded = underTest.selectById(dbSession, newQgate.getId()); assertThat(reloaded.getName()).isEqualTo("My Quality Gate"); assertThat(reloaded.getUuid()).isEqualTo(newQgate.getUuid()); assertThat(reloaded.isBuiltIn()).isFalse(); assertThat(reloaded.getCreatedAt()).isNotNull(); assertThat(reloaded.getUpdatedAt()).isNotNull(); }
@Test public void insert_built_in() { underTest.insert(db.getSession(), new QualityGateDto().setName("test").setBuiltIn(true).setUuid(Uuids.createFast())); QualityGateDto reloaded = underTest.selectByName(db.getSession(), "test"); assertThat(reloaded.isBuiltIn()).isTrue(); }
private void verifyCorrectBuiltInQualityGate() { MetricDto newReliability = metricDao.selectByKey(dbSession, NEW_RELIABILITY_RATING_KEY); MetricDto newSecurity = metricDao.selectByKey(dbSession, NEW_SECURITY_RATING_KEY); MetricDto newMaintainability = metricDao.selectByKey(dbSession, NEW_MAINTAINABILITY_RATING_KEY); MetricDto newCoverage = metricDao.selectByKey(dbSession, NEW_COVERAGE_KEY); MetricDto newDuplication = metricDao.selectByKey(dbSession, NEW_DUPLICATED_LINES_DENSITY_KEY); QualityGateDto qualityGateDto = qualityGateDao.selectByName(dbSession, BUILT_IN_NAME); assertThat(qualityGateDto).isNotNull(); assertThat(qualityGateDto.getCreatedAt()).isNotNull(); assertThat(qualityGateDto.isBuiltIn()).isTrue(); assertThat(gateConditionDao.selectForQualityGate(dbSession, qualityGateDto.getId())) .extracting(QualityGateConditionDto::getMetricId, QualityGateConditionDto::getOperator, QualityGateConditionDto::getErrorThreshold) .containsOnly( tuple(newReliability.getId().longValue(), OPERATOR_GREATER_THAN, "1"), tuple(newSecurity.getId().longValue(), OPERATOR_GREATER_THAN, "1"), tuple(newMaintainability.getId().longValue(), OPERATOR_GREATER_THAN, "1"), tuple(newCoverage.getId().longValue(), OPERATOR_LESS_THAN, "80"), tuple(newDuplication.getId().longValue(), OPERATOR_GREATER_THAN, "3")); }
@Test public void copy_of_builtin_should_not_be_builtin() { OrganizationDto organization = db.organizations().insert(); userSession.addPermission(ADMINISTER_QUALITY_GATES, organization); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization, qualityGateDto -> qualityGateDto.setBuiltIn(true)); ws.newRequest() .setParam(PARAM_ID, qualityGate.getId().toString()) .setParam(PARAM_NAME, "new-name") .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); QualityGateDto actual = db.getDbClient().qualityGateDao().selectByName(dbSession, "new-name"); assertThat(actual).isNotNull(); assertThat(actual.isBuiltIn()).isFalse(); }
@Override public void start() { try (DbSession dbSession = dbClient.openSession(false)) { QualityGateDto builtin = qualityGateDao.selectByName(dbSession, BUILTIN_QUALITY_GATE_NAME); // Create builtin if not present if (builtin == null) { LOGGER.info("Built-in quality gate [{}] has been created", BUILTIN_QUALITY_GATE_NAME); builtin = createQualityGate(dbSession, BUILTIN_QUALITY_GATE_NAME); } // Set builtin if missing if (!builtin.isBuiltIn()) { builtin.setBuiltIn(true); dbClient.qualityGateDao().update(builtin, dbSession); LOGGER.info("Quality gate [{}] has been set as built-in", BUILTIN_QUALITY_GATE_NAME); } updateQualityConditionsIfRequired(dbSession, builtin); qualityGateDao.ensureOneBuiltInQualityGate(dbSession, BUILTIN_QUALITY_GATE_NAME); dbSession.commit(); } }
private static void checkNotBuiltIn(QualityGateDto qualityGate) { checkArgument(!qualityGate.isBuiltIn(), "Operation forbidden for built-in Quality Gate '%s'", qualityGate.getName()); }
private void deleteQualityGates(DbSession dbSession, OrganizationDto organization) { Collection<QualityGateDto> qualityGates = dbClient.qualityGateDao().selectAll(dbSession, organization); dbClient.qualityGateDao().deleteByUuids(dbSession, qualityGates.stream() .filter(q -> !q.isBuiltIn()) .map(QualityGateDto::getUuid) .collect(MoreCollectors.toList())); dbClient.qualityGateDao().deleteOrgQualityGatesByOrganization(dbSession, organization); }
private ShowWsResponse buildResponse(OrganizationDto organization, QualityGateDto qualityGate, QualityGateDto defaultQualityGate, Collection<QualityGateConditionDto> conditions, Map<Integer, MetricDto> metricsById) { return ShowWsResponse.newBuilder() .setId(qualityGate.getId()) .setName(qualityGate.getName()) .setIsBuiltIn(qualityGate.isBuiltIn()) .addAllConditions(conditions.stream() .map(toWsCondition(metricsById)) .collect(toList())) .setActions(wsSupport.getActions(organization, qualityGate, defaultQualityGate)) .build(); }
Qualitygates.Actions getActions(OrganizationDto organization, QualityGateDto qualityGate, @Nullable QualityGateDto defaultQualityGate) { Long defaultId = defaultQualityGate == null ? null : defaultQualityGate.getId(); boolean isDefault = qualityGate.getId().equals(defaultId); boolean isBuiltIn = qualityGate.isBuiltIn(); boolean isQualityGateAdmin = isQualityGateAdmin(organization); return Qualitygates.Actions.newBuilder() .setCopy(isQualityGateAdmin) .setRename(!isBuiltIn && isQualityGateAdmin) .setManageConditions(!isBuiltIn && isQualityGateAdmin) .setDelete(!isDefault && !isBuiltIn && isQualityGateAdmin) .setSetAsDefault(!isDefault && isQualityGateAdmin) .setAssociateProjects(!isDefault && isQualityGateAdmin) .build(); }
private ListWsResponse buildResponse(OrganizationDto organization, Collection<QualityGateDto> qualityGates, @Nullable QualityGateDto defaultQualityGate) { Long defaultId = defaultQualityGate == null ? null : defaultQualityGate.getId(); ListWsResponse.Builder builder = ListWsResponse.newBuilder() .setActions(ListWsResponse.RootActions.newBuilder().setCreate(wsSupport.isQualityGateAdmin(organization))) .addAllQualitygates(qualityGates.stream() .map(qualityGate -> QualityGate.newBuilder() .setId(qualityGate.getId()) .setName(qualityGate.getName()) .setIsDefault(qualityGate.getId().equals(defaultId)) .setIsBuiltIn(qualityGate.isBuiltIn()) .setActions(wsSupport.getActions(organization, qualityGate, defaultQualityGate)) .build()) .collect(toList())); setNullable(defaultId, builder::setDefault); return builder.build(); }
@Override public void start() { try (DbSession dbSession = dbClient.openSession(false)) { QualityGateDto builtin = qualityGateDao.selectByName(dbSession, BUILTIN_QUALITY_GATE_NAME); // Create builtin if not present if (builtin == null) { LOGGER.info("Built-in quality gate [{}] has been created", BUILTIN_QUALITY_GATE_NAME); builtin = createQualityGate(dbSession, BUILTIN_QUALITY_GATE_NAME); } // Set builtin if missing if (!builtin.isBuiltIn()) { builtin.setBuiltIn(true); dbClient.qualityGateDao().update(builtin, dbSession); LOGGER.info("Quality gate [{}] has been set as built-in", BUILTIN_QUALITY_GATE_NAME); } updateQualityConditionsIfRequired(dbSession, builtin); qualityGateDao.ensureOneBuiltInQualityGate(dbSession, BUILTIN_QUALITY_GATE_NAME); dbSession.commit(); } }