@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(); }
private QualityGateDto createQualityGate(DbSession dbSession, String name) { QualityGateDto qualityGate = new QualityGateDto() .setName(name) .setBuiltIn(true) .setUuid(uuidFactory.create()) .setCreatedAt(new Date(system2.now())); return dbClient.qualityGateDao().insert(dbSession, qualityGate); }
private QualityGate toQualityGate(DbSession dbSession, QualityGateDto qualityGateDto) { Collection<QualityGateConditionDto> dtos = dbClient.gateConditionDao().selectForQualityGate(dbSession, qualityGateDto.getId()); Iterable<Condition> conditions = dtos.stream() .map(input -> metricRepository.getOptionalById(input.getMetricId()) .map(metric -> new Condition(metric, input.getOperator(), input.getErrorThreshold())) .orElse(null)) .filter(Objects::nonNull) .collect(toList(dtos.size())); return new QualityGate(qualityGateDto.getId(), qualityGateDto.getName(), conditions); }
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(); }
private void checkNotAlreadyExists(DbSession dbSession, OrganizationDto organization, QualityGateDto qualityGate, String name) { QualityGateDto existingQgate = dbClient.qualityGateDao().selectByOrganizationAndName(dbSession, organization, name); boolean isModifyingCurrentQgate = existingQgate == null || existingQgate.getId().equals(qualityGate.getId()); checkArgument(isModifyingCurrentQgate, "Name '%s' has already been taken", name); }
@Test public void actions_with_quality_gate_administer_permission() { OrganizationDto organization = db.organizations().insert(); userSession.logIn("john").addPermission(ADMINISTER_QUALITY_GATES, organization); QualityGateDto defaultQualityGate = db.qualityGates().insertQualityGate(organization, qg -> qg.setName("Default").setBuiltIn(false)); QualityGateDto builtInQualityGate = db.qualityGates().insertQualityGate(organization, qg -> qg.setName("Sonar way").setBuiltIn(true)); QualityGateDto otherQualityGate = db.qualityGates().insertQualityGate(organization, qg -> qg.setName("Sonar way - Without Coverage").setBuiltIn(false)); db.qualityGates().setDefaultQualityGate(organization, defaultQualityGate); ListWsResponse response = ws.newRequest() .setParam("organization", organization.getKey()) .executeProtobuf(ListWsResponse.class); assertThat(response.getActions()) .extracting(ListWsResponse.RootActions::getCreate) .containsExactlyInAnyOrder(true); assertThat(response.getQualitygatesList()) .extracting(QualityGate::getName, qg -> qg.getActions().getRename(), qg -> qg.getActions().getDelete(), qg -> qg.getActions().getManageConditions(), qp -> qp.getActions().getCopy(), qp -> qp.getActions().getSetAsDefault(), qp -> qp.getActions().getAssociateProjects()) .containsExactlyInAnyOrder( tuple(defaultQualityGate.getName(), true, false, true, true, false, false), tuple(builtInQualityGate.getName(), false, false, false, true, true, true), tuple(otherQualityGate.getName(), true, true, true, true, true, true)); }
@Test public void associate() { QualityGateDto qgate = db.qualityGates().insertQualityGate(db.getDefaultOrganization()); OrganizationDto org = db.organizations().insert(); underTest.associate(dbSession, Uuids.createFast(), org, qgate); assertThat(underTest.selectByOrganizationAndUuid(dbSession, org, qgate.getUuid())).isNotNull(); assertThat(underTest.selectByOrganizationAndUuid(dbSession, org, qgate.getUuid())) .extracting(QGateWithOrgDto::getId, QGateWithOrgDto::getUuid, QGateWithOrgDto::getOrganizationUuid, QGateWithOrgDto::getName) .containsExactly(qgate.getId(), qgate.getUuid(), org.getUuid(), qgate.getName()); }
@Test public void rename() { OrganizationDto organization = db.organizations().insert(); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization, qg -> qg.setName("old name")); userSession.logIn("john").addPermission(ADMINISTER_QUALITY_GATES, organization); ws.newRequest() .setParam("id", qualityGate.getId().toString()) .setParam("name", "new name") .setParam("organization", organization.getKey()) .execute(); assertThat(db.getDbClient().qualityGateDao().selectById(db.getSession(), qualityGate.getId()).getName()).isEqualTo("new name"); }
@Test public void return_default_quality_gate_for_project() { ComponentDto project = db.components().insertPrivateProject(); QualityGateDto dbQualityGate = db.qualityGates().createDefaultQualityGate(db.getDefaultOrganization(), qg -> qg.setName("Sonar way")); Optional<QualityGateFinder.QualityGateData> result = underTest.getQualityGate(dbSession, db.getDefaultOrganization(), project); assertThat(result).isPresent(); assertThat(result.get().getQualityGate().getId()).isEqualTo(dbQualityGate.getId()); assertThat(result.get().isDefault()).isTrue(); }
@Override public QGateWithOrgDto setName(String name) { super.setName(name); return this; }
@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 void insertQualityGates() { qualityGateDbTester.insertQualityGate(db.getDefaultOrganization(), g -> g.setName("Very strict").setBuiltIn(false)); qualityGateDbTester.insertQualityGate(db.getDefaultOrganization(), g -> g.setName("Balanced").setBuiltIn(false)); qualityGateDbTester.insertQualityGate(db.getDefaultOrganization(), g -> g.setName("Lenient").setBuiltIn(false)); } }
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(); }
@Override public QGateWithOrgDto setBuiltIn(boolean builtIn) { super.setBuiltIn(builtIn); return this; }
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 test_built_in_flag() { OrganizationDto organization = db.organizations().insert(); QualityGateDto qualityGate1 = db.qualityGates().insertQualityGate(organization, qualityGate -> qualityGate.setBuiltIn(true)); QualityGateDto qualityGate2 = db.qualityGates().insertQualityGate(organization, qualityGate -> qualityGate.setBuiltIn(false)); db.qualityGates().setDefaultQualityGate(organization, qualityGate1); ListWsResponse response = ws.newRequest() .setParam("organization", organization.getKey()) .executeProtobuf(ListWsResponse.class); assertThat(response.getQualitygatesList()) .extracting(QualityGate::getId, QualityGate::getIsBuiltIn) .containsExactlyInAnyOrder( tuple(qualityGate1.getId(), true), tuple(qualityGate2.getId(), false)); }
@Test public void fail_when_default_quality_gate_does_not_exists() { QualityGateDto dbQualityGate = db.qualityGates().insertQualityGate(db.getDefaultOrganization(), qg -> qg.setName("My team QG")); db.qualityGates().setDefaultQualityGate(db.getDefaultOrganization(), dbQualityGate); db.getDbClient().qualityGateDao().delete(dbQualityGate, dbSession); expectedException.expect(IllegalStateException.class); expectedException.expectMessage(format("Default quality gate [%s] is missing on organization [%s]", dbQualityGate.getUuid(), db.getDefaultOrganization().getUuid())); underTest.getDefault(dbSession, db.getDefaultOrganization()); }
@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(); }