From 24d84ebc1fe1e03a1b13b59bcf1b28cd74748df1 Mon Sep 17 00:00:00 2001 From: krwong Date: Tue, 18 Aug 2026 15:23:10 -0400 Subject: [PATCH 1/4] add on_campus patron permission --- .../migration/cdm/model/PermissionsInfo.java | 19 +- .../cdm/options/PermissionMappingOptions.java | 15 +- .../cdm/services/PermissionsService.java | 24 +- .../cdm/validators/PermissionsValidator.java | 16 +- .../migration/cdm/PermissionsCommandIT.java | 231 ++++++++++----- .../cdm/services/PermissionsServiceTest.java | 277 ++++++++++-------- .../cdm/services/SipServiceTest.java | 56 ++-- .../migration/cdm/test/SipServiceHelper.java | 19 +- .../validators/PermissionsValidatorTest.java | 41 ++- 9 files changed, 448 insertions(+), 250 deletions(-) diff --git a/src/main/java/edu/unc/lib/boxc/migration/cdm/model/PermissionsInfo.java b/src/main/java/edu/unc/lib/boxc/migration/cdm/model/PermissionsInfo.java index 7e220807..fe428482 100644 --- a/src/main/java/edu/unc/lib/boxc/migration/cdm/model/PermissionsInfo.java +++ b/src/main/java/edu/unc/lib/boxc/migration/cdm/model/PermissionsInfo.java @@ -1,11 +1,10 @@ package edu.unc.lib.boxc.migration.cdm.model; -import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.PUBLIC_PRINC; -import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.AUTHENTICATED_PRINC; - import java.util.ArrayList; import java.util.List; +import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.*; + /** * Permission mapping information for a project * @author krwong @@ -15,7 +14,7 @@ public class PermissionsInfo { public static final String ID_FIELD = "id"; public static final String OBJECT_TYPE = "object_type"; public static final String[] CSV_HEADERS = new String[] { - ID_FIELD, OBJECT_TYPE, PUBLIC_PRINC, AUTHENTICATED_PRINC }; + ID_FIELD, OBJECT_TYPE, PUBLIC_PRINC, AUTHENTICATED_PRINC, ON_CAMPUS_PRINC }; private List mappings; @@ -54,14 +53,16 @@ public static class PermissionMapping { private String id; private String everyone; private String authenticated; + private String onCampus; public PermissionMapping() { } - public PermissionMapping(String id, String everyone, String authenticated) { + public PermissionMapping(String id, String everyone, String authenticated, String onCampus) { this.id = id; this.everyone = everyone; this.authenticated = authenticated; + this.onCampus = onCampus; } public String getId() { @@ -87,5 +88,13 @@ public String getAuthenticated() { public void setAuthenticated(String authenticated) { this.authenticated = authenticated; } + + public String getOnCampus() { + return onCampus; + } + + public void setOnCampus(String onCampus) { + this.onCampus = onCampus; + } } } diff --git a/src/main/java/edu/unc/lib/boxc/migration/cdm/options/PermissionMappingOptions.java b/src/main/java/edu/unc/lib/boxc/migration/cdm/options/PermissionMappingOptions.java index 4a931265..b286fafd 100644 --- a/src/main/java/edu/unc/lib/boxc/migration/cdm/options/PermissionMappingOptions.java +++ b/src/main/java/edu/unc/lib/boxc/migration/cdm/options/PermissionMappingOptions.java @@ -38,12 +38,17 @@ public class PermissionMappingOptions { description = "The patron access role assigned to the “authenticated” group (anyone that is logged in).") private UserRole authenticated; + @Option(names = {"-oc", "--on-campus"}, + description = "The patron access role assigned to the “on campus” group.") + private UserRole onCampus; + @Option(names = {"-f", "--force"}, description = "Overwrite permission mapping if one already exists") private boolean force; @Option(names = {"-so", "--staff-only"}, - description = "Staff only permissions, 'everyone' field and 'authenticated' field set to 'none'") + description = "Staff only permissions, 'everyone' field, 'authenticated' field, and " + + "'on_campus' field set to 'none'") private boolean staffOnly; public boolean isWithDefault() { @@ -102,6 +107,14 @@ public void setAuthenticated(UserRole authenticated) { this.authenticated = authenticated; } + public UserRole getOnCampus() { + return onCampus; + } + + public void setOnCampus(UserRole onCampus) { + this.onCampus = onCampus; + } + public boolean isForce() { return force; } diff --git a/src/main/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsService.java b/src/main/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsService.java index 4e9d78aa..4c765ac8 100644 --- a/src/main/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsService.java +++ b/src/main/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsService.java @@ -69,15 +69,19 @@ public void generatePermissions(PermissionMappingOptions options) throws Excepti String everyoneField; String authenticatedField; + String onCampusField; // Permissions - if (options.isStaffOnly() || options.getEveryone() != null || options.getAuthenticated() != null) { + if (options.isStaffOnly() || options.getEveryone() != null || options.getAuthenticated() != null + || options.getOnCampus() != null) { everyoneField = getAssignedRoleValue(options.isStaffOnly(), options.getEveryone()); authenticatedField = getAssignedRoleValue(options.isStaffOnly(), options.getAuthenticated()); + onCampusField = getAssignedRoleValue(options.isStaffOnly(), options.getOnCampus()); } else { // if no permissions/roles are specified, default to canViewOriginals everyoneField = UserRole.canViewOriginals.getPredicate(); authenticatedField = UserRole.canViewOriginals.getPredicate(); + onCampusField = UserRole.canViewOriginals.getPredicate(); } try ( @@ -89,7 +93,8 @@ public void generatePermissions(PermissionMappingOptions options) throws Excepti csvPrinter.printRecord(PermissionsInfo.DEFAULT_ID, "", everyoneField, - authenticatedField); + authenticatedField, + onCampusField); } List> mappedIdsAndObjectType = queryForMappedIds(options); @@ -97,7 +102,8 @@ public void generatePermissions(PermissionMappingOptions options) throws Excepti csvPrinter.printRecord(entry.getKey(), entry.getValue(), everyoneField, - authenticatedField); + authenticatedField, + onCampusField); } } @@ -126,7 +132,7 @@ public void setPermissions(PermissionMappingOptions options) throws Exception { CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader(PermissionsInfo.CSV_HEADERS)); ) { for (List record : records) { - csvPrinter.printRecord(record.get(0), record.get(1), record.get(2), record.get(3)); + csvPrinter.printRecord(record.get(0), record.get(1), record.get(2), record.get(3), record.get(4)); } } } @@ -152,6 +158,7 @@ public static PermissionsInfo loadMappings(MigrationProject project) throws IOEx mapping.setId(csvRecord.get(0)); mapping.setEveryone(csvRecord.get(2)); mapping.setAuthenticated(csvRecord.get(3)); + mapping.setOnCampus(csvRecord.get(4)); mappings.add(mapping); } return info; @@ -347,6 +354,7 @@ private List> updateCsvRecords(PermissionMappingOptions options) th Set addedAndUpdatedIds = new HashSet<>(); String everyoneField = getAssignedRoleValue(options.isStaffOnly(), options.getEveryone()); String authenticatedField = getAssignedRoleValue(options.isStaffOnly(), options.getAuthenticated()); + String onCampusField = getAssignedRoleValue(options.isStaffOnly(), options.getOnCampus()); // addedAndUpdatedIds: list of all ids that need to be added and updated if (options.getCdmId() != null) { @@ -370,10 +378,12 @@ private List> updateCsvRecords(PermissionMappingOptions options) th // update existing entries and add unchanged entries to updatedRecords, then remove updated ids from updateIds for (CSVRecord record : previousRecords) { if (addedAndUpdatedIds.contains(record.get(0))) { - updatedRecords.add(Arrays.asList(record.get(0), record.get(1), everyoneField, authenticatedField)); + updatedRecords.add(Arrays.asList(record.get(0), record.get(1), everyoneField, authenticatedField, + onCampusField)); addedAndUpdatedIds.remove(record.get(0)); } else { - updatedRecords.add(Arrays.asList(record.get(0), record.get(1), record.get(2), record.get(3))); + updatedRecords.add(Arrays.asList(record.get(0), record.get(1), record.get(2), record.get(3), + record.get(4))); addedAndUpdatedIds.remove(record.get(0)); } } @@ -382,7 +392,7 @@ private List> updateCsvRecords(PermissionMappingOptions options) th for (Map.Entry workAndFileRecord : workAndFileRecords) { if (addedAndUpdatedIds.contains(workAndFileRecord.getKey())) { updatedRecords.add(Arrays.asList(workAndFileRecord.getKey(), workAndFileRecord.getValue(), - everyoneField, authenticatedField)); + everyoneField, authenticatedField, onCampusField)); } } diff --git a/src/main/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidator.java b/src/main/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidator.java index 3ac560c2..35d547a7 100644 --- a/src/main/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidator.java +++ b/src/main/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidator.java @@ -42,14 +42,15 @@ public List validateMappings() { ) { int i = 2; for (CSVRecord csvRecord : csvParser) { - if (csvRecord.size() != 4) { - errors.add("Invalid entry at line " + i + ", must be 4 columns but were " + csvRecord.size()); + if (csvRecord.size() != 5) { + errors.add("Invalid entry at line " + i + ", must be 5 columns but were " + csvRecord.size()); i++; continue; } String id = csvRecord.get(0); String everyone = csvRecord.get(2); String authenticated = csvRecord.get(3); + String onCampus = csvRecord.get(4); // default values if (PermissionsInfo.DEFAULT_ID.equals(id)) { @@ -87,6 +88,17 @@ public List validateMappings() { errors.add("No 'authenticated' permission mapped at line " + i); } + // on_campus + if (!StringUtils.isBlank(onCampus)) { + List patronRoles = getPatronRoles(); + if (!patronRoles.contains(onCampus)) { + errors.add("Invalid 'on_campus' permission at line " + i + ", " + onCampus + + " is not a valid patron permission"); + } + } else { + errors.add("No 'on_campus' permission mapped at line " + i); + } + i++; } if (i == 2) { diff --git a/src/test/java/edu/unc/lib/boxc/migration/cdm/PermissionsCommandIT.java b/src/test/java/edu/unc/lib/boxc/migration/cdm/PermissionsCommandIT.java index 9e0b78e6..f8d34c1a 100644 --- a/src/test/java/edu/unc/lib/boxc/migration/cdm/PermissionsCommandIT.java +++ b/src/test/java/edu/unc/lib/boxc/migration/cdm/PermissionsCommandIT.java @@ -40,9 +40,11 @@ public void generateDefaultPermissions() throws Exception { "permissions", "generate", "-wd", "--everyone", "canViewMetadata", - "--authenticated", "canViewMetadata"}; + "--authenticated", "canViewMetadata", + "--on-campus", "canViewMetadata"}; executeExpectSuccess(args); - assertMapping(0, "default", "canViewMetadata", "canViewMetadata"); + assertMapping(0, "default", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); } @Test @@ -52,7 +54,8 @@ public void generateDefaultPermissionsUnspecified() throws Exception { "permissions", "generate", "-wd"}; executeExpectSuccess(args); - assertMapping(0, "default", "canViewOriginals", "canViewOriginals"); + assertMapping(0, "default", "canViewOriginals", "canViewOriginals", + "canViewOriginals"); } @Test @@ -63,7 +66,7 @@ public void generateDefaultPermissionsStaffOnly() throws Exception { "-wd", "-so"}; executeExpectSuccess(args); - assertMapping(0, "default", "none", "none"); + assertMapping(0, "default", "none", "none", "none"); } @Test @@ -73,7 +76,8 @@ public void generateDefaultPermissionsInvalid() throws Exception { "permissions", "generate", "-wd", "--everyone", "canViewMetadata", - "--authenticated", "canManage"}; + "--authenticated", "canManage", + "--on-campus", "canViewMetadata"}; executeExpectFailure(args); assertOutputContains("Assigned role value is invalid. Must be one of the following patron roles: " + "[none, canDiscover, canViewMetadata, canViewAccessCopies, canViewReducedQuality, canViewOriginals]"); @@ -82,14 +86,15 @@ public void generateDefaultPermissionsInvalid() throws Exception { @Test public void generateDefaultPermissionsWithoutForceFlag() throws Exception { FileUtils.write(project.getPermissionsPath().toFile(), - "default,,canViewMetadata,canViewMetadata", StandardCharsets.UTF_8, true); + "default,,canViewMetadata,canViewMetadata,canViewMetadata", StandardCharsets.UTF_8, true); String[] args = new String[] { "-w", project.getProjectPath().toString(), "permissions", "generate", "-wd", "--everyone", "canViewMetadata", - "--authenticated", "canViewMetadata"}; + "--authenticated", "canViewMetadata", + "--on-campus", "canViewMetadata"}; executeExpectFailure(args); assertOutputContains("Cannot create permissions, a file already exists. " + "Use the force flag to overwrite."); @@ -98,7 +103,7 @@ public void generateDefaultPermissionsWithoutForceFlag() throws Exception { @Test public void generateDefaultPermissionsWithForceFlag() throws Exception { FileUtils.write(project.getPermissionsPath().toFile(), - "default,,canViewMetadata,canViewMetadata", StandardCharsets.UTF_8, true); + "default,,canViewMetadata,canViewMetadata,canViewMetadata", StandardCharsets.UTF_8, true); String[] args = new String[] { "-w", project.getProjectPath().toString(), @@ -106,9 +111,11 @@ public void generateDefaultPermissionsWithForceFlag() throws Exception { "-wd", "--everyone", "canViewOriginals", "--authenticated", "canViewOriginals", + "--on-campus", "canViewOriginals", "--force"}; executeExpectSuccess(args); - assertMapping(0, "default", "canViewOriginals", "canViewOriginals"); + assertMapping(0, "default", "canViewOriginals", "canViewOriginals", + "canViewOriginals"); } @Test @@ -119,11 +126,15 @@ public void generateWorkPermissions() throws Exception { "permissions", "generate", "-ww", "--everyone", "canViewOriginals", - "--authenticated", "canViewOriginals"}; + "--authenticated", "canViewOriginals", + "--on-campus", "canViewOriginals"}; executeExpectSuccess(args); - assertMapping(0, "25", "canViewOriginals", "canViewOriginals"); - assertMapping(1, "26", "canViewOriginals", "canViewOriginals"); - assertMapping(2, "27", "canViewOriginals", "canViewOriginals"); + assertMapping(0, "25", "canViewOriginals", "canViewOriginals", + "canViewOriginals"); + assertMapping(1, "26", "canViewOriginals", "canViewOriginals", + "canViewOriginals"); + assertMapping(2, "27", "canViewOriginals", "canViewOriginals", + "canViewOriginals"); } @Test @@ -135,12 +146,17 @@ public void generateWorkPermissionsWithDefault() throws Exception { "-wd", "-ww", "--everyone", "canViewMetadata", - "--authenticated", "canViewMetadata"}; + "--authenticated", "canViewMetadata", + "--on-campus", "canViewMetadata"}; executeExpectSuccess(args); - assertMapping(0, "default", "canViewMetadata", "canViewMetadata"); - assertMapping(1, "25", "canViewMetadata", "canViewMetadata"); - assertMapping(2, "26", "canViewMetadata", "canViewMetadata"); - assertMapping(3, "27", "canViewMetadata", "canViewMetadata"); + assertMapping(0, "default", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(1, "25", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(2, "26", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(3, "27", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); } @Test @@ -152,15 +168,17 @@ public void generateFilePermissionsWithDefault() throws Exception { "-wd", "-wf", "-e", "canViewMetadata", - "-a", "canViewMetadata"}; + "-a", "canViewMetadata", + "-oc", "canViewMetadata"}; executeExpectSuccess(args); - assertMapping(0, "default", "canViewMetadata", "canViewMetadata"); + assertMapping(0, "default", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); } @Test public void generateWorkAndFilePermissionsWithForce() throws Exception { FileUtils.write(project.getPermissionsPath().toFile(), - "default,,canViewOriginals,canViewOriginals", StandardCharsets.UTF_8, true); + "default,,canViewOriginals,canViewOriginals,canViewOriginals", StandardCharsets.UTF_8, true); testHelper.indexExportData("mini_gilmer"); String[] args = new String[] { @@ -170,11 +188,15 @@ public void generateWorkAndFilePermissionsWithForce() throws Exception { "-wf", "-e", "canViewMetadata", "-a", "canViewMetadata", + "-oc", "canViewMetadata", "-f"}; executeExpectSuccess(args); - assertMapping(0, "25", "canViewMetadata", "canViewMetadata"); - assertMapping(1, "26", "canViewMetadata", "canViewMetadata"); - assertMapping(2, "27", "canViewMetadata", "canViewMetadata"); + assertMapping(0, "25", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(1, "26", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(2, "27", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); } @Test @@ -187,18 +209,23 @@ public void generateWorkAndFilePermissionsWithDefault() throws Exception { "-ww", "-wf", "--everyone", "canViewMetadata", - "--authenticated", "canViewMetadata"}; + "--authenticated", "canViewMetadata", + "--on-campus", "canViewMetadata"}; executeExpectSuccess(args); - assertMapping(0, "default", "canViewMetadata", "canViewMetadata"); - assertMapping(1, "25", "canViewMetadata", "canViewMetadata"); - assertMapping(2, "26", "canViewMetadata", "canViewMetadata"); - assertMapping(3, "27", "canViewMetadata", "canViewMetadata"); + assertMapping(0, "default", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(1, "25", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(2, "26", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(3, "27", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); } @Test public void setPermissionExistingEntry() throws Exception { FileUtils.write(project.getPermissionsPath().toFile(), - "25,,canViewOriginals,canViewOriginals", StandardCharsets.UTF_8, true); + "25,,canViewOriginals,canViewOriginals,canViewOriginals", StandardCharsets.UTF_8, true); testHelper.indexExportData("mini_gilmer"); String[] args = new String[] { @@ -206,9 +233,11 @@ public void setPermissionExistingEntry() throws Exception { "permissions", "set", "-id", "25", "-e", "canViewMetadata", - "-a", "canViewMetadata"}; + "-a", "canViewMetadata", + "-oc", "canViewMetadata"}; executeExpectSuccess(args); - assertMapping(0, "25", "canViewMetadata", "canViewMetadata"); + assertMapping(0, "25", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); } @Test @@ -218,7 +247,8 @@ public void setPermissionNewEntry() throws Exception { "permissions", "generate", "-wd", "--everyone", "canViewOriginals", - "--authenticated", "canViewOriginals"}; + "--authenticated", "canViewOriginals", + "--on-campus", "canViewOriginals"}; executeExpectSuccess(args); testHelper.indexExportData("mini_gilmer"); @@ -227,10 +257,13 @@ public void setPermissionNewEntry() throws Exception { "permissions", "set", "-id", "26", "-e", "canViewMetadata", - "-a", "canViewMetadata"}; + "-a", "canViewMetadata", + "-oc", "canViewMetadata"}; executeExpectSuccess(args2); - assertMapping(0, "default", "canViewOriginals", "canViewOriginals"); - assertMapping(1, "26", "canViewMetadata", "canViewMetadata"); + assertMapping(0, "default", "canViewOriginals", "canViewOriginals", + "canViewOriginals"); + assertMapping(1, "26", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); } @Test @@ -240,7 +273,8 @@ public void setPermissionNewGroupedWorkEntry() throws Exception { "permissions", "generate", "-wd", "--everyone", "canViewOriginals", - "--authenticated", "canViewOriginals"}; + "--authenticated", "canViewOriginals", + "--on-campus", "canViewOriginals"}; executeExpectSuccess(args); testHelper.indexExportData("grouped_gilmer"); @@ -250,17 +284,20 @@ public void setPermissionNewGroupedWorkEntry() throws Exception { "permissions", "set", "-id", "grp:groupa:group1", "-e", "canViewMetadata", - "-a", "canViewMetadata"}; + "-a", "canViewMetadata", + "-oc", "canViewMetadata"}; executeExpectSuccess(args2); - assertMapping(0, "default", "canViewOriginals", "canViewOriginals"); - assertMapping(1, "grp:groupa:group1", "canViewMetadata", "canViewMetadata"); + assertMapping(0, "default", "canViewOriginals", "canViewOriginals", + "canViewOriginals"); + assertMapping(1, "grp:groupa:group1", "canViewMetadata", + "canViewMetadata", "canViewMetadata"); assertMappingCount(2); } @Test public void setPermissionsWithWorks() throws Exception { FileUtils.write(project.getPermissionsPath().toFile(), - "25,,canViewOriginals,canViewOriginals", StandardCharsets.UTF_8, true); + "25,,canViewOriginals,canViewOriginals,canViewOriginals", StandardCharsets.UTF_8, true); testHelper.indexExportData("mini_gilmer"); String[] args = new String[] { @@ -268,11 +305,15 @@ public void setPermissionsWithWorks() throws Exception { "permissions", "set", "-ww", "-e", "canViewMetadata", - "-a", "canViewMetadata"}; + "-a", "canViewMetadata", + "-oc", "canViewMetadata"}; executeExpectSuccess(args); - assertMapping(0, "25", "canViewMetadata", "canViewMetadata"); - assertMapping(1, "26", "canViewMetadata", "canViewMetadata"); - assertMapping(2, "27", "canViewMetadata", "canViewMetadata"); + assertMapping(0, "25", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(1, "26", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(2, "27", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); } @Test @@ -282,7 +323,8 @@ public void setPermissionsWithFiles() throws Exception { "permissions", "generate", "-wd", "--everyone", "canViewOriginals", - "--authenticated", "canViewOriginals"}; + "--authenticated", "canViewOriginals", + "--on-campus", "canViewOriginals"}; executeExpectSuccess(args); testHelper.indexExportData("grouped_gilmer"); @@ -292,17 +334,21 @@ public void setPermissionsWithFiles() throws Exception { "permissions", "set", "-wf", "-e", "canViewMetadata", - "-a", "canViewMetadata"}; + "-a", "canViewMetadata", + "-oc", "canViewMetadata"}; executeExpectSuccess(args2); - assertMapping(0, "default", "canViewOriginals", "canViewOriginals"); - assertMapping(1, "25", "canViewMetadata", "canViewMetadata"); - assertMapping(2, "26", "canViewMetadata", "canViewMetadata"); + assertMapping(0, "default", "canViewOriginals", "canViewOriginals", + "canViewOriginals"); + assertMapping(1, "25", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(2, "26", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); } @Test public void setPermissionsWithWorksAndFiles() throws Exception { FileUtils.write(project.getPermissionsPath().toFile(), - "603,file,canViewOriginals,canViewOriginals", StandardCharsets.UTF_8, true); + "603,file,canViewOriginals,canViewOriginals,canViewOriginals", StandardCharsets.UTF_8, true); testHelper.indexExportData("mini_keepsakes"); String[] args = new String[] { @@ -311,15 +357,23 @@ public void setPermissionsWithWorksAndFiles() throws Exception { "-ww", "-wf", "-e", "canViewMetadata", - "-a", "canViewMetadata"}; + "-a", "canViewMetadata", + "-oc", "canViewMetadata"}; executeExpectSuccess(args); - assertMapping(0, "216", "canViewMetadata", "canViewMetadata"); - assertMapping(1, "602", "canViewMetadata", "canViewMetadata"); - assertMapping(2, "603", "canViewMetadata", "canViewMetadata"); - assertMapping(3, "604", "canViewMetadata", "canViewMetadata"); - assertMapping(4, "605", "canViewMetadata", "canViewMetadata"); - assertMapping(5, "606", "canViewMetadata", "canViewMetadata"); - assertMapping(6, "607", "canViewMetadata", "canViewMetadata"); + assertMapping(0, "216", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(1, "602", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(2, "603", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(3, "604", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(4, "605", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(5, "606", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(6, "607", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); } @Test @@ -331,7 +385,8 @@ public void setPermissionsFilenameMatchingNewEntry() throws Exception { "permissions", "generate", "-wd", "--everyone", "canViewOriginals", - "--authenticated", "canViewOriginals"}; + "--authenticated", "canViewOriginals", + "--on-campus", "canViewOriginals"}; executeExpectSuccess(args); String[] args2 = new String[] { @@ -339,12 +394,17 @@ public void setPermissionsFilenameMatchingNewEntry() throws Exception { "permissions", "set", "-fp", "*.tif", "-e", "canViewMetadata", - "-a", "canViewMetadata"}; + "-a", "canViewMetadata", + "-oc", "canViewMetadata"}; executeExpectSuccess(args2); - assertMapping(0, "default", "canViewOriginals", "canViewOriginals"); - assertMapping(1, "25", "canViewMetadata", "canViewMetadata"); - assertMapping(2, "26", "canViewMetadata", "canViewMetadata"); - assertMapping(3, "27", "canViewMetadata", "canViewMetadata"); + assertMapping(0, "default", "canViewOriginals", "canViewOriginals", + "canViewOriginals"); + assertMapping(1, "25", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(2, "26", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(3, "27", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); } @Test @@ -359,11 +419,15 @@ public void setPermissionsFilenameMatchingExistingEntry() throws Exception { "permissions", "set", "-fp", "*.tif", "-e", "canViewMetadata", - "-a", "canViewMetadata"}; + "-a", "canViewMetadata", + "-oc", "canViewMetadata"}; executeExpectSuccess(args); - assertMapping(0, "25", "canViewMetadata", "canViewMetadata"); - assertMapping(1, "26", "canViewMetadata", "canViewMetadata"); - assertMapping(2, "27", "canViewMetadata", "canViewMetadata"); + assertMapping(0, "25", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(1, "26", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); + assertMapping(2, "27", "canViewMetadata", "canViewMetadata", + "canViewMetadata"); } @Test @@ -377,6 +441,7 @@ public void setPermissionsFilenameMatchingNoMatches() throws Exception { "-wd", "--everyone", "canViewOriginals", "--authenticated", "canViewOriginals", + "--on-campus", "canViewOriginals", "--force"}; executeExpectSuccess(args1); @@ -385,9 +450,11 @@ public void setPermissionsFilenameMatchingNoMatches() throws Exception { "permissions", "set", "-fp", "*.png", "-e", "canViewMetadata", - "-a", "canViewMetadata"}; + "-a", "canViewMetadata", + "-oc", "canViewMetadata"}; executeExpectSuccess(args2); - assertMapping(0, "default", "canViewOriginals", "canViewOriginals"); + assertMapping(0, "default", "canViewOriginals", "canViewOriginals", + "canViewOriginals"); assertMappingCount(1); } @@ -396,14 +463,15 @@ public void setPermissionFilenameMatchingNoPattern() throws Exception { testHelper.indexExportData("mini_gilmer"); testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); FileUtils.write(project.getPermissionsPath().toFile(), - "25,,canViewOriginals,canViewOriginals", StandardCharsets.UTF_8, true); + "25,,canViewOriginals,canViewOriginals,canViewOriginals", StandardCharsets.UTF_8, true); String[] args = new String[] { "-w", project.getProjectPath().toString(), "permissions", "set", "-fp", "", "-e", "canViewMetadata", - "-a", "canViewMetadata"}; + "-a", "canViewMetadata", + "-oc", "canViewMetadata"}; executeExpectFailure(args); assertOutputContains("Must provide filename pattern"); @@ -417,7 +485,8 @@ public void validateValidDefaultPermissions() throws Exception { "permissions", "generate", "-wd", "--everyone", "canViewMetadata", - "--authenticated", "canViewMetadata"}; + "--authenticated", "canViewMetadata", + "--on-campus", "canViewMetadata"}; executeExpectSuccess(args); String[] args2 = new String[] { @@ -435,12 +504,13 @@ public void validateInvalidDefaultPermissions() throws Exception { "permissions", "generate", "-wd", "--everyone", "canViewMetadata", - "--authenticated", "canViewMetadata"}; + "--authenticated", "canViewMetadata", + "--on-campus", "canViewMetadata"}; executeExpectSuccess(args); // Add a duplicate default permissions mapping FileUtils.write(project.getPermissionsPath().toFile(), - "default,,none,none", StandardCharsets.UTF_8, true); + "default,,none,none,none", StandardCharsets.UTF_8, true); String[] args2 = new String[] { "-w", project.getProjectPath().toString(), @@ -456,7 +526,7 @@ public void validateInvalidDefaultPermissions() throws Exception { @Test public void validateValidSetPermissions() throws Exception { FileUtils.write(project.getPermissionsPath().toFile(), - "25,work,canViewOriginals,canViewOriginals", StandardCharsets.UTF_8, true); + "25,work,canViewOriginals,canViewOriginals,canViewOriginals", StandardCharsets.UTF_8, true); testHelper.indexExportData("mini_gilmer"); String[] args = new String[] { @@ -464,7 +534,8 @@ public void validateValidSetPermissions() throws Exception { "permissions", "set", "-id", "25", "--everyone", "canViewMetadata", - "--authenticated", "canViewMetadata"}; + "--authenticated", "canViewMetadata", + "--on-campus", "canViewMetadata"}; executeExpectSuccess(args); String[] args2 = new String[] { @@ -475,13 +546,15 @@ public void validateValidSetPermissions() throws Exception { assertOutputContains("PASS: Permissions mapping at path " + project.getPermissionsPath() + " is valid"); } - private void assertMapping(int index, String id, String expectedEveryone, String expectedAuthenticated) + private void assertMapping(int index, String id, String expectedEveryone, String expectedAuthenticated, + String expectedOnCampus) throws IOException { var mappings = getMappings(); PermissionsInfo.PermissionMapping mapping = mappings.get(index); assertEquals(id, mapping.getId()); assertEquals(expectedEveryone, mapping.getEveryone()); assertEquals(expectedAuthenticated, mapping.getAuthenticated()); + assertEquals(expectedOnCampus, mapping.getOnCampus()); } private List getMappings() throws IOException { diff --git a/src/test/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsServiceTest.java b/src/test/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsServiceTest.java index 66a3de77..cc0b1cbf 100644 --- a/src/test/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsServiceTest.java +++ b/src/test/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsServiceTest.java @@ -31,6 +31,7 @@ import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.AUTHENTICATED_PRINC; import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.PUBLIC_PRINC; +import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.ON_CAMPUS_PRINC; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertIterableEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -79,7 +80,7 @@ public void generateNoDefaultPermissionsTest() throws Exception { ) { List rows = csvParser.getRecords(); assertIterableEquals(Arrays.asList(PermissionsInfo.ID_FIELD, PermissionsInfo.OBJECT_TYPE, - PUBLIC_PRINC, AUTHENTICATED_PRINC), rows.get(0)); + PUBLIC_PRINC, AUTHENTICATED_PRINC, ON_CAMPUS_PRINC), rows.get(0)); } } @@ -90,12 +91,14 @@ public void generateDefaultPermissionsTest() throws Exception { options.setWithDefault(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.generatePermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), + rows.get(0)); } @Test @@ -108,7 +111,8 @@ public void generateDefaultPermissionsUnspecifiedTest() throws Exception { assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewOriginals", "canViewOriginals"), rows.get(0)); + assertIterableEquals(Arrays.asList("default", "", "canViewOriginals", "canViewOriginals", "canViewOriginals"), + rows.get(0)); } @Test @@ -122,7 +126,7 @@ public void generateDefaultPermissionsStaffOnlyTest() throws Exception { assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "none", "none"), rows.get(0)); + assertIterableEquals(Arrays.asList("default", "", "none", "none", "none"), rows.get(0)); } @Test @@ -131,6 +135,7 @@ public void generateDefaultPermissionsInvalidTest() throws Exception { options.setWithDefault(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canManage); + options.setOnCampus(UserRole.canViewMetadata); Exception exception = assertThrows(IllegalArgumentException.class, () -> { service.generatePermissions(options); @@ -150,6 +155,7 @@ public void generateDefaultPermissionsWithoutForceFlagTest() throws Exception { options.setWithDefault(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); Exception exception = assertThrows(StateAlreadyExistsException.class, () -> { service.generatePermissions(options); @@ -163,19 +169,21 @@ public void generateDefaultPermissionsWithoutForceFlagTest() throws Exception { @Test public void generateDefaultPermissionsWithForceFlagTest() throws Exception { Path permissionsMappingPath = project.getPermissionsPath(); - writeCsv(mappingBody("default,,none,none")); + writeCsv(mappingBody("default,,none,none,none")); var options = new PermissionMappingOptions(); options.setWithDefault(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); options.setForce(true); service.generatePermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), + rows.get(0)); } @Test @@ -187,15 +195,16 @@ public void generateWorkPermissionsWithDefaultTest() throws Exception { options.setWithDefault(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.generatePermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata"), rows.get(2)); - assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata"), rows.get(3)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(3)); } @Test @@ -207,14 +216,15 @@ public void generateWorkPermissionsGroupedWorksTest() throws Exception { options.setWithWorks(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.generatePermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("28", "work", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("29", "work", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("28", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("29", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); } @Test @@ -226,13 +236,14 @@ public void generateFilePermissionsGroupedWorksTest() throws Exception { options.setWithFiles(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.generatePermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("25", "file", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("26", "file", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("25", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("26", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); } @Test @@ -243,15 +254,16 @@ public void generateFilePermissionsCompoundObjectsTest() throws Exception { options.setWithFiles(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.generatePermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("602", "file", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("603", "file", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("605", "file", "canViewMetadata", "canViewMetadata"), rows.get(2)); - assertIterableEquals(Arrays.asList("606", "file", "canViewMetadata", "canViewMetadata"), rows.get(3)); + assertIterableEquals(Arrays.asList("602", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("603", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("605", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("606", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(3)); } @Test @@ -263,12 +275,13 @@ public void generateFilePermissionsWithDefaultTest() throws Exception { options.setWithFiles(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.generatePermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); } @Test @@ -281,15 +294,16 @@ public void generateWorkAndFilePermissionsWithDefaultTest() throws Exception { options.setWithWorks(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.generatePermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata"), rows.get(2)); - assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata"), rows.get(3)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(3)); } @Test @@ -305,15 +319,16 @@ public void generateWorkAndFilePermissionsWithDefaultAndForceTest() throws Excep options.setWithWorks(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.generatePermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata"), rows.get(2)); - assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata"), rows.get(3)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(3)); } @Test @@ -325,64 +340,71 @@ public void generateWorkAndFilePermissionsCompoundObjectsTest() throws Exception options.setWithFiles(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.generatePermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("216", "work", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("602", "file", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("603", "file", "canViewMetadata", "canViewMetadata"), rows.get(2)); - assertIterableEquals(Arrays.asList("604", "work", "canViewMetadata", "canViewMetadata"), rows.get(3)); - assertIterableEquals(Arrays.asList("605", "file", "canViewMetadata", "canViewMetadata"), rows.get(4)); - assertIterableEquals(Arrays.asList("606", "file", "canViewMetadata", "canViewMetadata"), rows.get(5)); - assertIterableEquals(Arrays.asList("607", "work", "canViewMetadata", "canViewMetadata"), rows.get(6)); + assertIterableEquals(Arrays.asList("216", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("602", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("603", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("604", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(3)); + assertIterableEquals(Arrays.asList("605", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(4)); + assertIterableEquals(Arrays.asList("606", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(5)); + assertIterableEquals(Arrays.asList("607", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(6)); } @Test public void loadPermissionMappingsTest() throws Exception { - writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata", "testId,work,none,none")); + writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata,canViewMetadata", + "testId,work,none,none,none")); PermissionsInfo info = service.loadMappings(project); - assertMappingPresent(info, "default", "canViewMetadata", "canViewMetadata"); - assertMappingPresent(info, "testId", "none", "none"); + assertMappingPresent(info, "default", "canViewMetadata", "canViewMetadata", "canViewMetadata"); + assertMappingPresent(info, "testId", "none", "none", "none"); PermissionsInfo.PermissionMapping mapping = info.getDefaultMapping(); assertEquals("canViewMetadata", mapping.getEveryone()); assertEquals("canViewMetadata", mapping.getAuthenticated()); + assertEquals("canViewMetadata", mapping.getOnCampus()); PermissionsInfo.PermissionMapping defaultMapping = info.getMappingByCdmId("default"); assertEquals("canViewMetadata", defaultMapping.getEveryone()); assertEquals("canViewMetadata", defaultMapping.getAuthenticated()); + assertEquals("canViewMetadata", defaultMapping.getOnCampus()); PermissionsInfo.PermissionMapping testMapping = info.getMappingByCdmId("testId"); assertEquals("none", testMapping.getEveryone()); assertEquals("none", testMapping.getAuthenticated()); + assertEquals("none", testMapping.getOnCampus()); } @Test public void setPermissionExistingEntryTest() throws Exception { - writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata", "25,work,none,none", "26,work,none,none", - "27,work,none,none")); + writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata,canViewMetadata", + "25,work,none,none,none", "26,work,none,none,none", "27,work,none,none,none")); testHelper.indexExportData("mini_gilmer"); Path permissionsMappingPath = project.getPermissionsPath(); var options = new PermissionMappingOptions(); options.setCdmId("25"); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.setPermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("26", "work", "none", "none"), rows.get(2)); - assertIterableEquals(Arrays.asList("27", "work", "none", "none"), rows.get(3)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("26", "work", "none", "none", "none"), rows.get(2)); + assertIterableEquals(Arrays.asList("27", "work", "none", "none", "none"), rows.get(3)); } @Test public void setPermissionsGroupedWorkEntryTest() throws Exception { - writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata", "26,work,none,none", "27,work,none,none")); + writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata,canViewMetadata", + "26,work,none,none,none", "27,work,none,none,none")); testHelper.indexExportData("grouped_gilmer"); setupGroupedIndex(); Path permissionsMappingPath = project.getPermissionsPath(); @@ -390,45 +412,48 @@ public void setPermissionsGroupedWorkEntryTest() throws Exception { options.setCdmId("grp:groupa:group1"); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.setPermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("26", "work", "none", "none"), rows.get(1)); - assertIterableEquals(Arrays.asList("27", "work", "none", "none"), rows.get(2)); - assertIterableEquals(Arrays.asList("grp:groupa:group1", "work", "canViewMetadata", "canViewMetadata"), rows.get(3)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("26", "work", "none", "none", "none"), rows.get(1)); + assertIterableEquals(Arrays.asList("27", "work", "none", "none", "none"), rows.get(2)); + assertIterableEquals(Arrays.asList("grp:groupa:group1", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(3)); } @Test public void setPermissionNewEntryTest() throws Exception { - writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata", "25,work,none,none", "26,work,none,none")); + writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata,canViewMetadata", "25,work,none,none,none", "26,work,none,none,none")); testHelper.indexExportData("mini_gilmer"); Path permissionsMappingPath = project.getPermissionsPath(); var options = new PermissionMappingOptions(); options.setCdmId("27"); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.setPermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("25", "work", "none", "none"), rows.get(1)); - assertIterableEquals(Arrays.asList("26", "work", "none", "none"), rows.get(2)); - assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata"), rows.get(3)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("25", "work", "none", "none", "none"), rows.get(1)); + assertIterableEquals(Arrays.asList("26", "work", "none", "none", "none"), rows.get(2)); + assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(3)); } @Test public void setPermissionInvalidIdTest() throws Exception { - writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata", "25,work,none,none", "26,work,none,none")); + writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata,canViewMetadata", "25,work,none,none,none", "26,work,none,none,none")); testHelper.indexExportData("mini_gilmer"); var options = new PermissionMappingOptions(); options.setCdmId("28"); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); Exception exception = assertThrows(IllegalArgumentException.class, () -> { service.setPermissions(options); @@ -446,6 +471,7 @@ public void setPermissionNoCsvTest() throws Exception { options.setCdmId("27"); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); Exception exception = assertThrows(InvalidProjectStateException.class, () -> { service.setPermissions(options); @@ -458,27 +484,28 @@ public void setPermissionNoCsvTest() throws Exception { @Test public void setPermissionWithWorksDefault() throws Exception { - writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata", "26,work,none,none")); + writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata,canViewMetadata", "26,work,none,none,none")); testHelper.indexExportData("mini_gilmer"); Path permissionsMappingPath = project.getPermissionsPath(); var options = new PermissionMappingOptions(); options.setWithWorks(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.setPermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata"), rows.get(2)); - assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata"), rows.get(3)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(3)); } @Test public void setPermissionsWithFilesGroupedWork() throws Exception { - writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata")); + writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata,canViewMetadata")); testHelper.indexExportData("grouped_gilmer"); setupGroupedIndex(); Path permissionsMappingPath = project.getPermissionsPath(); @@ -486,14 +513,15 @@ public void setPermissionsWithFilesGroupedWork() throws Exception { options.setWithFiles(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.setPermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("25", "file", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("26", "file", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("25", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("26", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); } @Test @@ -505,15 +533,16 @@ public void setPermissionsWithFilesCompoundObjects() throws Exception { options.setWithFiles(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.setPermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("602", "file", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("603", "file", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("605", "file", "canViewMetadata", "canViewMetadata"), rows.get(2)); - assertIterableEquals(Arrays.asList("606", "file", "canViewMetadata", "canViewMetadata"), rows.get(3)); + assertIterableEquals(Arrays.asList("602", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("603", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("605", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("606", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(3)); } @Test @@ -526,105 +555,111 @@ public void setPermissionsWithWorksAndFiles() throws Exception { options.setWithFiles(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.setPermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("216", "work", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("602", "file", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("603", "file", "canViewMetadata", "canViewMetadata"), rows.get(2)); - assertIterableEquals(Arrays.asList("604", "work", "canViewMetadata", "canViewMetadata"), rows.get(3)); - assertIterableEquals(Arrays.asList("605", "file", "canViewMetadata", "canViewMetadata"), rows.get(4)); - assertIterableEquals(Arrays.asList("606", "file", "canViewMetadata", "canViewMetadata"), rows.get(5)); - assertIterableEquals(Arrays.asList("607", "work", "canViewMetadata", "canViewMetadata"), rows.get(6)); + assertIterableEquals(Arrays.asList("216", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("602", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("603", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("604", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(3)); + assertIterableEquals(Arrays.asList("605", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(4)); + assertIterableEquals(Arrays.asList("606", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(5)); + assertIterableEquals(Arrays.asList("607", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(6)); } @Test public void setPermissionsExistingWorksNewFiles() throws Exception { - writeCsv(mappingBody("default,,none,none", "216,work,canViewMetadata,canViewMetadata", - "604,work,canViewMetadata,canViewMetadata", "607,work,canViewMetadata,canViewMetadata")); + writeCsv(mappingBody("default,,none,none,none", "216,work,canViewMetadata,canViewMetadata,canViewMetadata", + "604,work,canViewMetadata,canViewMetadata,canViewMetadata", + "607,work,canViewMetadata,canViewMetadata,canViewMetadata")); testHelper.indexExportData("mini_keepsakes"); Path permissionsMappingPath = project.getPermissionsPath(); var options = new PermissionMappingOptions(); options.setWithFiles(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.setPermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "none", "none"), rows.get(0)); - assertIterableEquals(Arrays.asList("216", "work", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("602", "file", "canViewMetadata", "canViewMetadata"), rows.get(2)); - assertIterableEquals(Arrays.asList("603", "file", "canViewMetadata", "canViewMetadata"), rows.get(3)); - assertIterableEquals(Arrays.asList("604", "work", "canViewMetadata", "canViewMetadata"), rows.get(4)); - assertIterableEquals(Arrays.asList("605", "file", "canViewMetadata", "canViewMetadata"), rows.get(5)); - assertIterableEquals(Arrays.asList("606", "file", "canViewMetadata", "canViewMetadata"), rows.get(6)); - assertIterableEquals(Arrays.asList("607", "work", "canViewMetadata", "canViewMetadata"), rows.get(7)); + assertIterableEquals(Arrays.asList("default", "", "none", "none", "none"), rows.get(0)); + assertIterableEquals(Arrays.asList("216", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("602", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("603", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(3)); + assertIterableEquals(Arrays.asList("604", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(4)); + assertIterableEquals(Arrays.asList("605", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(5)); + assertIterableEquals(Arrays.asList("606", "file", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(6)); + assertIterableEquals(Arrays.asList("607", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(7)); } @Test public void setPermissionsFilenameMatchingExtension() throws Exception{ testHelper.indexExportData("mini_gilmer"); testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); - writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata")); + writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata,canViewMetadata")); Path permissionsMappingPath = project.getPermissionsPath(); var options = new PermissionMappingOptions(); options.setFilenamePattern("*.tif"); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.setPermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata"), rows.get(2)); - assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata"), rows.get(3)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(3)); } @Test public void setPermissionFilenameMatchingExtension() throws Exception { testHelper.indexExportData("mini_gilmer"); testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); - writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata", "26,work,none,none")); + writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata,canViewMetadata", "26,work,none,none,none")); Path permissionsMappingPath = project.getPermissionsPath(); var options = new PermissionMappingOptions(); options.setFilenamePattern("*.tif"); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.setPermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata"), rows.get(2)); - assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata"), rows.get(3)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(3)); } @Test public void setPermissionFilenameMatchingPrefix() throws Exception { testHelper.indexExportData("mini_gilmer"); testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); - writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata", "26,work,none,none")); + writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata,canViewMetadata", "26,work,none,none,none")); Path permissionsMappingPath = project.getPermissionsPath(); var options = new PermissionMappingOptions(); options.setFilenamePattern("276_1*"); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.setPermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); assertEquals(3, rows.size()); } @@ -632,19 +667,20 @@ public void setPermissionFilenameMatchingPrefix() throws Exception { public void setPermissionFilenameMatchingNoMatches() throws Exception { testHelper.indexExportData("mini_gilmer"); testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); - writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata", "26,work,none,none")); + writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata,canViewMetadata", "26,work,none,none,none")); Path permissionsMappingPath = project.getPermissionsPath(); var options = new PermissionMappingOptions(); options.setFilenamePattern("*.pdf"); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.setPermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("26", "work", "none", "none"), rows.get(1)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("26", "work", "none", "none", "none"), rows.get(1)); assertEquals(2, rows.size()); } @@ -652,20 +688,21 @@ public void setPermissionFilenameMatchingNoMatches() throws Exception { public void setPermissionFilenameMatchingWildcareInMiddleofMatcher() throws Exception { testHelper.indexExportData("mini_gilmer"); testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); - writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata", "26,work,none,none")); + writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata,canViewMetadata", "26,work,none,none,none")); Path permissionsMappingPath = project.getPermissionsPath(); var options = new PermissionMappingOptions(); options.setFilenamePattern("276_1*E.tif"); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.setPermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); assertEquals(3, rows.size()); } @@ -673,20 +710,21 @@ public void setPermissionFilenameMatchingWildcareInMiddleofMatcher() throws Exce public void setPermissionFilenameMatchingPartialMatches() throws Exception { testHelper.indexExportData("mini_gilmer"); testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); - writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata", "26,work,none,none")); + writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata,canViewMetadata", "26,work,none,none,none")); Path permissionsMappingPath = project.getPermissionsPath(); var options = new PermissionMappingOptions(); options.setFilenamePattern("*182_E*"); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.setPermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("26", "work", "none", "none"), rows.get(2)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("25", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("26", "work", "none", "none", "none"), rows.get(2)); assertEquals(3, rows.size()); } @@ -694,20 +732,21 @@ public void setPermissionFilenameMatchingPartialMatches() throws Exception { public void setPermissionFilenameMatchingQuestionMarkInMatcher() throws Exception { testHelper.indexExportData("mini_gilmer"); testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); - writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata", "26,work,none,none")); + writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata,canViewMetadata", "26,work,none,none,none")); Path permissionsMappingPath = project.getPermissionsPath(); var options = new PermissionMappingOptions(); options.setFilenamePattern("276_??3_E.tif"); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); service.setPermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata"), rows.get(0)); - assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata"), rows.get(1)); - assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata"), rows.get(2)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(0)); + assertIterableEquals(Arrays.asList("26", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(1)); + assertIterableEquals(Arrays.asList("27", "work", "canViewMetadata", "canViewMetadata", "canViewMetadata"), rows.get(2)); assertEquals(3, rows.size()); } @@ -715,11 +754,12 @@ public void setPermissionFilenameMatchingQuestionMarkInMatcher() throws Exceptio public void setPermissionFilenameMatchingNoPattern() throws Exception { testHelper.indexExportData("mini_gilmer"); testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); - writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata", "26,work,none,none")); + writeCsv(mappingBody("default,,canViewMetadata,canViewMetadata,canViewMetadata", "26,work,none,none,none")); var options = new PermissionMappingOptions(); options.setFilenamePattern(""); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); + options.setOnCampus(UserRole.canViewMetadata); Exception exception = assertThrows(IllegalArgumentException.class, () -> { service.setPermissions(options); @@ -755,12 +795,15 @@ private List listCsvRecords(Path permissionsMappingPath) throws Excep return rows; } - private void assertMappingPresent(PermissionsInfo info, String cdmid, String everyoneValue, String authenticatedValue) { + private void assertMappingPresent(PermissionsInfo info, String cdmid, String everyoneValue, + String authenticatedValue, String onCampusValue) { List mappings = info.getMappings(); - PermissionsInfo.PermissionMapping mapping = mappings.stream().filter(m -> m.getId().equals(cdmid)).findFirst().get(); + PermissionsInfo.PermissionMapping mapping = mappings.stream().filter( + m -> m.getId().equals(cdmid)).findFirst().get(); assertEquals(everyoneValue, mapping.getEveryone()); assertEquals(authenticatedValue, mapping.getAuthenticated()); + assertEquals(onCampusValue, mapping.getOnCampus()); } private void setupGroupedIndex() throws Exception { diff --git a/src/test/java/edu/unc/lib/boxc/migration/cdm/services/SipServiceTest.java b/src/test/java/edu/unc/lib/boxc/migration/cdm/services/SipServiceTest.java index 4ac1b18f..3920b64d 100644 --- a/src/test/java/edu/unc/lib/boxc/migration/cdm/services/SipServiceTest.java +++ b/src/test/java/edu/unc/lib/boxc/migration/cdm/services/SipServiceTest.java @@ -1088,8 +1088,10 @@ public void generateSipsWithDefaultPermissions() throws Exception { testHelper.indexExportData("mini_gilmer"); testHelper.generateDefaultDestinationsMapping(DEST_UUID, null); testHelper.populateDescriptions("gilmer_mods1.xml"); - testHelper.generateDefaultPermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata); - List stagingLocs = testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); + testHelper.generateDefaultPermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata, + UserRole.canViewMetadata); + List stagingLocs = + testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); List sips = service.generateSips(makeOptions()); assertEquals(1, sips.size()); @@ -1130,8 +1132,10 @@ public void generateSipsWithFilePermissions() throws Exception { testHelper.indexExportData("mini_gilmer"); testHelper.generateDefaultDestinationsMapping(DEST_UUID, null); testHelper.populateDescriptions("gilmer_mods1.xml"); - testHelper.generateFilePermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata); - List stagingLocs = testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); + testHelper.generateFilePermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata, + UserRole.canViewMetadata); + List stagingLocs = + testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); List sips = service.generateSips(makeOptions()); assertEquals(1, sips.size()); @@ -1172,8 +1176,10 @@ public void generateSipsWithWorkPermissions() throws Exception { testHelper.indexExportData("mini_gilmer"); testHelper.generateDefaultDestinationsMapping(DEST_UUID, null); testHelper.populateDescriptions("gilmer_mods1.xml"); - testHelper.generateWorkPermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata); - List stagingLocs = testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); + testHelper.generateWorkPermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata, + UserRole.canViewMetadata); + List stagingLocs = + testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); List sips = service.generateSips(makeOptions()); assertEquals(1, sips.size()); @@ -1213,12 +1219,13 @@ public void generateSipsWithWorkPermissions() throws Exception { public void generateSipWithCompoundObjectsPermissions() throws Exception { testHelper.indexExportData(Paths.get("src/test/resources/keepsakes_fields.csv"), "mini_keepsakes"); testHelper.generateDefaultDestinationsMapping(DEST_UUID, null); - testHelper.generateAllPermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata); + testHelper.generateAllPermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata, + UserRole.canViewMetadata); setupDescriptions(); var sourceOptions = testHelper.makeSourceFileOptions(testHelper.getSourceFilesBasePath()); sourceOptions.setExportField("filena"); - List stagingLocs = testHelper.populateSourceFiles(sourceOptions, "nccg_ck_09.tif", "nccg_ck_1042-22_v1.tif", - "nccg_ck_1042-22_v2.tif", "nccg_ck_549-4_v1.tif", "nccg_ck_549-4_v2.tif"); + List stagingLocs = testHelper.populateSourceFiles(sourceOptions, "nccg_ck_09.tif", + "nccg_ck_1042-22_v1.tif", "nccg_ck_1042-22_v2.tif", "nccg_ck_549-4_v1.tif", "nccg_ck_549-4_v2.tif"); List sips = service.generateSips(makeOptions()); assertEquals(1, sips.size()); @@ -1268,7 +1275,8 @@ public void generateSipsGroupedWorkPermissions() throws Exception { "276_241_E.tif", "276_245a_E.tif"); setupGroupIndex(); // permissions must be set after the grouping - testHelper.generateAllPermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata); + testHelper.generateAllPermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata, + UserRole.canViewMetadata); List sips = service.generateSips(makeOptions()); assertEquals(1, sips.size()); @@ -1307,12 +1315,13 @@ public void generateSipsGroupedWorkPermissions() throws Exception { public void generateSipWithCompoundObjectsFilePermissions() throws Exception { testHelper.indexExportData(Paths.get("src/test/resources/keepsakes_fields.csv"), "mini_keepsakes"); testHelper.generateDefaultDestinationsMapping(DEST_UUID, null); - testHelper.generateFilePermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata); + testHelper.generateFilePermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata, + UserRole.canViewMetadata); setupDescriptions(); var sourceOptions = testHelper.makeSourceFileOptions(testHelper.getSourceFilesBasePath()); sourceOptions.setExportField("filena"); - List stagingLocs = testHelper.populateSourceFiles(sourceOptions, "nccg_ck_09.tif", "nccg_ck_1042-22_v1.tif", - "nccg_ck_1042-22_v2.tif", "nccg_ck_549-4_v1.tif", "nccg_ck_549-4_v2.tif"); + List stagingLocs = testHelper.populateSourceFiles(sourceOptions, "nccg_ck_09.tif", + "nccg_ck_1042-22_v1.tif", "nccg_ck_1042-22_v2.tif", "nccg_ck_549-4_v1.tif", "nccg_ck_549-4_v2.tif"); List sips = service.generateSips(makeOptions()); assertEquals(1, sips.size()); @@ -1358,11 +1367,12 @@ public void generateSipsGroupedWorkFilePermissions() throws Exception { testHelper.indexExportData("grouped_gilmer"); testHelper.generateDefaultDestinationsMapping(DEST_UUID, null); testHelper.populateDescriptions("grouped_mods.xml"); - List stagingLocs = testHelper.populateSourceFiles("276_185_E.tif", "276_183_E.tif", "276_203_E.tif", - "276_241_E.tif", "276_245a_E.tif"); + List stagingLocs = testHelper.populateSourceFiles("276_185_E.tif", "276_183_E.tif", + "276_203_E.tif", "276_241_E.tif", "276_245a_E.tif"); setupGroupIndex(); // permissions must be set after the grouping - testHelper.generateFilePermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata); + testHelper.generateFilePermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata, + UserRole.canViewMetadata); List sips = service.generateSips(makeOptions()); assertEquals(1, sips.size()); @@ -1403,12 +1413,13 @@ public void generateSipsGroupedWorkFilePermissions() throws Exception { public void generateSipWithCompoundObjectsWorkPermissions() throws Exception { testHelper.indexExportData(Paths.get("src/test/resources/keepsakes_fields.csv"), "mini_keepsakes"); testHelper.generateDefaultDestinationsMapping(DEST_UUID, null); - testHelper.generateWorkPermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata); + testHelper.generateWorkPermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata, + UserRole.canViewMetadata); setupDescriptions(); var sourceOptions = testHelper.makeSourceFileOptions(testHelper.getSourceFilesBasePath()); sourceOptions.setExportField("filena"); - List stagingLocs = testHelper.populateSourceFiles(sourceOptions, "nccg_ck_09.tif", "nccg_ck_1042-22_v1.tif", - "nccg_ck_1042-22_v2.tif", "nccg_ck_549-4_v1.tif", "nccg_ck_549-4_v2.tif"); + List stagingLocs = testHelper.populateSourceFiles(sourceOptions, "nccg_ck_09.tif", + "nccg_ck_1042-22_v1.tif", "nccg_ck_1042-22_v2.tif", "nccg_ck_549-4_v1.tif", "nccg_ck_549-4_v2.tif"); List sips = service.generateSips(makeOptions()); assertEquals(1, sips.size()); @@ -1456,11 +1467,12 @@ public void generateSipsGroupedWorkWorkPermissions() throws Exception { testHelper.indexExportData("grouped_gilmer"); testHelper.generateDefaultDestinationsMapping(DEST_UUID, null); testHelper.populateDescriptions("grouped_mods.xml"); - List stagingLocs = testHelper.populateSourceFiles("276_185_E.tif", "276_183_E.tif", "276_203_E.tif", - "276_241_E.tif", "276_245a_E.tif"); + List stagingLocs = testHelper.populateSourceFiles("276_185_E.tif", "276_183_E.tif", + "276_203_E.tif", "276_241_E.tif", "276_245a_E.tif"); setupGroupIndex(); // permissions must be set after the grouping - testHelper.generateWorkPermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata); + testHelper.generateWorkPermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata, + UserRole.canViewMetadata); List sips = service.generateSips(makeOptions()); assertEquals(1, sips.size()); diff --git a/src/test/java/edu/unc/lib/boxc/migration/cdm/test/SipServiceHelper.java b/src/test/java/edu/unc/lib/boxc/migration/cdm/test/SipServiceHelper.java index f730a4f0..2770bc49 100644 --- a/src/test/java/edu/unc/lib/boxc/migration/cdm/test/SipServiceHelper.java +++ b/src/test/java/edu/unc/lib/boxc/migration/cdm/test/SipServiceHelper.java @@ -361,7 +361,8 @@ public void generateDefaultDestinationsMapping(String defDest, String defColl) t destinationsService.generateMapping(options); } - public void generateArchivalCollectionDestinationMapping(String defDest, String defColl, String fieldName) throws Exception { + public void generateArchivalCollectionDestinationMapping(String defDest, String defColl, String fieldName) + throws Exception { DestinationMappingOptions options = new DestinationMappingOptions(); options.setDefaultDestination(defDest); options.setDefaultCollection(defColl); @@ -369,36 +370,44 @@ public void generateArchivalCollectionDestinationMapping(String defDest, String archivalDestinationsService.addArchivalCollectionMappings(options); } - public void generateDefaultPermissionsMapping(UserRole everyone, UserRole authenticated) throws Exception { + public void generateDefaultPermissionsMapping(UserRole everyone, UserRole authenticated, UserRole onCampus) + throws Exception { PermissionMappingOptions options = new PermissionMappingOptions(); options.setWithDefault(true); options.setEveryone(everyone); options.setAuthenticated(authenticated); + options.setOnCampus(onCampus); permissionsService.generatePermissions(options); } - public void generateAllPermissionsMapping(UserRole everyone, UserRole authenticated) throws Exception { + public void generateAllPermissionsMapping(UserRole everyone, UserRole authenticated, UserRole onCampus) + throws Exception { PermissionMappingOptions options = new PermissionMappingOptions(); options.setWithFiles(true); options.setWithWorks(true); options.setEveryone(everyone); options.setAuthenticated(authenticated); + options.setOnCampus(onCampus); permissionsService.generatePermissions(options); } - public void generateFilePermissionsMapping(UserRole everyone, UserRole authenticated) throws Exception { + public void generateFilePermissionsMapping(UserRole everyone, UserRole authenticated, UserRole onCampus) + throws Exception { PermissionMappingOptions options = new PermissionMappingOptions(); options.setWithFiles(true); options.setEveryone(everyone); options.setAuthenticated(authenticated); + options.setOnCampus(onCampus); permissionsService.generatePermissions(options); } - public void generateWorkPermissionsMapping(UserRole everyone, UserRole authenticated) throws Exception { + public void generateWorkPermissionsMapping(UserRole everyone, UserRole authenticated, UserRole onCampus) + throws Exception { PermissionMappingOptions options = new PermissionMappingOptions(); options.setWithWorks(true); options.setEveryone(everyone); options.setAuthenticated(authenticated); + options.setOnCampus(onCampus); permissionsService.generatePermissions(options); } diff --git a/src/test/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidatorTest.java b/src/test/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidatorTest.java index 68189cb2..caed93fd 100644 --- a/src/test/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidatorTest.java +++ b/src/test/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidatorTest.java @@ -45,7 +45,7 @@ public void setup() throws Exception { @Test public void validMappingsTest() throws Exception { - writeCsv(mappingBody("25,work,none,none")); + writeCsv(mappingBody("25,work,none,none,none")); List errors = validator.validateMappings(); assertNumberErrors(errors, 0); } @@ -67,7 +67,7 @@ public void noEntriesTest() throws Exception { @Test public void blankIdTest() throws Exception { - writeCsv(mappingBody(",,none,none")); + writeCsv(mappingBody(",,none,none,none")); List errors = validator.validateMappings(); assertHasError(errors, "Invalid blank id at line 2"); assertNumberErrors(errors, 1); @@ -75,7 +75,7 @@ public void blankIdTest() throws Exception { @Test public void blankEveryoneTest() throws Exception { - writeCsv(mappingBody("25,work,,none")); + writeCsv(mappingBody("25,work,,none,none")); List errors = validator.validateMappings(); assertHasError(errors, "No 'everyone' permission mapped at line 2"); assertNumberErrors(errors, 1); @@ -83,7 +83,7 @@ public void blankEveryoneTest() throws Exception { @Test public void invalidEveryoneTest() throws Exception { - writeCsv(mappingBody("default,,okaynope,none")); + writeCsv(mappingBody("default,,okaynope,none,none")); List errors = validator.validateMappings(); assertHasError(errors, "Invalid 'everyone' permission at line 2, okaynope is not a valid patron permission"); assertNumberErrors(errors, 1); @@ -91,7 +91,7 @@ public void invalidEveryoneTest() throws Exception { @Test public void blankAuthenticatedTest() throws Exception { - writeCsv(mappingBody("default,,none,")); + writeCsv(mappingBody("default,,none,,none")); List errors = validator.validateMappings(); assertHasError(errors, "No 'authenticated' permission mapped at line 2"); assertNumberErrors(errors, 1); @@ -99,17 +99,34 @@ public void blankAuthenticatedTest() throws Exception { @Test public void invalidAuthenticatedTest() throws Exception { - writeCsv(mappingBody("26,work,none,okaynope")); + writeCsv(mappingBody("26,work,none,okaynope,none")); List errors = validator.validateMappings(); assertHasError(errors, "Invalid 'authenticated' permission at line 2, " + "okaynope is not a valid patron permission"); assertNumberErrors(errors, 1); } + @Test + public void blankOnCampusTest() throws Exception { + writeCsv(mappingBody("default,,none,none,")); + List errors = validator.validateMappings(); + assertHasError(errors, "No 'on_campus' permission mapped at line 2"); + assertNumberErrors(errors, 1); + } + + @Test + public void invalidOnCampusTest() throws Exception { + writeCsv(mappingBody("26,work,none,none,okaynope")); + List errors = validator.validateMappings(); + assertHasError(errors, "Invalid 'on_campus' permission at line 2, " + + "okaynope is not a valid patron permission"); + assertNumberErrors(errors, 1); + } + @Test public void multipleDefaultsTest() throws Exception { - writeCsv(mappingBody("default,,none,none", - "default,,canViewOriginals,canViewOriginals")); + writeCsv(mappingBody("default,,none,none,none", + "default,,canViewOriginals,canViewOriginals,canViewOriginals")); List errors = validator.validateMappings(); assertHasErrorMatching(errors, "Can only map default permissions once.*at line 3"); assertNumberErrors(errors, 1); @@ -119,21 +136,21 @@ public void multipleDefaultsTest() throws Exception { public void tooFewColumnsTest() throws Exception { writeCsv(mappingBody("default,none,")); List errors = validator.validateMappings(); - assertHasError(errors, "Invalid entry at line 2, must be 4 columns but were 3"); + assertHasError(errors, "Invalid entry at line 2, must be 5 columns but were 3"); assertNumberErrors(errors, 1); } @Test public void tooManyColumnsTest() throws Exception { - writeCsv(mappingBody("25,work,none,none,none")); + writeCsv(mappingBody("25,work,none,none,none,none")); List errors = validator.validateMappings(); - assertHasError(errors, "Invalid entry at line 2, must be 4 columns but were 5"); + assertHasError(errors, "Invalid entry at line 2, must be 5 columns but were 6"); assertNumberErrors(errors, 1); } @Test public void errorsOnSameLineTest() throws Exception { - writeCsv(mappingBody("26,,okaynope,")); + writeCsv(mappingBody("26,,okaynope,,none")); List errors = validator.validateMappings(); assertHasError(errors, "Invalid 'everyone' permission at line 2, " + "okaynope is not a valid patron permission"); From 671c9c3f239c695b07ce86b921a854c886a94c74 Mon Sep 17 00:00:00 2001 From: krwong Date: Wed, 19 Aug 2026 09:24:18 -0400 Subject: [PATCH 2/4] fix spelling for on_campus group, fix imports --- .../edu/unc/lib/boxc/migration/cdm/model/PermissionsInfo.java | 4 +++- .../boxc/migration/cdm/options/PermissionMappingOptions.java | 2 +- .../edu/unc/lib/boxc/migration/cdm/PermissionsCommandIT.java | 3 --- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/edu/unc/lib/boxc/migration/cdm/model/PermissionsInfo.java b/src/main/java/edu/unc/lib/boxc/migration/cdm/model/PermissionsInfo.java index fe428482..54bdbd76 100644 --- a/src/main/java/edu/unc/lib/boxc/migration/cdm/model/PermissionsInfo.java +++ b/src/main/java/edu/unc/lib/boxc/migration/cdm/model/PermissionsInfo.java @@ -3,7 +3,9 @@ import java.util.ArrayList; import java.util.List; -import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.*; +import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.AUTHENTICATED_PRINC; +import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.PUBLIC_PRINC; +import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.ON_CAMPUS_PRINC; /** * Permission mapping information for a project diff --git a/src/main/java/edu/unc/lib/boxc/migration/cdm/options/PermissionMappingOptions.java b/src/main/java/edu/unc/lib/boxc/migration/cdm/options/PermissionMappingOptions.java index b286fafd..1f006c84 100644 --- a/src/main/java/edu/unc/lib/boxc/migration/cdm/options/PermissionMappingOptions.java +++ b/src/main/java/edu/unc/lib/boxc/migration/cdm/options/PermissionMappingOptions.java @@ -39,7 +39,7 @@ public class PermissionMappingOptions { private UserRole authenticated; @Option(names = {"-oc", "--on-campus"}, - description = "The patron access role assigned to the “on campus” group.") + description = "The patron access role assigned to the “on_campus” group.") private UserRole onCampus; @Option(names = {"-f", "--force"}, diff --git a/src/test/java/edu/unc/lib/boxc/migration/cdm/PermissionsCommandIT.java b/src/test/java/edu/unc/lib/boxc/migration/cdm/PermissionsCommandIT.java index f8d34c1a..4d3ed2fc 100644 --- a/src/test/java/edu/unc/lib/boxc/migration/cdm/PermissionsCommandIT.java +++ b/src/test/java/edu/unc/lib/boxc/migration/cdm/PermissionsCommandIT.java @@ -1,10 +1,8 @@ package edu.unc.lib.boxc.migration.cdm; -import edu.unc.lib.boxc.auth.api.UserRole; import edu.unc.lib.boxc.migration.cdm.model.PermissionsInfo; import edu.unc.lib.boxc.migration.cdm.options.GroupMappingOptions; import edu.unc.lib.boxc.migration.cdm.options.GroupMappingSyncOptions; -import edu.unc.lib.boxc.migration.cdm.options.PermissionMappingOptions; import edu.unc.lib.boxc.migration.cdm.services.PermissionsService; import org.apache.commons.io.FileUtils; import org.junit.jupiter.api.BeforeEach; @@ -16,7 +14,6 @@ import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; public class PermissionsCommandIT extends AbstractCommandIT { @BeforeEach From db71f5d9b759f898874c97af10643b78853a8974 Mon Sep 17 00:00:00 2001 From: krwong Date: Wed, 19 Aug 2026 16:24:16 -0400 Subject: [PATCH 3/4] on campus not required and should not be default, update some tests to not include --on-campus flag --- .../migration/cdm/services/PermissionsService.java | 13 +++++++------ .../cdm/validators/PermissionsValidator.java | 2 -- .../boxc/migration/cdm/PermissionsCommandIT.java | 9 ++++----- .../cdm/services/PermissionsServiceTest.java | 13 +++++-------- .../cdm/validators/PermissionsValidatorTest.java | 3 +-- 5 files changed, 17 insertions(+), 23 deletions(-) diff --git a/src/main/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsService.java b/src/main/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsService.java index 4c765ac8..ddf5c9b2 100644 --- a/src/main/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsService.java +++ b/src/main/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsService.java @@ -69,19 +69,20 @@ public void generatePermissions(PermissionMappingOptions options) throws Excepti String everyoneField; String authenticatedField; - String onCampusField; + String onCampusField = ""; // Permissions - if (options.isStaffOnly() || options.getEveryone() != null || options.getAuthenticated() != null - || options.getOnCampus() != null) { + if (options.isStaffOnly() || options.getEveryone() != null || options.getAuthenticated() != null) { everyoneField = getAssignedRoleValue(options.isStaffOnly(), options.getEveryone()); authenticatedField = getAssignedRoleValue(options.isStaffOnly(), options.getAuthenticated()); - onCampusField = getAssignedRoleValue(options.isStaffOnly(), options.getOnCampus()); + if (options.getOnCampus() != null) { + onCampusField = getAssignedRoleValue(options.isStaffOnly(), options.getOnCampus()); + + } } else { - // if no permissions/roles are specified, default to canViewOriginals + // if no permissions/roles are specified, default to canViewOriginals for everyone and authenticated everyoneField = UserRole.canViewOriginals.getPredicate(); authenticatedField = UserRole.canViewOriginals.getPredicate(); - onCampusField = UserRole.canViewOriginals.getPredicate(); } try ( diff --git a/src/main/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidator.java b/src/main/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidator.java index 35d547a7..68f84af4 100644 --- a/src/main/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidator.java +++ b/src/main/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidator.java @@ -95,8 +95,6 @@ public List validateMappings() { errors.add("Invalid 'on_campus' permission at line " + i + ", " + onCampus + " is not a valid patron permission"); } - } else { - errors.add("No 'on_campus' permission mapped at line " + i); } i++; diff --git a/src/test/java/edu/unc/lib/boxc/migration/cdm/PermissionsCommandIT.java b/src/test/java/edu/unc/lib/boxc/migration/cdm/PermissionsCommandIT.java index 4d3ed2fc..bfb1d567 100644 --- a/src/test/java/edu/unc/lib/boxc/migration/cdm/PermissionsCommandIT.java +++ b/src/test/java/edu/unc/lib/boxc/migration/cdm/PermissionsCommandIT.java @@ -37,11 +37,10 @@ public void generateDefaultPermissions() throws Exception { "permissions", "generate", "-wd", "--everyone", "canViewMetadata", - "--authenticated", "canViewMetadata", - "--on-campus", "canViewMetadata"}; + "--authenticated", "canViewMetadata"}; executeExpectSuccess(args); assertMapping(0, "default", "canViewMetadata", "canViewMetadata", - "canViewMetadata"); + ""); } @Test @@ -52,7 +51,7 @@ public void generateDefaultPermissionsUnspecified() throws Exception { "-wd"}; executeExpectSuccess(args); assertMapping(0, "default", "canViewOriginals", "canViewOriginals", - "canViewOriginals"); + ""); } @Test @@ -63,7 +62,7 @@ public void generateDefaultPermissionsStaffOnly() throws Exception { "-wd", "-so"}; executeExpectSuccess(args); - assertMapping(0, "default", "none", "none", "none"); + assertMapping(0, "default", "none", "none", ""); } @Test diff --git a/src/test/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsServiceTest.java b/src/test/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsServiceTest.java index cc0b1cbf..7313f6ac 100644 --- a/src/test/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsServiceTest.java +++ b/src/test/java/edu/unc/lib/boxc/migration/cdm/services/PermissionsServiceTest.java @@ -111,7 +111,7 @@ public void generateDefaultPermissionsUnspecifiedTest() throws Exception { assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewOriginals", "canViewOriginals", "canViewOriginals"), + assertIterableEquals(Arrays.asList("default", "", "canViewOriginals", "canViewOriginals", ""), rows.get(0)); } @@ -126,7 +126,7 @@ public void generateDefaultPermissionsStaffOnlyTest() throws Exception { assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "none", "none", "none"), rows.get(0)); + assertIterableEquals(Arrays.asList("default", "", "none", "none", ""), rows.get(0)); } @Test @@ -149,13 +149,12 @@ public void generateDefaultPermissionsInvalidTest() throws Exception { @Test public void generateDefaultPermissionsWithoutForceFlagTest() throws Exception { - writeCsv(mappingBody("default,,none,none")); + writeCsv(mappingBody("default,,none,none,")); var options = new PermissionMappingOptions(); options.setWithDefault(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); - options.setOnCampus(UserRole.canViewMetadata); Exception exception = assertThrows(StateAlreadyExistsException.class, () -> { service.generatePermissions(options); @@ -169,21 +168,19 @@ public void generateDefaultPermissionsWithoutForceFlagTest() throws Exception { @Test public void generateDefaultPermissionsWithForceFlagTest() throws Exception { Path permissionsMappingPath = project.getPermissionsPath(); - writeCsv(mappingBody("default,,none,none,none")); + writeCsv(mappingBody("default,,none,none,")); var options = new PermissionMappingOptions(); options.setWithDefault(true); options.setEveryone(UserRole.canViewMetadata); options.setAuthenticated(UserRole.canViewMetadata); - options.setOnCampus(UserRole.canViewMetadata); options.setForce(true); service.generatePermissions(options); assertTrue(Files.exists(permissionsMappingPath)); List rows = listCsvRecords(permissionsMappingPath); - assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", "canViewMetadata"), - rows.get(0)); + assertIterableEquals(Arrays.asList("default", "", "canViewMetadata", "canViewMetadata", ""), rows.get(0)); } @Test diff --git a/src/test/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidatorTest.java b/src/test/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidatorTest.java index caed93fd..63f18ffe 100644 --- a/src/test/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidatorTest.java +++ b/src/test/java/edu/unc/lib/boxc/migration/cdm/validators/PermissionsValidatorTest.java @@ -110,8 +110,7 @@ public void invalidAuthenticatedTest() throws Exception { public void blankOnCampusTest() throws Exception { writeCsv(mappingBody("default,,none,none,")); List errors = validator.validateMappings(); - assertHasError(errors, "No 'on_campus' permission mapped at line 2"); - assertNumberErrors(errors, 1); + assertNumberErrors(errors, 0); } @Test From 46cf86ae7ad861e624aa6bf810350995382ccae6 Mon Sep 17 00:00:00 2001 From: krwong Date: Wed, 19 Aug 2026 16:24:58 -0400 Subject: [PATCH 4/4] add on campus to WorkGenerator's addPermission method, verify sip service behaves as expected without on campus role set --- .../boxc/migration/cdm/services/sips/WorkGenerator.java | 6 ++++++ .../lib/boxc/migration/cdm/services/SipServiceTest.java | 8 ++++++-- .../unc/lib/boxc/migration/cdm/test/SipServiceHelper.java | 3 +-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/edu/unc/lib/boxc/migration/cdm/services/sips/WorkGenerator.java b/src/main/java/edu/unc/lib/boxc/migration/cdm/services/sips/WorkGenerator.java index bf083a4e..96aaed8e 100644 --- a/src/main/java/edu/unc/lib/boxc/migration/cdm/services/sips/WorkGenerator.java +++ b/src/main/java/edu/unc/lib/boxc/migration/cdm/services/sips/WorkGenerator.java @@ -42,6 +42,7 @@ import java.util.List; import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.AUTHENTICATED_PRINC; +import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.ON_CAMPUS_PRINC; import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.PUBLIC_PRINC; import static edu.unc.lib.boxc.migration.cdm.util.CLIConstants.outputLogger; import static edu.unc.lib.boxc.model.api.DatastreamType.ORIGINAL_FILE; @@ -259,6 +260,11 @@ protected void addPermission(String cdmId, Resource resource) { Property authenticatedValue = UserRole.valueOf(permissionMapping.getAuthenticated()).getProperty(); resource.addLiteral(everyoneValue, PUBLIC_PRINC); resource.addLiteral(authenticatedValue, AUTHENTICATED_PRINC); + if (!permissionMapping.getOnCampus().isBlank()) { + Property onCampusValue = UserRole.valueOf(permissionMapping.getOnCampus()).getProperty(); + resource.addLiteral(onCampusValue, ON_CAMPUS_PRINC); + + } } } } diff --git a/src/test/java/edu/unc/lib/boxc/migration/cdm/services/SipServiceTest.java b/src/test/java/edu/unc/lib/boxc/migration/cdm/services/SipServiceTest.java index 3920b64d..6af96bfb 100644 --- a/src/test/java/edu/unc/lib/boxc/migration/cdm/services/SipServiceTest.java +++ b/src/test/java/edu/unc/lib/boxc/migration/cdm/services/SipServiceTest.java @@ -68,6 +68,7 @@ import java.util.stream.Collectors; import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.AUTHENTICATED_PRINC; +import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.ON_CAMPUS_PRINC; import static edu.unc.lib.boxc.auth.api.AccessPrincipalConstants.PUBLIC_PRINC; import static edu.unc.lib.boxc.migration.cdm.services.CdmFieldService.CSV; import static edu.unc.lib.boxc.migration.cdm.services.sips.WorkGenerator.STREAMING_TYPE; @@ -1088,8 +1089,7 @@ public void generateSipsWithDefaultPermissions() throws Exception { testHelper.indexExportData("mini_gilmer"); testHelper.generateDefaultDestinationsMapping(DEST_UUID, null); testHelper.populateDescriptions("gilmer_mods1.xml"); - testHelper.generateDefaultPermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata, - UserRole.canViewMetadata); + testHelper.generateDefaultPermissionsMapping(UserRole.canViewMetadata, UserRole.canViewMetadata); List stagingLocs = testHelper.populateSourceFiles("276_182_E.tif", "276_183_E.tif", "276_203_E.tif"); @@ -1110,12 +1110,15 @@ public void generateSipsWithDefaultPermissions() throws Exception { Resource workResc1 = testHelper.getResourceByCreateTime(depBagChildren, "2005-11-23"); testHelper.assertObjectPopulatedInSip(workResc1, dirManager, model, stagingLocs.get(0), null, "25"); assertHasPermission(workResc1, CdrAcl.canViewMetadata); + assertFalse(workResc1.hasProperty(CdrAcl.canViewMetadata, ON_CAMPUS_PRINC)); Resource workResc2 = testHelper.getResourceByCreateTime(depBagChildren, "2005-11-24"); testHelper.assertObjectPopulatedInSip(workResc2, dirManager, model, stagingLocs.get(1), null, "26"); assertHasPermission(workResc2, CdrAcl.canViewMetadata); + assertFalse(workResc2.hasProperty(CdrAcl.canViewMetadata, ON_CAMPUS_PRINC)); Resource workResc3 = testHelper.getResourceByCreateTime(depBagChildren, "2005-12-08"); testHelper.assertObjectPopulatedInSip(workResc3, dirManager, model, stagingLocs.get(2), null, "27"); assertHasPermission(workResc3, CdrAcl.canViewMetadata); + assertFalse(workResc3.hasProperty(CdrAcl.canViewMetadata, ON_CAMPUS_PRINC)); Resource work1FileResc = getOnlyChildOf(workResc1); assertPermissionsUnassigned(work1FileResc); @@ -1794,6 +1797,7 @@ private void assertHasPermission(Resource resource, Property permission) { private void assertDoesNotHavePermission(Resource resource, Property permission) { assertFalse(resource.hasProperty(permission, PUBLIC_PRINC)); assertFalse(resource.hasProperty(permission, AUTHENTICATED_PRINC)); + assertFalse(resource.hasProperty(permission, ON_CAMPUS_PRINC)); } private void assertPermissionsUnassigned(Resource resource) { diff --git a/src/test/java/edu/unc/lib/boxc/migration/cdm/test/SipServiceHelper.java b/src/test/java/edu/unc/lib/boxc/migration/cdm/test/SipServiceHelper.java index 2770bc49..2cecc849 100644 --- a/src/test/java/edu/unc/lib/boxc/migration/cdm/test/SipServiceHelper.java +++ b/src/test/java/edu/unc/lib/boxc/migration/cdm/test/SipServiceHelper.java @@ -370,13 +370,12 @@ public void generateArchivalCollectionDestinationMapping(String defDest, String archivalDestinationsService.addArchivalCollectionMappings(options); } - public void generateDefaultPermissionsMapping(UserRole everyone, UserRole authenticated, UserRole onCampus) + public void generateDefaultPermissionsMapping(UserRole everyone, UserRole authenticated) throws Exception { PermissionMappingOptions options = new PermissionMappingOptions(); options.setWithDefault(true); options.setEveryone(everyone); options.setAuthenticated(authenticated); - options.setOnCampus(onCampus); permissionsService.generatePermissions(options); }