private static void checkNotBuiltIn(QualityGateDto qualityGate) { checkArgument(!qualityGate.isBuiltIn(), "Operation forbidden for built-in Quality Gate '%s'", qualityGate.getName()); }
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(); }
@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(); }
@Test public void testSelectByName() { insertQualityGates(); assertThat(underTest.selectByName(dbSession, "Balanced").getName()).isEqualTo("Balanced"); assertThat(underTest.selectByName(dbSession, "Unknown")).isNull(); }
private void writeQualityGate(JsonWriter json, DbSession session, OrganizationDto organization, ComponentDto component) { QualityGateFinder.QualityGateData qualityGateData = qualityGateFinder.getQualityGate(session, organization, component) .orElseThrow(() -> new NotFoundException(format("Quality Gate not found for %s", component.getKey()))); QualityGateDto qualityGateDto = qualityGateData.getQualityGate(); json.name("qualityGate").beginObject() .prop("key", qualityGateDto.getId()) .prop("name", qualityGateDto.getName()) .prop("isDefault", qualityGateData.isDefault()) .endObject(); }
@Test public void testSelectById() { insertQualityGates(); assertThat(underTest.selectById(dbSession, underTest.selectByName(dbSession, "Very strict").getId()).getName()).isEqualTo("Very strict"); assertThat(underTest.selectById(dbSession, -1L)).isNull(); }
private static GetByProjectResponse buildResponse(QualityGateData data) { QualityGateDto qualityGate = data.getQualityGate(); GetByProjectResponse.Builder response = GetByProjectResponse.newBuilder(); response.getQualityGateBuilder() .setId(qualityGate.getId()) .setName(qualityGate.getName()) .setDefault(data.isDefault()); return response.build(); }
@Override public void handle(Request request, Response response) { long id = QualityGatesWs.parseId(request, PARAM_ID); try (DbSession dbSession = dbClient.openSession(false)) { OrganizationDto organization = wsSupport.getOrganization(dbSession, request); QualityGateDto qualityGate = rename(dbSession, organization, id, request.mandatoryParam(PARAM_NAME)); writeProtobuf(QualityGate.newBuilder() .setId(qualityGate.getId()) .setName(qualityGate.getName()) .build(), request, response); } }
@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_with_same_name() { OrganizationDto organization = db.organizations().insert(); userSession.logIn("john").addPermission(ADMINISTER_QUALITY_GATES, organization); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization, qg -> qg.setName("name")); ws.newRequest() .setParam("id", qualityGate.getId().toString()) .setParam("name", "name") .setParam("organization", organization.getKey()) .execute(); assertThat(db.getDbClient().qualityGateDao().selectById(db.getSession(), qualityGate.getId()).getName()).isEqualTo("name"); }
@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 list_quality_gates() { OrganizationDto organization = db.organizations().insert(); QualityGateDto defaultQualityGate = db.qualityGates().insertQualityGate(organization); QualityGateDto otherQualityGate = db.qualityGates().insertQualityGate(organization); db.qualityGates().setDefaultQualityGate(organization, defaultQualityGate); ListWsResponse response = ws.newRequest() .setParam("organization", organization.getKey()) .executeProtobuf(ListWsResponse.class); assertThat(response.getQualitygatesList()) .extracting(QualityGate::getId, QualityGate::getName, QualityGate::getIsDefault) .containsExactlyInAnyOrder( tuple(defaultQualityGate.getId(), defaultQualityGate.getName(), true), tuple(otherQualityGate.getId(), otherQualityGate.getName(), false)); }
@Test public void fail_when_both_name_or_id() { OrganizationDto organization = db.organizations().insert(); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Either 'id' or 'name' must be provided"); ws.newRequest() .setParam("name", qualityGate.getName()) .setParam("id", qualityGate.getId().toString()) .setParam("organization", organization.getKey()) .execute(); }
@Test public void get_with_project_admin_permission() { OrganizationDto organization = db.organizations().insert(); ComponentDto project = db.components().insertPrivateProject(organization); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); db.qualityGates().setDefaultQualityGate(organization, qualityGate); userSession.logIn().addProjectPermission(UserRole.ADMIN, project); GetByProjectResponse result = ws.newRequest() .setParam("project", project.getKey()) .setParam("organization", organization.getKey()) .executeProtobuf(GetByProjectResponse.class); assertThat(result.getQualityGate().getName()).isEqualTo(qualityGate.getName()); }
@Test public void get_with_project_user_permission() { OrganizationDto organization = db.organizations().insert(); ComponentDto project = db.components().insertPrivateProject(organization); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); db.qualityGates().setDefaultQualityGate(organization, qualityGate); userSession.logIn().addProjectPermission(UserRole.USER, project); GetByProjectResponse result = ws.newRequest() .setParam("project", project.getKey()) .setParam("organization", organization.getKey()) .executeProtobuf(GetByProjectResponse.class); assertThat(result.getQualityGate().getName()).isEqualTo(qualityGate.getName()); }
@Test public void get_by_project_key() { OrganizationDto organization = db.organizations().insert(); ComponentDto project = db.components().insertPrivateProject(organization); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(db.getDefaultOrganization(), qg -> qg.setName("My team QG")); db.qualityGates().associateProjectToQualityGate(project, qualityGate); logInAsProjectUser(project); GetByProjectResponse result = ws.newRequest() .setParam("project", project.getKey()) .setParam("organization", organization.getKey()) .executeProtobuf(GetByProjectResponse.class); assertThat(result.getQualityGate().getName()).isEqualTo(qualityGate.getName()); }
@Test public void does_not_delete_built_in_quality_gate() { OrganizationDto organization = db.organizations().insert(); db.qualityGates().createDefaultQualityGate(organization); QualityGateDto builtInQualityGate = db.qualityGates().insertBuiltInQualityGate(); db.getDbClient().qualityGateDao().associate(db.getSession(), Uuids.createFast(), organization, builtInQualityGate); db.commit(); userSession.addPermission(ADMINISTER_QUALITY_GATES, organization); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage(format("Operation forbidden for built-in Quality Gate '%s'", builtInQualityGate.getName())); ws.newRequest() .setParam(PARAM_ID, valueOf(builtInQualityGate.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); }
@Test public void fail_when_name_parameter_match_existing_quality_gate_in_the_same_organization() { OrganizationDto organization = db.organizations().insert(); userSession.addPermission(ADMINISTER_QUALITY_GATES, organization); QualityGateDto existingQualityGate = db.qualityGates().insertQualityGate(organization); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("Name has already been taken"); ws.newRequest() .setParam(PARAM_ID, qualityGate.getId().toString()) .setParam(PARAM_NAME, existingQualityGate.getName()) .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); } }
@Test public void list_quality_gates_on_paid_organization() { OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); db.qualityGates().setDefaultQualityGate(organization, qualityGate); UserDto user = db.users().insertUser(); userSession.logIn(user).addMembership(organization); ListWsResponse response = ws.newRequest() .setParam("organization", organization.getKey()) .executeProtobuf(ListWsResponse.class); assertThat(response.getQualitygatesList()) .extracting(QualityGate::getName) .containsExactlyInAnyOrder(qualityGate.getName()); }