@ServerSide
public class PermissionFinder {
- private final DbClient dbClient;
-
private final PermissionDao permissionDao;
private final ResourceDao resourceDao;
private final PermissionTemplateDao permissionTemplateDao;
public PermissionFinder(DbClient dbClient) {
- this.dbClient = dbClient;
this.resourceDao = dbClient.resourceDao();
this.permissionDao = dbClient.permissionDao();
this.permissionTemplateDao = dbClient.permissionTemplateDao();
}
- public UserWithPermissionQueryResult findUsersWithPermission(PermissionQuery query) {
+ public UserWithPermissionQueryResult findUsersWithPermission(DbSession dbSession, PermissionQuery query) {
Long componentId = componentId(query.component());
int limit = query.pageSize();
- DbSession dbSession = dbClient.openSession(false);
- try {
- int total = permissionDao.countUsers(dbSession, query, componentId);
- return toUserQueryResult(permissionDao.selectUsers(dbSession, query, componentId, offset(query), limit), total);
- } finally {
- dbClient.closeSession(dbSession);
- }
+ int total = permissionDao.countUsers(dbSession, query, componentId);
+ return toUserQueryResult(permissionDao.selectUsers(dbSession, query, componentId, offset(query), limit), total);
}
- public UserWithPermissionQueryResult findUsersWithPermissionTemplate(PermissionQuery query) {
+ public UserWithPermissionQueryResult findUsersWithPermissionTemplate(DbSession dbSession, PermissionQuery query) {
Long permissionTemplateId = templateId(query.template());
int limit = query.pageSize();
- DbSession dbSession = dbClient.openSession(false);
- try {
- int total = permissionTemplateDao.countUsers(dbSession, query, permissionTemplateId);
- return toUserQueryResult(permissionTemplateDao.selectUsers(dbSession, query, permissionTemplateId, offset(query), limit), total);
- } finally {
- dbClient.closeSession(dbSession);
- }
+ int total = permissionTemplateDao.countUsers(dbSession, query, permissionTemplateId);
+ return toUserQueryResult(permissionTemplateDao.selectUsers(dbSession, query, permissionTemplateId, offset(query), limit), total);
}
/**
* Paging for groups search is done in Java in order to correctly handle the 'Anyone' group
*/
- public GroupWithPermissionQueryResult findGroupsWithPermission(PermissionQuery query) {
+ public GroupWithPermissionQueryResult findGroupsWithPermission(DbSession dbSession, PermissionQuery query) {
Long componentId = componentId(query.component());
- DbSession dbSession = dbClient.openSession(false);
- try {
- return toGroupQueryResult(permissionDao.selectGroups(dbSession, query, componentId), query);
- } finally {
- dbClient.closeSession(dbSession);
- }
+ return toGroupQueryResult(permissionDao.selectGroups(dbSession, query, componentId), query);
}
/**
* Paging for groups search is done in Java in order to correctly handle the 'Anyone' group
*/
- public GroupWithPermissionQueryResult findGroupsWithPermissionTemplate(PermissionQuery query) {
+ public GroupWithPermissionQueryResult findGroupsWithPermissionTemplate(DbSession dbSession, PermissionQuery query) {
Long permissionTemplateId = templateId(query.template());
- DbSession dbSession = dbClient.openSession(false);
- try {
- return toGroupQueryResult(permissionTemplateDao.selectGroups(dbSession, query, permissionTemplateId), query);
- } finally {
- dbClient.closeSession(dbSession);
- }
+ return toGroupQueryResult(permissionTemplateDao.selectGroups(dbSession, query, permissionTemplateId), query);
}
private static UserWithPermissionQueryResult toUserQueryResult(List<UserWithPermissionDto> dtos, int total) {
import java.util.List;
import org.junit.Before;
import org.junit.Test;
-import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
import org.sonar.core.permission.GroupWithPermission;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-@RunWith(MockitoJUnitRunner.class)
public class PermissionFinderTest {
- @Mock
- PermissionDao permissionDao;
-
- @Mock
- ResourceDao resourceDao;
-
- @Mock
- PermissionTemplateDao permissionTemplateDao;
+ PermissionDao permissionDao = mock(PermissionDao.class);
+ ResourceDao resourceDao = mock(ResourceDao.class);
+ PermissionTemplateDao permissionTemplateDao = mock(PermissionTemplateDao.class);
+ DbSession dbSession = mock(DbSession.class);
PermissionFinder underTest;
);
when(permissionDao.countUsers(any(DbSession.class), any(PermissionQuery.class), anyLong())).thenReturn(1);
- UserWithPermissionQueryResult result = underTest.findUsersWithPermission(PermissionQuery.builder().permission("user").build());
+ UserWithPermissionQueryResult result = underTest.findUsersWithPermission(dbSession, PermissionQuery.builder().permission("user").build());
assertThat(result.users()).hasSize(1);
assertThat(result.total()).isEqualTo(1);
}
when(resourceDao.selectResource(any(ResourceQuery.class))).thenReturn(null);
try {
- underTest.findUsersWithPermission(PermissionQuery.builder().permission("user").component("Unknown").build());
+ underTest.findUsersWithPermission(dbSession, PermissionQuery.builder().permission("user").component("Unknown").build());
fail();
} catch (Exception e) {
assertThat(e).isInstanceOf(NotFoundException.class).hasMessage("Project 'Unknown' does not exist");
@Test
public void find_users_with_paging() {
- underTest.findUsersWithPermission(PermissionQuery.builder().permission("user").pageIndex(3).pageSize(10).build());
+ underTest.findUsersWithPermission(dbSession, PermissionQuery.builder().permission("user").pageIndex(3).pageSize(10).build());
ArgumentCaptor<Integer> argumentOffset = ArgumentCaptor.forClass(Integer.class);
ArgumentCaptor<Integer> argumentLimit = ArgumentCaptor.forClass(Integer.class);
new UserWithPermissionDto().setName("user3").setPermission("user"))
);
when(permissionDao.countUsers(any(DbSession.class), any(PermissionQuery.class), anyLong())).thenReturn(3);
- UserWithPermissionQueryResult result = underTest.findUsersWithPermission(PermissionQuery.builder().permission("user").pageIndex(1).pageSize(2).build());
+ UserWithPermissionQueryResult result = underTest.findUsersWithPermission(dbSession, PermissionQuery.builder().permission("user").pageIndex(1).pageSize(2).build());
ArgumentCaptor<Integer> argumentOffset = ArgumentCaptor.forClass(Integer.class);
ArgumentCaptor<Integer> argumentLimit = ArgumentCaptor.forClass(Integer.class);
);
when(permissionDao.countUsers(any(DbSession.class), any(PermissionQuery.class), anyLong())).thenReturn(4);
- UserWithPermissionQueryResult result = underTest.findUsersWithPermission(PermissionQuery.builder().permission("user").pageIndex(1).pageSize(10).build());
+ UserWithPermissionQueryResult result = underTest.findUsersWithPermission(dbSession, PermissionQuery.builder().permission("user").pageIndex(1).pageSize(10).build());
ArgumentCaptor<Integer> argumentOffset = ArgumentCaptor.forClass(Integer.class);
ArgumentCaptor<Integer> argumentLimit = ArgumentCaptor.forClass(Integer.class);
newArrayList(new GroupWithPermissionDto().setName("users").setPermission("user"))
);
- GroupWithPermissionQueryResult result = underTest.findGroupsWithPermission(
- PermissionQuery.builder().permission("user").membership(PermissionQuery.IN).build());
+ GroupWithPermissionQueryResult result = underTest.findGroupsWithPermission(dbSession, PermissionQuery.builder().permission("user").membership(PermissionQuery.IN).build());
assertThat(result.groups()).hasSize(1);
}
new GroupWithPermissionDto().setName("Other").setPermission(null)
));
- GroupWithPermissionQueryResult result = underTest.findGroupsWithPermission(
+ GroupWithPermissionQueryResult result = underTest.findGroupsWithPermission(dbSession,
PermissionQuery.builder()
.permission("user")
.pageSize(2)
new GroupWithPermissionDto().setName("Other").setPermission(null)
));
- assertThat(underTest.findGroupsWithPermission(
- PermissionQuery.builder().permission("user").membership(PermissionQuery.IN).build()).groups()).hasSize(2);
- assertThat(underTest.findGroupsWithPermission(
- PermissionQuery.builder().permission("user").membership(PermissionQuery.OUT).build()).groups()).hasSize(3);
- assertThat(underTest.findGroupsWithPermission(
- PermissionQuery.builder().permission("user").membership(PermissionQuery.ANY).build()).groups()).hasSize(5);
+ assertThat(underTest.findGroupsWithPermission(dbSession, PermissionQuery.builder().permission("user").membership(PermissionQuery.IN).build()).groups()).hasSize(2);
+ assertThat(underTest.findGroupsWithPermission(dbSession, PermissionQuery.builder().permission("user").membership(PermissionQuery.OUT).build()).groups()).hasSize(3);
+ assertThat(underTest.findGroupsWithPermission(dbSession, PermissionQuery.builder().permission("user").membership(PermissionQuery.ANY).build()).groups()).hasSize(5);
}
@Test
newArrayList(new GroupWithPermissionDto().setName("users").setPermission("user"))
);
- GroupWithPermissionQueryResult result = underTest.findGroupsWithPermission(PermissionQuery.builder().permission("user")
- .pageIndex(1).membership(PermissionQuery.ANY).build());
+ GroupWithPermissionQueryResult result = underTest.findGroupsWithPermission(dbSession, 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");
newArrayList(new GroupWithPermissionDto().setName("users").setPermission("user"))
);
- GroupWithPermissionQueryResult result = underTest.findGroupsWithPermission(PermissionQuery.builder().permission("user").search("other")
+ GroupWithPermissionQueryResult result = underTest.findGroupsWithPermission(dbSession, PermissionQuery.builder().permission("user").search("other")
.pageIndex(1).membership(PermissionQuery.ANY).build());
// Anyone group should not be added
assertThat(result.groups()).hasSize(1);
newArrayList(new GroupWithPermissionDto().setName("MyAnyGroup").setPermission("user"))
);
- GroupWithPermissionQueryResult result = underTest.findGroupsWithPermission(PermissionQuery.builder().permission("user").search("any")
+ GroupWithPermissionQueryResult result = underTest.findGroupsWithPermission(dbSession, PermissionQuery.builder().permission("user").search("any")
.pageIndex(1).membership(PermissionQuery.ANY).build());
assertThat(result.groups()).hasSize(2);
}
newArrayList(new GroupWithPermissionDto().setName("users").setPermission("user"))
);
- GroupWithPermissionQueryResult result = underTest.findGroupsWithPermission(PermissionQuery.builder().permission("user")
+ GroupWithPermissionQueryResult result = underTest.findGroupsWithPermission(dbSession, PermissionQuery.builder().permission("user")
.pageIndex(1).membership(PermissionQuery.OUT).build());
// Anyone group should not be added
assertThat(result.groups()).hasSize(1);
when(permissionTemplateDao.countUsers(any(DbSession.class), any(PermissionQuery.class), anyLong())).thenReturn(1);
- UserWithPermissionQueryResult result = underTest.findUsersWithPermissionTemplate(PermissionQuery.builder().permission("user").template("my_template").build());
+ UserWithPermissionQueryResult result = underTest.findUsersWithPermissionTemplate(dbSession, PermissionQuery.builder().permission("user").template("my_template").build());
assertThat(result.users()).hasSize(1);
assertThat(result.total()).isEqualTo(1);
}
when(permissionTemplateDao.selectByUuid(anyString())).thenReturn(null);
try {
- underTest.findUsersWithPermissionTemplate(PermissionQuery.builder().permission("user").template("Unknown").build());
+ underTest.findUsersWithPermissionTemplate(dbSession, PermissionQuery.builder().permission("user").template("Unknown").build());
fail();
} catch (Exception e) {
assertThat(e).isInstanceOf(NotFoundException.class).hasMessage("Template 'Unknown' does not exist");
newArrayList(new GroupWithPermissionDto().setName("users").setPermission("user"))
);
- GroupWithPermissionQueryResult result = underTest.findGroupsWithPermissionTemplate(
+ GroupWithPermissionQueryResult result = underTest.findGroupsWithPermissionTemplate(dbSession,
PermissionQuery.builder().permission("user").template("my_template").membership(PermissionQuery.OUT).build());
assertThat(result.groups()).hasSize(1);
}
when(permissionTemplateDao.selectByUuid(anyString())).thenReturn(null);
try {
- underTest.findGroupsWithPermissionTemplate(PermissionQuery.builder().permission("user").template("Unknown").build());
+ underTest.findGroupsWithPermissionTemplate(dbSession, PermissionQuery.builder().permission("user").template("Unknown").build());
fail();
} catch (Exception e) {
assertThat(e).isInstanceOf(NotFoundException.class).hasMessage("Template 'Unknown' does not exist");
}
}
-
}