aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2013-12-03 16:30:56 +0100
committerJulien Lancelot <julien.lancelot@sonarsource.com>2013-12-03 16:36:44 +0100
commit6b2ec964ba25242ea56441c10ea422299ea21c42 (patch)
tree52b4265d8620acfa2da8a45ca6d37f5296d8b722
parent06b86ea17261a6126c369b5b9a9b8a21e80e8682 (diff)
downloadsonarqube-6b2ec964ba25242ea56441c10ea422299ea21c42.tar.gz
sonarqube-6b2ec964ba25242ea56441c10ea422299ea21c42.zip
SONAR-4930 Add group name search
-rw-r--r--sonar-core/src/main/resources/org/sonar/core/user/GroupMembershipMapper.xml3
-rw-r--r--sonar-core/src/test/java/org/sonar/core/user/GroupMembershipDaoTest.java22
-rw-r--r--sonar-server/src/main/java/org/sonar/server/group/InternalGroupMembershipQueryService.java13
-rw-r--r--sonar-server/src/test/java/org/sonar/server/group/InternalGroupMembershipQueryServiceTest.java53
4 files changed, 54 insertions, 37 deletions
diff --git a/sonar-core/src/main/resources/org/sonar/core/user/GroupMembershipMapper.xml b/sonar-core/src/main/resources/org/sonar/core/user/GroupMembershipMapper.xml
index 559895ce808..d94c6b043e5 100644
--- a/sonar-core/src/main/resources/org/sonar/core/user/GroupMembershipMapper.xml
+++ b/sonar-core/src/main/resources/org/sonar/core/user/GroupMembershipMapper.xml
@@ -21,6 +21,9 @@
AND gu.user_id is null
</when>
</choose>
+ <if test="searchText != null">
+ AND (g.name LIKE #{searchTextSql} ESCAPE '/')
+ </if>
</where>
ORDER BY g.name
</select>
diff --git a/sonar-core/src/test/java/org/sonar/core/user/GroupMembershipDaoTest.java b/sonar-core/src/test/java/org/sonar/core/user/GroupMembershipDaoTest.java
index 29fdf906cb6..1035c1c5b5b 100644
--- a/sonar-core/src/test/java/org/sonar/core/user/GroupMembershipDaoTest.java
+++ b/sonar-core/src/test/java/org/sonar/core/user/GroupMembershipDaoTest.java
@@ -85,6 +85,19 @@ public class GroupMembershipDaoTest extends AbstractDaoTestCase {
}
@Test
+ public void select_only_matching_group_name() throws Exception {
+ setupData("shared");
+
+ List<GroupMembershipDto> result = dao.selectGroups(GroupMembershipQuery.builder().userId(200L).searchText("user").build());
+ assertThat(result).hasSize(1);
+
+ assertThat(result.get(0).getName()).isEqualTo("sonar-users");
+
+ result = dao.selectGroups(GroupMembershipQuery.builder().userId(200L).searchText("sonar").build());
+ assertThat(result).hasSize(3);
+ }
+
+ @Test
public void should_be_sorted_by_group_name() throws Exception {
setupData("should_be_sorted_by_group_name");
@@ -95,13 +108,4 @@ public class GroupMembershipDaoTest extends AbstractDaoTestCase {
assertThat(result.get(2).getName()).isEqualTo("sonar-users");
}
- private void check(GroupMembershipDto groupMembership, String expectedName, Long expectedUser){
- assertThat(groupMembership.getName()).isEqualTo(expectedName);
- if (expectedUser != null) {
- assertThat(groupMembership.getUserId()).isEqualTo(expectedUser);
- } else {
- assertThat(groupMembership.getUserId()).isNull();
- }
- }
-
}
diff --git a/sonar-server/src/main/java/org/sonar/server/group/InternalGroupMembershipQueryService.java b/sonar-server/src/main/java/org/sonar/server/group/InternalGroupMembershipQueryService.java
index 4c9e752b121..f2340cbb2e8 100644
--- a/sonar-server/src/main/java/org/sonar/server/group/InternalGroupMembershipQueryService.java
+++ b/sonar-server/src/main/java/org/sonar/server/group/InternalGroupMembershipQueryService.java
@@ -42,7 +42,7 @@ public class InternalGroupMembershipQueryService implements ServerComponent {
this.groupMembershipDao = groupMembershipDao;
}
- public List<GroupMembership> find(Map<String, Object> params) {
+ public List<GroupMembership> find(Map<String, String> params) {
List<GroupMembership> groupMemberships = newArrayList();
String user = user(params);
UserDto userDto = userDao.selectActiveUserByLogin(user);
@@ -56,19 +56,20 @@ public class InternalGroupMembershipQueryService implements ServerComponent {
return groupMemberships;
}
- private GroupMembershipQuery parseQuery(Map<String, Object> params, Long userId) {
+ private GroupMembershipQuery parseQuery(Map<String, String> params, Long userId) {
GroupMembershipQuery.Builder builder = GroupMembershipQuery.builder();
builder.memberShip(memberShip(params));
+ builder.searchText(params.get("query"));
builder.userId(userId);
return builder.build();
}
- private String user(Map<String, Object> params){
- return (String) params.get("user");
+ private String user(Map<String, String> params){
+ return params.get("user");
}
- private String memberShip(Map<String, Object> params){
- String selected = (String) params.get("selected");
+ private String memberShip(Map<String, String> params){
+ String selected = params.get("selected");
if (selected.equals("selected")) {
return GroupMembershipQuery.MEMBER_ONLY;
} else if (selected.equals("deselected")) {
diff --git a/sonar-server/src/test/java/org/sonar/server/group/InternalGroupMembershipQueryServiceTest.java b/sonar-server/src/test/java/org/sonar/server/group/InternalGroupMembershipQueryServiceTest.java
index 6fdfd0829c6..18e5b064778 100644
--- a/sonar-server/src/test/java/org/sonar/server/group/InternalGroupMembershipQueryServiceTest.java
+++ b/sonar-server/src/test/java/org/sonar/server/group/InternalGroupMembershipQueryServiceTest.java
@@ -20,6 +20,7 @@
package org.sonar.server.group;
+import com.google.common.collect.ImmutableMap;
import org.junit.Before;
import org.junit.Test;
import org.sonar.core.persistence.AbstractDaoTestCase;
@@ -29,9 +30,7 @@ import org.sonar.core.user.UserDao;
import org.sonar.server.exceptions.NotFoundException;
import java.util.List;
-import java.util.Map;
-import static com.google.common.collect.Maps.newHashMap;
import static org.fest.assertions.Assertions.assertThat;
/**
@@ -52,11 +51,9 @@ public class InternalGroupMembershipQueryServiceTest extends AbstractDaoTestCase
public void find_all_member_groups() {
setupData("shared");
- Map<String, Object> params = newHashMap();
- params.put("user", "user1");
- params.put("selected", "all");
-
- List<GroupMembership> result = service.find(params);
+ List<GroupMembership> result = service.find(ImmutableMap.of(
+ "user", "user1",
+ "selected", "all"));
assertThat(result).hasSize(3);
check(result.get(0), "sonar-administrators", false);
check(result.get(1), "sonar-reviewers", false);
@@ -67,11 +64,9 @@ public class InternalGroupMembershipQueryServiceTest extends AbstractDaoTestCase
public void find_member_groups() {
setupData("shared");
- Map<String, Object> params = newHashMap();
- params.put("user", "user1");
- params.put("selected", "selected");
-
- List<GroupMembership> result = service.find(params);
+ List<GroupMembership> result = service.find(ImmutableMap.of(
+ "user", "user1",
+ "selected", "selected"));
assertThat(result).hasSize(1);
check(result.get(0), "sonar-users", true);
}
@@ -80,11 +75,9 @@ public class InternalGroupMembershipQueryServiceTest extends AbstractDaoTestCase
public void find_not_member_groups() {
setupData("shared");
- Map<String, Object> params = newHashMap();
- params.put("user", "user1");
- params.put("selected", "deselected");
-
- List<GroupMembership> result = service.find(params);
+ List<GroupMembership> result = service.find(ImmutableMap.of(
+ "user", "user1",
+ "selected", "deselected"));
assertThat(result).hasSize(2);
check(result.get(0), "sonar-administrators", false);
check(result.get(1), "sonar-reviewers", false);
@@ -94,17 +87,33 @@ public class InternalGroupMembershipQueryServiceTest extends AbstractDaoTestCase
public void fail_if_user_not_found() {
setupData("shared");
- Map<String, Object> params = newHashMap();
- params.put("user", "user_not_existing");
- params.put("selected", "all");
-
try {
- service.find(params);
+ service.find(ImmutableMap.of(
+ "user", "user_not_existing",
+ "selected", "all"));
} catch (Exception e) {
assertThat(e).isInstanceOf(NotFoundException.class).hasMessage("User 'user_not_existing' does not exists.");
}
}
+ @Test
+ public void find_matched_groups_name() {
+ setupData("shared");
+
+ List<GroupMembership> result = service.find(ImmutableMap.of(
+ "user", "user1",
+ "selected", "all",
+ "query", "user"));
+ assertThat(result).hasSize(1);
+ check(result.get(0), "sonar-users", true);
+
+ result = service.find(ImmutableMap.of(
+ "user", "user1",
+ "selected", "all",
+ "query", "sonar"));
+ assertThat(result).hasSize(3);
+ }
+
private void check(GroupMembership groupMembership, String expectedName, boolean isMember) {
assertThat(groupMembership.name()).isEqualTo(expectedName);
assertThat(groupMembership.isMember()).isEqualTo(isMember);