From f34266f025c3f862c5f1bdf58a0983545334c4ae Mon Sep 17 00:00:00 2001
From: Simon Brandhof <simon.brandhof@sonarsource.com>
Date: Fri, 21 Oct 2016 10:50:08 +0200
Subject: SONAR-8278 Support organizations in web service
 api/permissions/search_templates

---
 .../permission/template/PermissionTemplateDao.java | 18 +++-----------
 .../template/PermissionTemplateMapper.java         |  2 +-
 .../template/PermissionTemplateMapper.xml          | 16 ++++++-------
 .../template/PermissionTemplateDaoTest.java        | 28 ++++++++++++----------
 4 files changed, 27 insertions(+), 37 deletions(-)

(limited to 'sonar-db/src')

diff --git a/sonar-db/src/main/java/org/sonar/db/permission/template/PermissionTemplateDao.java b/sonar-db/src/main/java/org/sonar/db/permission/template/PermissionTemplateDao.java
index 9beeb044d2c..ac6bb49fefd 100644
--- a/sonar-db/src/main/java/org/sonar/db/permission/template/PermissionTemplateDao.java
+++ b/sonar-db/src/main/java/org/sonar/db/permission/template/PermissionTemplateDao.java
@@ -101,21 +101,9 @@ public class PermissionTemplateDao implements Dao {
     return mapper(session).selectByUuid(templateUuid);
   }
 
-  /**
-   * @deprecated does not support organizations. Should return group ids.
-   */
-  @Deprecated
-  public List<PermissionTemplateDto> selectAll(DbSession session, String nameMatch) {
-    String uppercaseNameMatch = toUppercaseSqlQuery(nameMatch);
-    return mapper(session).selectAll(uppercaseNameMatch);
-  }
-
-  /**
-   * @deprecated does not support organizations. Should return group ids.
-   */
-  @Deprecated
-  public List<PermissionTemplateDto> selectAll(DbSession session) {
-    return mapper(session).selectAll(null);
+  public List<PermissionTemplateDto> selectAll(DbSession session, String organizationUuid, @Nullable String nameMatch) {
+    String upperCaseNameLikeSql = nameMatch != null ? toUppercaseSqlQuery(nameMatch) : null;
+    return mapper(session).selectAll(organizationUuid, upperCaseNameLikeSql);
   }
 
   private static String toUppercaseSqlQuery(String nameMatch) {
diff --git a/sonar-db/src/main/java/org/sonar/db/permission/template/PermissionTemplateMapper.java b/sonar-db/src/main/java/org/sonar/db/permission/template/PermissionTemplateMapper.java
index 64d4626e7b3..55b3d2569ec 100644
--- a/sonar-db/src/main/java/org/sonar/db/permission/template/PermissionTemplateMapper.java
+++ b/sonar-db/src/main/java/org/sonar/db/permission/template/PermissionTemplateMapper.java
@@ -74,7 +74,7 @@ public interface PermissionTemplateMapper {
 
   int countGroupNamesByQueryAndTemplate(@Param("query") PermissionQuery query, @Param("templateId") long templateId);
 
-  List<PermissionTemplateDto> selectAll(@Nullable @Param("nameMatch") String nameMatch);
+  List<PermissionTemplateDto> selectAll(@Param("organizationUuid") String organizationUuid, @Nullable @Param("upperCaseNameLikeSql") String upperCaseNameLikeSql);
 
   void usersCountByTemplateIdAndPermission(Map<String, Object> parameters, ResultHandler resultHandler);
 
diff --git a/sonar-db/src/main/resources/org/sonar/db/permission/template/PermissionTemplateMapper.xml b/sonar-db/src/main/resources/org/sonar/db/permission/template/PermissionTemplateMapper.xml
index e60f18a5a82..0001f3e18f4 100644
--- a/sonar-db/src/main/resources/org/sonar/db/permission/template/PermissionTemplateMapper.xml
+++ b/sonar-db/src/main/resources/org/sonar/db/permission/template/PermissionTemplateMapper.xml
@@ -195,15 +195,15 @@
   </select>
 
   <select id="selectAll" parameterType="map" resultType="PermissionTemplate">
-    SELECT
+    select
     <include refid="templateColumns"/>
-    FROM permission_templates
-    <where>
-      <if test="nameMatch!=null">
-        AND (UPPER(name) LIKE #{nameMatch} ESCAPE '/')
-      </if>
-    </where>
-    ORDER BY UPPER(name), name
+    from permission_templates
+    where
+    organization_uuid = #{organizationUuid,jdbcType=VARCHAR}
+    <if test="upperCaseNameLikeSql != null">
+        and upper(name) like #{upperCaseNameLikeSql} escape '/'
+    </if>
+    order by upper(name), name
   </select>
 
   <select id="selectByName" parameterType="map" resultType="PermissionTemplate">
diff --git a/sonar-db/src/test/java/org/sonar/db/permission/template/PermissionTemplateDaoTest.java b/sonar-db/src/test/java/org/sonar/db/permission/template/PermissionTemplateDaoTest.java
index b4d3ed70416..8707fcdb930 100644
--- a/sonar-db/src/test/java/org/sonar/db/permission/template/PermissionTemplateDaoTest.java
+++ b/sonar-db/src/test/java/org/sonar/db/permission/template/PermissionTemplateDaoTest.java
@@ -94,17 +94,29 @@ public class PermissionTemplateDaoTest {
   }
 
   @Test
-  public void should_select_all_permission_templates() {
+  public void selectAll_without_name_filtering() {
     db.prepareDbUnit(getClass(), "selectAllPermissionTemplates.xml");
     commit();
 
-    List<PermissionTemplateDto> permissionTemplates = underTest.selectAll(dbSession);
-
+    List<PermissionTemplateDto> permissionTemplates = underTest.selectAll(dbSession, "org1", null);
     assertThat(permissionTemplates).hasSize(3);
     assertThat(permissionTemplates).extracting("id").containsOnly(1L, 2L, 3L);
     assertThat(permissionTemplates).extracting("name").containsOnly("template1", "template2", "template3");
     assertThat(permissionTemplates).extracting("kee").containsOnly("template1_20130102_030405", "template2_20130102_030405", "template3_20130102_030405");
     assertThat(permissionTemplates).extracting("description").containsOnly("description1", "description2", "description3");
+
+    assertThat(underTest.selectAll(dbSession, "missingOrg", null)).isEmpty();
+  }
+
+  @Test
+  public void selectAll_with_name_filtering() {
+    PermissionTemplateDto t1InOrg1 = templateDb.insertTemplate(newPermissionTemplateDto().setName("aBcDeF").setOrganizationUuid("org1"));
+    PermissionTemplateDto t2InOrg1 = templateDb.insertTemplate(newPermissionTemplateDto().setName("cdefgh").setOrganizationUuid("org1"));
+    PermissionTemplateDto t3InOrg1 = templateDb.insertTemplate(newPermissionTemplateDto().setName("hijkl").setOrganizationUuid("org2"));
+    PermissionTemplateDto t4InOrg2 = templateDb.insertTemplate(newPermissionTemplateDto().setName("cdefgh").setOrganizationUuid("org2"));
+
+    assertThat(underTest.selectAll(dbSession, "org1", "def")).extracting(PermissionTemplateDto::getId).containsExactly(t1InOrg1.getId(), t2InOrg1.getId());
+    assertThat(underTest.selectAll(dbSession, "org1", "missing")).isEmpty();
   }
 
   @Test
@@ -239,16 +251,6 @@ public class PermissionTemplateDaoTest {
     assertThat(result).extracting("count").containsOnly(3, 1);
   }
 
-  @Test
-  public void select_by_name_query_and_pagination() {
-    templateDb.insertTemplate(newPermissionTemplateDto().setName("aaabbb"));
-    templateDb.insertTemplate(newPermissionTemplateDto().setName("aaaccc"));
-
-    List<PermissionTemplateDto> templates = underTest.selectAll(dbSession, "aaa");
-
-    assertThat(templates.get(0).getName()).isEqualTo("aaabbb");
-  }
-
   @Test
   public void selectPotentialPermissions_with_unknown_template_and_no_user() {
     List<String> result = underTest.selectPotentialPermissionsByUserIdAndTemplateId(dbSession, null, 42L);
-- 
cgit v1.2.3