diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/BaseRestTest.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/BaseRestTest.java
index 601d1437e2..86d25ac5ac 100644
--- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/BaseRestTest.java
+++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/base/BaseRestTest.java
@@ -47,11 +47,14 @@ import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent
import org.alfresco.rest.rm.community.model.site.RMSite;
import org.alfresco.rest.rm.community.requests.FilePlanComponentAPI;
import org.alfresco.rest.rm.community.requests.RMSiteAPI;
+import org.alfresco.utility.constants.UserRole;
import org.alfresco.utility.data.DataUser;
+import org.alfresco.utility.model.UserModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
+import org.springframework.http.HttpStatus;
import org.testng.annotations.BeforeClass;
/**
@@ -84,7 +87,7 @@ public class BaseRestTest extends RestTest
@Autowired
private RMSiteAPI rmSiteAPI;
-
+
@Autowired
private DataUser dataUser;
@@ -211,4 +214,45 @@ public class BaseRestTest extends RestTest
restWrapper.assertStatusCodeIs(OK);
return updatedComponent;
}
+
+ /**
+ * Create RM user with given role
+ *
+ * Checks whether the user exists in RM site and creates it if required, with password identical
+ * to username. Note the role is a Core API role, not an RM role.
+ *
+ * For already existing users, no role verification is performed.
+ *
+ * @param userName username to add + * @param userRole user's role + * @throws Exception + */ + public UserModel createRMUserWithRole(String userName, UserRole userRole) throws Exception + { + rmSiteAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser()); + + String siteId = rmSiteAPI.getSite().getId(); + logger.info("Site:" + rmSiteAPI.getSite() + " id: " + siteId); + + // check if user exists + UserModel user = new UserModel(); + user.setUsername(userName); + user.setPassword(userName); + rmSiteAPI.usingRestWrapper().withCoreAPI().usingSite(siteId).getSiteMember(user); + + if (rmSiteAPI.usingRestWrapper().getStatusCode().equals(HttpStatus.NOT_FOUND.toString())) + { + // user doesn't exist, create it + logger.info("user doesn't exist, creating"); + + user = dataUser.createUser(userName, userName); + user.setUserRole(userRole); + + rmSiteAPI.usingRestWrapper().withCoreAPI().usingSite(siteId).addPerson(user); + rmSiteAPI.usingRestWrapper().assertStatusCodeIs(HttpStatus.CREATED); + } + logger.info("returning existing user"); + + return user; + } } \ No newline at end of file diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/NonElectronicRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/NonElectronicRecordTests.java index 9d556a454a..6848d39ba9 100644 --- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/NonElectronicRecordTests.java +++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/NonElectronicRecordTests.java @@ -39,6 +39,7 @@ import static org.alfresco.rest.rm.community.util.PojoUtility.toJson; import static org.alfresco.utility.data.RandomData.getRandomAlphanumeric; import static org.springframework.http.HttpStatus.BAD_REQUEST; import static org.springframework.http.HttpStatus.CREATED; +import static org.springframework.http.HttpStatus.NOT_FOUND; import static org.springframework.http.HttpStatus.UNPROCESSABLE_ENTITY; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; @@ -49,6 +50,7 @@ import org.alfresco.rest.rm.community.base.BaseRestTest; import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent; import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentProperties; import org.alfresco.rest.rm.community.requests.FilePlanComponentAPI; +import org.alfresco.utility.constants.UserRole; import org.alfresco.utility.data.DataUser; import org.alfresco.utility.model.UserModel; import org.springframework.beans.factory.annotation.Autowired; @@ -68,7 +70,7 @@ public class NonElectronicRecordTests extends BaseRestTest @Autowired private DataUser dataUser; - + /** Valid root containers where non-electronic records can be created */ @DataProvider(name = "validContainers") public Object[][] rootContainers() throws Exception { @@ -92,7 +94,7 @@ public class NonElectronicRecordTests extends BaseRestTest * @throws Exception if prerequisites can't be created */ @Test(description = "Non-electronic record can't be created as a child of invalid parent Id") - public void noCreateForInvalidParentIds() throws Exception + public void cantCreateForInvalidParentIds() throws Exception { filePlanComponentAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser()); @@ -151,6 +153,8 @@ public class NonElectronicRecordTests extends BaseRestTest ) public void canCreateInValidContainers(FilePlanComponent container) throws Exception { + filePlanComponentAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser()); + logger.info("Root container:\n" + toJson(container)); if (container.getNodeType().equals(RECORD_FOLDER_TYPE.toString())) { @@ -213,8 +217,9 @@ public class NonElectronicRecordTests extends BaseRestTest * @throws Exception if prerequisites can't be created */ @Test(description = "Non-electronic record can't be created in closed record folder") - public void noCreateInClosedFolder() throws Exception + public void cantCreateInClosedFolder() throws Exception { + filePlanComponentAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser()); FilePlanComponent recordFolder = createFolderInFilePlan(dataUser.getAdminUser(), FILE_PLAN_ALIAS.toString()); // the folder should be open @@ -266,6 +271,8 @@ public class NonElectronicRecordTests extends BaseRestTest ) public void allMandatoryPropertiesRequired(FilePlanComponent container) throws Exception { + filePlanComponentAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser()); + logger.info("Root container:\n" + toJson(container)); if (container.getNodeType().equals(RECORD_FOLDER_TYPE.toString())) { @@ -282,12 +289,8 @@ public class NonElectronicRecordTests extends BaseRestTest properties.setTitle("Title " + getRandomAlphanumeric()); titleOnly.setProperties(properties); - // component with name only - FilePlanComponent nameOnly = getDummyNonElectronicRecord(); - nameOnly.setName("Name " + getRandomAlphanumeric()); - // try to create invalid components - asList(noNameOrTitle, titleOnly, nameOnly).stream().forEach(c -> + asList(noNameOrTitle, titleOnly).stream().forEach(c -> { try { @@ -311,6 +314,44 @@ public class NonElectronicRecordTests extends BaseRestTest }); } + /** + *
+ * Given that I am a user without RM privileges + * When I try to create a non-electronic record + * Then nothing happens + * And an error is reported + *+ * @throws Exception + */ + @Test + ( + dataProvider = "validContainers", + description = "Non-electronic record can't be created if user doesn't have RM privileges" + ) + public void cantCreateIfNoRmPrivileges(FilePlanComponent container) throws Exception + { + String username = "zzzuser"; + UserModel user = createRMUserWithRole(username, UserRole.SiteConsumer); + + filePlanComponentAPI.usingRestWrapper().authenticateUser(user); + + // try to create a fileplan component + FilePlanComponent record = new FilePlanComponent("Record Name", NON_ELECTRONIC_RECORD_TYPE.toString(), + new FilePlanComponentProperties("Name", "Title")); + + // this should fail and throw an exception + try + { + filePlanComponentAPI.createFilePlanComponent(record, container.getId()); + } + catch (Exception e) + { + } + + // user who isn't an RM site member can't access the container path, hence NOT_FOUND + filePlanComponentAPI.usingRestWrapper().assertStatusCodeIs(NOT_FOUND); + } + /** * Helper function to return an empty FilePlanComponent for non-electronic record * @return