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; } }