@@ -2792,13 +2792,19 @@ public void testDcmChecksumValidationMessages() throws IOException, InterruptedE
27922792
27932793 @ Test
27942794 public void testCreateDeleteDatasetLink () {
2795+ // Create superuser
27952796 Response createUser = UtilIT .createRandomUser ();
27962797 createUser .prettyPrint ();
27972798 String username = UtilIT .getUsernameFromResponse (createUser );
27982799 String apiToken = UtilIT .getApiTokenFromResponse (createUser );
2799-
28002800 Response superuserResponse = UtilIT .makeSuperUser (username );
28012801
2802+ // Create another user that doesn't have permission to create/delete links
2803+ Response createUser2 = UtilIT .createRandomUser ();
2804+ createUser2 .prettyPrint ();
2805+ String username2 = UtilIT .getUsernameFromResponse (createUser2 );
2806+ String apiToken2 = UtilIT .getApiTokenFromResponse (createUser2 );
2807+
28022808 Response createDataverseResponse = UtilIT .createRandomDataverse (apiToken );
28032809 createDataverseResponse .prettyPrint ();
28042810 String dataverseAlias = UtilIT .getAliasFromResponse (createDataverseResponse );
@@ -2834,28 +2840,31 @@ public void testCreateDeleteDatasetLink() {
28342840 publishDatasetForLinking .prettyPrint ();
28352841 publishTargetDataverse .then ().assertThat ()
28362842 .statusCode (OK .getStatusCode ());
2837-
2838- // And link the dataset to this new dataverse:
2843+
2844+ // Try to link the dataset to the new dataverse without LinkDataset permissions
2845+ createLinkingDatasetResponse = UtilIT .createDatasetLink (datasetId .longValue (), dataverseAlias , apiToken2 );
2846+ createLinkingDatasetResponse .prettyPrint ();
2847+ createLinkingDatasetResponse .then ().assertThat ()
2848+ .body ("message" , equalTo ("User @" + username2 + " is not permitted to perform requested action." ))
2849+ .statusCode (UNAUTHORIZED .getStatusCode ());
2850+
2851+ // Link the dataset to the new dataverse
28392852 createLinkingDatasetResponse = UtilIT .createDatasetLink (datasetId .longValue (), dataverseAlias , apiToken );
28402853 createLinkingDatasetResponse .prettyPrint ();
28412854 createLinkingDatasetResponse .then ().assertThat ()
28422855 .body ("data.message" , equalTo ("Dataset " + datasetId +" linked successfully to " + dataverseAlias ))
28432856 .statusCode (200 );
28442857
2845- // Create a new user that doesn't have permission to delete the link
2846- Response createUser2 = UtilIT .createRandomUser ();
2847- createUser2 .prettyPrint ();
2848- String username2 = UtilIT .getUsernameFromResponse (createUser2 );
2849- String apiToken2 = UtilIT .getApiTokenFromResponse (createUser2 );
2850- // Try to delete the link without PublishDataset permissions
2858+ // Try to delete the link without LinkDataset permissions
28512859 Response deleteLinkingDatasetResponse = UtilIT .deleteDatasetLink (datasetId .longValue (), dataverseAlias , apiToken2 );
28522860 deleteLinkingDatasetResponse .prettyPrint ();
28532861 deleteLinkingDatasetResponse .then ().assertThat ()
28542862 .body ("message" , equalTo ("User @" + username2 + " is not permitted to perform requested action." ))
28552863 .statusCode (UNAUTHORIZED .getStatusCode ());
28562864
2857- // Add the Curator role to this user to show that they can delete the link later. (Timing issues if you try to delete right after giving permission)
2858- Response givePermissionResponse = UtilIT .grantRoleOnDataset (datasetPersistentId , "curator" , "@" + username2 , apiToken );
2865+ // Give the user curator rights for the target dataverse to show that they can add and delete the link later
2866+ // (Timing issues if you try to add or delete right after giving permission)
2867+ Response givePermissionResponse = UtilIT .grantRoleOnDataverse (dataverseAlias , "curator" , "@" + username2 , apiToken );
28592868 givePermissionResponse .prettyPrint ();
28602869 givePermissionResponse .then ().assertThat ()
28612870 .statusCode (200 );
@@ -2868,17 +2877,16 @@ public void testCreateDeleteDatasetLink() {
28682877 .body ("data.message" , equalTo ("Link from Dataset " + datasetId + " to linked Dataverse " + dataverseAlias + " deleted" ))
28692878 .statusCode (200 );
28702879
2871- // And re-link the dataset to this new dataverse :
2872- createLinkingDatasetResponse = UtilIT .createDatasetLink (datasetId .longValue (), dataverseAlias , apiToken );
2880+ // And now test linking the dataset as user2 with new role as curator (link permissions) :
2881+ createLinkingDatasetResponse = UtilIT .createDatasetLink (datasetId .longValue (), dataverseAlias , apiToken2 );
28732882 createLinkingDatasetResponse .prettyPrint ();
28742883 createLinkingDatasetResponse .then ().assertThat ()
28752884 .body ("data.message" , equalTo ("Dataset " + datasetId +" linked successfully to " + dataverseAlias ))
28762885 .statusCode (200 );
28772886
2878- // And now test deleting it as user2 with new role as curator (Publish permissions):
2887+ // And now test deleting it as user2 with new role as curator (link permissions):
28792888 deleteLinkingDatasetResponse = UtilIT .deleteDatasetLink (datasetId .longValue (), dataverseAlias , apiToken2 );
28802889 deleteLinkingDatasetResponse .prettyPrint ();
2881-
28822890 deleteLinkingDatasetResponse .then ().assertThat ()
28832891 .body ("data.message" , equalTo ("Link from Dataset " + datasetId + " to linked Dataverse " + dataverseAlias + " deleted" ))
28842892 .statusCode (200 );
0 commit comments