package jnpf.dmsPermission;
|
|
import jnpf.dmsEntity.permission.entity.DmsAccessExclusionEntity;
|
import jnpf.dmsEntity.permission.model.DmsResourcePath;
|
import jnpf.dmsMapper.DmsAccessExclusionMapper;
|
import org.junit.jupiter.api.Test;
|
|
import java.util.Arrays;
|
import java.util.Collections;
|
import java.util.List;
|
import java.util.UUID;
|
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.mockito.ArgumentMatchers.anyList;
|
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
class DmsAccessExclusionResolverTest {
|
|
@Test
|
void documentExclusionCoversDocumentAndAllVersions() {
|
DmsAccessExclusionMapper mapper = mock(DmsAccessExclusionMapper.class);
|
DmsAccessExclusionResolver resolver = new DmsAccessExclusionResolver(mapper);
|
UUID documentId = UUID.randomUUID();
|
UUID versionOneId = UUID.randomUUID();
|
UUID versionTwoId = UUID.randomUUID();
|
when(mapper.selectActiveForResourceIds(eq("tenant-1"), eq("user-1"), anyList()))
|
.thenReturn(Collections.singletonList(exclusion("DOCUMENT", documentId)));
|
|
DmsResourcePath document = document(documentId);
|
DmsResourcePath versionOne = version(documentId, versionOneId);
|
DmsResourcePath versionTwo = version(documentId, versionTwoId);
|
DmsAccessExclusionResolver.Snapshot snapshot = resolver.resolve(
|
"tenant-1", "user-1", Arrays.asList(document, versionOne, versionTwo));
|
|
assertTrue(snapshot.excludes(document));
|
assertTrue(snapshot.excludes(versionOne));
|
assertTrue(snapshot.excludes(versionTwo));
|
verify(mapper).selectActiveForResourceIds(eq("tenant-1"), eq("user-1"), anyList());
|
}
|
|
@Test
|
void fileVersionExclusionOnlyCoversSpecifiedVersion() {
|
DmsAccessExclusionMapper mapper = mock(DmsAccessExclusionMapper.class);
|
DmsAccessExclusionResolver resolver = new DmsAccessExclusionResolver(mapper);
|
UUID documentId = UUID.randomUUID();
|
UUID excludedVersionId = UUID.randomUUID();
|
UUID visibleVersionId = UUID.randomUUID();
|
when(mapper.selectActiveForResourceIds(eq("tenant-1"), eq("user-1"), anyList()))
|
.thenReturn(Collections.singletonList(exclusion("FILE_VERSION", excludedVersionId)));
|
|
DmsResourcePath document = document(documentId);
|
DmsResourcePath excludedVersion = version(documentId, excludedVersionId);
|
DmsResourcePath visibleVersion = version(documentId, visibleVersionId);
|
DmsAccessExclusionResolver.Snapshot snapshot = resolver.resolve(
|
"tenant-1", "user-1", List.of(document, excludedVersion, visibleVersion));
|
|
assertFalse(snapshot.excludes(document));
|
assertTrue(snapshot.excludes(excludedVersion));
|
assertFalse(snapshot.excludes(visibleVersion));
|
}
|
|
private DmsAccessExclusionEntity exclusion(String resourceType, UUID resourceId) {
|
DmsAccessExclusionEntity result = new DmsAccessExclusionEntity();
|
result.setResourceType(resourceType);
|
result.setResourceId(resourceId);
|
return result;
|
}
|
|
private DmsResourcePath document(UUID documentId) {
|
DmsResourcePath path = new DmsResourcePath();
|
path.setActualResourceType("DOCUMENT");
|
path.setActualResourceId(documentId);
|
path.setDocumentId(documentId);
|
return path;
|
}
|
|
private DmsResourcePath version(UUID documentId, UUID versionId) {
|
DmsResourcePath path = new DmsResourcePath();
|
path.setActualResourceType("FILE_VERSION");
|
path.setActualResourceId(versionId);
|
path.setDocumentId(documentId);
|
return path;
|
}
|
}
|