package jnpf.dmsPermission;
|
|
import jnpf.dmsEntity.permission.model.DmsSubjectSet;
|
import jnpf.dmsMapper.DmsPermissionGroupMapper;
|
import jnpf.permission.entity.PermissionGroupEntity;
|
import org.junit.jupiter.api.Test;
|
|
import java.util.Arrays;
|
import java.util.Collections;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
class DmsPermissionGroupMembershipResolverTest {
|
|
@Test
|
void resolvesMultipleSubjectsWithOneGroupLoad() {
|
DmsPermissionGroupMapper mapper = mock(DmsPermissionGroupMapper.class);
|
DmsPermissionGroupMembershipResolver resolver =
|
new DmsPermissionGroupMembershipResolver(mapper);
|
when(mapper.selectEnabled(11)).thenReturn(Arrays.asList(
|
group("group-all", 0, null),
|
group("group-user-1", 1, "user-1--user"),
|
group("group-position-2", 1, "position-2--pos")));
|
DmsSubjectSet first = subject("user-1", null);
|
DmsSubjectSet second = subject("user-2", "position-2");
|
|
resolver.resolveAll(Arrays.asList(first, second), 10);
|
|
assertEquals(set("group-all", "group-user-1"), first.getPermissionGroupIds());
|
assertEquals(set("group-all", "group-position-2"), second.getPermissionGroupIds());
|
verify(mapper, times(1)).selectEnabled(11);
|
}
|
|
@Test
|
void singleSubjectEntryPointRemainsCompatible() {
|
DmsPermissionGroupMapper mapper = mock(DmsPermissionGroupMapper.class);
|
DmsPermissionGroupMembershipResolver resolver =
|
new DmsPermissionGroupMembershipResolver(mapper);
|
when(mapper.selectEnabled(6)).thenReturn(Collections.singletonList(
|
group("group-user", 1, "user-1--user")));
|
DmsSubjectSet subject = subject("user-1", null);
|
|
resolver.resolveAll(subject, 5);
|
|
assertEquals(set("group-user"), subject.getPermissionGroupIds());
|
verify(mapper, times(1)).selectEnabled(6);
|
}
|
|
@Test
|
void rejectsGroupScanOverflowBeforeMutatingSubjects() {
|
DmsPermissionGroupMapper mapper = mock(DmsPermissionGroupMapper.class);
|
DmsPermissionGroupMembershipResolver resolver =
|
new DmsPermissionGroupMembershipResolver(mapper);
|
when(mapper.selectEnabled(2)).thenReturn(Arrays.asList(
|
group("group-1", 0, null), group("group-2", 0, null)));
|
DmsSubjectSet subject = subject("user-1", null);
|
|
DmsPermissionException error = assertThrows(DmsPermissionException.class,
|
() -> resolver.resolveAll(Collections.singletonList(subject), 1));
|
|
assertEquals(DmsPermissionError.INVALID_REQUEST, error.getError());
|
assertEquals(Collections.emptySet(), subject.getPermissionGroupIds());
|
}
|
|
@Test
|
void matchesPlatformHierarchyScopesWithoutTreatingAncestorsAsDirectMembers() {
|
DmsPermissionGroupMapper mapper = mock(DmsPermissionGroupMapper.class);
|
DmsPermissionGroupMembershipResolver resolver =
|
new DmsPermissionGroupMembershipResolver(mapper);
|
when(mapper.selectEnabled(30)).thenReturn(Arrays.asList(
|
group("raw-user", 1, "user-1"),
|
group("raw-org", 1, "org-child"),
|
group("raw-position", 1, "position-child"),
|
group("direct-org", 1, "org-child--org"),
|
group("parent-not-direct-org", 1, "org-parent--org"),
|
group("parent-sub-org", 1, "org-parent--subOrg"),
|
group("root-not-sub-org", 1, "org-root--subOrg"),
|
group("root-progeny-org", 1, "org-root--progenyOrg"),
|
group("direct-position", 1, "position-child--pos"),
|
group("parent-not-direct-position", 1, "position-parent--pos"),
|
group("parent-sub-position", 1, "position-parent--subPos"),
|
group("root-not-sub-position", 1, "position-root--subPos"),
|
group("root-progeny-position", 1, "position-root--progenyPos"),
|
group("direct-user-role", 1, "role-direct--role"),
|
group("effective-only-role", 1, "role-inherited--role"),
|
group("platform-group", 1, "platform-group-1--group")));
|
DmsSubjectSet subject = subject("user-1", "position-child");
|
subject.getDirectOrgIds().add("org-child");
|
subject.getImmediateParentOrgIds().add("org-parent");
|
subject.getAncestorOrgIds().addAll(Arrays.asList("org-root", "org-parent", "org-child"));
|
subject.getImmediateParentPositionIds().add("position-parent");
|
subject.getAncestorPositionIds().addAll(Arrays.asList(
|
"position-root", "position-parent", "position-child"));
|
subject.getRoleIds().addAll(Arrays.asList("role-direct", "role-inherited"));
|
subject.getDirectUserRoleIds().add("role-direct");
|
subject.getPlatformGroupIds().add("platform-group-1");
|
|
resolver.resolveAll(subject, 29);
|
|
assertEquals(set("raw-user", "direct-org", "parent-sub-org", "root-progeny-org",
|
"direct-position", "parent-sub-position", "root-progeny-position",
|
"direct-user-role", "platform-group"), subject.getPermissionGroupIds());
|
}
|
|
private DmsSubjectSet subject(String userId, String positionId) {
|
DmsSubjectSet result = new DmsSubjectSet();
|
result.setUserId(userId);
|
if (positionId != null) {
|
result.getPositionIds().add(positionId);
|
}
|
return result;
|
}
|
|
private PermissionGroupEntity group(String id, Integer type, String members) {
|
PermissionGroupEntity result = new PermissionGroupEntity();
|
result.setId(id);
|
result.setType(type);
|
result.setPermissionMember(members);
|
return result;
|
}
|
|
private java.util.LinkedHashSet<String> set(String... values) {
|
return new java.util.LinkedHashSet<>(Arrays.asList(values));
|
}
|
}
|