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

This commit is contained in:
Kristijan Conkas
2017-01-25 13:30:29 +00:00
parent dcffcf8c3e
commit 5343bbd556
4 changed files with 39 additions and 38 deletions

View File

@@ -26,9 +26,6 @@
*/
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.simpleRequest;
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.jayway.restassured.builder.RequestSpecBuilder;
import com.jayway.restassured.http.ContentType;
import com.jayway.restassured.response.Response;
import org.alfresco.rest.core.RMRestWrapper;
import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponent;
import org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentsCollection;
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
@@ -250,41 +247,41 @@ public class FilePlanComponentAPI extends RMModelRequest
{
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
* to the request.
*/
RequestSpecBuilder builder = new RequestSpecBuilder();
builder.setAuth(basic(currentUser.getUsername(), currentUser.getPassword()));
RequestSpecBuilder builder = restWrapper.configureRequestSpec();
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(toJson(electronicRecordModel));
// add request fields
Iterator<String> fieldNames = root.fieldNames();
while (fieldNames.hasNext())
{
String fieldName = fieldNames.next();
builder.addMultiPart(fieldName, root.get(fieldName).asText(), ContentType.JSON.name());
}
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.
*/
Response response = given()
.spec(builder.build())
.when()
.post("fileplan-components/{fileplanComponentId}/children?{parameters}", parentId, getRMRestWrapper().getParameters())
.andReturn();
getRMRestWrapper().setStatusCode(Integer.toString(response.getStatusCode()));
/* return a FilePlanComponent object representing Response */
return response.jsonPath().getObject("entry", FilePlanComponent.class);
String nodeId = getRMRestWrapper().withCoreAPI().usingNode(parentNode).createNode().getId();
String createStatusCode = getRMRestWrapper().getStatusCode();
// return FilePlanComponent for created node
FilePlanComponent createdComponent = getRMRestWrapper()
.withIGCoreAPI()
.usingFilePlanComponents()
.getFilePlanComponent(nodeId);
// avoid getFilePlanComponent() overriding the createNode status code
getRMRestWrapper().setStatusCode(createStatusCode);
return createdComponent;
}
/**

View File

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

View File

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

View File

@@ -87,11 +87,12 @@ public class ElectronicRecordTests extends BaseRMRestTest
@Test
(
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
{
// Build object the filePlan
// Build object the filePlan, this should throw an IllegalArgumentException
getRestAPIFactory().getFilePlanComponentsAPI().createElectronicRecord(createElectronicRecordModel(), IMAGE_FILE, container.getId());
// verify the create request status code
@@ -108,7 +109,11 @@ public class ElectronicRecordTests extends BaseRMRestTest
* </pre>
* @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
{
FilePlanComponent recordFolder = createCategoryFolderInFilePlan();
@@ -119,7 +124,7 @@ public class ElectronicRecordTests extends BaseRMRestTest
// close the folder
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());
// verify the status code