package edu.harvard.iq.dataverse.privateurl; import edu.harvard.iq.dataverse.Dataset; import edu.harvard.iq.dataverse.DatasetVersion; import edu.harvard.iq.dataverse.Dataverse; import edu.harvard.iq.dataverse.DvObject; import edu.harvard.iq.dataverse.RoleAssignment; import edu.harvard.iq.dataverse.authorization.DataverseRole; import edu.harvard.iq.dataverse.authorization.RoleAssignee; import edu.harvard.iq.dataverse.authorization.users.GuestUser; import edu.harvard.iq.dataverse.authorization.users.PrivateUrlUser; import edu.harvard.iq.dataverse.engine.command.exception.CommandException; import edu.harvard.iq.dataverse.engine.command.impl.CreatePrivateUrlCommand; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Assert; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import org.junit.Test; import static org.junit.Assert.assertNull; import org.junit.Before; public class PrivateUrlUtilTest { @Before public void setUp() { new PrivateUrlUtil(); } @Test public void testIdentifier2roleAssignee() { RoleAssignee returnValueFromEmptyString = null; try { returnValueFromEmptyString = PrivateUrlUtil.identifier2roleAssignee(""); } catch (Exception ex) { assertEquals(ex.getClass(), IllegalArgumentException.class); assertEquals(ex.getMessage(), "Could not find dataset id in ''"); } assertNull(returnValueFromEmptyString); RoleAssignee returnValueFromNonColon = null; String peteIdentifier = "@pete"; try { returnValueFromNonColon = PrivateUrlUtil.identifier2roleAssignee(peteIdentifier); } catch (Exception ex) { assertEquals(ex.getClass(), IllegalArgumentException.class); assertEquals(ex.getMessage(), "Could not find dataset id in '" + peteIdentifier + "'"); } assertNull(returnValueFromNonColon); RoleAssignee returnValueFromNonNumber = null; String nonNumberIdentifier = PrivateUrlUser.PREFIX + "nonNumber"; try { returnValueFromNonNumber = PrivateUrlUtil.identifier2roleAssignee(nonNumberIdentifier); } catch (Exception ex) { assertEquals(ex.getClass(), IllegalArgumentException.class); assertEquals(ex.getMessage(), "Could not find dataset id in '" + nonNumberIdentifier + "'"); } assertNull(returnValueFromNonNumber); RoleAssignee returnFromValidIdentifier = null; String validIdentifier = PrivateUrlUser.PREFIX + 42; returnFromValidIdentifier = PrivateUrlUtil.identifier2roleAssignee(validIdentifier); assertNotNull(returnFromValidIdentifier); assertEquals("#42", returnFromValidIdentifier.getIdentifier()); assertEquals("Private URL Enabled", returnFromValidIdentifier.getDisplayInfo().getTitle()); Assert.assertTrue(returnFromValidIdentifier instanceof PrivateUrlUser); PrivateUrlUser privateUrlUser42 = (PrivateUrlUser) returnFromValidIdentifier; assertEquals(42, privateUrlUser42.getDatasetId()); } @Test public void testGetDatasetFromRoleAssignmentNullRoleAssignment() { assertNull(PrivateUrlUtil.getDatasetFromRoleAssignment(null)); } @Test public void testGetDatasetFromRoleAssignmentNullDefinitionPoint() { DataverseRole aRole = null; PrivateUrlUser privateUrlUser = new PrivateUrlUser(42); RoleAssignee anAssignee = privateUrlUser; DvObject nullDefinitionPoint = null; String privateUrlToken = null; RoleAssignment ra = new RoleAssignment(aRole, anAssignee, nullDefinitionPoint, privateUrlToken); assertNull(PrivateUrlUtil.getDatasetFromRoleAssignment(ra)); } @Test public void testGetDatasetFromRoleAssignmentNonDataset() { DataverseRole aRole = null; PrivateUrlUser privateUrlUser = new PrivateUrlUser(42); RoleAssignee anAssignee = privateUrlUser; DvObject nonDataset = new Dataverse(); String privateUrlToken = null; RoleAssignment ra = new RoleAssignment(aRole, anAssignee, nonDataset, privateUrlToken); assertNull(PrivateUrlUtil.getDatasetFromRoleAssignment(ra)); } @Test public void testGetDatasetFromRoleAssignmentSuccess() { DataverseRole aRole = null; PrivateUrlUser privateUrlUser = new PrivateUrlUser(42); RoleAssignee anAssignee = privateUrlUser; DvObject dataset = new Dataset(); String privateUrlToken = null; RoleAssignment ra = new RoleAssignment(aRole, anAssignee, dataset, privateUrlToken); assertNotNull(PrivateUrlUtil.getDatasetFromRoleAssignment(ra)); assertEquals("#42", ra.getAssigneeIdentifier()); } @Test public void testGetDraftDatasetVersionFromRoleAssignmentNullRoleAssignement() { assertNull(PrivateUrlUtil.getDraftDatasetVersionFromRoleAssignment(null)); } @Test public void testGetDraftDatasetVersionFromRoleAssignmentNullDataset() { DataverseRole aRole = null; PrivateUrlUser privateUrlUser = new PrivateUrlUser(42); RoleAssignee anAssignee = privateUrlUser; DvObject dataset = null; String privateUrlToken = null; RoleAssignment ra = new RoleAssignment(aRole, anAssignee, dataset, privateUrlToken); DatasetVersion datasetVersion = PrivateUrlUtil.getDraftDatasetVersionFromRoleAssignment(ra); assertNull(datasetVersion); } @Test public void testGetDraftDatasetVersionFromRoleAssignmentLastestIsNotDraft() { DataverseRole aRole = null; PrivateUrlUser privateUrlUser = new PrivateUrlUser(42); RoleAssignee anAssignee = privateUrlUser; Dataset dataset = new Dataset(); List<DatasetVersion> versions = new ArrayList<>(); DatasetVersion datasetVersionIn = new DatasetVersion(); datasetVersionIn.setVersionState(DatasetVersion.VersionState.RELEASED); versions.add(datasetVersionIn); dataset.setVersions(versions); String privateUrlToken = null; RoleAssignment ra = new RoleAssignment(aRole, anAssignee, dataset, privateUrlToken); DatasetVersion datasetVersionOut = PrivateUrlUtil.getDraftDatasetVersionFromRoleAssignment(ra); assertNull(datasetVersionOut); } @Test public void testGetDraftDatasetVersionFromRoleAssignmentSuccess() { DataverseRole aRole = null; PrivateUrlUser privateUrlUser = new PrivateUrlUser(42); RoleAssignee anAssignee = privateUrlUser; Dataset dataset = new Dataset(); List<DatasetVersion> versions = new ArrayList<>(); DatasetVersion datasetVersionIn = new DatasetVersion(); datasetVersionIn.setVersionState(DatasetVersion.VersionState.DRAFT); versions.add(datasetVersionIn); dataset.setVersions(versions); String privateUrlToken = null; RoleAssignment ra = new RoleAssignment(aRole, anAssignee, dataset, privateUrlToken); DatasetVersion datasetVersionOut = PrivateUrlUtil.getDraftDatasetVersionFromRoleAssignment(ra); assertNotNull(datasetVersionOut); assertEquals("#42", ra.getAssigneeIdentifier()); } @Test public void testGetUserFromRoleAssignmentNull() { assertNull(PrivateUrlUtil.getPrivateUrlUserFromRoleAssignment(null)); } @Test public void testGetUserFromRoleAssignmentNonDataset() { DataverseRole aRole = null; PrivateUrlUser privateUrlUserIn = new PrivateUrlUser(42); RoleAssignee anAssignee = privateUrlUserIn; DvObject nonDataset = new Dataverse(); nonDataset.setId(123l); String privateUrlToken = null; RoleAssignment ra = new RoleAssignment(aRole, anAssignee, nonDataset, privateUrlToken); PrivateUrlUser privateUrlUserOut = PrivateUrlUtil.getPrivateUrlUserFromRoleAssignment(ra); assertNull(privateUrlUserOut); } @Test public void testGetUserFromRoleAssignmentSucess() { DataverseRole aRole = null; PrivateUrlUser privateUrlUserIn = new PrivateUrlUser(42); RoleAssignee anAssignee = privateUrlUserIn; DvObject dataset = new Dataset(); dataset.setId(123l); String privateUrlToken = null; RoleAssignment ra = new RoleAssignment(aRole, anAssignee, dataset, privateUrlToken); PrivateUrlUser privateUrlUserOut = PrivateUrlUtil.getPrivateUrlUserFromRoleAssignment(ra); assertNotNull(privateUrlUserOut); } @Test public void testGetPrivateUrlRedirectDataFail() { DataverseRole aRole = null; long datasetId = 42; PrivateUrlUser privateUrlUser = new PrivateUrlUser(datasetId); RoleAssignee anAssignee = privateUrlUser; Dataset dataset = new Dataset(); String privateUrlToken = null; RoleAssignment ra = new RoleAssignment(aRole, anAssignee, dataset, privateUrlToken); ra.setDefinitionPoint(null); PrivateUrlRedirectData privateUrlRedirectData = null; privateUrlRedirectData = PrivateUrlUtil.getPrivateUrlRedirectData(ra); assertNull(privateUrlRedirectData); } @Test public void testGetPrivateUrlRedirectDataSuccess() { DataverseRole aRole = null; long datasetId = 42; PrivateUrlUser privateUrlUser = new PrivateUrlUser(datasetId); RoleAssignee anAssignee = privateUrlUser; Dataset dataset = new Dataset(); dataset.setProtocol("doi"); dataset.setAuthority("10.5072/FK2"); dataset.setIdentifier("3L33T"); dataset.setId(datasetId); String privateUrlToken = null; RoleAssignment ra = new RoleAssignment(aRole, anAssignee, dataset, privateUrlToken); PrivateUrlRedirectData privateUrlRedirectData = PrivateUrlUtil.getPrivateUrlRedirectData(ra); assertNotNull(privateUrlRedirectData); assertEquals("/dataset.xhtml?persistentId=doi:10.5072/FK2/3L33T&version=DRAFT", privateUrlRedirectData.getDraftDatasetPageToBeRedirectedTo()); assertEquals(privateUrlUser.getIdentifier(), privateUrlRedirectData.getPrivateUrlUser().getIdentifier()); } @Test public void testGetDraftUrlDraftNull() { assertEquals("UNKNOWN", PrivateUrlUtil.getDraftUrl(null)); } @Test public void testGetDraftUrlDatasetNull() { DatasetVersion draft = new DatasetVersion(); draft.setDataset(null); assertEquals("UNKNOWN", PrivateUrlUtil.getDraftUrl(draft)); } @Test public void testGetDraftUrlNoGlobalId() throws Exception { DatasetVersion draft = new DatasetVersion(); Dataset dataset = new Dataset(); draft.setDataset(dataset); assertEquals("UNKNOWN", PrivateUrlUtil.getDraftUrl(draft)); } @Test public void testGetDraftUrlSuccess() throws Exception { DatasetVersion draft = new DatasetVersion(); Dataset dataset = new Dataset(); dataset.setProtocol("doi"); dataset.setAuthority("10.5072/FK2"); dataset.setIdentifier("3L33T"); draft.setDataset(dataset); assertEquals("/dataset.xhtml?persistentId=doi:10.5072/FK2/3L33T&version=DRAFT", PrivateUrlUtil.getDraftUrl(draft)); } @Test public void testGetPrivateUrlRedirectDataConstructor() throws Exception { Exception exception1 = null; try { PrivateUrlRedirectData privateUrlRedirectData = new PrivateUrlRedirectData(null, null); } catch (Exception ex) { exception1 = ex; } assertNotNull(exception1); Exception exception2 = null; try { PrivateUrlUser privateUrlUser = new PrivateUrlUser(42); PrivateUrlRedirectData privateUrlRedirectData = new PrivateUrlRedirectData(privateUrlUser, null); } catch (Exception ex) { exception2 = ex; } assertNotNull(exception2); } @Test public void testGetPrivateUrlFromRoleAssignmentNoSiteUrl() { String dataverseSiteUrl = null; RoleAssignment ra = null; PrivateUrl privateUrl = PrivateUrlUtil.getPrivateUrlFromRoleAssignment(ra, dataverseSiteUrl); assertNull(privateUrl); } @Test public void testGetPrivateUrlFromRoleAssignmentDatasetNull() { String dataverseSiteUrl = "https://dataverse.example.edu"; DataverseRole aRole = null; PrivateUrlUser privateUrlUser = new PrivateUrlUser(42); RoleAssignee anAssignee = privateUrlUser; DvObject dataset = null; String privateUrlToken = null; RoleAssignment ra = new RoleAssignment(aRole, anAssignee, dataset, privateUrlToken); PrivateUrl privateUrl = PrivateUrlUtil.getPrivateUrlFromRoleAssignment(ra, dataverseSiteUrl); assertNull(privateUrl); } @Test public void testGetPrivateUrlFromRoleAssignmentSuccess() { String dataverseSiteUrl = "https://dataverse.example.edu"; DataverseRole aRole = null; PrivateUrlUser privateUrlUser = new PrivateUrlUser(42); RoleAssignee anAssignee = privateUrlUser; DvObject dataset = new Dataset(); dataset.setId(42l); String privateUrlToken = "cd71e9d7-73a7-4ec8-b890-3d00499e8693"; RoleAssignment ra = new RoleAssignment(aRole, anAssignee, dataset, privateUrlToken); PrivateUrl privateUrl = PrivateUrlUtil.getPrivateUrlFromRoleAssignment(ra, dataverseSiteUrl); assertNotNull(privateUrl); assertEquals(new Long(42), privateUrl.getDataset().getId()); assertEquals("https://dataverse.example.edu/privateurl.xhtml?token=cd71e9d7-73a7-4ec8-b890-3d00499e8693", privateUrl.getLink()); } @Test public void testGetPrivateUrlUserFromRoleAssignmentAndAssigneeNull() { PrivateUrlUser privateUrl = PrivateUrlUtil.getPrivateUrlUserFromRoleAssignment(null, null); assertNull(privateUrl); } @Test public void testGetPrivateUrlUserFromRoleAssignmentAndAssigneeNonPrivateUrlUser() { DataverseRole aRole = null; RoleAssignee assignee = GuestUser.get(); DvObject dataset = new Dataset(); String privateUrlToken = "cd71e9d7-73a7-4ec8-b890-3d00499e8693"; RoleAssignment assignment = new RoleAssignment(aRole, assignee, dataset, privateUrlToken); PrivateUrlUser privateUrl = PrivateUrlUtil.getPrivateUrlUserFromRoleAssignment(assignment, assignee); assertNull(privateUrl); } @Test public void testGetPrivateUrlUserFromRoleAssignmentAndAssigneeSuccess() { DataverseRole aRole = null; PrivateUrlUser privateUrlUser = new PrivateUrlUser(42); RoleAssignee assignee = privateUrlUser; DvObject dataset = new Dataset(); dataset.setId(42l); String privateUrlToken = "cd71e9d7-73a7-4ec8-b890-3d00499e8693"; RoleAssignment assignment = new RoleAssignment(aRole, assignee, dataset, privateUrlToken); PrivateUrlUser privateUrl = PrivateUrlUtil.getPrivateUrlUserFromRoleAssignment(assignment, assignee); assertNotNull(privateUrl); } @Test public void testGetRequiredPermissions() { CreatePrivateUrlCommand createPrivateUrlCommand = new CreatePrivateUrlCommand(null, null); CommandException ex = new CommandException(null, createPrivateUrlCommand); List<String> strings = PrivateUrlUtil.getRequiredPermissions(ex); assertEquals(Arrays.asList("ManageDatasetPermissions"), strings); } }