RM-4615: TAS implementation of FilePlanComponentAPI.createElectronicRecord()

This commit is contained in:
Kristijan Conkas
2017-01-25 13:30:29 +00:00
parent 10105b4c21
commit 45fb371de7
4 changed files with 39 additions and 38 deletions

View File

@@ -26,9 +26,6 @@
*/ */
package org.alfresco.rest.rm.community.requests.igCoreAPI; package org.alfresco.rest.rm.community.requests.igCoreAPI;
import static com.jayway.restassured.RestAssured.basic;
import static com.jayway.restassured.RestAssured.given;
import static org.alfresco.rest.core.RestRequest.requestWithBody; import static org.alfresco.rest.core.RestRequest.requestWithBody;
import static org.alfresco.rest.core.RestRequest.simpleRequest; import static org.alfresco.rest.core.RestRequest.simpleRequest;
import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.CONTENT_TYPE; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentType.CONTENT_TYPE;
@@ -50,13 +47,13 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.io.Resources; import com.google.common.io.Resources;
import com.jayway.restassured.builder.RequestSpecBuilder; import com.jayway.restassured.builder.RequestSpecBuilder;
import com.jayway.restassured.http.ContentType; import com.jayway.restassured.http.ContentType;
import com.jayway.restassured.response.Response;
import org.alfresco.rest.core.RMRestWrapper; import org.alfresco.rest.core.RMRestWrapper;
import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent; import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent;
import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentsCollection; import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentsCollection;
import org.alfresco.rest.rm.community.requests.RMModelRequest; import org.alfresco.rest.rm.community.requests.RMModelRequest;
import org.alfresco.utility.model.UserModel; import org.alfresco.utility.model.ContentModel;
import org.alfresco.utility.model.RepoTestModel;
/** /**
* File plan component REST API Wrapper * File plan component REST API Wrapper
@@ -250,41 +247,41 @@ public class FilePlanComponentAPI extends RMModelRequest
{ {
fail("Only electronic records are supported"); fail("Only electronic records are supported");
} }
UserModel currentUser = getRMRestWrapper().getTestUser(); RepoTestModel parentNode = new ContentModel();
// using getFilePlanComponent to work around RM special containers, unsupported in Core API usingNode()
parentNode.setNodeRef(getFilePlanComponent(parentId).getId());
/* /*
* For file uploads nodeBodyCreate is ignored hence can't be used. Append all FilePlanComponent fields * For file uploads nodeBodyCreate is ignored hence can't be used. Append all FilePlanComponent fields
* to the request. * to the request.
*/ */
RequestSpecBuilder builder = new RequestSpecBuilder(); RequestSpecBuilder builder = restWrapper.configureRequestSpec();
builder.setAuth(basic(currentUser.getUsername(), currentUser.getPassword()));
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(toJson(electronicRecordModel)); JsonNode root = mapper.readTree(toJson(electronicRecordModel));
// add request fields
Iterator<String> fieldNames = root.fieldNames(); Iterator<String> fieldNames = root.fieldNames();
while (fieldNames.hasNext()) while (fieldNames.hasNext())
{ {
String fieldName = fieldNames.next(); String fieldName = fieldNames.next();
builder.addMultiPart(fieldName, root.get(fieldName).asText(), ContentType.JSON.name()); builder.addMultiPart(fieldName, root.get(fieldName).asText(), ContentType.JSON.name());
} }
builder.addMultiPart("filedata", recordContent, ContentType.BINARY.name()); builder.addMultiPart("filedata", recordContent, ContentType.BINARY.name());
String nodeId = getRMRestWrapper().withCoreAPI().usingNode(parentNode).createNode().getId();
/* String createStatusCode = getRMRestWrapper().getStatusCode();
* RestWrapper adds some headers which break multipart/form-data uploads and also assumes json POST requests.
* Upload the file using RestAssured library. // return FilePlanComponent for created node
*/ FilePlanComponent createdComponent = getRMRestWrapper()
Response response = given() .withIGCoreAPI()
.spec(builder.build()) .usingFilePlanComponents()
.when() .getFilePlanComponent(nodeId);
.post("fileplan-components/{fileplanComponentId}/children?{parameters}", parentId, getRMRestWrapper().getParameters())
.andReturn(); // avoid getFilePlanComponent() overriding the createNode status code
getRMRestWrapper().setStatusCode(Integer.toString(response.getStatusCode())); getRMRestWrapper().setStatusCode(createStatusCode);
/* return a FilePlanComponent object representing Response */ return createdComponent;
return response.jsonPath().getObject("entry", FilePlanComponent.class);
} }
/** /**

View File

@@ -95,7 +95,7 @@ public class RMUserAPI extends RMModelRequest
*/ */
public void assignRoleToUser(String userName, String userRole) throws Exception public void assignRoleToUser(String userName, String userRole) throws Exception
{ {
UserModel dataUser = getRMRestWrapper().getTestUser(); UserModel adminUser = getRMRestWrapper().getTestUser();
// get an "old-style" REST API client // get an "old-style" REST API client
AlfrescoHttpClient client = getAlfrescoHttpClient(); AlfrescoHttpClient client = getAlfrescoHttpClient();
@@ -111,8 +111,8 @@ public class RMUserAPI extends RMModelRequest
.log().all() .log().all()
.pathParam("role", userRole) .pathParam("role", userRole)
.pathParam("authority", userName) .pathParam("authority", userName)
.param("alf_ticket", client.getAlfTicket(dataUser.getUsername(), .param("alf_ticket", client.getAlfTicket(adminUser.getUsername(),
dataUser.getPassword())) adminUser.getPassword()))
.when() .when()
.post("/rm/roles/{role}/authorities/{authority}") .post("/rm/roles/{role}/authorities/{authority}")
.prettyPeek() .prettyPeek()
@@ -128,7 +128,7 @@ public class RMUserAPI extends RMModelRequest
*/ */
public void addUserPermission(FilePlanComponent component, UserModel user, String permission) public void addUserPermission(FilePlanComponent component, UserModel user, String permission)
{ {
UserModel dataUser = getRMRestWrapper().getTestUser(); UserModel adminUser = getRMRestWrapper().getTestUser();
// get an "old-style" REST API client // get an "old-style" REST API client
AlfrescoHttpClient client = getAlfrescoHttpClient(); AlfrescoHttpClient client = getAlfrescoHttpClient();
@@ -150,7 +150,7 @@ public class RMUserAPI extends RMModelRequest
// execute an "old-style" API call // execute an "old-style" API call
Response response = given() Response response = given()
.spec(spec) .spec(spec)
.auth().basic(dataUser.getUsername(), dataUser.getPassword()) .auth().basic(adminUser.getUsername(), adminUser.getPassword())
.contentType(ContentType.JSON) .contentType(ContentType.JSON)
.body(bodyJson.toString()) .body(bodyJson.toString())
.pathParam("nodeId", component.getId()) .pathParam("nodeId", component.getId())
@@ -172,7 +172,7 @@ public class RMUserAPI extends RMModelRequest
*/ */
public boolean createUser(String userName, String userPassword, String userEmail) public boolean createUser(String userName, String userPassword, String userEmail)
{ {
UserModel dataUser = getRMRestWrapper().getTestUser(); UserModel adminUser = getRMRestWrapper().getTestUser();
AlfrescoHttpClient client = getAlfrescoHttpClient(); AlfrescoHttpClient client = getAlfrescoHttpClient();
JsonObject body = buildObject() JsonObject body = buildObject()
@@ -186,7 +186,7 @@ public class RMUserAPI extends RMModelRequest
RequestSpecification spec = new RequestSpecBuilder() RequestSpecification spec = new RequestSpecBuilder()
.setBaseUri(client.getApiUrl()) .setBaseUri(client.getApiUrl())
.setBasePath("/") .setBasePath("/")
.setAuth(basic(dataUser.getUsername(), dataUser.getPassword())) .setAuth(basic(adminUser.getUsername(), adminUser.getPassword()))
.setContentType(ContentType.JSON) .setContentType(ContentType.JSON)
.setBody(body.toString()) .setBody(body.toString())
.build(); .build();

View File

@@ -144,6 +144,5 @@ public class RecordsAPI extends RMModelRequest
parameters parameters
)); ));
} }
} }

View File

@@ -87,11 +87,12 @@ public class ElectronicRecordTests extends BaseRMRestTest
@Test @Test
( (
dataProvider = "invalidParentContainers", dataProvider = "invalidParentContainers",
description = "Electronic records can't be created in invalid parent containers" description = "Electronic records can't be created in invalid parent containers",
expectedExceptions = IllegalArgumentException.class
) )
public void cantCreateElectronicRecordsInInvalidContainers(FilePlanComponent container) throws Exception public void cantCreateElectronicRecordsInInvalidContainers(FilePlanComponent container) throws Exception
{ {
// Build object the filePlan // Build object the filePlan, this should throw an IllegalArgumentException
getRestAPIFactory().getFilePlanComponentsAPI().createElectronicRecord(createElectronicRecordModel(), IMAGE_FILE, container.getId()); getRestAPIFactory().getFilePlanComponentsAPI().createElectronicRecord(createElectronicRecordModel(), IMAGE_FILE, container.getId());
// verify the create request status code // verify the create request status code
@@ -108,7 +109,11 @@ public class ElectronicRecordTests extends BaseRMRestTest
* </pre> * </pre>
* @throws Exception * @throws Exception
*/ */
@Test(description = "Electronic record can't be created in closed record folder") @Test
(
description = "Electronic record can't be created in closed record folder",
expectedExceptions = IllegalArgumentException.class
)
public void cantCreateElectronicRecordInClosedFolder() throws Exception public void cantCreateElectronicRecordInClosedFolder() throws Exception
{ {
FilePlanComponent recordFolder = createCategoryFolderInFilePlan(); FilePlanComponent recordFolder = createCategoryFolderInFilePlan();
@@ -119,7 +124,7 @@ public class ElectronicRecordTests extends BaseRMRestTest
// close the folder // close the folder
closeFolder(recordFolder.getId()); closeFolder(recordFolder.getId());
// try to create it, this should fail // try to create it, this should throw IllegalArgumentException
getRestAPIFactory().getFilePlanComponentsAPI().createElectronicRecord(createElectronicRecordModel(), IMAGE_FILE, recordFolder.getId()); getRestAPIFactory().getFilePlanComponentsAPI().createElectronicRecord(createElectronicRecordModel(), IMAGE_FILE, recordFolder.getId());
// verify the status code // verify the status code