Browse Source

Fix quality flaws

tags/4.1-RC1
Julien Lancelot 10 years ago
parent
commit
5a6099ef57
21 changed files with 268 additions and 138 deletions
  1. 10
    7
      sonar-core/src/main/java/org/sonar/core/permission/PermissionDao.java
  2. 7
    6
      sonar-core/src/main/java/org/sonar/core/permission/PermissionQuery.java
  3. 9
    7
      sonar-core/src/main/java/org/sonar/core/permission/PermissionTemplateDao.java
  4. 3
    3
      sonar-core/src/main/java/org/sonar/core/user/GroupMembershipDao.java
  5. 3
    5
      sonar-core/src/main/java/org/sonar/core/user/GroupMembershipQuery.java
  6. 6
    6
      sonar-core/src/test/java/org/sonar/core/permission/GroupWithPermissionDaoTest.java
  7. 5
    5
      sonar-core/src/test/java/org/sonar/core/permission/GroupWithPermissionTemplateDaoTest.java
  8. 10
    10
      sonar-core/src/test/java/org/sonar/core/permission/UserWithPermissionDaoTest.java
  9. 10
    10
      sonar-core/src/test/java/org/sonar/core/permission/UserWithPermissionTemplateDaoTest.java
  10. 57
    0
      sonar-core/src/test/java/org/sonar/core/user/GroupMembershipQueryTest.java
  11. 1
    1
      sonar-plugin-api/src/main/java/org/sonar/api/technicaldebt/server/internal/DefaultCharacteristic.java
  12. 5
    2
      sonar-server/src/main/java/org/sonar/server/group/InternalGroupMembershipService.java
  13. 3
    3
      sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionService.java
  14. 2
    2
      sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionTemplateService.java
  15. 11
    11
      sonar-server/src/main/java/org/sonar/server/permission/PermissionFinder.java
  16. 13
    6
      sonar-server/src/main/java/org/sonar/server/permission/PermissionQueryParser.java
  17. 7
    7
      sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionServiceTest.java
  18. 2
    2
      sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionTemplateServiceTest.java
  19. 38
    38
      sonar-server/src/test/java/org/sonar/server/permission/PermissionFinderTest.java
  20. 8
    7
      sonar-server/src/test/java/org/sonar/server/permission/PermissionQueryParserTest.java
  21. 58
    0
      sonar-server/src/test/java/org/sonar/server/permission/PermissionQueryTest.java

+ 10
- 7
sonar-core/src/main/java/org/sonar/core/permission/PermissionDao.java View File

@@ -35,6 +35,9 @@ import static com.google.common.collect.Maps.newHashMap;

public class PermissionDao implements ServerComponent {

private static final String QUERY_PARAMETER = "query";
private static final String COMPONENT_ID_PARAMETER = "componentId";

private final MyBatis myBatis;

public PermissionDao(MyBatis myBatis) {
@@ -44,12 +47,12 @@ public class PermissionDao implements ServerComponent {
/**
* @return a paginated list of users.
*/
public List<UserWithPermissionDto> selectUsers(WithPermissionQuery query, @Nullable Long componentId, int offset, int limit) {
public List<UserWithPermissionDto> selectUsers(PermissionQuery query, @Nullable Long componentId, int offset, int limit) {
SqlSession session = myBatis.openSession();
try {
Map<String, Object> params = newHashMap();
params.put("query", query);
params.put("componentId", componentId);
params.put(QUERY_PARAMETER, query);
params.put(COMPONENT_ID_PARAMETER, componentId);
return session.selectList("org.sonar.core.permission.PermissionMapper.selectUsers", params, new RowBounds(offset, limit));
} finally {
MyBatis.closeQuietly(session);
@@ -57,7 +60,7 @@ public class PermissionDao implements ServerComponent {
}

@VisibleForTesting
List<UserWithPermissionDto> selectUsers(WithPermissionQuery query, @Nullable Long componentId) {
List<UserWithPermissionDto> selectUsers(PermissionQuery query, @Nullable Long componentId) {
return selectUsers(query, componentId, 0, Integer.MAX_VALUE);
}

@@ -66,12 +69,12 @@ public class PermissionDao implements ServerComponent {
* Membership parameter from query is not taking into account in order to deal more easily with the 'Anyone' group
* @return a non paginated list of groups.
*/
public List<GroupWithPermissionDto> selectGroups(WithPermissionQuery query, @Nullable Long componentId) {
public List<GroupWithPermissionDto> selectGroups(PermissionQuery query, @Nullable Long componentId) {
SqlSession session = myBatis.openSession();
try {
Map<String, Object> params = newHashMap();
params.put("query", query);
params.put("componentId", componentId);
params.put(QUERY_PARAMETER, query);
params.put(COMPONENT_ID_PARAMETER, componentId);
params.put("anyoneGroup", DefaultGroups.ANYONE);
return session.selectList("org.sonar.core.permission.PermissionMapper.selectGroups", params);
} finally {

sonar-core/src/main/java/org/sonar/core/permission/WithPermissionQuery.java → sonar-core/src/main/java/org/sonar/core/permission/PermissionQuery.java View File

@@ -32,7 +32,7 @@ import java.util.Set;
/**
* Query used to get users and groups from a permission
*/
public class WithPermissionQuery {
public class PermissionQuery {

public static final int DEFAULT_PAGE_INDEX = 1;
public static final int DEFAULT_PAGE_SIZE = 100;
@@ -58,7 +58,7 @@ public class WithPermissionQuery {
private final int pageIndex;


private WithPermissionQuery(Builder builder) {
private PermissionQuery(Builder builder) {
this.permission = builder.permission;
this.component = builder.component;
this.template = builder.template;
@@ -171,9 +171,10 @@ public class WithPermissionQuery {

private void initMembership() {
if (membership == null) {
membership = WithPermissionQuery.ANY;
membership = PermissionQuery.ANY;
} else {
// TODO check
Preconditions.checkArgument(AVAILABLE_MEMBERSHIP.contains(membership),
"Membership is not valid (got " + membership + "). Availables values are " + AVAILABLE_MEMBERSHIP);
}
}

@@ -190,12 +191,12 @@ public class WithPermissionQuery {
Preconditions.checkArgument(pageIndex > 0, "Page index must be greater than 0 (got " + pageIndex + ")");
}

public WithPermissionQuery build() {
public PermissionQuery build() {
Preconditions.checkNotNull(permission, "Permission cant be null.");
initMembership();
initPageIndex();
initPageSize();
return new WithPermissionQuery(this);
return new PermissionQuery(this);
}
}
}

+ 9
- 7
sonar-core/src/main/java/org/sonar/core/permission/PermissionTemplateDao.java View File

@@ -42,6 +42,8 @@ import static com.google.common.collect.Maps.newHashMap;

public class PermissionTemplateDao implements TaskComponent, ServerComponent {

public static final String QUERY_PARAMETER = "query";
public static final String TEMPLATE_ID_PARAMETER = "templateId";
private final MyBatis myBatis;
private final DateProvider dateProvider;

@@ -57,12 +59,12 @@ public class PermissionTemplateDao implements TaskComponent, ServerComponent {
/**
* @return a paginated list of users.
*/
public List<UserWithPermissionDto> selectUsers(WithPermissionQuery query, Long templateId, int offset, int limit) {
public List<UserWithPermissionDto> selectUsers(PermissionQuery query, Long templateId, int offset, int limit) {
SqlSession session = myBatis.openSession();
try {
Map<String, Object> params = newHashMap();
params.put("query", query);
params.put("templateId", templateId);
params.put(QUERY_PARAMETER, query);
params.put(TEMPLATE_ID_PARAMETER, templateId);
return session.selectList("org.sonar.core.permission.PermissionTemplateMapper.selectUsers", params, new RowBounds(offset, limit));
} finally {
MyBatis.closeQuietly(session);
@@ -70,7 +72,7 @@ public class PermissionTemplateDao implements TaskComponent, ServerComponent {
}

@VisibleForTesting
List<UserWithPermissionDto> selectUsers(WithPermissionQuery query, Long templateId) {
List<UserWithPermissionDto> selectUsers(PermissionQuery query, Long templateId) {
return selectUsers(query, templateId, 0, Integer.MAX_VALUE);
}

@@ -79,12 +81,12 @@ public class PermissionTemplateDao implements TaskComponent, ServerComponent {
* Membership parameter from query is not taking into account in order to deal more easily with the 'Anyone' group.
* @return a non paginated list of groups.
*/
public List<GroupWithPermissionDto> selectGroups(WithPermissionQuery query, Long templateId) {
public List<GroupWithPermissionDto> selectGroups(PermissionQuery query, Long templateId) {
SqlSession session = myBatis.openSession();
try {
Map<String, Object> params = newHashMap();
params.put("query", query);
params.put("templateId", templateId);
params.put(QUERY_PARAMETER, query);
params.put(TEMPLATE_ID_PARAMETER, templateId);
params.put("anyoneGroup", DefaultGroups.ANYONE);
return session.selectList("org.sonar.core.permission.PermissionTemplateMapper.selectGroups", params);
} finally {

+ 3
- 3
sonar-core/src/main/java/org/sonar/core/user/GroupMembershipDao.java View File

@@ -31,16 +31,16 @@ import java.util.Map;

public class GroupMembershipDao {

private final MyBatis mybatis;

public GroupMembershipDao(MyBatis mybatis) {
this.mybatis = mybatis;
}

private final MyBatis mybatis;

public List<GroupMembershipDto> selectGroups(GroupMembershipQuery query, Long userId, int offset, int limit) {
SqlSession session = mybatis.openSession();
try {
Map<String, Object> params = ImmutableMap.of("query", query, "userId", userId);
Map<String, Object> params = ImmutableMap.of("query", query, "userId", userId);
return session.selectList("org.sonar.core.user.GroupMembershipMapper.selectGroups", params, new RowBounds(offset, limit));
} finally {
MyBatis.closeQuietly(session);

+ 3
- 5
sonar-core/src/main/java/org/sonar/core/user/GroupMembershipQuery.java View File

@@ -28,9 +28,6 @@ import javax.annotation.Nullable;

import java.util.Set;

/**
* @since 4.1
*/
public class GroupMembershipQuery {

public static final int DEFAULT_PAGE_INDEX = 1;
@@ -145,7 +142,8 @@ public class GroupMembershipQuery {
if (membership == null) {
membership = GroupMembershipQuery.ANY;
} else {
// TODO check
Preconditions.checkArgument(AVAILABLE_MEMBERSHIP.contains(membership),
"Membership is not valid (got " + membership + "). Availables values are " + AVAILABLE_MEMBERSHIP);
}
}

@@ -163,7 +161,7 @@ public class GroupMembershipQuery {
}

public GroupMembershipQuery build() {
Preconditions.checkNotNull(login, "User cant be null.");
Preconditions.checkNotNull(login, "User login cant be null.");
initMembership();
initPageIndex();
initPageSize();

+ 6
- 6
sonar-core/src/test/java/org/sonar/core/permission/GroupWithPermissionDaoTest.java View File

@@ -43,7 +43,7 @@ public class GroupWithPermissionDaoTest extends AbstractDaoTestCase {
public void select_groups_for_project_permission() throws Exception {
setupData("groups_with_permissions");

WithPermissionQuery query = WithPermissionQuery.builder().permission("user").build();
PermissionQuery query = PermissionQuery.builder().permission("user").build();
List<GroupWithPermissionDto> result = dao.selectGroups(query, COMPONENT_ID);
assertThat(result).hasSize(4);

@@ -69,7 +69,7 @@ public class GroupWithPermissionDaoTest extends AbstractDaoTestCase {
setupData("groups_with_permissions");

// Anyone group has not the permission 'admin', so it's not returned
WithPermissionQuery query = WithPermissionQuery.builder().permission("admin").build();
PermissionQuery query = PermissionQuery.builder().permission("admin").build();
List<GroupWithPermissionDto> result = dao.selectGroups(query, COMPONENT_ID);
assertThat(result).hasSize(3);

@@ -90,7 +90,7 @@ public class GroupWithPermissionDaoTest extends AbstractDaoTestCase {
public void select_groups_for_global_permission() throws Exception {
setupData("groups_with_permissions");

WithPermissionQuery query = WithPermissionQuery.builder().permission("admin").build();
PermissionQuery query = PermissionQuery.builder().permission("admin").build();
List<GroupWithPermissionDto> result = dao.selectGroups(query, null);
assertThat(result).hasSize(3);

@@ -111,11 +111,11 @@ public class GroupWithPermissionDaoTest extends AbstractDaoTestCase {
public void search_by_groups_name() throws Exception {
setupData("groups_with_permissions");

List<GroupWithPermissionDto> result = dao.selectGroups(WithPermissionQuery.builder().permission("user").search("aDMini").build(), COMPONENT_ID);
List<GroupWithPermissionDto> result = dao.selectGroups(PermissionQuery.builder().permission("user").search("aDMini").build(), COMPONENT_ID);
assertThat(result).hasSize(1);
assertThat(result.get(0).getName()).isEqualTo("sonar-administrators");

result = dao.selectGroups(WithPermissionQuery.builder().permission("user").search("sonar").build(), COMPONENT_ID);
result = dao.selectGroups(PermissionQuery.builder().permission("user").search("sonar").build(), COMPONENT_ID);
assertThat(result).hasSize(3);
}

@@ -123,7 +123,7 @@ public class GroupWithPermissionDaoTest extends AbstractDaoTestCase {
public void search_groups_should_be_sorted_by_group_name() throws Exception {
setupData("groups_with_permissions_should_be_sorted_by_group_name");

List<GroupWithPermissionDto> result = dao.selectGroups(WithPermissionQuery.builder().permission("user").build(), COMPONENT_ID);
List<GroupWithPermissionDto> result = dao.selectGroups(PermissionQuery.builder().permission("user").build(), COMPONENT_ID);
assertThat(result).hasSize(4);
assertThat(result.get(0).getName()).isEqualTo("Anyone");
assertThat(result.get(1).getName()).isEqualTo("sonar-administrators");

+ 5
- 5
sonar-core/src/test/java/org/sonar/core/permission/GroupWithPermissionTemplateDaoTest.java View File

@@ -43,7 +43,7 @@ public class GroupWithPermissionTemplateDaoTest extends AbstractDaoTestCase {
public void select_groups() throws Exception {
setupData("groups_with_permissions");

WithPermissionQuery query = WithPermissionQuery.builder().permission("user").build();
PermissionQuery query = PermissionQuery.builder().permission("user").build();
List<GroupWithPermissionDto> result = dao.selectGroups(query, TEMPLATE_ID);

assertThat(result).hasSize(4);
@@ -70,7 +70,7 @@ public class GroupWithPermissionTemplateDaoTest extends AbstractDaoTestCase {
setupData("groups_with_permissions");

// Anyone group has not the permission 'admin', so it's not returned
WithPermissionQuery query = WithPermissionQuery.builder().permission("admin").build();
PermissionQuery query = PermissionQuery.builder().permission("admin").build();
List<GroupWithPermissionDto> result = dao.selectGroups(query, TEMPLATE_ID);
assertThat(result).hasSize(3);

@@ -91,11 +91,11 @@ public class GroupWithPermissionTemplateDaoTest extends AbstractDaoTestCase {
public void search_by_groups_name() throws Exception {
setupData("groups_with_permissions");

List<GroupWithPermissionDto> result = dao.selectGroups(WithPermissionQuery.builder().permission("user").search("aDMini").build(), TEMPLATE_ID);
List<GroupWithPermissionDto> result = dao.selectGroups(PermissionQuery.builder().permission("user").search("aDMini").build(), TEMPLATE_ID);
assertThat(result).hasSize(1);
assertThat(result.get(0).getName()).isEqualTo("sonar-administrators");

result = dao.selectGroups(WithPermissionQuery.builder().permission("user").search("sonar").build(), TEMPLATE_ID);
result = dao.selectGroups(PermissionQuery.builder().permission("user").search("sonar").build(), TEMPLATE_ID);
assertThat(result).hasSize(3);
}

@@ -103,7 +103,7 @@ public class GroupWithPermissionTemplateDaoTest extends AbstractDaoTestCase {
public void search_groups_should_be_sorted_by_group_name() throws Exception {
setupData("groups_with_permissions_should_be_sorted_by_group_name");

List<GroupWithPermissionDto> result = dao.selectGroups(WithPermissionQuery.builder().permission("user").build(), TEMPLATE_ID);
List<GroupWithPermissionDto> result = dao.selectGroups(PermissionQuery.builder().permission("user").build(), TEMPLATE_ID);
assertThat(result).hasSize(4);
assertThat(result.get(0).getName()).isEqualTo("Anyone");
assertThat(result.get(1).getName()).isEqualTo("sonar-administrators");

+ 10
- 10
sonar-core/src/test/java/org/sonar/core/permission/UserWithPermissionDaoTest.java View File

@@ -43,7 +43,7 @@ public class UserWithPermissionDaoTest extends AbstractDaoTestCase {
public void select_all_users_for_project_permission() throws Exception {
setupData("users_with_permissions");

WithPermissionQuery query = WithPermissionQuery.builder().permission("user").build();
PermissionQuery query = PermissionQuery.builder().permission("user").build();
List<UserWithPermissionDto> result = dao.selectUsers(query, COMPONENT_ID);
assertThat(result).hasSize(3);

@@ -67,7 +67,7 @@ public class UserWithPermissionDaoTest extends AbstractDaoTestCase {
public void select_all_users_for_global_permission() throws Exception {
setupData("users_with_permissions");

WithPermissionQuery query = WithPermissionQuery.builder().permission("admin").build();
PermissionQuery query = PermissionQuery.builder().permission("admin").build();
List<UserWithPermissionDto> result = dao.selectUsers(query, null);
assertThat(result).hasSize(3);

@@ -89,7 +89,7 @@ public class UserWithPermissionDaoTest extends AbstractDaoTestCase {
setupData("users_with_permissions");

// user1 and user2 have permission user
assertThat(dao.selectUsers(WithPermissionQuery.builder().permission("user").membership(WithPermissionQuery.IN).build(), COMPONENT_ID)).hasSize(2);
assertThat(dao.selectUsers(PermissionQuery.builder().permission("user").membership(PermissionQuery.IN).build(), COMPONENT_ID)).hasSize(2);
}

@Test
@@ -97,18 +97,18 @@ public class UserWithPermissionDaoTest extends AbstractDaoTestCase {
setupData("users_with_permissions");

// Only user3 has not the user permission
assertThat(dao.selectUsers(WithPermissionQuery.builder().permission("user").membership(WithPermissionQuery.OUT).build(), COMPONENT_ID)).hasSize(1);
assertThat(dao.selectUsers(PermissionQuery.builder().permission("user").membership(PermissionQuery.OUT).build(), COMPONENT_ID)).hasSize(1);
}

@Test
public void search_by_user_name() throws Exception {
setupData("users_with_permissions");

List<UserWithPermissionDto> result = dao.selectUsers(WithPermissionQuery.builder().permission("user").search("SEr1").build(), COMPONENT_ID);
List<UserWithPermissionDto> result = dao.selectUsers(PermissionQuery.builder().permission("user").search("SEr1").build(), COMPONENT_ID);
assertThat(result).hasSize(1);
assertThat(result.get(0).getName()).isEqualTo("User1");

result = dao.selectUsers(WithPermissionQuery.builder().permission("user").search("user").build(), COMPONENT_ID);
result = dao.selectUsers(PermissionQuery.builder().permission("user").search("user").build(), COMPONENT_ID);
assertThat(result).hasSize(3);
}

@@ -116,7 +116,7 @@ public class UserWithPermissionDaoTest extends AbstractDaoTestCase {
public void should_be_sorted_by_user_name() throws Exception {
setupData("users_with_permissions_should_be_sorted_by_user_name");

List<UserWithPermissionDto> result = dao.selectUsers(WithPermissionQuery.builder().permission("user").build(), COMPONENT_ID);
List<UserWithPermissionDto> result = dao.selectUsers(PermissionQuery.builder().permission("user").build(), COMPONENT_ID);
assertThat(result).hasSize(3);
assertThat(result.get(0).getName()).isEqualTo("User1");
assertThat(result.get(1).getName()).isEqualTo("User2");
@@ -127,17 +127,17 @@ public class UserWithPermissionDaoTest extends AbstractDaoTestCase {
public void should_be_paginated() throws Exception {
setupData("users_with_permissions");

List<UserWithPermissionDto> result = dao.selectUsers(WithPermissionQuery.builder().permission("user").build(), COMPONENT_ID, 0, 2);
List<UserWithPermissionDto> result = dao.selectUsers(PermissionQuery.builder().permission("user").build(), COMPONENT_ID, 0, 2);
assertThat(result).hasSize(2);
assertThat(result.get(0).getName()).isEqualTo("User1");
assertThat(result.get(1).getName()).isEqualTo("User2");

result = dao.selectUsers(WithPermissionQuery.builder().permission("user").build(), COMPONENT_ID, 1, 2);
result = dao.selectUsers(PermissionQuery.builder().permission("user").build(), COMPONENT_ID, 1, 2);
assertThat(result).hasSize(2);
assertThat(result.get(0).getName()).isEqualTo("User2");
assertThat(result.get(1).getName()).isEqualTo("User3");

result = dao.selectUsers(WithPermissionQuery.builder().permission("user").build(), COMPONENT_ID, 2, 1);
result = dao.selectUsers(PermissionQuery.builder().permission("user").build(), COMPONENT_ID, 2, 1);
assertThat(result).hasSize(1);
assertThat(result.get(0).getName()).isEqualTo("User3");
}

+ 10
- 10
sonar-core/src/test/java/org/sonar/core/permission/UserWithPermissionTemplateDaoTest.java View File

@@ -43,7 +43,7 @@ public class UserWithPermissionTemplateDaoTest extends AbstractDaoTestCase {
public void select_all_users() throws Exception {
setupData("users_with_permissions");

WithPermissionQuery query = WithPermissionQuery.builder().permission("user").build();
PermissionQuery query = PermissionQuery.builder().permission("user").build();
List<UserWithPermissionDto> result = dao.selectUsers(query, TEMPLATE_ID);
assertThat(result).hasSize(3);

@@ -67,7 +67,7 @@ public class UserWithPermissionTemplateDaoTest extends AbstractDaoTestCase {
public void return_nothing_on_unknown_template_key() throws Exception {
setupData("users_with_permissions");

WithPermissionQuery query = WithPermissionQuery.builder().permission("user").build();
PermissionQuery query = PermissionQuery.builder().permission("user").build();
List<UserWithPermissionDto> result = dao.selectUsers(query, 999L);
assertThat(result).hasSize(3);

@@ -86,7 +86,7 @@ public class UserWithPermissionTemplateDaoTest extends AbstractDaoTestCase {
setupData("users_with_permissions");

// user1 and user2 have permission user
assertThat(dao.selectUsers(WithPermissionQuery.builder().permission("user").membership(WithPermissionQuery.IN).build(), TEMPLATE_ID)).hasSize(2);
assertThat(dao.selectUsers(PermissionQuery.builder().permission("user").membership(PermissionQuery.IN).build(), TEMPLATE_ID)).hasSize(2);
}

@Test
@@ -94,18 +94,18 @@ public class UserWithPermissionTemplateDaoTest extends AbstractDaoTestCase {
setupData("users_with_permissions");

// Only user3 has not the user permission
assertThat(dao.selectUsers(WithPermissionQuery.builder().permission("user").membership(WithPermissionQuery.OUT).build(), TEMPLATE_ID)).hasSize(1);
assertThat(dao.selectUsers(PermissionQuery.builder().permission("user").membership(PermissionQuery.OUT).build(), TEMPLATE_ID)).hasSize(1);
}

@Test
public void search_by_user_name() throws Exception {
setupData("users_with_permissions");

List<UserWithPermissionDto> result = dao.selectUsers(WithPermissionQuery.builder().permission("user").search("SEr1").build(), TEMPLATE_ID);
List<UserWithPermissionDto> result = dao.selectUsers(PermissionQuery.builder().permission("user").search("SEr1").build(), TEMPLATE_ID);
assertThat(result).hasSize(1);
assertThat(result.get(0).getName()).isEqualTo("User1");

result = dao.selectUsers(WithPermissionQuery.builder().permission("user").search("user").build(), TEMPLATE_ID);
result = dao.selectUsers(PermissionQuery.builder().permission("user").search("user").build(), TEMPLATE_ID);
assertThat(result).hasSize(3);
}

@@ -113,7 +113,7 @@ public class UserWithPermissionTemplateDaoTest extends AbstractDaoTestCase {
public void should_be_sorted_by_user_name() throws Exception {
setupData("users_with_permissions_should_be_sorted_by_user_name");

List<UserWithPermissionDto> result = dao.selectUsers(WithPermissionQuery.builder().permission("user").build(), TEMPLATE_ID);
List<UserWithPermissionDto> result = dao.selectUsers(PermissionQuery.builder().permission("user").build(), TEMPLATE_ID);
assertThat(result).hasSize(3);
assertThat(result.get(0).getName()).isEqualTo("User1");
assertThat(result.get(1).getName()).isEqualTo("User2");
@@ -124,17 +124,17 @@ public class UserWithPermissionTemplateDaoTest extends AbstractDaoTestCase {
public void should_be_paginated() throws Exception {
setupData("users_with_permissions");

List<UserWithPermissionDto> result = dao.selectUsers(WithPermissionQuery.builder().permission("user").build(), TEMPLATE_ID, 0, 2);
List<UserWithPermissionDto> result = dao.selectUsers(PermissionQuery.builder().permission("user").build(), TEMPLATE_ID, 0, 2);
assertThat(result).hasSize(2);
assertThat(result.get(0).getName()).isEqualTo("User1");
assertThat(result.get(1).getName()).isEqualTo("User2");

result = dao.selectUsers(WithPermissionQuery.builder().permission("user").build(), TEMPLATE_ID, 1, 2);
result = dao.selectUsers(PermissionQuery.builder().permission("user").build(), TEMPLATE_ID, 1, 2);
assertThat(result).hasSize(2);
assertThat(result.get(0).getName()).isEqualTo("User2");
assertThat(result.get(1).getName()).isEqualTo("User3");

result = dao.selectUsers(WithPermissionQuery.builder().permission("user").build(), TEMPLATE_ID, 2, 1);
result = dao.selectUsers(PermissionQuery.builder().permission("user").build(), TEMPLATE_ID, 2, 1);
assertThat(result).hasSize(1);
assertThat(result.get(0).getName()).isEqualTo("User3");
}

+ 57
- 0
sonar-core/src/test/java/org/sonar/core/user/GroupMembershipQueryTest.java View File

@@ -0,0 +1,57 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2013 SonarSource
* mailto:contact AT sonarsource DOT com
*
* SonarQube is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* SonarQube is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/

package org.sonar.core.user;

import org.junit.Test;

import static org.fest.assertions.Assertions.assertThat;
import static org.fest.assertions.Fail.fail;

public class GroupMembershipQueryTest {

@Test
public void fail_on_null_login() throws Exception {
GroupMembershipQuery.Builder builder = GroupMembershipQuery.builder();
builder.login(null);

try {
builder.build();
fail();
} catch (Exception e) {
assertThat(e).isInstanceOf(NullPointerException.class).hasMessage("User login cant be null.");
}
}

@Test
public void fail_on_invalid_membership() throws Exception {
GroupMembershipQuery.Builder builder = GroupMembershipQuery.builder();
builder.login("nelson");
builder.membership("unknwown");

try {
builder.build();
fail();
} catch (Exception e) {
assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("Membership is not valid (got unknwown). Availables values are [ANY, IN, OUT]");
}
}

}

+ 1
- 1
sonar-plugin-api/src/main/java/org/sonar/api/technicaldebt/server/internal/DefaultCharacteristic.java View File

@@ -54,11 +54,11 @@ public class DefaultCharacteristic implements Characteristic {
return this;
}

@CheckForNull
public String key() {
return key;
}

@CheckForNull
public DefaultCharacteristic setKey(@Nullable String key) {
this.key = key;
return this;

+ 5
- 2
sonar-server/src/main/java/org/sonar/server/group/InternalGroupMembershipService.java View File

@@ -31,6 +31,9 @@ import java.util.Map;
*/
public class InternalGroupMembershipService implements ServerComponent {

private static final String SELECTED_MEMBERSHIP = "selected";
private static final String DESELECTED_MEMBERSHIP = "deselected";

private final GroupMembershipFinder finder;

public InternalGroupMembershipService(GroupMembershipFinder finder) {
@@ -53,9 +56,9 @@ public class InternalGroupMembershipService implements ServerComponent {

private String membership(Map<String, Object> params) {
String selected = (String) params.get("selected");
if ("selected".equals(selected)) {
if (SELECTED_MEMBERSHIP.equals(selected)) {
return GroupMembershipQuery.IN;
} else if ("deselected".equals(selected)) {
} else if (DESELECTED_MEMBERSHIP.equals(selected)) {
return GroupMembershipQuery.OUT;
} else {
return GroupMembershipQuery.ANY;

+ 3
- 3
sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionService.java View File

@@ -75,15 +75,15 @@ public class InternalPermissionService implements ServerComponent {
}

public UserWithPermissionQueryResult findUsersWithPermission(Map<String, Object> params) {
return finder.findUsersWithPermission(WithPermissionQueryParser.toQuery(params));
return finder.findUsersWithPermission(PermissionQueryParser.toQuery(params));
}

public UserWithPermissionQueryResult findUsersWithPermissionTemplate(Map<String, Object> params) {
return finder.findUsersWithPermissionTemplate(WithPermissionQueryParser.toQuery(params));
return finder.findUsersWithPermissionTemplate(PermissionQueryParser.toQuery(params));
}

public GroupWithPermissionQueryResult findGroupsWithPermission(Map<String, Object> params) {
return finder.findGroupsWithPermission(WithPermissionQueryParser.toQuery(params));
return finder.findGroupsWithPermission(PermissionQueryParser.toQuery(params));
}

public void addPermission(final Map<String, Object> params) {

+ 2
- 2
sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionTemplateService.java View File

@@ -56,11 +56,11 @@ public class InternalPermissionTemplateService implements ServerComponent {
}

public UserWithPermissionQueryResult findUsersWithPermissionTemplate(Map<String, Object> params) {
return finder.findUsersWithPermissionTemplate(WithPermissionQueryParser.toQuery(params));
return finder.findUsersWithPermissionTemplate(PermissionQueryParser.toQuery(params));
}

public GroupWithPermissionQueryResult findGroupsWithPermissionTemplate(Map<String, Object> params) {
return finder.findGroupsWithPermissionTemplate(WithPermissionQueryParser.toQuery(params));
return finder.findGroupsWithPermissionTemplate(PermissionQueryParser.toQuery(params));
}

@CheckForNull

+ 11
- 11
sonar-server/src/main/java/org/sonar/server/permission/PermissionFinder.java View File

@@ -50,13 +50,13 @@ public class PermissionFinder implements ServerComponent {
this.permissionTemplateDao = permissionTemplateDao;
}

public UserWithPermissionQueryResult findUsersWithPermission(WithPermissionQuery query) {
public UserWithPermissionQueryResult findUsersWithPermission(PermissionQuery query) {
Long componentId = componentId(query.component());
int limit = limit(query);
return toUserQueryResult(permissionDao.selectUsers(query, componentId, offset(query), limit), limit);
}

public UserWithPermissionQueryResult findUsersWithPermissionTemplate(WithPermissionQuery query) {
public UserWithPermissionQueryResult findUsersWithPermissionTemplate(PermissionQuery query) {
Long permissionTemplateId = templateId(query.template());
int limit = limit(query);
return toUserQueryResult(permissionTemplateDao.selectUsers(query, permissionTemplateId, offset(query), limit), limit);
@@ -65,7 +65,7 @@ public class PermissionFinder implements ServerComponent {
/**
* Paging for groups search is done in Java in order to correctly handle the 'Anyone' group
*/
public GroupWithPermissionQueryResult findGroupsWithPermission(WithPermissionQuery query) {
public GroupWithPermissionQueryResult findGroupsWithPermission(PermissionQuery query) {
Long componentId = componentId(query.component());
return toGroupQueryResult(permissionDao.selectGroups(query, componentId), query);
}
@@ -73,7 +73,7 @@ public class PermissionFinder implements ServerComponent {
/**
* Paging for groups search is done in Java in order to correctly handle the 'Anyone' group
*/
public GroupWithPermissionQueryResult findGroupsWithPermissionTemplate(WithPermissionQuery query) {
public GroupWithPermissionQueryResult findGroupsWithPermissionTemplate(PermissionQuery query) {
Long permissionTemplateId = templateId(query.template());
return toGroupQueryResult(permissionTemplateDao.selectGroups(query, permissionTemplateId), query);
}
@@ -109,7 +109,7 @@ public class PermissionFinder implements ServerComponent {
}
}

private GroupWithPermissionQueryResult toGroupQueryResult(List<GroupWithPermissionDto> dtos, WithPermissionQuery query) {
private GroupWithPermissionQueryResult toGroupQueryResult(List<GroupWithPermissionDto> dtos, PermissionQuery query) {
addAnyoneGroup(dtos, query);
List<GroupWithPermissionDto> filteredDtos = filterMembership(dtos, query);

@@ -126,24 +126,24 @@ public class PermissionFinder implements ServerComponent {
return dto.getId();
}

private int offset(WithPermissionQuery query) {
private int offset(PermissionQuery query) {
int pageSize = query.pageSize();
int pageIndex = query.pageIndex();
return (pageIndex - 1) * pageSize;
}

private int limit(WithPermissionQuery query) {
private int limit(PermissionQuery query) {
// Add one to page size in order to be able to know if there's more results or not
return query.pageSize() + 1;
}

private List<GroupWithPermissionDto> filterMembership(List<GroupWithPermissionDto> dtos, final WithPermissionQuery query) {
private List<GroupWithPermissionDto> filterMembership(List<GroupWithPermissionDto> dtos, final PermissionQuery query) {
return newArrayList(Iterables.filter(dtos, new Predicate<GroupWithPermissionDto>() {
@Override
public boolean apply(GroupWithPermissionDto dto) {
if (query.membership().equals(WithPermissionQuery.IN)) {
if (PermissionQuery.IN.equals(query.membership())) {
return dto.getPermission() != null;
} else if (query.membership().equals(WithPermissionQuery.OUT)) {
} else if (PermissionQuery.OUT.equals(query.membership())) {
return dto.getPermission() == null;
}
return true;
@@ -155,7 +155,7 @@ public class PermissionFinder implements ServerComponent {
* As the anyone group does not exists in db, it's not returned when it has not the permission.
* We have to manually add it at the begin of the list, if it matched the search text
*/
private void addAnyoneGroup(List<GroupWithPermissionDto> groups, WithPermissionQuery query) {
private void addAnyoneGroup(List<GroupWithPermissionDto> groups, PermissionQuery query) {
boolean hasAnyoneGroup = Iterables.any(groups, new Predicate<GroupWithPermissionDto>() {
@Override
public boolean apply(GroupWithPermissionDto group) {

sonar-server/src/main/java/org/sonar/server/permission/WithPermissionQueryParser.java → sonar-server/src/main/java/org/sonar/server/permission/PermissionQueryParser.java View File

@@ -20,16 +20,23 @@

package org.sonar.server.permission;

import org.sonar.core.permission.WithPermissionQuery;
import org.sonar.core.permission.PermissionQuery;
import org.sonar.core.user.GroupMembershipQuery;
import org.sonar.server.util.RubyUtils;

import java.util.Map;

public class WithPermissionQueryParser {
public class PermissionQueryParser {

static WithPermissionQuery toQuery(Map<String, Object> params) {
WithPermissionQuery.Builder builder = WithPermissionQuery.builder();
private static final String SELECTED_MEMBERSHIP = "selected";
private static final String DESELECTED_MEMBERSHIP = "deselected";

private PermissionQueryParser(){
// Utility class
}

static PermissionQuery toQuery(Map<String, Object> params) {
PermissionQuery.Builder builder = PermissionQuery.builder();
builder.permission((String) params.get("permission"));
builder.component((String) params.get("component"));
builder.template((String) params.get("template"));
@@ -42,9 +49,9 @@ public class WithPermissionQueryParser {

private static String membership(Map<String, Object> params) {
String selected = (String) params.get("selected");
if ("selected".equals(selected)) {
if (SELECTED_MEMBERSHIP.equals(selected)) {
return GroupMembershipQuery.IN;
} else if ("deselected".equals(selected)) {
} else if (DESELECTED_MEMBERSHIP.equals(selected)) {
return GroupMembershipQuery.OUT;
} else {
return GroupMembershipQuery.ANY;

+ 7
- 7
sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionServiceTest.java View File

@@ -37,7 +37,7 @@ import org.sonar.api.web.UserRole;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.permission.GlobalPermissions;
import org.sonar.core.permission.PermissionFacade;
import org.sonar.core.permission.WithPermissionQuery;
import org.sonar.core.permission.PermissionQuery;
import org.sonar.core.resource.ResourceDao;
import org.sonar.core.resource.ResourceDto;
import org.sonar.core.resource.ResourceQuery;
@@ -103,13 +103,13 @@ public class InternalPermissionServiceTest {
"component", "org.sample.Sample",
"selected", "all"));

ArgumentCaptor<WithPermissionQuery> argumentCaptor = ArgumentCaptor.forClass(WithPermissionQuery.class);
ArgumentCaptor<PermissionQuery> argumentCaptor = ArgumentCaptor.forClass(PermissionQuery.class);
verify(finder).findUsersWithPermission(argumentCaptor.capture());

WithPermissionQuery query = argumentCaptor.getValue();
PermissionQuery query = argumentCaptor.getValue();
assertThat(query.component()).isEqualTo("org.sample.Sample");
assertThat(query.permission()).isEqualTo("user");
assertThat(query.membership()).isEqualTo(WithPermissionQuery.ANY);
assertThat(query.membership()).isEqualTo(PermissionQuery.ANY);
}

@Test
@@ -119,13 +119,13 @@ public class InternalPermissionServiceTest {
"component", "org.sample.Sample",
"selected", "all"));

ArgumentCaptor<WithPermissionQuery> argumentCaptor = ArgumentCaptor.forClass(WithPermissionQuery.class);
ArgumentCaptor<PermissionQuery> argumentCaptor = ArgumentCaptor.forClass(PermissionQuery.class);
verify(finder).findGroupsWithPermission(argumentCaptor.capture());

WithPermissionQuery query = argumentCaptor.getValue();
PermissionQuery query = argumentCaptor.getValue();
assertThat(query.component()).isEqualTo("org.sample.Sample");
assertThat(query.permission()).isEqualTo("admin");
assertThat(query.membership()).isEqualTo(WithPermissionQuery.ANY);
assertThat(query.membership()).isEqualTo(PermissionQuery.ANY);
}

@Test

+ 2
- 2
sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionTemplateServiceTest.java View File

@@ -78,7 +78,7 @@ public class InternalPermissionTemplateServiceTest {
"permission", "user",
"template", "my_template",
"selected", "all"));
verify(finder).findUsersWithPermissionTemplate(any(WithPermissionQuery.class));
verify(finder).findUsersWithPermissionTemplate(any(PermissionQuery.class));
}

@Test
@@ -88,7 +88,7 @@ public class InternalPermissionTemplateServiceTest {
"template", "my_template",
"selected", "all"));

verify(finder).findGroupsWithPermissionTemplate(any(WithPermissionQuery.class));
verify(finder).findGroupsWithPermissionTemplate(any(PermissionQuery.class));
}

@Test

+ 38
- 38
sonar-server/src/test/java/org/sonar/server/permission/PermissionFinderTest.java View File

@@ -62,11 +62,11 @@ public class PermissionFinderTest {

@Test
public void find_users() throws Exception {
when(permissionDao.selectUsers(any(WithPermissionQuery.class), anyLong(), anyInt(), anyInt())).thenReturn(
when(permissionDao.selectUsers(any(PermissionQuery.class), anyLong(), anyInt(), anyInt())).thenReturn(
newArrayList(new UserWithPermissionDto().setName("user1").setPermission("user"))
);

UserWithPermissionQueryResult result = finder.findUsersWithPermission(WithPermissionQuery.builder().permission("user").build());
UserWithPermissionQueryResult result = finder.findUsersWithPermission(PermissionQuery.builder().permission("user").build());
assertThat(result.users()).hasSize(1);
assertThat(result.hasMoreResults()).isFalse();
}
@@ -76,7 +76,7 @@ public class PermissionFinderTest {
when(resourceDao.getResource(any(ResourceQuery.class))).thenReturn(null);

try {
finder.findUsersWithPermission(WithPermissionQuery.builder().permission("user").component("Unknown").build());
finder.findUsersWithPermission(PermissionQuery.builder().permission("user").component("Unknown").build());
fail();
} catch (Exception e) {
assertThat(e).isInstanceOf(NotFoundException.class).hasMessage("Component 'Unknown' does not exist");
@@ -85,11 +85,11 @@ public class PermissionFinderTest {

@Test
public void find_users_with_paging() throws Exception {
finder.findUsersWithPermission(WithPermissionQuery.builder().permission("user").pageIndex(3).pageSize(10).build());
finder.findUsersWithPermission(PermissionQuery.builder().permission("user").pageIndex(3).pageSize(10).build());

ArgumentCaptor<Integer> argumentOffset = ArgumentCaptor.forClass(Integer.class);
ArgumentCaptor<Integer> argumentLimit = ArgumentCaptor.forClass(Integer.class);
verify(permissionDao).selectUsers(any(WithPermissionQuery.class), anyLong(), argumentOffset.capture(), argumentLimit.capture());
verify(permissionDao).selectUsers(any(PermissionQuery.class), anyLong(), argumentOffset.capture(), argumentLimit.capture());

assertThat(argumentOffset.getValue()).isEqualTo(20);
assertThat(argumentLimit.getValue()).isEqualTo(11);
@@ -97,16 +97,16 @@ public class PermissionFinderTest {

@Test
public void find_users_with_paging_having_more_results() throws Exception {
when(permissionDao.selectUsers(any(WithPermissionQuery.class), anyLong(), anyInt(), anyInt())).thenReturn(newArrayList(
when(permissionDao.selectUsers(any(PermissionQuery.class), anyLong(), anyInt(), anyInt())).thenReturn(newArrayList(
new UserWithPermissionDto().setName("user1").setPermission("user"),
new UserWithPermissionDto().setName("user2").setPermission("user"),
new UserWithPermissionDto().setName("user3").setPermission("user"))
);
UserWithPermissionQueryResult result = finder.findUsersWithPermission(WithPermissionQuery.builder().permission("user").pageIndex(1).pageSize(2).build());
UserWithPermissionQueryResult result = finder.findUsersWithPermission(PermissionQuery.builder().permission("user").pageIndex(1).pageSize(2).build());

ArgumentCaptor<Integer> argumentOffset = ArgumentCaptor.forClass(Integer.class);
ArgumentCaptor<Integer> argumentLimit = ArgumentCaptor.forClass(Integer.class);
verify(permissionDao).selectUsers(any(WithPermissionQuery.class), anyLong(), argumentOffset.capture(), argumentLimit.capture());
verify(permissionDao).selectUsers(any(PermissionQuery.class), anyLong(), argumentOffset.capture(), argumentLimit.capture());

assertThat(argumentOffset.getValue()).isEqualTo(0);
assertThat(argumentLimit.getValue()).isEqualTo(3);
@@ -115,17 +115,17 @@ public class PermissionFinderTest {

@Test
public void find_users_with_paging_having_no_more_results() throws Exception {
when(permissionDao.selectUsers(any(WithPermissionQuery.class), anyLong(), anyInt(), anyInt())).thenReturn(newArrayList(
when(permissionDao.selectUsers(any(PermissionQuery.class), anyLong(), anyInt(), anyInt())).thenReturn(newArrayList(
new UserWithPermissionDto().setName("user1").setPermission("user"),
new UserWithPermissionDto().setName("user2").setPermission("user"),
new UserWithPermissionDto().setName("user4").setPermission("user"),
new UserWithPermissionDto().setName("user3").setPermission("user"))
);
UserWithPermissionQueryResult result = finder.findUsersWithPermission(WithPermissionQuery.builder().permission("user").pageIndex(1).pageSize(10).build());
UserWithPermissionQueryResult result = finder.findUsersWithPermission(PermissionQuery.builder().permission("user").pageIndex(1).pageSize(10).build());

ArgumentCaptor<Integer> argumentOffset = ArgumentCaptor.forClass(Integer.class);
ArgumentCaptor<Integer> argumentLimit = ArgumentCaptor.forClass(Integer.class);
verify(permissionDao).selectUsers(any(WithPermissionQuery.class), anyLong(), argumentOffset.capture(), argumentLimit.capture());
verify(permissionDao).selectUsers(any(PermissionQuery.class), anyLong(), argumentOffset.capture(), argumentLimit.capture());

assertThat(argumentOffset.getValue()).isEqualTo(0);
assertThat(argumentLimit.getValue()).isEqualTo(11);
@@ -134,19 +134,19 @@ public class PermissionFinderTest {

@Test
public void find_groups() throws Exception {
when(permissionDao.selectGroups(any(WithPermissionQuery.class), anyLong())).thenReturn(
when(permissionDao.selectGroups(any(PermissionQuery.class), anyLong())).thenReturn(
newArrayList(new GroupWithPermissionDto().setName("users").setPermission("user"))
);

GroupWithPermissionQueryResult result = finder.findGroupsWithPermission(
WithPermissionQuery.builder().permission("user").membership(WithPermissionQuery.IN).build());
PermissionQuery.builder().permission("user").membership(PermissionQuery.IN).build());
assertThat(result.groups()).hasSize(1);
assertThat(result.hasMoreResults()).isFalse();
}

@Test
public void find_groups_should_be_paginated() throws Exception {
when(permissionDao.selectGroups(any(WithPermissionQuery.class), anyLong())).thenReturn(newArrayList(
when(permissionDao.selectGroups(any(PermissionQuery.class), anyLong())).thenReturn(newArrayList(
new GroupWithPermissionDto().setName("Anyone").setPermission("user"),
new GroupWithPermissionDto().setName("Admin").setPermission("user"),
new GroupWithPermissionDto().setName("Users").setPermission(null),
@@ -155,7 +155,7 @@ public class PermissionFinderTest {
));

GroupWithPermissionQueryResult result = finder.findGroupsWithPermission(
WithPermissionQuery.builder()
PermissionQuery.builder()
.permission("user")
.pageSize(2)
.pageIndex(2)
@@ -168,7 +168,7 @@ public class PermissionFinderTest {
assertThat(groups.get(1).name()).isEqualTo("Reviewers");

assertThat(finder.findGroupsWithPermission(
WithPermissionQuery.builder()
PermissionQuery.builder()
.permission("user")
.pageSize(2)
.pageIndex(3)
@@ -177,7 +177,7 @@ public class PermissionFinderTest {

@Test
public void find_groups_should_filter_membership() throws Exception {
when(permissionDao.selectGroups(any(WithPermissionQuery.class), anyLong())).thenReturn(newArrayList(
when(permissionDao.selectGroups(any(PermissionQuery.class), anyLong())).thenReturn(newArrayList(
new GroupWithPermissionDto().setName("Anyone").setPermission("user"),
new GroupWithPermissionDto().setName("Admin").setPermission("user"),
new GroupWithPermissionDto().setName("Users").setPermission(null),
@@ -186,21 +186,21 @@ public class PermissionFinderTest {
));

assertThat(finder.findGroupsWithPermission(
WithPermissionQuery.builder().permission("user").membership(WithPermissionQuery.IN).build()).groups()).hasSize(2);
PermissionQuery.builder().permission("user").membership(PermissionQuery.IN).build()).groups()).hasSize(2);
assertThat(finder.findGroupsWithPermission(
WithPermissionQuery.builder().permission("user").membership(WithPermissionQuery.OUT).build()).groups()).hasSize(3);
PermissionQuery.builder().permission("user").membership(PermissionQuery.OUT).build()).groups()).hasSize(3);
assertThat(finder.findGroupsWithPermission(
WithPermissionQuery.builder().permission("user").membership(WithPermissionQuery.ANY).build()).groups()).hasSize(5);
PermissionQuery.builder().permission("user").membership(PermissionQuery.ANY).build()).groups()).hasSize(5);
}

@Test
public void find_groups_with_added_anyone_group() throws Exception {
when(permissionDao.selectGroups(any(WithPermissionQuery.class), anyLong())).thenReturn(
when(permissionDao.selectGroups(any(PermissionQuery.class), anyLong())).thenReturn(
newArrayList(new GroupWithPermissionDto().setName("users").setPermission("user"))
);

GroupWithPermissionQueryResult result = finder.findGroupsWithPermission( WithPermissionQuery.builder().permission("user")
.pageIndex(1).membership(WithPermissionQuery.ANY).build());
GroupWithPermissionQueryResult result = finder.findGroupsWithPermission( PermissionQuery.builder().permission("user")
.pageIndex(1).membership(PermissionQuery.ANY).build());
assertThat(result.groups()).hasSize(2);
GroupWithPermission first = result.groups().get(0);
assertThat(first.name()).isEqualTo("Anyone");
@@ -209,35 +209,35 @@ public class PermissionFinderTest {

@Test
public void find_groups_without_adding_anyone_group_when_search_text_do_not_matched() throws Exception {
when(permissionDao.selectGroups(any(WithPermissionQuery.class), anyLong())).thenReturn(
when(permissionDao.selectGroups(any(PermissionQuery.class), anyLong())).thenReturn(
newArrayList(new GroupWithPermissionDto().setName("users").setPermission("user"))
);

GroupWithPermissionQueryResult result = finder.findGroupsWithPermission(WithPermissionQuery.builder().permission("user").search("other")
.pageIndex(1).membership(WithPermissionQuery.ANY).build());
GroupWithPermissionQueryResult result = finder.findGroupsWithPermission(PermissionQuery.builder().permission("user").search("other")
.pageIndex(1).membership(PermissionQuery.ANY).build());
// Anyone group should not be added
assertThat(result.groups()).hasSize(1);
}

@Test
public void find_groups_with_added_anyone_group_when_search_text_matched() throws Exception {
when(permissionDao.selectGroups(any(WithPermissionQuery.class), anyLong())).thenReturn(
when(permissionDao.selectGroups(any(PermissionQuery.class), anyLong())).thenReturn(
newArrayList(new GroupWithPermissionDto().setName("MyAnyGroup").setPermission("user"))
);

GroupWithPermissionQueryResult result = finder.findGroupsWithPermission(WithPermissionQuery.builder().permission("user").search("any")
.pageIndex(1).membership(WithPermissionQuery.ANY).build());
GroupWithPermissionQueryResult result = finder.findGroupsWithPermission(PermissionQuery.builder().permission("user").search("any")
.pageIndex(1).membership(PermissionQuery.ANY).build());
assertThat(result.groups()).hasSize(2);
}

@Test
public void find_groups_without_adding_anyone_group_when_out_membership_selected() throws Exception {
when(permissionDao.selectGroups(any(WithPermissionQuery.class), anyLong())).thenReturn(
when(permissionDao.selectGroups(any(PermissionQuery.class), anyLong())).thenReturn(
newArrayList(new GroupWithPermissionDto().setName("users").setPermission("user"))
);

GroupWithPermissionQueryResult result = finder.findGroupsWithPermission( WithPermissionQuery.builder().permission("user")
.pageIndex(1).membership(WithPermissionQuery.OUT).build());
GroupWithPermissionQueryResult result = finder.findGroupsWithPermission( PermissionQuery.builder().permission("user")
.pageIndex(1).membership(PermissionQuery.OUT).build());
// Anyone group should not be added
assertThat(result.groups()).hasSize(1);
}
@@ -247,11 +247,11 @@ public class PermissionFinderTest {
public void find_users_from_permission_template() throws Exception {
when(permissionTemplateDao.selectTemplateByKey(anyString())).thenReturn(new PermissionTemplateDto().setId(1L).setKee("my_template"));

when(permissionTemplateDao.selectUsers(any(WithPermissionQuery.class), anyLong(), anyInt(), anyInt())).thenReturn(
when(permissionTemplateDao.selectUsers(any(PermissionQuery.class), anyLong(), anyInt(), anyInt())).thenReturn(
newArrayList(new UserWithPermissionDto().setName("user1").setPermission("user"))
);

UserWithPermissionQueryResult result = finder.findUsersWithPermissionTemplate(WithPermissionQuery.builder().permission("user").template("my_template").build());
UserWithPermissionQueryResult result = finder.findUsersWithPermissionTemplate(PermissionQuery.builder().permission("user").template("my_template").build());
assertThat(result.users()).hasSize(1);
assertThat(result.hasMoreResults()).isFalse();
}
@@ -261,7 +261,7 @@ public class PermissionFinderTest {
when(permissionTemplateDao.selectTemplateByKey(anyString())).thenReturn(null);

try {
finder.findUsersWithPermissionTemplate(WithPermissionQuery.builder().permission("user").template("Unknown").build());
finder.findUsersWithPermissionTemplate(PermissionQuery.builder().permission("user").template("Unknown").build());
fail();
} catch (Exception e) {
assertThat(e).isInstanceOf(NotFoundException.class).hasMessage("Template 'Unknown' does not exist");
@@ -272,12 +272,12 @@ public class PermissionFinderTest {
public void find_groups_from_permission_template() throws Exception {
when(permissionTemplateDao.selectTemplateByKey(anyString())).thenReturn(new PermissionTemplateDto().setId(1L).setKee("my_template"));

when(permissionTemplateDao.selectGroups(any(WithPermissionQuery.class), anyLong())).thenReturn(
when(permissionTemplateDao.selectGroups(any(PermissionQuery.class), anyLong())).thenReturn(
newArrayList(new GroupWithPermissionDto().setName("users").setPermission("user"))
);

GroupWithPermissionQueryResult result = finder.findGroupsWithPermissionTemplate(
WithPermissionQuery.builder().permission("user").template("my_template").membership(WithPermissionQuery.OUT).build());
PermissionQuery.builder().permission("user").template("my_template").membership(PermissionQuery.OUT).build());
assertThat(result.groups()).hasSize(1);
assertThat(result.hasMoreResults()).isFalse();
}
@@ -287,7 +287,7 @@ public class PermissionFinderTest {
when(permissionTemplateDao.selectTemplateByKey(anyString())).thenReturn(null);

try {
finder.findGroupsWithPermissionTemplate(WithPermissionQuery.builder().permission("user").template("Unknown").build());
finder.findGroupsWithPermissionTemplate(PermissionQuery.builder().permission("user").template("Unknown").build());
fail();
} catch (Exception e) {
assertThat(e).isInstanceOf(NotFoundException.class).hasMessage("Template 'Unknown' does not exist");

sonar-server/src/test/java/org/sonar/server/permission/WithPermissionQueryParserTest.java → sonar-server/src/test/java/org/sonar/server/permission/PermissionQueryParserTest.java View File

@@ -21,14 +21,14 @@
package org.sonar.server.permission;

import org.junit.Test;
import org.sonar.core.permission.WithPermissionQuery;
import org.sonar.core.permission.PermissionQuery;

import java.util.Map;

import static com.google.common.collect.Maps.newHashMap;
import static org.fest.assertions.Assertions.assertThat;

public class WithPermissionQueryParserTest {
public class PermissionQueryParserTest {

@Test
public void to_query_with_all_params() throws Exception {
@@ -40,7 +40,7 @@ public class WithPermissionQueryParserTest {
params.put("selected", "all");
params.put("page", 2);
params.put("pageSize", 50);
WithPermissionQuery query = WithPermissionQueryParser.toQuery(params);
PermissionQuery query = PermissionQueryParser.toQuery(params);

assertThat(query.permission()).isEqualTo("admin");
assertThat(query.component()).isEqualTo("org.sample.Sample");
@@ -48,7 +48,7 @@ public class WithPermissionQueryParserTest {
assertThat(query.search()).isEqualTo("text");
assertThat(query.pageSize()).isEqualTo(50);
assertThat(query.pageIndex()).isEqualTo(2);
assertThat(query.membership()).isEqualTo(WithPermissionQuery.ANY);
assertThat(query.membership()).isEqualTo(PermissionQuery.ANY);
}

@Test
@@ -57,7 +57,7 @@ public class WithPermissionQueryParserTest {
params.put("permission", "admin");
params.put("selected", "selected");

assertThat(WithPermissionQueryParser.toQuery(params).membership()).isEqualTo(WithPermissionQuery.IN);
assertThat(PermissionQueryParser.toQuery(params).membership()).isEqualTo(PermissionQuery.IN);
}

@Test
@@ -66,7 +66,7 @@ public class WithPermissionQueryParserTest {
params.put("permission", "admin");
params.put("selected", "deselected");

assertThat(WithPermissionQueryParser.toQuery(params).membership()).isEqualTo(WithPermissionQuery.OUT);
assertThat(PermissionQueryParser.toQuery(params).membership()).isEqualTo(PermissionQuery.OUT);
}

@Test
@@ -75,6 +75,7 @@ public class WithPermissionQueryParserTest {
params.put("permission", "admin");
params.put("selected", "all");

assertThat(WithPermissionQueryParser.toQuery(params).membership()).isEqualTo(WithPermissionQuery.ANY);
assertThat(PermissionQueryParser.toQuery(params).membership()).isEqualTo(PermissionQuery.ANY);
}

}

+ 58
- 0
sonar-server/src/test/java/org/sonar/server/permission/PermissionQueryTest.java View File

@@ -0,0 +1,58 @@
/*
* SonarQube, open source software quality management tool.
* Copyright (C) 2008-2013 SonarSource
* mailto:contact AT sonarsource DOT com
*
* SonarQube is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* SonarQube is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/

package org.sonar.server.permission;

import org.junit.Test;
import org.sonar.core.permission.PermissionQuery;

import static org.fest.assertions.Assertions.assertThat;
import static org.fest.assertions.Fail.fail;

public class PermissionQueryTest {

@Test
public void fail_on_null_permission() throws Exception {
PermissionQuery.Builder builder = PermissionQuery.builder();
builder.permission(null);

try {
builder.build();
fail();
} catch (Exception e) {
assertThat(e).isInstanceOf(NullPointerException.class).hasMessage("Permission cant be null.");
}
}

@Test
public void fail_on_invalid_membership() throws Exception {
PermissionQuery.Builder builder = PermissionQuery.builder();
builder.permission("admin");
builder.membership("unknwown");

try {
builder.build();
fail();
} catch (Exception e) {
assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("Membership is not valid (got unknwown). Availables values are [ANY, IN, OUT]");
}
}

}

Loading…
Cancel
Save