diff --git a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/FilePlanComponentAPI.java b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/FilePlanComponentAPI.java index 3a4ae7afa9..7fd5575280 100644 --- a/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/FilePlanComponentAPI.java +++ b/rm-automation/rm-automation-community-rest-api/src/main/java/org/alfresco/rest/rm/community/requests/FilePlanComponentAPI.java @@ -26,6 +26,7 @@ */ package org.alfresco.rest.rm.community.requests; +import static com.jayway.restassured.RestAssured.basic; import static com.jayway.restassured.RestAssured.given; import static org.alfresco.rest.core.RestRequest.requestWithBody; @@ -41,7 +42,11 @@ import static org.testng.Assert.fail; import java.io.File; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.io.Resources; +import com.jayway.restassured.builder.RequestSpecBuilder; import com.jayway.restassured.http.ContentType; import com.jayway.restassured.response.Response; @@ -168,17 +173,40 @@ public class FilePlanComponentAPI extends RestAPI { fail("Only electronic records are supported"); } + + UserModel currentUser = usingRestWrapper().getTestUser(); + + /* + * For file uploads nodeBodyCreate is ignored hence can't be used. Append all FilePlanComponent fields + * to the request. + */ + RequestSpecBuilder builder = new RequestSpecBuilder(); + builder.setAuth(basic(currentUser.getUsername(), currentUser.getPassword())); + + ObjectMapper mapper = new ObjectMapper(); + mapper.setSerializationInclusion(Include.NON_DEFAULT); + JsonNode root = mapper.readTree(toJson(electronicRecordModel)); + + root.fieldNames().forEachRemaining(f -> { + try + { + builder.addMultiPart(f, root.get(f).asText(), ContentType.JSON.name()); + } + catch (Exception error) + { + LOG.error("Failed to set " + f + " error: " + error); + } + }); + + builder.addMultiPart("filedata", recordContent, ContentType.BINARY.name()); /* * RestWrapper adds some headers which break multipart/form-data uploads and also assumes json POST requests. * Upload the file using RestAssured library. */ - UserModel currentUser = usingRestWrapper().getTestUser(); Response response = given() - .auth().basic(currentUser.getUsername(), currentUser.getPassword()) - .multiPart("nodeBodyCreate", toJson(electronicRecordModel), ContentType.JSON.name()) - .multiPart("filedata", recordContent, ContentType.BINARY.name()) - .multiPart("name", electronicRecordModel.getName() != null ? electronicRecordModel.getName() : recordContent.getName()) + .spec(builder.build()) + .log().everything() .when() .post("fileplan-components/{fileplanComponentId}/children?{parameters}", parentId, getParameters()) .andReturn(); diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java index 8dc9c84b83..53a407f552 100644 --- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java +++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/fileplancomponents/ElectronicRecordTests.java @@ -216,8 +216,10 @@ public class ElectronicRecordTests extends BaseRestTest { filePlanComponentAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser()); - FilePlanComponent record = new FilePlanComponent("Record " + getRandomAlphanumeric(), CONTENT_TYPE.toString(), - new FilePlanComponentProperties()); + FilePlanComponent record = new FilePlanComponent(); + record.setName("Record " + getRandomAlphanumeric()); + record.setNodeType(CONTENT_TYPE.toString()); + String newRecordId = filePlanComponentAPI.createElectronicRecord(record, IMAGE_FILE, container.getId()).getId(); // verify the create request status code @@ -248,7 +250,7 @@ public class ElectronicRecordTests extends BaseRestTest // record object without name set FilePlanComponent record = new FilePlanComponent(); record.setNodeType(CONTENT_TYPE.toString()); - record.setProperties(new FilePlanComponentProperties()); + String newRecordId = filePlanComponentAPI.createElectronicRecord(record, IMAGE_FILE, container.getId()).getId(); // verify the create request status code