Skip to content

Commit 087f77a

Browse files
committed
Added: tweaks and IT for getUserSelectableRoles
1 parent 615fa2e commit 087f77a

File tree

4 files changed

+61
-9
lines changed

4 files changed

+61
-9
lines changed

src/main/java/edu/harvard/iq/dataverse/RoleAssigneeServiceBean.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,21 +157,21 @@ private String getRoleIdListClause(List<Long> roleIdList) {
157157
}
158158

159159
/**
160-
* Retrieves the list of {@link DataverseRole}s relevant for the given {@link DataverseRequest}.
160+
* Retrieves the list of {@link DataverseRole}s selectable for the given {@link DataverseRequest}.
161161
* <p>
162162
* - If the user is a superuser, all roles are returned.<br>
163163
* - If the user is not a superuser, their assigned roles are returned. If none are assigned,
164164
* all roles are returned as a fallback.
165165
* <p>
166166
* This method is based on the logic from {@code MyDataPage.getRolesUsedToCreateCheckboxes}.
167167
* It has been implemented in this service to make the logic reusable from parts of the application
168-
* other than the UI.
168+
* other than the JSF UI.
169169
*
170170
* @param request the dataverse request containing user context
171171
* @return a list of relevant {@link DataverseRole}s for the user
172172
* @throws NullPointerException if the request is null
173173
*/
174-
public List<DataverseRole> getAllOrAssigneeDataverseRolesFor(DataverseRequest request) {
174+
public List<DataverseRole> getSelectableDataverseRolesFor(DataverseRequest request) {
175175
if (request == null) {
176176
throw new NullPointerException(BundleUtil.getStringFromBundle("roleAssigneeServiceBean.error.dataverseRequestCannotBeNull"));
177177
}

src/main/java/edu/harvard/iq/dataverse/api/Roles.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ public Response createNewRole(@Context ContainerRequestContext crc,
6969

7070
@GET
7171
@AuthRequired
72-
@Path("assignedRoles")
73-
public Response getAssignedRoles(@Context ContainerRequestContext crc) {
74-
return response(req -> ok(jsonDataverseRoles(roleAssigneeSvc.getAllOrAssigneeDataverseRolesFor(req))), getRequestUser(crc));
72+
@Path("userSelectable")
73+
public Response getUserSelectableRoles(@Context ContainerRequestContext crc) {
74+
return response(req -> ok(jsonDataverseRoles(roleAssigneeSvc.getSelectableDataverseRolesFor(req))), getRequestUser(crc));
7575
}
7676
}

src/test/java/edu/harvard/iq/dataverse/api/RolesIT.java

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11

22
package edu.harvard.iq.dataverse.api;
33

4+
import edu.harvard.iq.dataverse.authorization.DataverseRole;
45
import io.restassured.RestAssured;
56
import io.restassured.path.json.JsonPath;
67
import io.restassured.response.Response;
7-
import static jakarta.ws.rs.core.Response.Status.FORBIDDEN;
8+
89
import java.util.logging.Logger;
10+
11+
import static jakarta.ws.rs.core.Response.Status.*;
912
import static org.hamcrest.CoreMatchers.equalTo;
1013
import static org.junit.jupiter.api.Assertions.assertEquals;
1114

12-
import org.junit.jupiter.api.Assertions;
1315
import org.junit.jupiter.api.BeforeAll;
1416
import org.junit.jupiter.api.Test;
1517

@@ -108,5 +110,48 @@ public void testCreateDeleteRoles() {
108110
assertEquals("OK", status);
109111

110112
}
111-
113+
114+
@Test
115+
public void testGetUserSelectableRoles() {
116+
Response createAdminUser = UtilIT.createRandomUser();
117+
118+
String adminUsername = UtilIT.getUsernameFromResponse(createAdminUser);
119+
String adminApiToken = UtilIT.getApiTokenFromResponse(createAdminUser);
120+
UtilIT.makeSuperUser(adminUsername);
121+
122+
Response createUser = UtilIT.createRandomUser();
123+
124+
String username = UtilIT.getUsernameFromResponse(createUser);
125+
String apiToken = UtilIT.getApiTokenFromResponse(createUser);
126+
127+
// Non-superuser with no assigned roles: return all roles as fallback.
128+
129+
Response getUserSelectableRolesResponse = UtilIT.getUserSelectableRoles(apiToken);
130+
getUserSelectableRolesResponse.prettyPrint();
131+
132+
getUserSelectableRolesResponse.then().assertThat()
133+
.statusCode(OK.getStatusCode())
134+
.body("data.size()", equalTo(8));
135+
136+
// Non-superuser with assigned role: return assigned role.
137+
138+
Response createDataverseResponse = UtilIT.createRandomDataverse(adminApiToken);
139+
createDataverseResponse.then().assertThat()
140+
.statusCode(CREATED.getStatusCode());
141+
142+
String dataverseAlias = UtilIT.getAliasFromResponse(createDataverseResponse);
143+
144+
Response grantUserAddDataset = UtilIT.grantRoleOnDataverse(dataverseAlias, DataverseRole.DS_CONTRIBUTOR, "@" + username, adminApiToken);
145+
146+
grantUserAddDataset.then().assertThat()
147+
.statusCode(OK.getStatusCode())
148+
.body("data.assignee", equalTo("@" + username))
149+
.body("data._roleAlias", equalTo("dsContributor"));
150+
151+
getUserSelectableRolesResponse = UtilIT.getUserSelectableRoles(apiToken);
152+
getUserSelectableRolesResponse.then().assertThat()
153+
.statusCode(OK.getStatusCode())
154+
.body("data.size()", equalTo(1))
155+
.body("data[0].alias", equalTo(DataverseRole.DS_CONTRIBUTOR));
156+
}
112157
}

src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4815,4 +4815,11 @@ public static Response updateDatasetFilesMetadata(String datasetIdOrPersistentId
48154815
return given().header(API_TOKEN_HTTP_HEADER, apiToken).contentType(ContentType.JSON).body(jsonArray.toString())
48164816
.post("/api/datasets/" + idInPath + "/files/metadata" + optionalQueryParam);
48174817
}
4818+
4819+
static Response getUserSelectableRoles(String apiToken) {
4820+
return given()
4821+
.header(API_TOKEN_HTTP_HEADER, apiToken)
4822+
.contentType("application/json")
4823+
.get("/api/roles/userSelectable");
4824+
}
48184825
}

0 commit comments

Comments
 (0)