diff options
author | Julien Lancelot <julien.lancelot@sonarsource.com> | 2013-12-03 16:30:56 +0100 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@sonarsource.com> | 2013-12-03 16:36:44 +0100 |
commit | 6b2ec964ba25242ea56441c10ea422299ea21c42 (patch) | |
tree | 52b4265d8620acfa2da8a45ca6d37f5296d8b722 | |
parent | 06b86ea17261a6126c369b5b9a9b8a21e80e8682 (diff) | |
download | sonarqube-6b2ec964ba25242ea56441c10ea422299ea21c42.tar.gz sonarqube-6b2ec964ba25242ea56441c10ea422299ea21c42.zip |
SONAR-4930 Add group name search
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); |