@Test public void ensure_only_that_builtin_is_set_as_default_when_no_default_quality_gate() { insertMetrics(); QualityGateDto builtInQualityGate = db.qualityGates().insertBuiltInQualityGate(); underTest.start(); assertThat(qualityGateFinder.getBuiltInQualityGate(dbSession)).isNotNull(); assertThat(qualityGateFinder.getBuiltInQualityGate(dbSession).getId()).isEqualTo(builtInQualityGate.getId()); }
@Test public void select_qgate_id() { OrganizationDto organization = db.organizations().insert(); QGateWithOrgDto qualityGate1 = db.qualityGates().insertQualityGate(organization); QGateWithOrgDto qualityGate2 = db.qualityGates().insertQualityGate(organization); ComponentDto project1 = db.components().insertPrivateProject(organization); ComponentDto project2 = db.components().insertPrivateProject(organization); db.qualityGates().associateProjectToQualityGate(project1, qualityGate1); db.qualityGates().associateProjectToQualityGate(project2, qualityGate2); Optional<Long> result = underTest.selectQGateIdByComponentId(dbSession, project1.getId()); assertThat(result).contains(qualityGate1.getId()); }
@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(); }
@Test public void setDefaultQualityGate() { when(system2.now()).thenReturn(DATE_3); OrganizationDto organization = db.organizations().insert(); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); underTest.setDefaultQualityGate(dbSession, organization, qualityGate); db.commit(); assertThat(dbClient.qualityGateDao().selectDefault(dbSession, organization).getUuid()).isEqualTo(qualityGate.getUuid()); verifyOrganizationUpdatedAt(organization.getUuid(), DATE_3); }
@Test public void default_organization_is_used_when_no_organization_parameter() { userSession.addPermission(ADMINISTER_QUALITY_GATES, db.getDefaultOrganization()); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(db.getDefaultOrganization()); MetricDto metric = db.measures().insertMetric(); QualityGateConditionDto qualityGateCondition = db.qualityGates().addCondition(qualityGate, metric); ws.newRequest() .setParam(PARAM_ID, valueOf(qualityGateCondition.getId())) .execute(); assertThat(searchConditionsOf(qualityGate)).isEmpty(); }
@Test public void update_condition_on_rating_metric() { MetricDto metric = insertMetric(RATING, SQALE_RATING_KEY); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(db.getDefaultOrganization()); QualityGateConditionDto condition = db.qualityGates().addCondition(qualityGate, metric, c -> c.setOperator("LT").setErrorThreshold("80")); QualityGateConditionDto result = underTest.updateCondition(db.getSession(), condition, metric.getKey(), "GT", "4"); verifyCondition(result, qualityGate, metric, "GT", "4"); }
@Test public void fail_to_update_condition_on_rating_metric_on_leak_period() { MetricDto metric = insertMetric(RATING, SQALE_RATING_KEY); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(db.getDefaultOrganization()); QualityGateConditionDto condition = db.qualityGates().addCondition(qualityGate, metric, c -> c.setOperator("LT").setErrorThreshold("3")); QualityGateConditionDto result = underTest.updateCondition(db.getSession(), condition, metric.getKey(), "GT", "4"); verifyCondition(result, qualityGate, metric, "GT", "4"); }
@Test public void request_succeeds_if_user_is_system_administrator_and_logged_in_users_can_create_organizations() { createUserAndLogInAsSystemAdministrator(); settings.setProperty(ORGANIZATIONS_ANYONE_CAN_CREATE, true); db.qualityGates().insertBuiltInQualityGate(); verifyResponseAndDb(executeRequest("foo"), "foo", "foo", NOW); }
@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 @UseDataProvider("update_invalid_operators_and_direction") public void fail_to_update_condition_on_not_allowed_operator_for_metric_direction(String validOperator, String updatedOperator, int direction) { MetricDto metric = db.measures().insertMetric(m -> m.setValueType(PERCENT.name()).setHidden(false).setDirection(direction)); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(db.getDefaultOrganization()); QualityGateConditionDto condition = db.qualityGates().addCondition(qualityGate, metric, c -> c.setOperator(validOperator).setErrorThreshold("80")); expectedException.expect(BadRequestException.class); expectedException.expectMessage(format("Operator %s is not allowed for this metric", updatedOperator)); underTest.updateCondition(db.getSession(), condition, metric.getKey(), updatedOperator, "70"); }
@Test @UseDataProvider("invalid_metrics") public void fail_to_update_condition_on_invalid_metric(String metricKey, Metric.ValueType valueType, boolean hidden) { MetricDto metric = db.measures().insertMetric(m -> m.setKey(metricKey).setValueType(valueType.name()).setHidden(hidden)); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(db.getDefaultOrganization()); QualityGateConditionDto condition = db.qualityGates().addCondition(qualityGate, metric, c -> c.setOperator("LT").setErrorThreshold("80")); expectedException.expect(BadRequestException.class); expectedException.expectMessage(format("Metric '%s' cannot be used to define a condition", metric.getKey())); underTest.updateCondition(db.getSession(), condition, metric.getKey(), "GT", "60"); }
@Test public void fail_when_quality_gate_belongs_to_another_organization_using_id_parameter() { OrganizationDto organization = db.organizations().insert(); OrganizationDto otherOrganization = db.organizations().insert(); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(otherOrganization); expectedException.expect(NotFoundException.class); expectedException.expectMessage(format("No quality gate has been found for id %s in organization %s", qualityGate.getId(), organization.getName())); ws.newRequest() .setParam("id", qualityGate.getId().toString()) .setParam("organization", organization.getKey()) .execute(); }
@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 fail_when_missing_administer_quality_gate_permission() { OrganizationDto organization = db.organizations().insert(); userSession.addPermission(ADMINISTER_QUALITY_PROFILES, organization); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); expectedException.expect(ForbiddenException.class); ws.newRequest() .setParam(PARAM_ID, qualityGate.getId().toString()) .setParam(PARAM_NAME, "new-name") .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); }
@Test public void fail_to_delete_default_quality_gate() { OrganizationDto organization = db.organizations().insert(); QualityGateDto defaultQualityGate = db.qualityGates().createDefaultQualityGate(organization); userSession.addPermission(ADMINISTER_QUALITY_GATES, organization); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("The default quality gate cannot be removed"); ws.newRequest() .setParam(PARAM_ID, valueOf(defaultQualityGate.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); }
@Test public void fail_when_quality_name_does_not_exist() { OrganizationDto organization = db.organizations().insert(); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); expectedException.expect(NotFoundException.class); expectedException.expectMessage("No quality gate has been found for name UNKNOWN"); ws.newRequest() .setParam("name", "UNKNOWN") .setParam("organization", organization.getKey()) .execute(); }
@Test @UseDataProvider("invalid_operators_and_direction") public void fail_to_create_condition_on_not_allowed_operator_for_metric_direction(String operator, int direction) { MetricDto metric = db.measures().insertMetric(m -> m.setKey("key").setValueType(INT.name()).setHidden(false).setDirection(direction)); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(db.getDefaultOrganization()); expectedException.expect(BadRequestException.class); expectedException.expectMessage(format("Operator %s is not allowed for this metric.", operator)); underTest.createCondition(db.getSession(), qualityGate, metric.getKey(), operator, "90"); }
@Test @UseDataProvider("invalid_metrics") public void fail_to_create_condition_on_invalid_metric(String metricKey, Metric.ValueType valueType, boolean hidden) { MetricDto metric = db.measures().insertMetric(m -> m.setKey(metricKey).setValueType(valueType.name()).setHidden(hidden).setDirection(0)); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(db.getDefaultOrganization()); expectedException.expect(BadRequestException.class); expectedException.expectMessage(format("Metric '%s' cannot be used to define a condition", metric.getKey())); underTest.createCondition(db.getSession(), qualityGate, metric.getKey(), "LT", "80"); }
@Test public void should_return_public_flag_for_project() { OrganizationDto org = db.organizations().insert(); db.qualityGates().createDefaultQualityGate(org); ComponentDto project = db.components().insertPublicProject(org); init(); userSession.logIn() .addProjectPermission(UserRole.ADMIN, project) .addPermission(OrganizationPermission.ADMINISTER, org); assertJson(execute(project.getDbKey())).isSimilarTo("{\"visibility\": \"public\"}"); }
@Test @UseDataProvider("valid_values") public void create_error_condition(Metric.ValueType valueType, String value) { MetricDto metric = db.measures().insertMetric(m -> m.setValueType(valueType.name()).setHidden(false).setDirection(0)); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(db.getDefaultOrganization()); QualityGateConditionDto result = underTest.createCondition(db.getSession(), qualityGate, metric.getKey(), "LT", value); verifyCondition(result, qualityGate, metric, "LT", value); }