]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10134 Search return only projects from quality gate organization
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Thu, 14 Dec 2017 13:10:39 +0000 (14:10 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Thu, 14 Dec 2017 16:03:35 +0000 (17:03 +0100)
server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/ProjectQgateAssociationQuery.java
server/sonar-db-dao/src/main/resources/org/sonar/db/qualitygate/ProjectQgateAssociationMapper.xml
server/sonar-db-dao/src/test/java/org/sonar/db/qualitygate/ProjectQgateAssociationDaoTest.java
server/sonar-server/src/test/java/org/sonar/server/qualitygate/ws/SearchActionTest.java

index f57e20bd308c03e6b03a4e1f558557ccdb7cbd37..fffedf2582b0d961b96dc07c0acb503efdfdf051 100644 (file)
@@ -40,6 +40,7 @@ public class ProjectQgateAssociationQuery {
   public static final Set<String> AVAILABLE_MEMBERSHIP = ImmutableSet.of(ANY, IN, OUT);
 
   private final String gateId;
+  private final String organizationUuid;
   private final String membership;
 
   private final String projectSearch;
@@ -55,6 +56,7 @@ public class ProjectQgateAssociationQuery {
 
   private ProjectQgateAssociationQuery(Builder builder) {
     this.gateId = Long.toString(builder.qualityGate.getId());
+    this.organizationUuid = builder.qualityGate.getOrganizationUuid();
     this.membership = builder.membership;
     this.projectSearch = builder.projectSearch;
     if (this.projectSearch == null) {
@@ -71,6 +73,10 @@ public class ProjectQgateAssociationQuery {
     return gateId;
   }
 
+  public String organizationUuid() {
+    return organizationUuid;
+  }
+
   @CheckForNull
   public String membership() {
     return membership;
index 14c8cbd1b588f10a8647f7c62e436c6efdbefdde..a2a05d73d07d6017ceb2283f66e5f180e98db4d9 100644 (file)
@@ -12,6 +12,7 @@
     and proj.enabled = ${_true}
     and proj.main_branch_project_uuid is null
     and proj.copy_component_uuid is null
+    and proj.organization_uuid=#{query.organizationUuid, jdbcType=VARCHAR}
     <choose>
       <when test="query.membership() == 'selected'">
         and prop.text_value IS NOT NULL
index 3de2b4f21e6810f3be4a66eac720f5b013de232b..ed9fa8fc25466de1304d35cd9391fa88ceca413c 100644 (file)
@@ -130,6 +130,26 @@ public class ProjectQgateAssociationDaoTest {
         .containsExactly(project1.getId(), project3.getId(), project2.getId());
   }
 
+  @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 select_qgate_id_is_absent() {
     ComponentDto project = db.components().insertPrivateProject();
index 4658e9edc597e1024645134fb1f038cea15079bc..7856dede61b88927af5230b17481a2f3f0bb38b2 100644 (file)
@@ -316,7 +316,7 @@ public class SearchActionTest {
     OrganizationDto organization = db.organizations().insert();
     QualityGateDto qualityGate = db.qualityGates().insertQualityGate(organization);
     for (int i = 0; i < 20; i++) {
-      ComponentDto project = db.components().insertPublicProject();
+      ComponentDto project = db.components().insertPublicProject(organization);
       db.qualityGates().associateProjectToQualityGate(project, qualityGate);
     }
 
@@ -333,6 +333,28 @@ public class SearchActionTest {
     assertThat(response.getResultsCount()).isEqualTo(10);
   }
 
+  @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 fail_on_unknown_quality_gate() {
     OrganizationDto organization = db.organizations().insert();