private SearchAction.Association find(DbSession dbSession, ProjectQgateAssociationQuery query) { List<ProjectQgateAssociationDto> projects = dbClient.projectQgateAssociationDao().selectProjects(dbSession, query); List<ProjectQgateAssociationDto> authorizedProjects = keepAuthorizedProjects(dbSession, projects); Paging paging = forPageIndex(query.pageIndex()) .withPageSize(query.pageSize()) .andTotal(authorizedProjects.size()); return new SearchAction.Association(toProjectAssociations(getPaginatedProjects(authorizedProjects, paging)), paging.hasNextPage()); }
/** * 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)); }
/** * @return quality gate id if a specific Quality Gate has been defined for the given component id. <br> * Returns <code>{@link Optional#empty()}</code> otherwise (ex: default quality gate applies) */ public Optional<Long> selectQGateIdByComponentId(DbSession dbSession, long componentId) { String id = mapper(dbSession).selectQGateIdByComponentId(componentId); return id == null ? Optional.empty() : Optional.of(Long.valueOf(id)); }
@Test public void select_projects_by_query() { OrganizationDto organization = db.organizations().insert(); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); ComponentDto project1 = db.components().insertPrivateProject(organization); ComponentDto project2 = db.components().insertPrivateProject(organization); ComponentDto project3 = db.components().insertPrivateProject(organization); db.qualityGates().associateProjectToQualityGate(project1, qualityGate); db.qualityGates().associateProjectToQualityGate(project2, qualityGate); assertThat(underTest.selectProjects(dbSession, ProjectQgateAssociationQuery.builder() .qualityGate(qualityGate) .membership(ProjectQgateAssociationQuery.IN) .build())) .extracting(ProjectQgateAssociationDto::getId, ProjectQgateAssociationDto::getName, ProjectQgateAssociationDto::getGateId) .containsExactlyInAnyOrder( tuple(project1.getId(), project1.name(), qualityGate.getId().toString()), tuple(project2.getId(), project2.name(), qualityGate.getId().toString())); assertThat(underTest.selectProjects(dbSession, ProjectQgateAssociationQuery.builder() .qualityGate(qualityGate) .membership(ProjectQgateAssociationQuery.OUT) .build())) .extracting(ProjectQgateAssociationDto::getId, ProjectQgateAssociationDto::getName, ProjectQgateAssociationDto::getGateId) .containsExactlyInAnyOrder(tuple(project3.getId(), project3.name(), null)); }
@Test public void select_qgate_id_is_absent() { ComponentDto project = db.components().insertPrivateProject(); Optional<Long> result = underTest.selectQGateIdByComponentId(dbSession, project.getId()); assertThat(result.isPresent()).isFalse(); }
public List<ProjectQgateAssociationDto> selectProjects(DbSession dbSession, ProjectQgateAssociationQuery query) { return mapper(dbSession).selectProjects(query); }
@Test public void sorted_by_project_name() { OrganizationDto organization = db.organizations().insert(); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); ComponentDto project1 = db.components().insertPrivateProject(organization, p -> p.setName("Project One")); ComponentDto project2 = db.components().insertPrivateProject(organization, p -> p.setName("Project Two")); ComponentDto project3 = db.components().insertPrivateProject(organization, p -> p.setName("Project Three")); assertThat(underTest.selectProjects(dbSession, ProjectQgateAssociationQuery.builder() .qualityGate(qualityGate) .build())) .extracting(ProjectQgateAssociationDto::getId) .containsExactly(project1.getId(), project3.getId(), project2.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()); }
/** * @return quality gate id if a specific Quality Gate has been defined for the given component id. <br> * Returns <code>{@link Optional#empty()}</code> otherwise (ex: default quality gate applies) */ public Optional<Long> selectQGateIdByComponentId(DbSession dbSession, long componentId) { String id = mapper(dbSession).selectQGateIdByComponentId(componentId); return id == null ? Optional.empty() : Optional.of(Long.valueOf(id)); }
@Test public void search_by_project_name() { OrganizationDto organization = db.organizations().insert(); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); ComponentDto project1 = db.components().insertPrivateProject(organization, p -> p.setName("Project One")); ComponentDto project2 = db.components().insertPrivateProject(organization, p -> p.setName("Project Two")); ComponentDto project3 = db.components().insertPrivateProject(organization, p -> p.setName("Project Three")); db.qualityGates().associateProjectToQualityGate(project1, qualityGate); db.qualityGates().associateProjectToQualityGate(project2, qualityGate); assertThat(underTest.selectProjects(dbSession, ProjectQgateAssociationQuery.builder() .qualityGate(qualityGate) .projectSearch("one") .build())) .extracting(ProjectQgateAssociationDto::getId) .containsExactlyInAnyOrder(project1.getId()); assertThat(underTest.selectProjects(dbSession, ProjectQgateAssociationQuery.builder() .qualityGate(qualityGate) .projectSearch("project") .build())) .extracting(ProjectQgateAssociationDto::getId) .containsExactlyInAnyOrder(project1.getId(), project2.getId(), project3.getId()); }
/** * 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); }
public List<ProjectQgateAssociationDto> selectProjects(DbSession dbSession, ProjectQgateAssociationQuery query) { return mapper(dbSession).selectProjects(query); }
@Test public void select_all_projects_by_query() { 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); ComponentDto project3 = db.components().insertPrivateProject(organization); db.qualityGates().associateProjectToQualityGate(project1, qualityGate1); db.qualityGates().associateProjectToQualityGate(project2, qualityGate1); db.qualityGates().associateProjectToQualityGate(project3, qualityGate2); List<ProjectQgateAssociationDto> result = underTest.selectProjects(dbSession, ProjectQgateAssociationQuery.builder() .qualityGate(qualityGate1) .build()); assertThat(result) .extracting(ProjectQgateAssociationDto::getId, ProjectQgateAssociationDto::getName, ProjectQgateAssociationDto::getGateId) .containsExactlyInAnyOrder( tuple(project1.getId(), project1.name(), qualityGate1.getId().toString()), tuple(project2.getId(), project2.name(), qualityGate1.getId().toString()), tuple(project3.getId(), project3.name(), null)); }
@Test public void return_only_projects_from_organization() { OrganizationDto organization = db.organizations().insert(); OrganizationDto otherOrganization = db.organizations().insert(); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); QGateWithOrgDto otherQualityGate = db.qualityGates().insertQualityGate(otherOrganization); ComponentDto project = db.components().insertPrivateProject(organization); ComponentDto otherProject = db.components().insertPrivateProject(otherOrganization); db.qualityGates().associateProjectToQualityGate(project, qualityGate); db.qualityGates().associateProjectToQualityGate(otherProject, otherQualityGate); List<ProjectQgateAssociationDto> result = underTest.selectProjects(dbSession, ProjectQgateAssociationQuery.builder() .qualityGate(qualityGate) .build()); assertThat(result) .extracting(ProjectQgateAssociationDto::getId) .containsExactlyInAnyOrder(project.getId()); }
private SearchAction.Association find(DbSession dbSession, ProjectQgateAssociationQuery query) { List<ProjectQgateAssociationDto> projects = dbClient.projectQgateAssociationDao().selectProjects(dbSession, query); List<ProjectQgateAssociationDto> authorizedProjects = keepAuthorizedProjects(dbSession, projects); Paging paging = forPageIndex(query.pageIndex()) .withPageSize(query.pageSize()) .andTotal(authorizedProjects.size()); return new SearchAction.Association(toProjectAssociations(getPaginatedProjects(authorizedProjects, paging)), paging.hasNextPage()); }