package jnpf.dmsPermission;
|
|
import jnpf.dmsEntity.permission.entity.DmsFilePermissionEntity;
|
import jnpf.dmsEntity.permission.model.DmsResourcePath;
|
import jnpf.dmsEntity.permission.model.DmsSubjectSet;
|
import org.junit.jupiter.api.Test;
|
|
import java.util.Arrays;
|
import java.util.UUID;
|
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
class DmsPermissionMatcherTest {
|
private final DmsPermissionMatcher matcher = new DmsPermissionMatcher();
|
private final UUID root = UUID.randomUUID();
|
private final UUID child = UUID.randomUUID();
|
private final UUID document = UUID.randomUUID();
|
private final UUID version = UUID.randomUUID();
|
|
@Test
|
void folderSelfCoversDirectDocumentButNotChildFolder() {
|
DmsFilePermissionEntity permission = permission("FOLDER", root, "SELF", "USER", "u1", false);
|
DmsSubjectSet subjects = user("u1");
|
|
assertTrue(matcher.matches(permission, documentPath(root), subjects));
|
assertFalse(matcher.matches(permission, folderPath(child, root), subjects));
|
}
|
|
@Test
|
void folderSubtreeCoversDescendantVersion() {
|
DmsFilePermissionEntity permission = permission("FOLDER", root, "SUBTREE", "USER", "u1", false);
|
assertTrue(matcher.matches(permission, versionPath(child, root), user("u1")));
|
}
|
|
@Test
|
void documentSelfCoversAllItsVersions() {
|
DmsFilePermissionEntity permission = permission("DOCUMENT", document, "SELF", "USER", "u1", false);
|
assertTrue(matcher.matches(permission, versionPath(child, root), user("u1")));
|
}
|
|
@Test
|
void fileVersionDoesNotCoverAnotherVersion() {
|
DmsFilePermissionEntity permission = permission("FILE_VERSION", version, "SELF", "USER", "u1", false);
|
DmsResourcePath other = versionPath(child, root);
|
other.setActualResourceId(UUID.randomUUID());
|
assertFalse(matcher.matches(permission, other, user("u1")));
|
}
|
|
@Test
|
void childOrganizationRequiresIncludeChildOrgs() {
|
DmsSubjectSet subjects = user("u1");
|
subjects.getDirectOrgIds().add("child-org");
|
subjects.getAncestorOrgIds().addAll(Arrays.asList("child-org", "root-org"));
|
DmsFilePermissionEntity directOnly = permission("DOCUMENT", document, "SELF", "ORG", "root-org", false);
|
DmsFilePermissionEntity descendants = permission("DOCUMENT", document, "SELF", "ORG", "root-org", true);
|
|
assertFalse(matcher.matches(directOnly, documentPath(child), subjects));
|
assertTrue(matcher.matches(descendants, documentPath(child), subjects));
|
}
|
|
@Test
|
void dmsGroupUsesResolvedPermissionGroupsOnly() {
|
DmsSubjectSet subjects = user("u1");
|
subjects.getPlatformGroupIds().add("g1");
|
DmsFilePermissionEntity permission = permission("DOCUMENT", document, "SELF", "GROUP", "g1", false);
|
|
assertFalse(matcher.matches(permission, documentPath(child), subjects));
|
subjects.getPermissionGroupIds().add("g1");
|
assertTrue(matcher.matches(permission, documentPath(child), subjects));
|
}
|
|
private DmsFilePermissionEntity permission(String type, UUID resourceId, String scope,
|
String principalType, String principalId, boolean childOrgs) {
|
DmsFilePermissionEntity result = new DmsFilePermissionEntity();
|
result.setResourceType(type);
|
result.setResourceId(resourceId);
|
result.setResourceScope(scope);
|
result.setPrincipalType(principalType);
|
result.setPrincipalId(principalId);
|
result.setIncludeChildOrgs(childOrgs);
|
return result;
|
}
|
|
private DmsSubjectSet user(String id) {
|
DmsSubjectSet result = new DmsSubjectSet();
|
result.setUserId(id);
|
return result;
|
}
|
|
private DmsResourcePath folderPath(UUID actual, UUID... ancestors) {
|
DmsResourcePath result = new DmsResourcePath();
|
result.setActualResourceType("FOLDER");
|
result.setActualResourceId(actual);
|
result.setDirectFolderId(actual);
|
result.getFolderPath().add(actual);
|
result.getFolderPath().addAll(Arrays.asList(ancestors));
|
return result;
|
}
|
|
private DmsResourcePath documentPath(UUID folder) {
|
DmsResourcePath result = new DmsResourcePath();
|
result.setActualResourceType("DOCUMENT");
|
result.setActualResourceId(document);
|
result.setDocumentId(document);
|
result.setDirectFolderId(folder);
|
result.getFolderPath().add(folder);
|
return result;
|
}
|
|
private DmsResourcePath versionPath(UUID folder, UUID... ancestors) {
|
DmsResourcePath result = new DmsResourcePath();
|
result.setActualResourceType("FILE_VERSION");
|
result.setActualResourceId(version);
|
result.setDocumentId(document);
|
result.setDirectFolderId(folder);
|
result.getFolderPath().add(folder);
|
result.getFolderPath().addAll(Arrays.asList(ancestors));
|
return result;
|
}
|
}
|