@Test public void no_condition() { OrganizationDto organization = db.organizations().insert(); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); db.qualityGates().setDefaultQualityGate(organization, qualityGate); ShowWsResponse response = ws.newRequest() .setParam("name", qualityGate.getName()) .setParam("organization", organization.getKey()) .executeProtobuf(ShowWsResponse.class); assertThat(response.getId()).isEqualTo(qualityGate.getId()); assertThat(response.getName()).isEqualTo(qualityGate.getName()); assertThat(response.getConditionsList()).isEmpty(); }
@Test public void select_by_organization_and_name() { OrganizationDto organization = db.organizations().insert(); QGateWithOrgDto qualityGate1 = db.qualityGates().insertQualityGate(organization); QGateWithOrgDto qualityGate2 = db.qualityGates().insertQualityGate(organization); OrganizationDto otherOrganization = db.organizations().insert(); QGateWithOrgDto qualityGate3 = db.qualityGates().insertQualityGate(otherOrganization); assertThat(underTest.selectByOrganizationAndName(dbSession, organization, qualityGate1.getName()).getUuid()).isEqualTo(qualityGate1.getUuid()); assertThat(underTest.selectByOrganizationAndName(dbSession, otherOrganization, qualityGate3.getName()).getUuid()).isEqualTo(qualityGate3.getUuid()); assertThat(underTest.selectByOrganizationAndName(dbSession, organization, "Unknown")).isNull(); }
@Test public void actions_on_default() { OrganizationDto organization = db.organizations().insert(); userSession.logIn("john").addPermission(ADMINISTER_QUALITY_GATES, organization); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); db.qualityGates().setDefaultQualityGate(organization, qualityGate); ShowWsResponse response = ws.newRequest() .setParam("name", qualityGate.getName()) .setParam("organization", organization.getKey()) .executeProtobuf(ShowWsResponse.class); Actions actions = response.getActions(); assertThat(actions.getRename()).isTrue(); assertThat(actions.getManageConditions()).isTrue(); assertThat(actions.getDelete()).isFalse(); assertThat(actions.getCopy()).isTrue(); assertThat(actions.getSetAsDefault()).isFalse(); assertThat(actions.getAssociateProjects()).isFalse(); }
@Test public void update() { OrganizationDto organization = db.organizations().insert(); QGateWithOrgDto qualityGate = qualityGateDbTester.insertQualityGate(organization, qg -> qg.setName("old name")); underTest.update(qualityGate.setName("Not so strict"), dbSession); dbSession.commit(); QGateWithOrgDto reloaded = underTest.selectByOrganizationAndUuid(dbSession, organization, qualityGate.getUuid()); assertThat(reloaded.getName()).isEqualTo("Not so strict"); }
@Test public void show_by_id() { OrganizationDto organization = db.organizations().insert(); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); db.qualityGates().setDefaultQualityGate(organization, qualityGate); ShowWsResponse response = ws.newRequest() .setParam("id", qualityGate.getId().toString()) .setParam("organization", organization.getKey()) .executeProtobuf(ShowWsResponse.class); assertThat(response.getId()).isEqualTo(qualityGate.getId()); assertThat(response.getName()).isEqualTo(qualityGate.getName()); }
@Test public void creating_a_qg_with_a_name_used_in_another_organization_should_work() { OrganizationDto anOrganization = db.organizations().insert(); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(anOrganization); OrganizationDto anotherOrganization = db.organizations().insert(); userSession.addPermission(ADMINISTER_QUALITY_GATES, anotherOrganization); CreateResponse response = ws.newRequest() .setParam(PARAM_NAME, qualityGate.getName()) .setParam(PARAM_ORGANIZATION, anotherOrganization.getKey()) .executeProtobuf(CreateResponse.class); assertThat(response.getName()).isEqualTo(qualityGate.getName()); assertThat(response.getId()).isNotEqualTo(qualityGate.getId()); }
@Test public void fail_when_quality_gate_belongs_to_another_organization() { 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 name %s", qualityGate.getName())); ws.newRequest() .setParam("name", qualityGate.getName()) .setParam("organization", organization.getKey()) .execute(); }
@Test public void fail_when_using_existing_name() { OrganizationDto organization = db.organizations().insert(); userSession.logIn("john").addPermission(ADMINISTER_QUALITY_GATES, organization); QGateWithOrgDto qualityGate1 = db.qualityGates().insertQualityGate(organization); QGateWithOrgDto qualityGate2 = db.qualityGates().insertQualityGate(organization); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage(format("Name '%s' has already been taken", qualityGate2.getName())); ws.newRequest() .setParam("id", qualityGate1.getId().toString()) .setParam("name", qualityGate2.getName()) .setParam("organization", organization.getKey()) .execute(); }
@Test public void show_built_in() { OrganizationDto organization = db.organizations().insert(); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization, qg -> qg.setBuiltIn(true)); db.qualityGates().setDefaultQualityGate(organization, qualityGate); ShowWsResponse response = ws.newRequest() .setParam("name", qualityGate.getName()) .setParam("organization", organization.getKey()) .executeProtobuf(ShowWsResponse.class); assertThat(response.getIsBuiltIn()).isTrue(); }
@Test public void default_organization_is_used_when_no_organization_parameter() { QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(db.getDefaultOrganization()); OrganizationDto otherOrganization = db.organizations().insert(); QGateWithOrgDto otherQualityGate = db.qualityGates().insertQualityGate(otherOrganization); db.qualityGates().setDefaultQualityGate(db.getDefaultOrganization(), qualityGate); ShowWsResponse response = ws.newRequest() .setParam("name", qualityGate.getName()) .executeProtobuf(ShowWsResponse.class); assertThat(response.getId()).isEqualTo(qualityGate.getId()); }
@Test public void default_organization_is_used_when_no_organization_parameter() { OrganizationDto organization = db.getDefaultOrganization(); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); ComponentDto project = db.components().insertPrivateProject(organization); db.qualityGates().setDefaultQualityGate(organization, qualityGate); userSession.logIn().addProjectPermission(UserRole.USER, project); GetByProjectResponse result = ws.newRequest() .setParam("project", project.getKey()) .executeProtobuf(GetByProjectResponse.class); assertThat(result.getQualityGate().getName()).isEqualTo(qualityGate.getName()); }
@Test public void fail_on_paid_organization_when_not_member() { OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); expectedException.expect(ForbiddenException.class); expectedException.expectMessage(format("You're not member of organization '%s'", organization.getKey())); ws.newRequest() .setParam("name", qualityGate.getName()) .setParam("organization", organization.getKey()) .execute(); }
@Test public void fail_on_built_in_quality_gate() { OrganizationDto organization = db.organizations().insert(); userSession.logIn("john").addPermission(ADMINISTER_QUALITY_GATES, organization); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization, qg -> qg.setBuiltIn(true)); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage(format("Operation forbidden for built-in Quality Gate '%s'", qualityGate.getName())); ws.newRequest() .setParam("id", qualityGate.getId().toString()) .setParam("name", "name") .setParam("organization", organization.getKey()) .execute(); }
@Test public void fail_if_built_in_quality_gate() { OrganizationDto organization = db.organizations().insert(); userSession.addPermission(ADMINISTER_QUALITY_GATES, organization); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization, qg -> qg.setBuiltIn(true)); MetricDto metric = db.measures().insertMetric(); QualityGateConditionDto qualityGateCondition = db.qualityGates().addCondition(qualityGate, metric); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage(format("Operation forbidden for built-in Quality Gate '%s'", qualityGate.getName())); ws.newRequest() .setParam(PARAM_ID, valueOf(qualityGateCondition.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); }
@Test public void fail_when_organization_does_not_exist() { OrganizationDto organization = db.organizations().insert(); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); expectedException.expect(NotFoundException.class); expectedException.expectMessage("No organization with key 'Unknown'"); ws.newRequest() .setParam("name", qualityGate.getName()) .setParam("organization", "Unknown") .execute(); }
@Test public void fail_to_update_built_in_quality_gate() { OrganizationDto organization = db.organizations().insert(); logInAsQualityGateAdmin(organization); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization, qg -> qg.setBuiltIn(true)); MetricDto metric = insertMetric(); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage(format("Operation forbidden for built-in Quality Gate '%s'", qualityGate.getName())); ws.newRequest() .setParam(PARAM_GATE_ID, qualityGate.getId().toString()) .setParam(PARAM_METRIC, metric.getKey()) .setParam(PARAM_OPERATOR, "LT") .setParam(PARAM_ERROR, "90") .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); }
@Test public void show_on_paid_organization() { OrganizationDto organization = db.organizations().insert(o -> o.setSubscription(PAID)); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); db.qualityGates().setDefaultQualityGate(organization, qualityGate); MetricDto metric = db.measures().insertMetric(); db.qualityGates().addCondition(qualityGate, metric); UserDto user = db.users().insertUser(); userSession.logIn(user).addMembership(organization); ShowWsResponse response = ws.newRequest() .setParam("name", qualityGate.getName()) .setParam("organization", organization.getKey()) .executeProtobuf(ShowWsResponse.class); assertThat(response.getConditionsList()).hasSize(1); }
@Test public void fail_to_update_built_in_quality_gate() { OrganizationDto organization = db.organizations().insert(); userSession.addPermission(ADMINISTER_QUALITY_GATES, organization); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization, qg -> qg.setBuiltIn(true)); MetricDto metric = insertMetric(); QualityGateConditionDto condition = db.qualityGates().addCondition(qualityGate, metric); expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage(format("Operation forbidden for built-in Quality Gate '%s'", qualityGate.getName())); ws.newRequest() .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_ID, Long.toString(condition.getId())) .setParam(PARAM_METRIC, metric.getKey()) .setParam(PARAM_OPERATOR, "LT") .setParam(PARAM_ERROR, "10") .execute(); }
@Test public void fail_when_condition_is_on_disabled_metric() { OrganizationDto organization = db.organizations().insert(); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); db.qualityGates().setDefaultQualityGate(organization, qualityGate); MetricDto metric = db.measures().insertMetric(); db.qualityGates().addCondition(qualityGate, metric); db.getDbClient().metricDao().disableCustomByKey(db.getSession(), metric.getKey()); db.commit(); expectedException.expect(IllegalStateException.class); expectedException.expectMessage(format("Could not find metric with id %s", metric.getId())); ws.newRequest() .setParam("name", qualityGate.getName()) .setParam("organization", organization.getKey()) .execute(); }
@Test public void json_example() { OrganizationDto organization = db.organizations().insert(); userSession.logIn("admin").addPermission(ADMINISTER_QUALITY_GATES, organization); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization, qg -> qg.setName("My Quality Gate")); QGateWithOrgDto qualityGate2 = db.qualityGates().insertQualityGate(organization, qg -> qg.setName("My Quality Gate 2")); db.qualityGates().setDefaultQualityGate(organization, qualityGate2); MetricDto blockerViolationsMetric = db.measures().insertMetric(m -> m.setKey("blocker_violations")); MetricDto criticalViolationsMetric = db.measures().insertMetric(m -> m.setKey("tests")); db.qualityGates().addCondition(qualityGate, blockerViolationsMetric, c -> c.setOperator("GT").setErrorThreshold("0")); db.qualityGates().addCondition(qualityGate, criticalViolationsMetric, c -> c.setOperator("LT").setErrorThreshold("10")); String response = ws.newRequest() .setParam("name", qualityGate.getName()) .setParam("organization", organization.getKey()) .execute() .getInput(); assertJson(response).ignoreFields("id") .isSimilarTo(getClass().getResource("show-example.json")); }