]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-13835 api/qualitygates/search is not returning deterministic results when many...
authorDuarte Meneses <duarte.meneses@sonarsource.com>
Tue, 15 Sep 2020 16:30:25 +0000 (11:30 -0500)
committersonartech <sonartech@sonarsource.com>
Tue, 22 Sep 2020 20:07:12 +0000 (20:07 +0000)
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

index baa08b4dc62f399fe3934ebd125b2825fc64f347..6b31322cb8054fbbfd611e801935f2771417d434 100644 (file)
@@ -25,7 +25,7 @@
     <if test="query.projectSearch() != null">
       and (proj.kee = #{query.projectSearch} or upper(proj.name) like #{query.projectSearchUpperLikeSql} escape '/')
     </if>
-    order by proj.name
+    order by proj.name, proj.kee
   </select>
 
   <select id="selectQGateUuidByProjectUuid" parameterType="String" resultType="string">
index 890b72652ccf3f439d7fbdff31268f5e3d69804f..f2fe1826be1b39a9339f2abd851e66e940cca68c 100644 (file)
@@ -64,6 +64,26 @@ public class ProjectQgateAssociationDaoTest {
         tuple(project3.uuid(), project3.getKey(), project3.name(), null));
   }
 
+  @Test
+  public void select_all_projects_by_query_should_have_deterministic_order() {
+    OrganizationDto organization = db.organizations().insert();
+    QGateWithOrgDto qualityGate1 = db.qualityGates().insertQualityGate(organization);
+    ComponentDto project1 = db.components().insertPrivateProject(organization, d -> d.setName("p1").setDbKey("key1"));
+    ComponentDto project2 = db.components().insertPrivateProject(organization, d -> d.setName("p1").setDbKey("key2"));
+    ComponentDto project3 = db.components().insertPrivateProject(organization, d -> d.setName("p2").setDbKey("key3"));
+    db.qualityGates().associateProjectToQualityGate(db.components().getProjectDto(project1), qualityGate1);
+    db.qualityGates().associateProjectToQualityGate(db.components().getProjectDto(project2), qualityGate1);
+    db.qualityGates().associateProjectToQualityGate(db.components().getProjectDto(project3), qualityGate1);
+
+    List<ProjectQgateAssociationDto> result = underTest.selectProjects(dbSession, ProjectQgateAssociationQuery.builder()
+      .qualityGate(qualityGate1)
+      .build());
+
+    assertThat(result)
+      .extracting(ProjectQgateAssociationDto::getUuid)
+      .containsExactlyInAnyOrder(project1.uuid(), project2.uuid(), project3.uuid());
+  }
+
   @Test
   public void select_projects_by_query() {
     OrganizationDto organization = db.organizations().insert();