From a892c63d77bc4e07d0039cc9921a7cff75818154 Mon Sep 17 00:00:00 2001 From: Tuna Aksoy Date: Tue, 25 Oct 2016 10:05:32 +0100 Subject: [PATCH] Refactored test code --- README | 2 + pom.xml | 5 + .../alfresco/com/FilePlanComponentAlias.java | 59 ++++++ .../alfresco/com/FilePlanComponentFields.java | 28 +++ .../alfresco/com/FilePlanComponentType.java | 62 ++++++ .../org/alfresco/com/util/ParameterCheck.java | 57 ++++++ .../rest/body/IgJsonBodyGenerator.java | 93 --------- ...onentModel.java => FilePlanComponent.java} | 27 ++- ....java => FilePlanComponentProperties.java} | 26 ++- .../rest/requests/FilePlanComponentApi.java | 145 ++++++++++++++ .../requests/RestFilePlanComponentApi.java | 99 ---------- ...{BaseIgRestTest.java => BaseRestTest.java} | 17 +- .../rest/fileplancomponents/FilePlanTest.java | 48 ----- .../RecordCategoryTest.java | 177 +++++++++++------- 14 files changed, 503 insertions(+), 342 deletions(-) create mode 100644 src/main/java/org/alfresco/com/FilePlanComponentAlias.java create mode 100644 src/main/java/org/alfresco/com/FilePlanComponentFields.java create mode 100644 src/main/java/org/alfresco/com/FilePlanComponentType.java create mode 100644 src/main/java/org/alfresco/com/util/ParameterCheck.java delete mode 100644 src/main/java/org/alfresco/rest/body/IgJsonBodyGenerator.java rename src/main/java/org/alfresco/rest/model/{RestFilePlanComponentModel.java => FilePlanComponent.java} (88%) rename src/main/java/org/alfresco/rest/model/{PropertiesModel.java => FilePlanComponentProperties.java} (74%) create mode 100644 src/main/java/org/alfresco/rest/requests/FilePlanComponentApi.java delete mode 100644 src/main/java/org/alfresco/rest/requests/RestFilePlanComponentApi.java rename src/test/java/org/alfresco/rest/{BaseIgRestTest.java => BaseRestTest.java} (64%) delete mode 100644 src/test/java/org/alfresco/rest/fileplancomponents/FilePlanTest.java diff --git a/README b/README index 3aa3496e19..da2b8cbd31 100644 --- a/README +++ b/README @@ -1 +1,3 @@ +FIXME: DOCUMENT ME BETTER :) + In order to change the value of a property in "config.properties" create a file called "local.properties" under src/test/resources and redefine the property with the new value. \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9aa1699457..b1c0b95331 100644 --- a/pom.xml +++ b/pom.xml @@ -25,5 +25,10 @@ test-jar test + + org.jglue.fluent-json + fluent-json + 2.0.0 + diff --git a/src/main/java/org/alfresco/com/FilePlanComponentAlias.java b/src/main/java/org/alfresco/com/FilePlanComponentAlias.java new file mode 100644 index 0000000000..13dc3dbd68 --- /dev/null +++ b/src/main/java/org/alfresco/com/FilePlanComponentAlias.java @@ -0,0 +1,59 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + * #L% + */ +package org.alfresco.com; + +/** + * File plan component alias enumeration + * + * @author Tuna Aksoy + * @since 1.0 + */ +public enum FilePlanComponentAlias +{ + FILE_PLAN_ALIAS("-filePlan-"), + TRANSFERS_ALIAS("-transfers-"), + UNFILED_RECORDS_CONTAINER_ALIAS("-unfiled-"), + HOLDS_ALIAS("-holds-"); + + private String alias; + + private FilePlanComponentAlias(String alias) + { + this.alias = alias; + } + + public static final FilePlanComponentAlias getFilePlanComponentAlias(String alias) + { + switch (alias) + { + case "-filePlan-": + return FILE_PLAN_ALIAS; + case "-transfers-": + return TRANSFERS_ALIAS; + case "-unfiled-": + return UNFILED_RECORDS_CONTAINER_ALIAS; + case "-holds-": + return HOLDS_ALIAS; + } + + throw new IllegalArgumentException("Invalid file plan component alias enum value: '" + alias + "'."); + } + + /** + * @see java.lang.Enum#toString() + */ + @Override + public String toString() + { + return this.alias; + } +} diff --git a/src/main/java/org/alfresco/com/FilePlanComponentFields.java b/src/main/java/org/alfresco/com/FilePlanComponentFields.java new file mode 100644 index 0000000000..76b91035c4 --- /dev/null +++ b/src/main/java/org/alfresco/com/FilePlanComponentFields.java @@ -0,0 +1,28 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + * #L% + */ +package org.alfresco.com; + +/** + * FIXME: Document me :) + * + * @author Tuna Aksoy + * @since 1.0 + */ +public class FilePlanComponentFields +{ + public static final String NAME = "name"; + public static final String NODE_TYPE = "nodeType"; + public static final String PROPERTIES = "properties"; + public static final String PROPERTIES_TITLE = "cm:title"; + public static final String PROPERTIES_VITAL_RECORD_INDICATOR = "rma:vitalRecordIndicator"; + public static final String PROPERTIES_HOLD_REASON = "rma:holdReason"; +} diff --git a/src/main/java/org/alfresco/com/FilePlanComponentType.java b/src/main/java/org/alfresco/com/FilePlanComponentType.java new file mode 100644 index 0000000000..432178c75e --- /dev/null +++ b/src/main/java/org/alfresco/com/FilePlanComponentType.java @@ -0,0 +1,62 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + * #L% + */ +package org.alfresco.com; + +/** + * File plan component type enumeration + * + * @author Tuna Aksoy + * @since 1.0 + */ +public enum FilePlanComponentType +{ + FILE_PLAN_TYPE("rma:filePlan"), + RECORD_CATEGORY_TYPE("rma:recordCategory"), + RECORD_FOLDER_TYPE("rma:recordFolder"), + HOLD_TYPE("rma:hold"), + UNFILED_RECORD_FOLDER_TYPE("rma:unfiledRecordFolder"); + + private String type; + + private FilePlanComponentType(String type) + { + this.type = type; + } + + public static final FilePlanComponentType getFilePlanComponentType(String type) + { + switch (type) + { + case "rma:filePlan": + return FILE_PLAN_TYPE; + case "rma:recordCategory": + return RECORD_CATEGORY_TYPE; + case "rma:recordFolder": + return RECORD_FOLDER_TYPE; + case "rma:hold": + return HOLD_TYPE; + case "rma:unfiledRecordFolder": + return UNFILED_RECORD_FOLDER_TYPE; + } + + throw new IllegalArgumentException("Invalid file plan component type enum value: '" + type + "'."); + } + + /** + * @see java.lang.Enum#toString() + */ + @Override + public String toString() + { + return this.type; + } +} diff --git a/src/main/java/org/alfresco/com/util/ParameterCheck.java b/src/main/java/org/alfresco/com/util/ParameterCheck.java new file mode 100644 index 0000000000..533fbe6573 --- /dev/null +++ b/src/main/java/org/alfresco/com/util/ParameterCheck.java @@ -0,0 +1,57 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + * #L% + */ +package org.alfresco.com.util; + +import static org.apache.commons.lang3.StringUtils.isBlank; + +/** + * Utility class for checking parameters + * + * @author Tuna Aksoy + * @since 1.0 + */ +public class ParameterCheck +{ + private ParameterCheck() + { + // Intentionally blank + } + + /** + * FIXME: Document me :) + * + * @param paramName FIXME: Document me :) + * @param paramValue FIXME: Document me :) + * @throws IllegalArgumentException FIXME: Document me :) + */ + public static void mandatoryString(final String paramName, final String paramValue) throws IllegalArgumentException + { + if (isBlank(paramValue)) + { + throw new IllegalArgumentException("'" + paramName + "' is a mandatory parameter."); + } + } + + /** + * FIXME: Document me :) + * + * @param paramName FIXME: Document me :) + * @param object FIXME: Document me :) + */ + public static void mandatoryObject(final String paramName, final Object object) + { + if (object == null) + { + throw new IllegalArgumentException("'" + paramName + "' is a mandatory parameter."); + } + } +} diff --git a/src/main/java/org/alfresco/rest/body/IgJsonBodyGenerator.java b/src/main/java/org/alfresco/rest/body/IgJsonBodyGenerator.java deleted file mode 100644 index 69e7665db7..0000000000 --- a/src/main/java/org/alfresco/rest/body/IgJsonBodyGenerator.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2016 Alfresco Software Limited - * %% - * License rights for this program may be obtained from Alfresco Software, Ltd. - * pursuant to a written agreement and any use of this program without such an - * agreement is prohibited. - * #L% - */ -package org.alfresco.rest.body; - -import javax.json.Json; -import javax.json.JsonBuilderFactory; -import javax.json.JsonObjectBuilder; - -import org.alfresco.rest.model.PropertiesModel; -import org.alfresco.rest.model.RestFilePlanComponentModel; - -/** - * Helper for building JSON objects - * @author Kristijan Conkas - * @since 2.6 - */ -public class IgJsonBodyGenerator -{ - private static JsonBuilderFactory jsonBuilderFactory; - - /** - * @return the initialized JSON builder factory - */ - private static JsonBuilderFactory getJsonBuilder() - { - if (jsonBuilderFactory == null) - { - return Json.createBuilderFactory(null); - } - else - { - return jsonBuilderFactory; - } - } - - /** - * Generate request body for create API calls - * @param model - * @return request body JSON string - */ - public static String filePlanComponentCreate(RestFilePlanComponentModel model) - { - PropertiesModel properties = model.getProperties(); - JsonObjectBuilder valueBuilder = getJsonBuilder() - .createObjectBuilder() - .add("name", model.getName()) - .add("nodeType", model.getNodeType()); - if (properties != null) - { - // handle properties - JsonObjectBuilder propertiesBuilder = getJsonBuilder().createObjectBuilder(); - if (properties.getTitle() != null) - { - propertiesBuilder.add("cm:title", properties.getTitle()); - } - valueBuilder.add("properties", propertiesBuilder.build()); - } - return valueBuilder.build().toString(); - } - - /** - * Generate request body for update API calls - * @param model - * @return request body JSON string - */ - public static String filePlanComponentUpdate(RestFilePlanComponentModel model) - { - PropertiesModel properties = model.getProperties(); - JsonObjectBuilder valueBuilder = getJsonBuilder() - .createObjectBuilder() - .add("name", model.getName()); - if (properties != null) - { - // handle properties - JsonObjectBuilder propertiesBuilder = getJsonBuilder().createObjectBuilder(); - if (properties.getTitle() != null) - { - propertiesBuilder.add("cm:title", properties.getTitle()); - } - valueBuilder.add("properties", propertiesBuilder.build()); - } - return valueBuilder.build().toString(); - } -} diff --git a/src/main/java/org/alfresco/rest/model/RestFilePlanComponentModel.java b/src/main/java/org/alfresco/rest/model/FilePlanComponent.java similarity index 88% rename from src/main/java/org/alfresco/rest/model/RestFilePlanComponentModel.java rename to src/main/java/org/alfresco/rest/model/FilePlanComponent.java index 96c6d7a374..9403411bed 100644 --- a/src/main/java/org/alfresco/rest/model/RestFilePlanComponentModel.java +++ b/src/main/java/org/alfresco/rest/model/FilePlanComponent.java @@ -11,6 +11,8 @@ */ package org.alfresco.rest.model; +import static org.alfresco.com.FilePlanComponentFields.PROPERTIES; + import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; @@ -18,29 +20,36 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; /** - * FIXME: Document me :) + * POJO for file plan component * * @author Tuna Aksoy * @since 1.0 */ @Component @Scope(value = "prototype") -//FIXME: Once the fields have been added this annotation should be removed +//FIXME: Once the fields have been added the JsonIgnoreProperties annotation should be removed @JsonIgnoreProperties(ignoreUnknown = true) -public class RestFilePlanComponentModel +public class FilePlanComponent { private String id; + private String parentId; + private String name; + private String nodeType; + private boolean isCategory; + private boolean isRecordFolder; + private boolean isFile; + private boolean hasRetentionSchedule; - - @JsonProperty(value = "properties") - private PropertiesModel properties; - + + @JsonProperty(PROPERTIES) + private FilePlanComponentProperties properties; + /** * @return the id */ @@ -172,7 +181,7 @@ public class RestFilePlanComponentModel /** * @return the properties */ - public PropertiesModel getProperties() + public FilePlanComponentProperties getProperties() { return properties; } @@ -180,7 +189,7 @@ public class RestFilePlanComponentModel /** * @param properties the properties to set */ - public void setProperties(PropertiesModel properties) + public void setProperties(FilePlanComponentProperties properties) { this.properties = properties; } diff --git a/src/main/java/org/alfresco/rest/model/PropertiesModel.java b/src/main/java/org/alfresco/rest/model/FilePlanComponentProperties.java similarity index 74% rename from src/main/java/org/alfresco/rest/model/PropertiesModel.java rename to src/main/java/org/alfresco/rest/model/FilePlanComponentProperties.java index 03afc0cf3c..311779450e 100644 --- a/src/main/java/org/alfresco/rest/model/PropertiesModel.java +++ b/src/main/java/org/alfresco/rest/model/FilePlanComponentProperties.java @@ -11,6 +11,10 @@ */ package org.alfresco.rest.model; +import static org.alfresco.com.FilePlanComponentFields.PROPERTIES_HOLD_REASON; +import static org.alfresco.com.FilePlanComponentFields.PROPERTIES_TITLE; +import static org.alfresco.com.FilePlanComponentFields.PROPERTIES_VITAL_RECORD_INDICATOR; + import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; @@ -18,26 +22,28 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; /** - * Fileplan component properties + * POJO for file plan component properties + * * @author Kristijan Conkas - * @since 2.6 + * @since 1.0 */ @Component @Scope(value = "prototype") +//FIXME: Once the fields have been added the JsonIgnoreProperties annotation should be removed @JsonIgnoreProperties(ignoreUnknown = true) -public class PropertiesModel +public class FilePlanComponentProperties { // TODO: handling individual properties is tedious and error prone, how about @JsonGetter + @JsonSetter? - - @JsonProperty("rma:vitalRecordIndicator") + + @JsonProperty(PROPERTIES_VITAL_RECORD_INDICATOR) private boolean vitalRecord; - - @JsonProperty("cm:title") + + @JsonProperty(PROPERTIES_TITLE) private String title; - - @JsonProperty("rma:holdReason") + + @JsonProperty(PROPERTIES_HOLD_REASON) private String holdReason; - + /** * @return the vitalRecord */ diff --git a/src/main/java/org/alfresco/rest/requests/FilePlanComponentApi.java b/src/main/java/org/alfresco/rest/requests/FilePlanComponentApi.java new file mode 100644 index 0000000000..460e4eb23c --- /dev/null +++ b/src/main/java/org/alfresco/rest/requests/FilePlanComponentApi.java @@ -0,0 +1,145 @@ +/* + * #%L + * Alfresco Records Management Module + * %% + * Copyright (C) 2005 - 2016 Alfresco Software Limited + * %% + * License rights for this program may be obtained from Alfresco Software, Ltd. + * pursuant to a written agreement and any use of this program without such an + * agreement is prohibited. + * #L% + */ +package org.alfresco.rest.requests; + +import static org.alfresco.com.util.ParameterCheck.mandatoryObject; +import static org.alfresco.com.util.ParameterCheck.mandatoryString; +import static org.alfresco.rest.core.RestRequest.requestWithBody; +import static org.alfresco.rest.core.RestRequest.simpleRequest; +import static org.springframework.http.HttpMethod.DELETE; +import static org.springframework.http.HttpMethod.GET; +import static org.springframework.http.HttpMethod.POST; +import static org.springframework.http.HttpMethod.PUT; + +import com.google.gson.JsonObject; + +import org.alfresco.rest.core.RestAPI; +import org.alfresco.rest.model.FilePlanComponent; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +/** + * File plan component REST API Wrapper + * + * @author Tuna Aksoy + * @author Kristijan Conkas + * @since 1.0 + */ +@Component +@Scope(value = "prototype") +public class FilePlanComponentApi extends RestAPI +{ + /** + * Get a file plan component + * + * @param filePlanComponentId The id of the file plan component to get + * @return The {@link FilePlanComponent} for the given file plan component id + * @throws Exception for the following cases: + * + */ + public FilePlanComponent getFilePlanComponent(String filePlanComponentId) throws Exception + { + mandatoryString("filePlanComponentId", filePlanComponentId); + + return usingRestWrapper().processModel(FilePlanComponent.class, simpleRequest( + GET, + "fileplan-components/{fileplanComponentId}", + filePlanComponentId + )); + } + + /** + * Creates a file plan component with the given properties under the parent node with the given id + * + * @param filePlanComponentProperties The properties of the file plan component to be created + * @param parentId The id of the parent where the new file plan component should be created + * @return The {@link FilePlanComponent} with the given properties + * @throws Exception for the following cases: + * + */ + public FilePlanComponent createFilePlanComponent(JsonObject filePlanComponentProperties, String parentId) throws Exception + { + mandatoryObject("filePlanComponentProperties", filePlanComponentProperties); + mandatoryString("parentId", parentId); + + return usingRestWrapper().processModel(FilePlanComponent.class, requestWithBody( + POST, + filePlanComponentProperties.toString(), + "fileplan-components/{fileplanComponentId}/children", + parentId + )); + } + + /** + * Updates a file plan component + * + * @param filePlanComponentProperties The properties to be updated + * @param filePlanComponentId The id of the file plan component which will be updated + * @param returns The updated {@link FilePlanComponent} + * @throws Exception for the following cases: + * + */ + public FilePlanComponent updateFilePlanComponent(JsonObject filePlanComponentProperties, String filePlanComponentId) throws Exception + { + mandatoryObject("filePlanComponentProperties", filePlanComponentProperties); + mandatoryString("filePlanComponentId", filePlanComponentId); + + return usingRestWrapper().processModel(FilePlanComponent.class, requestWithBody( + PUT, + filePlanComponentProperties.toString(), + "fileplan-components/{fileplanComponentId}", + filePlanComponentId + )); + } + + /** + * Delete file plan component + * + * @param filePlanComponentId The id of the file plan component to be deleted + * @throws Exception for the following cases: + * + */ + public void deleteFilePlanComponent(String filePlanComponentId) throws Exception + { + mandatoryString("filePlanComponentId", filePlanComponentId); + + usingRestWrapper().processEmptyModel(simpleRequest( + DELETE, + "fileplan-components/{fileplanComponentId}", + filePlanComponentId + )); + } +} diff --git a/src/main/java/org/alfresco/rest/requests/RestFilePlanComponentApi.java b/src/main/java/org/alfresco/rest/requests/RestFilePlanComponentApi.java deleted file mode 100644 index ca52c13f30..0000000000 --- a/src/main/java/org/alfresco/rest/requests/RestFilePlanComponentApi.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2016 Alfresco Software Limited - * %% - * License rights for this program may be obtained from Alfresco Software, Ltd. - * pursuant to a written agreement and any use of this program without such an - * agreement is prohibited. - * #L% - */ -package org.alfresco.rest.requests; - -import static org.alfresco.rest.body.IgJsonBodyGenerator.filePlanComponentCreate; -import static org.alfresco.rest.body.IgJsonBodyGenerator.filePlanComponentUpdate; -import static org.alfresco.rest.core.RestRequest.requestWithBody; -import static org.alfresco.rest.core.RestRequest.simpleRequest; - -import static org.springframework.http.HttpMethod.DELETE; -import static org.springframework.http.HttpMethod.GET; -import static org.springframework.http.HttpMethod.POST; -import static org.springframework.http.HttpMethod.PUT; - -import org.alfresco.rest.core.RestAPI; -import org.alfresco.rest.core.RestRequest; -import org.alfresco.rest.model.RestFilePlanComponentModel; -import org.json.JSONObject; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; - -/** - * REST wrapper for IG APIs - * - * @author Tuna Aksoy - * @author kconkas - * @since 1.0 - */ -@Component -@Scope(value = "prototype") -public class RestFilePlanComponentApi extends RestAPI -{ - /** - * Get file plan component - * @param filePlanComponentId - * @return {@link RestFilePlanComponentModel} for filePlanComponentId - * @throws Exception for non-existent components - */ - public RestFilePlanComponentModel getFilePlanComponent(String filePlanComponentId) throws Exception - { - RestRequest request = simpleRequest(GET, "fileplan-components/{fileplanComponentId}", filePlanComponentId); - return usingRestWrapper().processModel(RestFilePlanComponentModel.class, request); - } - - /** - * Create file plan component - * @param model - * @return - * @throws Exception - */ - public RestFilePlanComponentModel createFilePlanComponent(RestFilePlanComponentModel model) throws Exception - { - RestRequest request = requestWithBody(POST, - filePlanComponentCreate(model).toString(), - "fileplan-components/{fileplanComponentId}/children", - model.getId()); - return usingRestWrapper().processModel(RestFilePlanComponentModel.class, request); - } - - /** - * Update file plan component - * @param update {@link RestFilePlanComponentModel} to update - * @param returns updated {@link RestFilePlanComponentModel} - * @throws Exception - */ - public RestFilePlanComponentModel updateFilePlanComponent(RestFilePlanComponentModel update) throws Exception - { - RestRequest request = requestWithBody(PUT, - filePlanComponentUpdate(update).toString(), - "fileplan-components/{fileplanComponentId}", - update.getId()); - return usingRestWrapper().processModel(RestFilePlanComponentModel.class, request); - } - - /** - * Delete file plan component - * @param delete {@link RestFilePlanComponentModel} to delete - * @param deletePermanently if set to true delete without moving to the trashcan - * @throws Exception - */ - public RestRequest deleteFilePlanComponent(RestFilePlanComponentModel delete, boolean deletePermanently) throws Exception - { - JSONObject body = new JSONObject(); - if (deletePermanently) body.put("permanent", deletePermanently); - - RestRequest request = requestWithBody(DELETE, body.toString(), "fileplan-components/{fileplanComponentId}", delete.getId()); - usingRestWrapper().processEmptyModel(request); - return request; - } -} diff --git a/src/test/java/org/alfresco/rest/BaseIgRestTest.java b/src/test/java/org/alfresco/rest/BaseRestTest.java similarity index 64% rename from src/test/java/org/alfresco/rest/BaseIgRestTest.java rename to src/test/java/org/alfresco/rest/BaseRestTest.java index 9471f9393c..7ff9a538e6 100644 --- a/src/test/java/org/alfresco/rest/BaseIgRestTest.java +++ b/src/test/java/org/alfresco/rest/BaseRestTest.java @@ -25,26 +25,13 @@ import org.testng.annotations.BeforeClass; * * @author Kristijan Conkas * @author Tuna Aksoy - * @since 2.6 + * @since 1.0 */ @Configuration @PropertySource("classpath:config.properties") @PropertySource(value = "classpath:local.properties", ignoreResourceNotFound = true) -public class BaseIgRestTest extends RestTest +public class BaseRestTest extends RestTest { - /** Alias which can be used instead of the identifier of a node. */ - public static final String ALIAS_FILE_PLAN = "-filePlan-"; - public static final String ALIAS_TRANSFERS = "-transfers-"; - public static final String ALIAS_UNFILED_RECORDS_CONTAINER = "-unfiled-"; - public static final String ALIAS_HOLDS = "-holds-"; - - /** Component types. */ - public static final String COMPONENT_FILE_PLAN = "rma:filePlan"; - public static final String COMPONENT_RECORD_CATEGORY = "rma:recordCategory"; - public static final String COMPONENT_RECORD_FOLDER = "rma:recordFolder"; - public static final String COMPONENT_HOLD = "rma:hold"; - public static final String COMPONENT_UNFILED_RECORD_FOLDER = "rma:unfiledRecordFolder"; - @Value("${alfresco.rm.scheme}") private String scheme; diff --git a/src/test/java/org/alfresco/rest/fileplancomponents/FilePlanTest.java b/src/test/java/org/alfresco/rest/fileplancomponents/FilePlanTest.java deleted file mode 100644 index c55698e0ce..0000000000 --- a/src/test/java/org/alfresco/rest/fileplancomponents/FilePlanTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2016 Alfresco Software Limited - * %% - * License rights for this program may be obtained from Alfresco Software, Ltd. - * pursuant to a written agreement and any use of this program without such an - * agreement is prohibited. - * #L% - */ -package org.alfresco.rest.fileplancomponents; - -import static org.springframework.http.HttpStatus.OK; -import static org.testng.Assert.assertEquals; - -import org.alfresco.rest.BaseIgRestTest; -import org.alfresco.rest.core.RestWrapper; -import org.alfresco.rest.model.RestFilePlanComponentModel; -import org.alfresco.rest.requests.RestFilePlanComponentApi; -import org.alfresco.utility.data.DataUser; -import org.springframework.beans.factory.annotation.Autowired; -import org.testng.annotations.Test; - -/** - * FIXME: Document me :) - * - * @author Tuna Aksoy - * @since 1.0 - */ -public class FilePlanTest extends BaseIgRestTest -{ - @Autowired - private RestFilePlanComponentApi filePlanComponentApi; - - @Autowired - private DataUser dataUser; - - @Test - public void testfilePlanComponentsGet() throws Exception - { - RestWrapper restWrapper = filePlanComponentApi.usingRestWrapper(); - restWrapper.authenticateUser(dataUser.getAdminUser()); - RestFilePlanComponentModel filePlanComponent = filePlanComponentApi.getFilePlanComponent(ALIAS_FILE_PLAN); - restWrapper.assertStatusCodeIs(OK); - assertEquals(filePlanComponent.getNodeType(), COMPONENT_FILE_PLAN); - } -} diff --git a/src/test/java/org/alfresco/rest/fileplancomponents/RecordCategoryTest.java b/src/test/java/org/alfresco/rest/fileplancomponents/RecordCategoryTest.java index 2c216d3cdc..54dce68633 100644 --- a/src/test/java/org/alfresco/rest/fileplancomponents/RecordCategoryTest.java +++ b/src/test/java/org/alfresco/rest/fileplancomponents/RecordCategoryTest.java @@ -11,114 +11,155 @@ */ package org.alfresco.rest.fileplancomponents; -import java.util.UUID; +import static java.util.UUID.randomUUID; -import org.alfresco.rest.BaseIgRestTest; +import static org.alfresco.com.FilePlanComponentAlias.FILE_PLAN_ALIAS; +import static org.alfresco.com.FilePlanComponentFields.NAME; +import static org.alfresco.com.FilePlanComponentFields.NODE_TYPE; +import static org.alfresco.com.FilePlanComponentFields.PROPERTIES; +import static org.alfresco.com.FilePlanComponentFields.PROPERTIES_TITLE; +import static org.alfresco.com.FilePlanComponentType.RECORD_CATEGORY_TYPE; +import static org.jglue.fluentjson.JsonBuilderFactory.buildObject; +import static org.springframework.http.HttpStatus.CREATED; +import static org.springframework.http.HttpStatus.NO_CONTENT; +import static org.springframework.http.HttpStatus.OK; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +import com.google.gson.JsonObject; + +import org.alfresco.rest.BaseRestTest; import org.alfresco.rest.core.RestWrapper; -import org.alfresco.rest.model.PropertiesModel; -import org.alfresco.rest.model.RestFilePlanComponentModel; -import org.alfresco.rest.requests.RestFilePlanComponentApi; +import org.alfresco.rest.model.FilePlanComponent; +import org.alfresco.rest.model.FilePlanComponentProperties; +import org.alfresco.rest.requests.FilePlanComponentApi; import org.alfresco.utility.data.DataUser; import org.springframework.beans.factory.annotation.Autowired; import org.testng.annotations.Test; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertTrue; -import static org.testng.Assert.assertNotNull; -import static org.springframework.http.HttpStatus.CREATED; -import static org.springframework.http.HttpStatus.OK; -import static org.springframework.http.HttpStatus.NO_CONTENT; - - /** + * FIXME: Document me :) * * @author Kristijan Conkas - * @since + * @author Tuna Aksoy + * @since 1.0 */ -public class RecordCategoryTest extends BaseIgRestTest +public class RecordCategoryTest extends BaseRestTest { @Autowired - private RestFilePlanComponentApi filePlanComponentApi; + private FilePlanComponentApi filePlanComponentApi; @Autowired private DataUser dataUser; - - @Autowired - private RestFilePlanComponentModel componentModel; - - @Autowired - private PropertiesModel propertiesModel; - - /** new category name */ - private String categoryName = "cat " + UUID.randomUUID().toString().substring(0, 8); - - private String newCategoryId = null; - + @Test ( description = "Create category as authorised user" ) public void createCategoryAsAuthorisedUser() throws Exception { - // create category - propertiesModel.setTitle("New Test File Plan"); - componentModel.setId(ALIAS_FILE_PLAN ); - componentModel.setName(categoryName); - componentModel.setNodeType(COMPONENT_RECORD_CATEGORY); - componentModel.setProperties(propertiesModel); - RestWrapper restWrapper = filePlanComponentApi.usingRestWrapper().authenticateUser(dataUser.getAdminUser()); - RestFilePlanComponentModel filePlanComponent = filePlanComponentApi.createFilePlanComponent(componentModel); - - // verify returned object + + String categoryName = "Category name " + randomUUID().toString().substring(0, 8); + String categoryTitle = "Category title " + randomUUID().toString().substring(0, 8); + + // Build the record category properties + JsonObject recordCategoryProperties = buildObject(). + add(NAME, categoryName). + add(NODE_TYPE, RECORD_CATEGORY_TYPE.toString()). + addObject(PROPERTIES). + add(PROPERTIES_TITLE, categoryTitle). + end(). + getJson(); + + // Create the record category + FilePlanComponent filePlanComponent = filePlanComponentApi.createFilePlanComponent(recordCategoryProperties, FILE_PLAN_ALIAS.toString()); + + // Verify the status code restWrapper.assertStatusCodeIs(CREATED); + + // Verify the returned file plan component assertTrue(filePlanComponent.isIsCategory()); assertEquals(filePlanComponent.getName(), categoryName); - assertEquals(filePlanComponent.getNodeType(), COMPONENT_RECORD_CATEGORY.toString()); - assertFalse(filePlanComponent.getProperties().isVitalRecord()); - - newCategoryId = filePlanComponent.getId(); + assertEquals(filePlanComponent.getNodeType(), RECORD_CATEGORY_TYPE.toString()); + + // Verify the returned file plan component properties + FilePlanComponentProperties filePlanComponentProperties = filePlanComponent.getProperties(); + assertEquals(filePlanComponentProperties.getTitle(), categoryTitle); } - + @Test ( - description = "Rename category as authorised user", - dependsOnMethods= { "createCategoryAsAuthorisedUser" } - ) + description = "Rename category as authorised user" + ) public void renameCategoryAsAuthorisedUser() throws Exception { - assertNotNull(newCategoryId); - String newName = "renamed " + categoryName; - - RestWrapper restWrapper = filePlanComponentApi.usingRestWrapper(); - restWrapper.authenticateUser(dataUser.getAdminUser()); - - RestFilePlanComponentModel filePlanComponent = filePlanComponentApi.getFilePlanComponent(newCategoryId); - filePlanComponent.setName(newName); - - RestFilePlanComponentModel renamedFilePlanComponent = filePlanComponentApi.updateFilePlanComponent(filePlanComponent); + RestWrapper restWrapper = filePlanComponentApi.usingRestWrapper().authenticateUser(dataUser.getAdminUser()); - // verify returned object + // Create record category first + + String categoryName = "Category name " + randomUUID().toString().substring(0, 8); + String categoryTitle = "Category title " + randomUUID().toString().substring(0, 8); + + // Build the record category properties + JsonObject recordCategoryProperties = buildObject(). + add(NAME, categoryName). + add(NODE_TYPE, RECORD_CATEGORY_TYPE.toString()). + addObject(PROPERTIES). + add(PROPERTIES_TITLE, categoryTitle). + end(). + getJson(); + + // Create the record category + FilePlanComponent filePlanComponent = filePlanComponentApi.createFilePlanComponent(recordCategoryProperties, FILE_PLAN_ALIAS.toString()); + + + String newCategoryName = "Rename " + categoryName; + + // Build the properties which will be updated + JsonObject updateRecordCategoryProperties = buildObject(). + add(NAME, newCategoryName). + getJson(); + + // Update the record category + FilePlanComponent renamedFilePlanComponent = filePlanComponentApi.updateFilePlanComponent(updateRecordCategoryProperties, filePlanComponent.getId()); + + // Verify the status code restWrapper.assertStatusCodeIs(OK); - assertEquals(renamedFilePlanComponent.getName(), newName); + + // Verify the returned file plan component + assertEquals(renamedFilePlanComponent.getName(), newCategoryName); } @Test ( - description = "Rename category as authorised user", - dependsOnMethods= { "renameCategoryAsAuthorisedUser" } + description = "Rename category as authorised user" ) public void deleteCategoryAsAuthorisedUser() throws Exception { - // delete - RestWrapper restWrapper = filePlanComponentApi.usingRestWrapper(); - restWrapper.authenticateUser(dataUser.getAdminUser()); - filePlanComponentApi.deleteFilePlanComponent(filePlanComponentApi.getFilePlanComponent(newCategoryId), true); + RestWrapper restWrapper = filePlanComponentApi.usingRestWrapper().authenticateUser(dataUser.getAdminUser()); - // verify deletion + // Create record category first + + String categoryName = "Category name " + randomUUID().toString().substring(0, 8); + String categoryTitle = "Category title " + randomUUID().toString().substring(0, 8); + + // Build the record category properties + JsonObject recordCategoryProperties = buildObject(). + add(NAME, categoryName). + add(NODE_TYPE, RECORD_CATEGORY_TYPE.toString()). + addObject(PROPERTIES). + add(PROPERTIES_TITLE, categoryTitle). + end(). + getJson(); + + // Create the record category + FilePlanComponent filePlanComponent = filePlanComponentApi.createFilePlanComponent(recordCategoryProperties, FILE_PLAN_ALIAS.toString()); + + // Delete the record category + filePlanComponentApi.deleteFilePlanComponent(filePlanComponent.getId()); + + // Verify the status code restWrapper.assertStatusCodeIs(NO_CONTENT); - // TODO: verify we can't get an object with this ID again - // TODO: can we verify that deletion with deletePermanently=false indeed ended up in trashcan? } }