@Override public Optional<QualityGate> findById(long id) { if (id == ShortLivingBranchQualityGate.ID) { return Optional.of(buildShortLivingBranchHardcodedQualityGate()); } try (DbSession dbSession = dbClient.openSession(false)) { QualityGateDto qualityGateDto = dbClient.qualityGateDao().selectById(dbSession, id); if (qualityGateDto == null) { return Optional.empty(); } return Optional.of(toQualityGate(dbSession, qualityGateDto)); } }
/** * Return effective quality gate of a project. * * It will first try to get the quality gate explicitly defined on a project, if none it will try to return default quality gate of the organization */ public Optional<QualityGateData> getQualityGate(DbSession dbSession, OrganizationDto organization, ComponentDto component) { Optional<QualityGateData> res = dbClient.projectQgateAssociationDao().selectQGateIdByComponentId(dbSession, component.getId()) .map(qualityGateId -> dbClient.qualityGateDao().selectById(dbSession, qualityGateId)) .map(qualityGateDto -> new QualityGateData(qualityGateDto, false)); if (res.isPresent()) { return res; } return ofNullable(dbClient.qualityGateDao().selectByOrganizationAndUuid(dbSession, organization, organization.getDefaultQualityGateUuid())) .map(qualityGateDto -> new QualityGateData(qualityGateDto, true)); }
@Test public void findById_returns_QualityGate_with_empty_set_of_conditions_when_there_is_none_in_DB() { when(qualityGateDao.selectById(any(), eq(SOME_ID))).thenReturn(QUALITY_GATE_DTO); when(qualityGateConditionDao.selectForQualityGate(any(), eq(SOME_ID))).thenReturn(Collections.emptyList()); Optional<QualityGate> res = underTest.findById(SOME_ID); assertThat(res).isPresent(); assertThat(res.get().getId()).isEqualTo(SOME_ID); assertThat(res.get().getName()).isEqualTo(SOME_NAME); assertThat(res.get().getConditions()).isEmpty(); }
@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(); }
@Test public void findById_ignores_conditions_on_missing_metrics() { when(qualityGateDao.selectById(any(), eq(SOME_ID))).thenReturn(QUALITY_GATE_DTO); when(qualityGateConditionDao.selectForQualityGate(any(), eq(SOME_ID))).thenReturn(ImmutableList.of(CONDITION_1, CONDITION_2)); // metrics are always supposed to be there when(metricRepository.getOptionalById(METRIC_ID_1)).thenReturn(Optional.empty()); when(metricRepository.getOptionalById(METRIC_ID_2)).thenReturn(Optional.of(METRIC_2)); Optional<QualityGate> res = underTest.findById(SOME_ID); assertThat(res).isPresent(); assertThat(res.get().getId()).isEqualTo(SOME_ID); assertThat(res.get().getName()).isEqualTo(SOME_NAME); assertThat(res.get().getConditions()).containsOnly( new Condition(METRIC_2, CONDITION_2.getOperator(), CONDITION_2.getErrorThreshold())); }
@Test public void findById_returns_conditions_when_there_is_some_in_DB() { when(qualityGateDao.selectById(any(), eq(SOME_ID))).thenReturn(QUALITY_GATE_DTO); when(qualityGateConditionDao.selectForQualityGate(any(), eq(SOME_ID))).thenReturn(ImmutableList.of(CONDITION_1, CONDITION_2)); // metrics are always supposed to be there when(metricRepository.getOptionalById(METRIC_ID_1)).thenReturn(Optional.of(METRIC_1)); when(metricRepository.getOptionalById(METRIC_ID_2)).thenReturn(Optional.of(METRIC_2)); Optional<QualityGate> res = underTest.findById(SOME_ID); assertThat(res).isPresent(); assertThat(res.get().getId()).isEqualTo(SOME_ID); assertThat(res.get().getName()).isEqualTo(SOME_NAME); assertThat(res.get().getConditions()).containsOnly( new Condition(METRIC_1, CONDITION_1.getOperator(), CONDITION_1.getErrorThreshold()), new Condition(METRIC_2, CONDITION_2.getOperator(), CONDITION_2.getErrorThreshold())); }
@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 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"); }
@CheckForNull public QualityGateDto selectById(long id) { SqlSession session = myBatis.openSession(false); try { return selectById(session, id); } finally { MyBatis.closeQuietly(session); } }
@Override public Optional<QualityGate> findById(long id) { if (id == ShortLivingBranchQualityGate.ID) { return Optional.of(buildShortLivingBranchHardcodedQualityGate()); } try (DbSession dbSession = dbClient.openSession(false)) { QualityGateDto qualityGateDto = dbClient.qualityGateDao().selectById(dbSession, id); if (qualityGateDto == null) { return Optional.empty(); } return Optional.of(toQualityGate(dbSession, qualityGateDto)); } }
/** * Return effective quality gate of a project. * * It will first try to get the quality gate explicitly defined on a project, if none it will try to return default quality gate of the organization */ public QualityGateData getQualityGate(DbSession dbSession, OrganizationDto organization, ComponentDto component) { Optional<Long> qualityGateId = dbClient.projectQgateAssociationDao().selectQGateIdByComponentId(dbSession, component.getId()); if (qualityGateId.isPresent()) { QualityGateDto qualityGate = checkFound(dbClient.qualityGateDao().selectById(dbSession, qualityGateId.get()), "No quality gate has been found for id %s", qualityGateId); return new QualityGateData(qualityGate, false); } QualityGateDto defaultQualityGate = dbClient.qualityGateDao().selectByOrganizationAndUuid(dbSession, organization, organization.getDefaultQualityGateUuid()); checkState(defaultQualityGate != null, "Unable to find the quality gate [%s] for organization [%s]", organization.getDefaultQualityGateUuid(), organization.getUuid()); return new QualityGateData(defaultQualityGate, true); }