You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

RoleDaoTest.java 6.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2020 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonar.db.user;
  21. import java.util.List;
  22. import org.junit.Before;
  23. import org.junit.Rule;
  24. import org.junit.Test;
  25. import org.junit.rules.ExpectedException;
  26. import org.sonar.api.utils.System2;
  27. import org.sonar.api.web.UserRole;
  28. import org.sonar.core.util.Uuids;
  29. import org.sonar.db.DbSession;
  30. import org.sonar.db.DbTester;
  31. import org.sonar.db.component.ComponentDto;
  32. import static org.assertj.core.api.Assertions.assertThat;
  33. import static org.sonar.db.permission.OrganizationPermission.ADMINISTER;
  34. public class RoleDaoTest {
  35. @Rule
  36. public DbTester db = DbTester.create(System2.INSTANCE);
  37. @Rule
  38. public ExpectedException expectedException = ExpectedException.none();
  39. private DbSession dbSession = db.getSession();
  40. private RoleDao underTest = db.getDbClient().roleDao();
  41. private UserDto user1;
  42. private UserDto user2;
  43. private ComponentDto project1;
  44. private ComponentDto project2;
  45. @Before
  46. public void setUp() {
  47. user1 = db.users().insertUser();
  48. user2 = db.users().insertUser();
  49. project1 = db.components().insertPrivateProject();
  50. project2 = db.components().insertPrivateProject();
  51. }
  52. @Test
  53. public void selectComponentUuidsByPermissionAndUserId_throws_IAR_if_permission_USER_is_specified() {
  54. expectUnsupportedUserAndCodeViewerPermission();
  55. underTest.selectComponentUuidsByPermissionAndUserUuid(dbSession, UserRole.USER, Uuids.createFast());
  56. }
  57. @Test
  58. public void selectComponentUuidsByPermissionAndUserId_throws_IAR_if_permission_CODEVIEWER_is_specified() {
  59. expectUnsupportedUserAndCodeViewerPermission();
  60. underTest.selectComponentUuidsByPermissionAndUserUuid(dbSession, UserRole.CODEVIEWER, Uuids.createFast());
  61. }
  62. private void expectUnsupportedUserAndCodeViewerPermission() {
  63. expectedException.expect(IllegalArgumentException.class);
  64. expectedException.expectMessage("Permissions [user, codeviewer] are not supported by selectComponentUuidsByPermissionAndUserUuid");
  65. }
  66. @Test
  67. public void selectComponentIdsByPermissionAndUserUuid() {
  68. db.users().insertProjectPermissionOnUser(user1, UserRole.ADMIN, project1);
  69. db.users().insertProjectPermissionOnUser(user1, UserRole.ADMIN, project2);
  70. // global permission - not returned
  71. db.users().insertPermissionOnUser(user1, ADMINISTER);
  72. // project permission on another user id - not returned
  73. db.users().insertProjectPermissionOnUser(user2, UserRole.ADMIN, project1);
  74. // project permission on another permission - not returned
  75. db.users().insertProjectPermissionOnUser(user1, UserRole.ISSUE_ADMIN, project1);
  76. List<String> projectUuids = underTest.selectComponentUuidsByPermissionAndUserUuid(dbSession, UserRole.ADMIN, user1.getUuid());
  77. assertThat(projectUuids).containsExactly(project1.uuid(), project2.uuid());
  78. }
  79. @Test
  80. public void selectComponentIdsByPermissionAndUserUuid_group_permissions() {
  81. GroupDto group1 = db.users().insertGroup();
  82. GroupDto group2 = db.users().insertGroup();
  83. db.users().insertProjectPermissionOnGroup(group1, UserRole.ADMIN, project1);
  84. db.users().insertMember(group1, user1);
  85. db.users().insertProjectPermissionOnUser(user1, UserRole.ADMIN, project2);
  86. // global permission - not returned
  87. db.users().insertPermissionOnUser(user1, ADMINISTER);
  88. db.users().insertPermissionOnGroup(group1, ADMINISTER);
  89. // project permission on another user id - not returned
  90. db.users().insertPermissionOnGroup(group2, ADMINISTER);
  91. db.users().insertMember(group2, user2);
  92. // project permission on another permission - not returned
  93. db.users().insertProjectPermissionOnGroup(group1, UserRole.ISSUE_ADMIN, project1);
  94. List<String> result = underTest.selectComponentUuidsByPermissionAndUserUuid(dbSession, UserRole.ADMIN, user1.getUuid());
  95. assertThat(result).containsExactly(project1.uuid(), project2.uuid());
  96. }
  97. @Test
  98. public void delete_all_group_permissions_by_group_uuid() {
  99. GroupDto group1 = db.users().insertGroup();
  100. GroupDto group2 = db.users().insertGroup();
  101. ComponentDto project = db.components().insertPrivateProject();
  102. db.users().insertPermissionOnGroup(group1, "admin");
  103. db.users().insertProjectPermissionOnGroup(group1, "profileadmin", project);
  104. db.users().insertPermissionOnGroup(group1, "gateadmin");
  105. db.users().insertPermissionOnGroup(group2, "gateadmin");
  106. db.users().insertProjectPermissionOnGroup(group2, "admin", project);
  107. db.users().insertPermissionOnAnyone("scan");
  108. db.users().insertPermissionOnAnyone("provisioning");
  109. underTest.deleteGroupRolesByGroupUuid(db.getSession(), group1.getUuid());
  110. db.getSession().commit();
  111. assertThat(db.getDbClient().groupPermissionDao().selectGlobalPermissionsOfGroup(db.getSession(), group1.getUuid())).isEmpty();
  112. assertThat(db.getDbClient().groupPermissionDao().selectProjectPermissionsOfGroup(db.getSession(), group1.getUuid(), project.uuid()))
  113. .isEmpty();
  114. assertThat(db.getDbClient().groupPermissionDao().selectGlobalPermissionsOfGroup(db.getSession(), group2.getUuid()))
  115. .containsOnly("gateadmin");
  116. assertThat(db.getDbClient().groupPermissionDao().selectProjectPermissionsOfGroup(db.getSession(), group2.getUuid(), project.uuid()))
  117. .containsOnly("admin");
  118. assertThat(db.getDbClient().groupPermissionDao().selectGlobalPermissionsOfGroup(db.getSession(), null)).containsOnly("scan",
  119. "provisioning");
  120. }
  121. }