Skip to content

Commit cf7482e

Browse files
committed
Added: unit tests for GetUserPermittedCollectionsCommand
1 parent 2678e69 commit cf7482e

File tree

3 files changed

+146
-4
lines changed

3 files changed

+146
-4
lines changed

src/main/java/edu/harvard/iq/dataverse/engine/command/impl/GetUserPermittedCollectionsCommand.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
1010
import edu.harvard.iq.dataverse.engine.command.RequiredPermissions;
1111
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
12+
import edu.harvard.iq.dataverse.engine.command.exception.InvalidCommandArgumentsException;
13+
import edu.harvard.iq.dataverse.util.BundleUtil;
1214

1315
import java.util.List;
1416

@@ -33,6 +35,8 @@
3335
@RequiredPermissions({})
3436
public class GetUserPermittedCollectionsCommand extends AbstractCommand<List<Dataverse>> {
3537

38+
public static final String ANY_PERMISSION = "any";
39+
3640
private final DataverseRequest request;
3741
private final AuthenticatedUser user;
3842
private final String permission;
@@ -47,14 +51,13 @@ public GetUserPermittedCollectionsCommand(DataverseRequest request, Authenticate
4751
@Override
4852
public List<Dataverse> execute(CommandContext ctxt) throws CommandException {
4953
if (user == null) {
50-
throw new CommandException("User not found.", this);
54+
throw new CommandException(BundleUtil.getStringFromBundle("getUserPermittedCollectionsCommand.errors.userNotFound"), this);
5155
}
5256
int permissionBit;
5357
try {
54-
permissionBit = permission.equalsIgnoreCase("any") ?
55-
Integer.MAX_VALUE : (1 << Permission.valueOf(permission).ordinal());
58+
permissionBit = permission.equalsIgnoreCase(ANY_PERMISSION) ? Integer.MAX_VALUE : (1 << Permission.valueOf(permission).ordinal());
5659
} catch (IllegalArgumentException e) {
57-
throw new CommandException("Permission not valid.", this);
60+
throw new InvalidCommandArgumentsException(BundleUtil.getStringFromBundle("getUserPermittedCollectionsCommand.errors.permissionNotValid"), this);
5861
}
5962
return ctxt.permissions().findPermittedCollections(request, user, permissionBit);
6063
}

src/main/java/propertyFiles/Bundle.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3232,3 +3232,7 @@ abstractApiBean.error.internalVersionTimestampIsOutdated=Internal version timest
32323232

32333233
#RoleAssigneeServiceBean.java
32343234
roleAssigneeServiceBean.error.dataverseRequestCannotBeNull=DataverseRequest cannot be null.
3235+
3236+
#GetUserPermittedCollectionsCommand.java
3237+
getUserPermittedCollectionsCommand.errors.userNotFound=User not found.
3238+
getUserPermittedCollectionsCommand.errors.permissionNotValid=Permission not valid.
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
package edu.harvard.iq.dataverse.engine.command.impl;
2+
3+
import edu.harvard.iq.dataverse.Dataverse;
4+
import edu.harvard.iq.dataverse.PermissionServiceBean;
5+
import edu.harvard.iq.dataverse.authorization.Permission;
6+
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
7+
import edu.harvard.iq.dataverse.engine.command.CommandContext;
8+
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
9+
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
10+
import edu.harvard.iq.dataverse.engine.command.exception.InvalidCommandArgumentsException;
11+
import edu.harvard.iq.dataverse.util.BundleUtil;
12+
import org.junit.jupiter.api.BeforeEach;
13+
import org.junit.jupiter.api.Test;
14+
import org.mockito.Mockito;
15+
16+
import java.util.Arrays;
17+
import java.util.Collections;
18+
import java.util.List;
19+
20+
import static org.junit.jupiter.api.Assertions.assertEquals;
21+
import static org.junit.jupiter.api.Assertions.assertThrows;
22+
23+
public class GetUserPermittedCollectionsCommandTest {
24+
25+
private DataverseRequest dataverseRequest;
26+
private AuthenticatedUser authenticatedUser;
27+
private CommandContext commandContext;
28+
private PermissionServiceBean permissionsServiceBean;
29+
30+
@BeforeEach
31+
public void setUp() {
32+
dataverseRequest = Mockito.mock(DataverseRequest.class);
33+
authenticatedUser = Mockito.mock(AuthenticatedUser.class);
34+
commandContext = Mockito.mock(CommandContext.class);
35+
permissionsServiceBean = Mockito.mock(PermissionServiceBean.class);
36+
Mockito.when(commandContext.permissions()).thenReturn(permissionsServiceBean);
37+
}
38+
39+
@Test
40+
public void execute_shouldReturnCollections_whenAnyPermissionIsRequested() throws CommandException {
41+
// Arrange
42+
Dataverse dv1 = new Dataverse();
43+
Dataverse dv2 = new Dataverse();
44+
List<Dataverse> expectedDataverses = Arrays.asList(dv1, dv2);
45+
46+
Mockito.when(permissionsServiceBean.findPermittedCollections(
47+
Mockito.any(DataverseRequest.class),
48+
Mockito.any(AuthenticatedUser.class),
49+
Mockito.eq(Integer.MAX_VALUE)
50+
)).thenReturn(expectedDataverses);
51+
52+
GetUserPermittedCollectionsCommand sut = new GetUserPermittedCollectionsCommand(
53+
dataverseRequest,
54+
authenticatedUser,
55+
GetUserPermittedCollectionsCommand.ANY_PERMISSION
56+
);
57+
58+
// Act
59+
List<Dataverse> result = sut.execute(commandContext);
60+
61+
// Assert
62+
assertEquals(expectedDataverses.size(), result.size());
63+
assertEquals(expectedDataverses, result);
64+
Mockito.verify(permissionsServiceBean).findPermittedCollections(
65+
dataverseRequest,
66+
authenticatedUser,
67+
Integer.MAX_VALUE
68+
);
69+
}
70+
71+
@Test
72+
public void execute_shouldReturnCollections_whenSpecificPermissionIsRequested() throws CommandException {
73+
// Arrange
74+
Dataverse dv = new Dataverse();
75+
List<Dataverse> expectedDataverses = Collections.singletonList(dv);
76+
77+
Mockito.when(permissionsServiceBean.findPermittedCollections(
78+
Mockito.any(DataverseRequest.class),
79+
Mockito.any(AuthenticatedUser.class),
80+
Mockito.eq(1 << Permission.AddDataset.ordinal())
81+
)).thenReturn(expectedDataverses);
82+
83+
GetUserPermittedCollectionsCommand sut = new GetUserPermittedCollectionsCommand(
84+
dataverseRequest,
85+
authenticatedUser,
86+
Permission.AddDataset.name()
87+
);
88+
89+
// Act
90+
List<Dataverse> result = sut.execute(commandContext);
91+
92+
// Assert
93+
assertEquals(expectedDataverses.size(), result.size());
94+
assertEquals(expectedDataverses, result);
95+
Mockito.verify(permissionsServiceBean).findPermittedCollections(
96+
dataverseRequest,
97+
authenticatedUser,
98+
1 << Permission.AddDataset.ordinal()
99+
);
100+
}
101+
102+
@Test
103+
public void execute_shouldThrowException_whenUserIsNotFound() {
104+
// Arrange
105+
AuthenticatedUser nullUser = null;
106+
GetUserPermittedCollectionsCommand sut = new GetUserPermittedCollectionsCommand(
107+
dataverseRequest,
108+
nullUser,
109+
GetUserPermittedCollectionsCommand.ANY_PERMISSION
110+
);
111+
112+
// Act & Assert
113+
CommandException exception = assertThrows(CommandException.class, () -> {
114+
sut.execute(commandContext);
115+
});
116+
assertEquals(BundleUtil.getStringFromBundle("getUserPermittedCollectionsCommand.errors.userNotFound"), exception.getMessage());
117+
}
118+
119+
@Test
120+
public void execute_shouldThrowException_whenPermissionIsNotValid() {
121+
// Arrange
122+
String invalidPermission = "invalid_permission_name";
123+
GetUserPermittedCollectionsCommand sut = new GetUserPermittedCollectionsCommand(
124+
dataverseRequest,
125+
authenticatedUser,
126+
invalidPermission
127+
);
128+
129+
// Act & Assert
130+
InvalidCommandArgumentsException exception = assertThrows(InvalidCommandArgumentsException.class, () -> {
131+
sut.execute(commandContext);
132+
});
133+
assertEquals(BundleUtil.getStringFromBundle("getUserPermittedCollectionsCommand.errors.permissionNotValid"), exception.getMessage());
134+
}
135+
}

0 commit comments

Comments
 (0)