@Test public void return_project_quality_gate_over_default() { ComponentDto project = db.components().insertPrivateProject(); db.qualityGates().createDefaultQualityGate(db.getDefaultOrganization(),qg -> qg.setName("Sonar way")); QualityGateDto dbQualityGate = db.qualityGates().insertQualityGate(db.getDefaultOrganization(), qg -> qg.setName("My team QG")); db.qualityGates().associateProjectToQualityGate(project, dbQualityGate); 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()).isFalse(); }
@Test public void more_is_true_when_not_all_project_fit_in_page_size() { OrganizationDto organization = db.organizations().insert(); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); for (int i = 0; i < 20; i++) { ComponentDto project = db.components().insertPublicProject(organization); db.qualityGates().associateProjectToQualityGate(project, qualityGate); } userSession.addPermission(ADMINISTER_QUALITY_GATES, organization); SearchResponse response = ws.newRequest() .setParam(PARAM_GATE_ID, valueOf(qualityGate.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_PAGE_SIZE, valueOf(10)) .setParam(PARAM_PAGE, valueOf(1)) .executeProtobuf(SearchResponse.class); assertThat(response.getMore()).isTrue(); assertThat(response.getResultsCount()).isEqualTo(10); }
@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 search_on_default_organization_when_none_is_provided() { OrganizationDto defaultOrganization = db.getDefaultOrganization(); ComponentDto project = db.components().insertPublicProject(defaultOrganization); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(defaultOrganization); db.qualityGates().associateProjectToQualityGate(project, qualityGate); SearchResponse response = ws.newRequest() .setParam(PARAM_GATE_ID, valueOf(qualityGate.getId())) .executeProtobuf(SearchResponse.class); assertThat(response.getResultsList()) .extracting(Result::getId, Result::getName) .containsExactlyInAnyOrder(tuple(project.getId(), project.name())); assertThat(response.getMore()).isFalse(); }
@Test public void search_projects_of_a_quality_gate_from_an_organization() { OrganizationDto organization = db.organizations().insert(); ComponentDto project = db.components().insertPublicProject(organization); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); db.qualityGates().associateProjectToQualityGate(project, qualityGate); SearchResponse response = ws.newRequest() .setParam(PARAM_GATE_ID, valueOf(qualityGate.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .executeProtobuf(SearchResponse.class); assertThat(response.getResultsList()) .extracting(Result::getId, Result::getName) .containsExactlyInAnyOrder(tuple(project.getId(), project.name())); assertThat(response.getMore()).isFalse(); }
@Test public void delete_quality_gate_and_any_association_to_any_project() { OrganizationDto organization = db.organizations().insert(); db.qualityGates().createDefaultQualityGate(organization); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization); ComponentDto prj1 = db.components().insertPublicProject(organization); ComponentDto prj2 = db.components().insertPublicProject(organization); db.qualityGates().associateProjectToQualityGate(prj1, qualityGate); db.qualityGates().associateProjectToQualityGate(prj2, qualityGate); userSession.addPermission(ADMINISTER_QUALITY_GATES, organization); ws.newRequest() .setParam(PARAM_ID, valueOf(qualityGate.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .execute(); assertThat(db.getDbClient().qualityGateDao().selectByOrganizationAndId(dbSession, organization, qualityGate.getId())) .isNull(); assertThat(db.getDbClient().propertiesDao().selectProjectProperties(prj1.getDbKey())) .isEmpty(); assertThat(db.getDbClient().propertiesDao().selectProjectProperties(prj2.getDbKey())) .isEmpty(); }
@Test public void fail_when_project_qgate_defined_does_not_exists() { ComponentDto project = db.components().insertPrivateProject(); QualityGateDto dbQualityGate = db.qualityGates().insertQualityGate(db.getDefaultOrganization(), qg -> qg.setName("My team QG")); db.qualityGates().associateProjectToQualityGate(project, dbQualityGate); db.getDbClient().qualityGateDao().delete(dbQualityGate, dbSession); assertThat(underTest.getQualityGate(dbSession, db.getDefaultOrganization(), project)).isEmpty(); }
@Test public void project_quality_gate_over_default() { OrganizationDto organization = db.organizations().insert(); ComponentDto project = db.components().insertPrivateProject(organization); QGateWithOrgDto defaultDbQualityGate = db.qualityGates().insertQualityGate(organization); db.qualityGates().setDefaultQualityGate(organization, defaultDbQualityGate); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); db.qualityGates().associateProjectToQualityGate(project, qualityGate); logInAsProjectUser(project); GetByProjectResponse result = ws.newRequest() .setParam("project", project.getKey()) .setParam("organization", organization.getKey()) .executeProtobuf(GetByProjectResponse.class); Qualitygates.QualityGate reloaded = result.getQualityGate(); assertThat(reloaded.getName()).isEqualTo(reloaded.getName()); assertThat(reloaded.getDefault()).isFalse(); }
@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 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 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()); }
@Test public void json_example() { OrganizationDto organization = db.organizations().insert(); ComponentDto project = db.components().insertPrivateProject(organization); QGateWithOrgDto qualityGate = db.qualityGates().insertQualityGate(organization, qg -> qg.setName("My team QG")); db.qualityGates().associateProjectToQualityGate(project, qualityGate); logInAsProjectUser(project); String result = ws.newRequest() .setParam("project", project.getKey()) .setParam("organization", organization.getKey()) .execute() .getInput(); assertJson(result) .ignoreFields("id") .isSimilarTo(getClass().getResource("get_by_project-example.json")); }
@Test public void return_only_projects_from_organization() { OrganizationDto organization = db.organizations().insert(); OrganizationDto otherOrganization = db.organizations().insert(); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); QualityGateDto otherQualityGate = db.qualityGates().insertQualityGate(otherOrganization); ComponentDto project = db.components().insertPublicProject(organization); ComponentDto otherProject = db.components().insertPublicProject(otherOrganization); db.qualityGates().associateProjectToQualityGate(project, qualityGate); db.qualityGates().associateProjectToQualityGate(otherProject, otherQualityGate); SearchResponse response = ws.newRequest() .setParam(PARAM_GATE_ID, valueOf(qualityGate.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_SELECTED, ALL.value()) .executeProtobuf(SearchResponse.class); assertThat(response.getResultsList()) .extracting(Result::getName) .containsExactlyInAnyOrder(project.name()); }
@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 return_only_associated_project() { OrganizationDto organization = db.organizations().insert(); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); ComponentDto associatedProject = db.components().insertPublicProject(organization); ComponentDto unassociatedProject = db.components().insertPublicProject(organization); db.qualityGates().associateProjectToQualityGate(associatedProject, qualityGate); SearchResponse response = ws.newRequest() .setParam(PARAM_GATE_ID, valueOf(qualityGate.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_SELECTED, SELECTED.value()) .executeProtobuf(SearchResponse.class); assertThat(response.getResultsList()) .extracting(Result::getName, Result::getSelected) .containsExactlyInAnyOrder(tuple(associatedProject.name(), true)) .doesNotContain(tuple(unassociatedProject.name(), false)); }
@Test public void return_extensions_for_application() { OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org")); db.qualityGates().createDefaultQualityGate(organization); ComponentDto project = db.components().insertPrivateProject(organization); Page page = Page.builder("my_plugin/app_page") .setName("App Page") .setScope(COMPONENT) .setComponentQualifiers(Qualifier.VIEW, Qualifier.APP) .build(); ComponentDto application = componentDbTester.insertPublicApplication(organization); QualityGateDto qualityGateDto = db.qualityGates().insertQualityGate(organization, qg -> qg.setName("Sonar way")); db.qualityGates().associateProjectToQualityGate(project, qualityGateDto); userSession.registerComponents(application); init(page); String result = ws.newRequest() .setParam(PARAM_COMPONENT, application.getDbKey()) .execute().getInput(); assertThat(result).contains("my_plugin/app_page"); }
@Test public void return_all_projects() { OrganizationDto organization = db.organizations().insert(); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); ComponentDto unassociatedProject = db.components().insertPublicProject(organization); ComponentDto associatedProject = db.components().insertPublicProject(organization); db.qualityGates().associateProjectToQualityGate(associatedProject, qualityGate); SearchResponse response = ws.newRequest() .setParam(PARAM_GATE_ID, valueOf(qualityGate.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_SELECTED, ALL.value()) .executeProtobuf(SearchResponse.class); assertThat(response.getResultsList()) .extracting(Result::getName, Result::getSelected) .containsExactlyInAnyOrder( tuple(associatedProject.name(), true), tuple(unassociatedProject.name(), false)); }
@Test public void return_quality_gate_defined_on_project() { OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org")); db.qualityGates().createDefaultQualityGate(organization); ComponentDto project = db.components().insertPrivateProject(organization); QualityGateDto qualityGateDto = db.qualityGates().insertQualityGate(organization, qg -> qg.setName("Sonar way")); db.qualityGates().associateProjectToQualityGate(project, qualityGateDto); userSession.addProjectPermission(UserRole.USER, project); init(); executeAndVerify(project.getDbKey(), "return_quality_gate.json"); }
@Test public void return_only_unassociated_project() { OrganizationDto organization = db.organizations().insert(); QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization); ComponentDto associatedProject = db.components().insertPublicProject(organization); ComponentDto unassociatedProject = db.components().insertPublicProject(organization); db.qualityGates().associateProjectToQualityGate(associatedProject, qualityGate); SearchResponse response = ws.newRequest() .setParam(PARAM_GATE_ID, valueOf(qualityGate.getId())) .setParam(PARAM_ORGANIZATION, organization.getKey()) .setParam(PARAM_SELECTED, DESELECTED.value()) .executeProtobuf(SearchResponse.class); assertThat(response.getResultsList()) .extracting(Result::getName, Result::getSelected) .containsExactlyInAnyOrder(tuple(unassociatedProject.name(), false)) .doesNotContain(tuple(associatedProject.name(), true)); }
@Test public void quality_gate_for_a_long_living_branch() { OrganizationDto organization = db.organizations().insert(o -> o.setKey("my-org")); db.qualityGates().createDefaultQualityGate(organization); ComponentDto project = db.components().insertPrivateProject(organization); ComponentDto longLivingBranch = db.components().insertProjectBranch(project, b -> b.setBranchType(BranchType.LONG)); QualityGateDto qualityGateDto = db.qualityGates().insertQualityGate(organization, qg -> qg.setName("Sonar way")); db.qualityGates().associateProjectToQualityGate(project, qualityGateDto); userSession.addProjectPermission(UserRole.USER, project); init(); String json = ws.newRequest() .setParam("componentKey", longLivingBranch.getKey()) .setParam("branch", longLivingBranch.getBranch()) .execute() .getInput(); verify(json, "return_quality_gate.json"); }